From da38b2949163e2e5b798e980a15bab6cb7319516 Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Thu, 8 Jun 2023 11:32:59 -0700 Subject: [PATCH 1/6] tls support --- llvm/include/llvm/MC/MCObjectFileInfo.h | 2 +- llvm/tools/objwriter/objwriter.cpp | 8 ++++++++ llvm/tools/objwriter/objwriter.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/MC/MCObjectFileInfo.h b/llvm/include/llvm/MC/MCObjectFileInfo.h index 3c1d10c4e62f1..be5c768cf0a54 100644 --- a/llvm/include/llvm/MC/MCObjectFileInfo.h +++ b/llvm/include/llvm/MC/MCObjectFileInfo.h @@ -344,7 +344,7 @@ class MCObjectFileInfo { } MCSection *getTLSExtraDataSection() const { return TLSExtraDataSection; } - const MCSection *getTLSDataSection() const { return TLSDataSection; } + MCSection *getTLSDataSection() const { return TLSDataSection; } MCSection *getTLSBSSSection() const { return TLSBSSSection; } MCSection *getStackMapSection() const { return StackMapSection; } diff --git a/llvm/tools/objwriter/objwriter.cpp b/llvm/tools/objwriter/objwriter.cpp index 27ac94aa0e88d..ff39f959d25f4 100644 --- a/llvm/tools/objwriter/objwriter.cpp +++ b/llvm/tools/objwriter/objwriter.cpp @@ -222,6 +222,10 @@ MCSection *ObjectWriter::GetSection(const char *SectionName, Section = ObjFileInfo->getReadOnlySection(); } else if (strcmp(SectionName, "xdata") == 0) { Section = ObjFileInfo->getXDataSection(); + } else if (strcmp(SectionName, "tdata") == 0) { + Section = ObjFileInfo->getTLSDataSection(); + } else if (strcmp(SectionName, "tbss") == 0) { + Section = ObjFileInfo->getTLSBSSSection(); } else if (strcmp(SectionName, "bss") == 0) { if (OutContext->getObjectFileType() == MCContext::IsMachO) { Section = ObjFileInfo->getDataBSSSection(); @@ -457,6 +461,10 @@ int ObjectWriter::EmitSymbolRef(const char *SymbolName, case RelocType::IMAGE_REL_BASED_DIR64: Size = 8; break; + case RelocType::IMAGE_REL_SECREL: + Kind = MCSymbolRefExpr::VK_SECREL; + Size = 4; + break; case RelocType::IMAGE_REL_BASED_REL32: if (OutContext->getObjectFileType() == MCContext::IsMachO && OutContext->getTargetTriple().getArch() == Triple::aarch64) { diff --git a/llvm/tools/objwriter/objwriter.h b/llvm/tools/objwriter/objwriter.h index 860312f92a13e..78e885d573c74 100644 --- a/llvm/tools/objwriter/objwriter.h +++ b/llvm/tools/objwriter/objwriter.h @@ -57,6 +57,7 @@ enum class RelocType { IMAGE_REL_BASED_THUMB_BRANCH24 = 0x13, IMAGE_REL_BASED_ARM64_BRANCH26 = 0x15, IMAGE_REL_BASED_RELPTR32 = 0x7C, + IMAGE_REL_SECREL = 0x80, IMAGE_REL_BASED_ARM64_PAGEBASE_REL21 = 0x81, IMAGE_REL_BASED_ARM64_PAGEOFFSET_12A = 0x82, }; From 36ce724aa5d18e235d52cb854e4b75b800c144ed Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Thu, 8 Jun 2023 21:35:06 -0700 Subject: [PATCH 2/6] more operators --- llvm/tools/objwriter/objwriter.cpp | 8 ++++++++ llvm/tools/objwriter/objwriter.h | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/llvm/tools/objwriter/objwriter.cpp b/llvm/tools/objwriter/objwriter.cpp index ff39f959d25f4..beea87c043af7 100644 --- a/llvm/tools/objwriter/objwriter.cpp +++ b/llvm/tools/objwriter/objwriter.cpp @@ -465,6 +465,14 @@ int ObjectWriter::EmitSymbolRef(const char *SymbolName, Kind = MCSymbolRefExpr::VK_SECREL; Size = 4; break; + case RelocType::IMAGE_REL_TLSGD: + Kind = MCSymbolRefExpr::VK_TLSGD; + Size = 4; + break; + case RelocType::IMAGE_REL_TPOFF: + Kind = MCSymbolRefExpr::VK_TPOFF; + Size = 4; + break; case RelocType::IMAGE_REL_BASED_REL32: if (OutContext->getObjectFileType() == MCContext::IsMachO && OutContext->getTargetTriple().getArch() == Triple::aarch64) { diff --git a/llvm/tools/objwriter/objwriter.h b/llvm/tools/objwriter/objwriter.h index 78e885d573c74..80aa61703b6cf 100644 --- a/llvm/tools/objwriter/objwriter.h +++ b/llvm/tools/objwriter/objwriter.h @@ -57,9 +57,11 @@ enum class RelocType { IMAGE_REL_BASED_THUMB_BRANCH24 = 0x13, IMAGE_REL_BASED_ARM64_BRANCH26 = 0x15, IMAGE_REL_BASED_RELPTR32 = 0x7C, - IMAGE_REL_SECREL = 0x80, IMAGE_REL_BASED_ARM64_PAGEBASE_REL21 = 0x81, IMAGE_REL_BASED_ARM64_PAGEOFFSET_12A = 0x82, + IMAGE_REL_SECREL = 0x104, + IMAGE_REL_TLSGD = 0x105, + IMAGE_REL_TPOFF = 0x106, }; enum class SymbolRefFlags From dd51247d4015b3248650e357db62cee836f64d91 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:16:40 +0200 Subject: [PATCH 3/6] Update dependencies from https://github.com/dotnet/arcade build 20230609.8 (#426) Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 2 +- global.json | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8c40dc9e7b7d9..b291ecf13ba70 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,17 +3,17 @@ - + https://github.com/dotnet/arcade - 234e0726c7384ee84bf08550f2d16a1ff2d5c543 + 9994c5ed43856c35591d94ead68ef501a020eb2e - + https://github.com/dotnet/arcade - 234e0726c7384ee84bf08550f2d16a1ff2d5c543 + 9994c5ed43856c35591d94ead68ef501a020eb2e - + https://github.com/dotnet/arcade - 234e0726c7384ee84bf08550f2d16a1ff2d5c543 + 9994c5ed43856c35591d94ead68ef501a020eb2e diff --git a/eng/Versions.props b/eng/Versions.props index d85dfd72ec243..8647b4e0aa473 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -6,6 +6,6 @@ 1 - 8.0.0-beta.23302.3 + 8.0.0-beta.23309.8 diff --git a/global.json b/global.json index ca88245576d2f..332e9094a6849 100644 --- a/global.json +++ b/global.json @@ -3,8 +3,8 @@ "dotnet": "8.0.100-preview.4.23260.5" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23302.3", - "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23302.3", + "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23309.8", + "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23309.8", "Microsoft.Build.Traversal": "3.4.0" } } From 167a9c5cb44393c7bca7bddb47883b93f26284d2 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Fri, 16 Jun 2023 23:21:44 +0200 Subject: [PATCH 4/6] Fix DWARF debug information emitted for empty enum (#433) --- llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.cpp | 7 +++++++ llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.h | 1 + llvm/tools/objwriter/debugInfo/dwarf/dwarfTypeBuilder.cpp | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.cpp b/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.cpp index 6eeb797db5722..5ecf7fe2bbe54 100644 --- a/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.cpp +++ b/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.cpp @@ -59,6 +59,13 @@ void Dump(MCObjectStreamer *Streamer, uint16_t DwarfVersion, unsigned TargetPoin dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, 0, 0, + EnumerationTypeNoChildren, + dwarf::DW_TAG_enumeration_type, dwarf::DW_CHILDREN_no, + dwarf::DW_AT_name, dwarf::DW_FORM_strp, + dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, + 0, 0, + Enumerator1, dwarf::DW_TAG_enumerator, dwarf::DW_CHILDREN_no, dwarf::DW_AT_name, dwarf::DW_FORM_strp, diff --git a/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.h b/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.h index 448123c99a92d..ce447ac64d1f9 100644 --- a/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.h +++ b/llvm/tools/objwriter/debugInfo/dwarf/dwarfAbbrev.h @@ -21,6 +21,7 @@ enum DwarfAbbrev : uint16_t CompileUnit = 0x1, BaseType, EnumerationType, + EnumerationTypeNoChildren, Enumerator1, Enumerator2, Enumerator4, diff --git a/llvm/tools/objwriter/debugInfo/dwarf/dwarfTypeBuilder.cpp b/llvm/tools/objwriter/debugInfo/dwarf/dwarfTypeBuilder.cpp index ff4ab03e6c9bb..ba0007c93a9cb 100644 --- a/llvm/tools/objwriter/debugInfo/dwarf/dwarfTypeBuilder.cpp +++ b/llvm/tools/objwriter/debugInfo/dwarf/dwarfTypeBuilder.cpp @@ -282,7 +282,7 @@ void DwarfEnumTypeInfo::DumpStrings(MCObjectStreamer *Streamer) { void DwarfEnumTypeInfo::DumpTypeInfo(MCObjectStreamer *Streamer, UserDefinedDwarfTypesBuilder *TypeBuilder) { // Abbrev Number - Streamer->emitULEB128IntValue(DwarfAbbrev::EnumerationType); + Streamer->emitULEB128IntValue(HasChildren() ? DwarfAbbrev::EnumerationType : DwarfAbbrev::EnumerationTypeNoChildren); // DW_AT_name EmitSectionOffset(Streamer, StrSymbol, 4); From d15634ac6a49eda5b0ad95d015dad9ce4a87f6c8 Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Mon, 19 Jun 2023 15:10:54 -0700 Subject: [PATCH 5/6] TLS support for linux-arm64 --- llvm/tools/objwriter/objwriter.cpp | 43 ++++++++++++++++++++++++++++++ llvm/tools/objwriter/objwriter.h | 20 ++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/llvm/tools/objwriter/objwriter.cpp b/llvm/tools/objwriter/objwriter.cpp index beea87c043af7..b117670302f02 100644 --- a/llvm/tools/objwriter/objwriter.cpp +++ b/llvm/tools/objwriter/objwriter.cpp @@ -473,6 +473,49 @@ int ObjectWriter::EmitSymbolRef(const char *SymbolName, Kind = MCSymbolRefExpr::VK_TPOFF; Size = 4; break; + + case RelocType::IMAGE_REL_AARCH64_TLSLE_ADD_TPREL_HI12: { + const MCExpr* TargetExpr = GenTargetExpr(Symbol, Kind, Delta); + TargetExpr = + AArch64MCExpr::create(TargetExpr, AArch64MCExpr::VK_TPREL_HI12, *OutContext); + EmitRelocDirective(GetDFSize(), "R_AARCH64_TLSLE_ADD_TPREL_HI12", TargetExpr); + return 4; + } + case RelocType::IMAGE_REL_AARCH64_TLSLE_ADD_TPREL_LO12_NC: { + const MCExpr* TargetExpr = GenTargetExpr(Symbol, Kind, Delta); + TargetExpr = + AArch64MCExpr::create(TargetExpr, AArch64MCExpr::VK_TPREL_LO12_NC, *OutContext); + EmitRelocDirective(GetDFSize(), "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", TargetExpr); + return 4; + } + + case RelocType::IMAGE_REL_AARCH64_TLSDESC_ADR_PAGE21: { + const MCExpr* TargetExpr = GenTargetExpr(Symbol, Kind, Delta); + TargetExpr = + AArch64MCExpr::create(TargetExpr, AArch64MCExpr::VK_TLSDESC_PAGE, *OutContext); + EmitRelocDirective(GetDFSize(), "R_AARCH64_TLSDESC_ADR_PAGE21", TargetExpr); + return 4; + } + case RelocType::IMAGE_REL_AARCH64_TLSDESC_LD64_LO12: { + const MCExpr* TargetExpr = GenTargetExpr(Symbol, Kind, Delta); + TargetExpr = + AArch64MCExpr::create(TargetExpr, AArch64MCExpr::VK_TLSDESC_LO12, *OutContext); + EmitRelocDirective(GetDFSize(), "R_AARCH64_TLSDESC_LD64_LO12", TargetExpr); + return 4; + } + case RelocType::IMAGE_REL_AARCH64_TLSDESC_ADD_LO12: { + const MCExpr* TargetExpr = GenTargetExpr(Symbol, Kind, Delta); + TargetExpr = + AArch64MCExpr::create(TargetExpr, AArch64MCExpr::VK_TLSDESC_LO12, *OutContext); + EmitRelocDirective(GetDFSize(), "R_AARCH64_TLSDESC_ADD_LO12", TargetExpr); + return 4; + } + case RelocType::IMAGE_REL_AARCH64_TLSDESC_CALL: { + const MCExpr* TargetExpr = GenTargetExpr(Symbol, Kind, Delta); + EmitRelocDirective(GetDFSize(), "R_AARCH64_TLSDESC_CALL", TargetExpr); + return 4; + } + case RelocType::IMAGE_REL_BASED_REL32: if (OutContext->getObjectFileType() == MCContext::IsMachO && OutContext->getTargetTriple().getArch() == Triple::aarch64) { diff --git a/llvm/tools/objwriter/objwriter.h b/llvm/tools/objwriter/objwriter.h index 80aa61703b6cf..204a231786e20 100644 --- a/llvm/tools/objwriter/objwriter.h +++ b/llvm/tools/objwriter/objwriter.h @@ -59,9 +59,29 @@ enum class RelocType { IMAGE_REL_BASED_RELPTR32 = 0x7C, IMAGE_REL_BASED_ARM64_PAGEBASE_REL21 = 0x81, IMAGE_REL_BASED_ARM64_PAGEOFFSET_12A = 0x82, + + // + // Relocation operators related to TLS access + // + + // Windows x64 IMAGE_REL_SECREL = 0x104, + + // Linux x64 + // GD model IMAGE_REL_TLSGD = 0x105, + // LE model IMAGE_REL_TPOFF = 0x106, + + // Linux arm64 + // TLSDESC (dynamic) + IMAGE_REL_AARCH64_TLSDESC_ADR_PAGE21 = 0x107, + IMAGE_REL_AARCH64_TLSDESC_LD64_LO12 = 0x108, + IMAGE_REL_AARCH64_TLSDESC_ADD_LO12 = 0x109, + IMAGE_REL_AARCH64_TLSDESC_CALL = 0x10A, + // LE model + IMAGE_REL_AARCH64_TLSLE_ADD_TPREL_HI12 = 0x10B, + IMAGE_REL_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 0x10C, }; enum class SymbolRefFlags From 8dad63a6a1ba42171420f2f6e24f2b5d0a5179ab Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 21 Jun 2023 09:34:54 +0200 Subject: [PATCH 6/6] Update dependencies from https://github.com/dotnet/arcade build 20230619.1 (#434) Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 2 +- eng/common/dotnet-install.sh | 4 ++++ eng/common/tools.ps1 | 2 +- global.json | 6 +++--- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b291ecf13ba70..7b55033e3870c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,17 +3,17 @@ - + https://github.com/dotnet/arcade - 9994c5ed43856c35591d94ead68ef501a020eb2e + dfc6882da43decb37f12e0d9011ce82b25225578 - + https://github.com/dotnet/arcade - 9994c5ed43856c35591d94ead68ef501a020eb2e + dfc6882da43decb37f12e0d9011ce82b25225578 - + https://github.com/dotnet/arcade - 9994c5ed43856c35591d94ead68ef501a020eb2e + dfc6882da43decb37f12e0d9011ce82b25225578 diff --git a/eng/Versions.props b/eng/Versions.props index 8647b4e0aa473..b1b46fe911f60 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -6,6 +6,6 @@ 1 - 8.0.0-beta.23309.8 + 8.0.0-beta.23319.1 diff --git a/eng/common/dotnet-install.sh b/eng/common/dotnet-install.sh index abd045a3247f0..7e69e3a9e24a7 100755 --- a/eng/common/dotnet-install.sh +++ b/eng/common/dotnet-install.sh @@ -54,6 +54,10 @@ cpuname=$(uname -m) case $cpuname in arm64|aarch64) buildarch=arm64 + if [ "$(getconf LONG_BIT)" -lt 64 ]; then + # This is 32-bit OS running on 64-bit CPU (for example Raspberry Pi OS) + buildarch=arm + fi ;; loongarch64) buildarch=loongarch64 diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index ffe0b4e2dfc4d..c9eced9f7df4c 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -379,7 +379,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = } # Minimum VS version to require. - $vsMinVersionReqdStr = '16.8' + $vsMinVersionReqdStr = '17.6' $vsMinVersionReqd = [Version]::new($vsMinVersionReqdStr) # If the version of msbuild is going to be xcopied, diff --git a/global.json b/global.json index 332e9094a6849..cd9913bb3f680 100644 --- a/global.json +++ b/global.json @@ -1,10 +1,10 @@ { "tools": { - "dotnet": "8.0.100-preview.4.23260.5" + "dotnet": "8.0.100-preview.5.23303.2" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23309.8", - "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23309.8", + "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23319.1", + "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23319.1", "Microsoft.Build.Traversal": "3.4.0" } }