diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 056f790d41853d..7310e3817c79a1 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -356,8 +356,6 @@ static bool initTargetOptions(DiagnosticsEngine &Diags, llvm::TargetMachine::parseBinutilsVersion(CodeGenOpts.BinutilsVersion); Options.UseInitArray = CodeGenOpts.UseInitArray; Options.DisableIntegratedAS = CodeGenOpts.DisableIntegratedAS; - Options.CompressDebugSections = CodeGenOpts.getCompressDebugSections(); - Options.RelaxELFRelocations = CodeGenOpts.RelaxELFRelocations; // Set EABI version. Options.EABIVersion = TargetOpts.EABIVersion; @@ -460,6 +458,9 @@ static bool initTargetOptions(DiagnosticsEngine &Diags, Options.MCOptions.AsmVerbose = CodeGenOpts.AsmVerbose; Options.MCOptions.Dwarf64 = CodeGenOpts.Dwarf64; Options.MCOptions.PreserveAsmComments = CodeGenOpts.PreserveAsmComments; + Options.MCOptions.X86RelaxRelocations = CodeGenOpts.RelaxELFRelocations; + Options.MCOptions.CompressDebugSections = + CodeGenOpts.getCompressDebugSections(); Options.MCOptions.ABIName = TargetOpts.ABI; for (const auto &Entry : HSOpts.UserEntries) if (!Entry.IsFramework && diff --git a/clang/tools/driver/cc1as_main.cpp b/clang/tools/driver/cc1as_main.cpp index a55e06500d9d92..5498c3f9d4a20d 100644 --- a/clang/tools/driver/cc1as_main.cpp +++ b/clang/tools/driver/cc1as_main.cpp @@ -428,6 +428,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, MCTargetOptions MCOptions; MCOptions.EmitDwarfUnwind = Opts.EmitDwarfUnwind; MCOptions.EmitCompactUnwindNonCanonical = Opts.EmitCompactUnwindNonCanonical; + MCOptions.X86RelaxRelocations = Opts.RelaxELFRelocations; + MCOptions.CompressDebugSections = Opts.CompressDebugSections; MCOptions.AsSecureLogFile = Opts.AsSecureLogFile; std::unique_ptr MAI( @@ -436,9 +438,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, // Ensure MCAsmInfo initialization occurs before any use, otherwise sections // may be created with a combination of default and explicit settings. - MAI->setCompressDebugSections(Opts.CompressDebugSections); - MAI->setRelaxELFRelocations(Opts.RelaxELFRelocations); bool IsBinary = Opts.OutputType == AssemblerInvocation::FT_Obj; if (Opts.OutputPath.empty()) diff --git a/lld/test/ELF/weak-undef-got-pie.s b/lld/test/ELF/weak-undef-got-pie.s index c695ecdbafb12e..2301400f4e0b19 100644 --- a/lld/test/ELF/weak-undef-got-pie.s +++ b/lld/test/ELF/weak-undef-got-pie.s @@ -1,7 +1,7 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64 %p/Inputs/dummy-shared.s -o %t1.o # RUN: ld.lld %t1.o -shared -o %t1.so -# RUN: llvm-mc -filetype=obj -relax-relocations=false -triple=x86_64 %s -o %t.o +# RUN: llvm-mc -filetype=obj -x86-relax-relocations=false -triple=x86_64 %s -o %t.o # RUN: ld.lld -pie %t.o %t1.so -o %t # RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOCS %s diff --git a/llvm/include/llvm/CodeGen/CommandFlags.h b/llvm/include/llvm/CodeGen/CommandFlags.h index d74d7245006075..244dabd38cf65b 100644 --- a/llvm/include/llvm/CodeGen/CommandFlags.h +++ b/llvm/include/llvm/CodeGen/CommandFlags.h @@ -98,8 +98,6 @@ bool getUseCtors(); bool getDisableIntegratedAS(); -bool getRelaxELFRelocations(); - bool getDataSections(); std::optional getExplicitDataSections(); diff --git a/llvm/include/llvm/MC/MCAsmInfo.h b/llvm/include/llvm/MC/MCAsmInfo.h index 56492368bd984a..f9dd6012d5e942 100644 --- a/llvm/include/llvm/MC/MCAsmInfo.h +++ b/llvm/include/llvm/MC/MCAsmInfo.h @@ -524,17 +524,10 @@ class MCAsmInfo { /// Preserve Comments in assembly bool PreserveAsmComments; - /// Compress DWARF debug sections. Defaults to no compression. - DebugCompressionType CompressDebugSections = DebugCompressionType::None; - /// True if the integrated assembler should interpret 'a >> b' constant /// expressions as logical rather than arithmetic. bool UseLogicalShr = true; - // If true, emit GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL, on - // X86_64 ELF. - bool RelaxELFRelocations = true; - // If true, then the lexer and expression parser will support %neg(), // %hi(), and similar unary operators. bool HasMipsExpressions = false; @@ -875,18 +868,9 @@ class MCAsmInfo { PreserveAsmComments = Value; } - DebugCompressionType compressDebugSections() const { - return CompressDebugSections; - } - - void setCompressDebugSections(DebugCompressionType CompressDebugSections) { - this->CompressDebugSections = CompressDebugSections; - } bool shouldUseLogicalShr() const { return UseLogicalShr; } - bool canRelaxRelocations() const { return RelaxELFRelocations; } - void setRelaxELFRelocations(bool V) { RelaxELFRelocations = V; } bool hasMipsExpressions() const { return HasMipsExpressions; } bool needsFunctionDescriptors() const { return NeedsFunctionDescriptors; } bool shouldUseMotorolaIntegers() const { return UseMotorolaIntegers; } diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index 68d6f3e59d2d41..3f585d4d2efaf5 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -451,6 +451,8 @@ class MCContext { const MCSubtargetInfo *getSubtargetInfo() const { return MSTI; } + const MCTargetOptions *getTargetOptions() const { return TargetOptions; } + CodeViewContext &getCVContext(); void setAllowTemporaryLabels(bool Value) { AllowTemporaryLabels = Value; } diff --git a/llvm/include/llvm/MC/MCTargetOptions.h b/llvm/include/llvm/MC/MCTargetOptions.h index a7295879e15f0f..0cf2806bd48040 100644 --- a/llvm/include/llvm/MC/MCTargetOptions.h +++ b/llvm/include/llvm/MC/MCTargetOptions.h @@ -61,6 +61,10 @@ class MCTargetOptions { bool Dwarf64 : 1; + // If true, prefer R_X86_64_[REX_]GOTPCRELX to R_X86_64_GOTPCREL on x86-64 + // ELF. + bool X86RelaxRelocations = true; + EmitDwarfUnwindType EmitDwarfUnwind; int DwarfVersion = 0; @@ -76,6 +80,9 @@ class MCTargetOptions { }; DwarfDirectory MCUseDwarfDirectory; + // Whether to compress DWARF debug sections. + DebugCompressionType CompressDebugSections = DebugCompressionType::None; + std::string ABIName; std::string AssemblyLanguage; std::string SplitDwarfFile; diff --git a/llvm/include/llvm/MC/MCTargetOptionsCommandFlags.h b/llvm/include/llvm/MC/MCTargetOptionsCommandFlags.h index ba3784cab5b11d..fc35eea09c4b3e 100644 --- a/llvm/include/llvm/MC/MCTargetOptionsCommandFlags.h +++ b/llvm/include/llvm/MC/MCTargetOptionsCommandFlags.h @@ -49,6 +49,8 @@ bool getNoDeprecatedWarn(); bool getNoTypeCheck(); +bool getX86RelaxRelocations(); + std::string getABIName(); std::string getAsSecureLogFile(); diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h index f64cb06b2d77f0..d37e9d9576ba75 100644 --- a/llvm/include/llvm/Target/TargetOptions.h +++ b/llvm/include/llvm/Target/TargetOptions.h @@ -141,18 +141,18 @@ namespace llvm { HonorSignDependentRoundingFPMathOption(false), NoZerosInBSS(false), GuaranteedTailCallOpt(false), StackSymbolOrdering(true), EnableFastISel(false), EnableGlobalISel(false), UseInitArray(false), - DisableIntegratedAS(false), RelaxELFRelocations(true), - FunctionSections(false), DataSections(false), - IgnoreXCOFFVisibility(false), XCOFFTracebackTable(true), - UniqueSectionNames(true), UniqueBasicBlockSectionNames(false), - TrapUnreachable(false), NoTrapAfterNoreturn(false), TLSSize(0), - EmulatedTLS(false), EnableTLSDESC(false), EnableIPRA(false), - EmitStackSizeSection(false), EnableMachineOutliner(false), - EnableMachineFunctionSplitter(false), SupportsDefaultOutlining(false), - EmitAddrsig(false), BBAddrMap(false), EmitCallSiteInfo(false), - SupportsDebugEntryValues(false), EnableDebugEntryValues(false), - ValueTrackingVariableLocations(false), ForceDwarfFrameSection(false), - XRayFunctionIndex(true), DebugStrictDwarf(false), Hotpatch(false), + DisableIntegratedAS(false), FunctionSections(false), + DataSections(false), IgnoreXCOFFVisibility(false), + XCOFFTracebackTable(true), UniqueSectionNames(true), + UniqueBasicBlockSectionNames(false), TrapUnreachable(false), + NoTrapAfterNoreturn(false), TLSSize(0), EmulatedTLS(false), + EnableTLSDESC(false), EnableIPRA(false), EmitStackSizeSection(false), + EnableMachineOutliner(false), EnableMachineFunctionSplitter(false), + SupportsDefaultOutlining(false), EmitAddrsig(false), BBAddrMap(false), + EmitCallSiteInfo(false), SupportsDebugEntryValues(false), + EnableDebugEntryValues(false), ValueTrackingVariableLocations(false), + ForceDwarfFrameSection(false), XRayFunctionIndex(true), + DebugStrictDwarf(false), Hotpatch(false), PPCGenScalarMASSEntries(false), JMCInstrument(false), EnableCFIFixup(false), MisExpect(false), XCOFFReadOnlyPointers(false), FPDenormalMode(DenormalMode::IEEE, DenormalMode::IEEE) {} @@ -260,11 +260,6 @@ namespace llvm { /// Disable the integrated assembler. unsigned DisableIntegratedAS : 1; - /// Compress DWARF debug sections. - DebugCompressionType CompressDebugSections = DebugCompressionType::None; - - unsigned RelaxELFRelocations : 1; - /// Emit functions into separate sections. unsigned FunctionSections : 1; diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index d61b7082cb225f..14ac4b2102c2fa 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -85,7 +85,6 @@ CGOPT(bool, StackRealign) CGOPT(std::string, TrapFuncName) CGOPT(bool, UseCtors) CGOPT(bool, DisableIntegratedAS) -CGOPT(bool, RelaxELFRelocations) CGOPT_EXP(bool, DataSections) CGOPT_EXP(bool, FunctionSections) CGOPT(bool, IgnoreXCOFFVisibility) @@ -362,13 +361,6 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() { cl::init(false)); CGBINDOPT(UseCtors); - static cl::opt RelaxELFRelocations( - "x86-relax-relocations", - cl::desc( - "Emit GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL on x86-64 ELF"), - cl::init(true)); - CGBINDOPT(RelaxELFRelocations); - static cl::opt DataSections( "data-sections", cl::desc("Emit data into separate sections"), cl::init(false)); @@ -568,7 +560,6 @@ codegen::InitTargetOptionsFromCodeGenFlags(const Triple &TheTriple) { Options.StackSymbolOrdering = getStackSymbolOrdering(); Options.UseInitArray = !getUseCtors(); Options.DisableIntegratedAS = getDisableIntegratedAS(); - Options.RelaxELFRelocations = getRelaxELFRelocations(); Options.DataSections = getExplicitDataSections().value_or(TheTriple.hasDefaultDataSections()); Options.FunctionSections = getFunctionSections(); diff --git a/llvm/lib/CodeGen/LLVMTargetMachine.cpp b/llvm/lib/CodeGen/LLVMTargetMachine.cpp index 42cabb58e5189d..94ab8ed442eb7d 100644 --- a/llvm/lib/CodeGen/LLVMTargetMachine.cpp +++ b/llvm/lib/CodeGen/LLVMTargetMachine.cpp @@ -77,10 +77,6 @@ void LLVMTargetMachine::initAsmInfo() { TmpAsmInfo->setPreserveAsmComments(Options.MCOptions.PreserveAsmComments); - TmpAsmInfo->setCompressDebugSections(Options.CompressDebugSections); - - TmpAsmInfo->setRelaxELFRelocations(Options.RelaxELFRelocations); - TmpAsmInfo->setFullRegisterNames(Options.MCOptions.PPCUseFullRegisterNames); if (Options.ExceptionModel != ExceptionHandling::None) diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp index 9c93ec70da7764..b58418c64a116b 100644 --- a/llvm/lib/LTO/LTO.cpp +++ b/llvm/lib/LTO/LTO.cpp @@ -124,9 +124,9 @@ void llvm::computeLTOCacheKey( AddString(Conf.CPU); // FIXME: Hash more of Options. For now all clients initialize Options from // command-line flags (which is unsupported in production), but may set - // RelaxELFRelocations. The clang driver can also pass FunctionSections, + // X86RelaxRelocations. The clang driver can also pass FunctionSections, // DataSections and DebuggerTuning via command line flags. - AddUnsigned(Conf.Options.RelaxELFRelocations); + AddUnsigned(Conf.Options.MCOptions.X86RelaxRelocations); AddUnsigned(Conf.Options.FunctionSections); AddUnsigned(Conf.Options.DataSections); AddUnsigned((unsigned)Conf.Options.DebuggerTuning); diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 531d29954c3822..3c4d3ab9a508b3 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -875,11 +875,10 @@ void ELFWriter::writeSectionData(const MCAssembler &Asm, MCSection &Sec, const MCAsmLayout &Layout) { MCSectionELF &Section = static_cast(Sec); StringRef SectionName = Section.getName(); - - auto &MC = Asm.getContext(); - const auto &MAI = MC.getAsmInfo(); - - const DebugCompressionType CompressionType = MAI->compressDebugSections(); + auto &Ctx = Asm.getContext(); + const DebugCompressionType CompressionType = + Ctx.getTargetOptions() ? Ctx.getTargetOptions()->CompressDebugSections + : DebugCompressionType::None; if (CompressionType == DebugCompressionType::None || !SectionName.starts_with(".debug_")) { Asm.writeSectionData(W.OS, &Section, Layout); diff --git a/llvm/lib/MC/MCTargetOptionsCommandFlags.cpp b/llvm/lib/MC/MCTargetOptionsCommandFlags.cpp index fb8334d626cb8b..31bfcdc3e4e79f 100644 --- a/llvm/lib/MC/MCTargetOptionsCommandFlags.cpp +++ b/llvm/lib/MC/MCTargetOptionsCommandFlags.cpp @@ -46,6 +46,7 @@ MCOPT(bool, FatalWarnings) MCOPT(bool, NoWarn) MCOPT(bool, NoDeprecatedWarn) MCOPT(bool, NoTypeCheck) +MCOPT(bool, X86RelaxRelocations) MCOPT(std::string, ABIName) MCOPT(std::string, AsSecureLogFile) @@ -122,6 +123,13 @@ llvm::mc::RegisterMCTargetOptionsFlags::RegisterMCTargetOptionsFlags() { "no-type-check", cl::desc("Suppress type errors (Wasm)")); MCBINDOPT(NoTypeCheck); + static cl::opt X86RelaxRelocations( + "x86-relax-relocations", + cl::desc( + "Emit GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL on x86-64 ELF"), + cl::init(true)); + MCBINDOPT(X86RelaxRelocations); + static cl::opt ABIName( "target-abi", cl::Hidden, cl::desc("The name of the ABI to be targeted from the backend."), @@ -148,6 +156,7 @@ MCTargetOptions llvm::mc::InitMCTargetOptionsFromFlags() { Options.MCNoWarn = getNoWarn(); Options.MCNoDeprecatedWarn = getNoDeprecatedWarn(); Options.MCNoTypeCheck = getNoTypeCheck(); + Options.X86RelaxRelocations = getX86RelaxRelocations(); Options.EmitDwarfUnwind = getEmitDwarfUnwind(); Options.EmitCompactUnwindNonCanonical = getEmitCompactUnwindNonCanonical(); Options.AsSecureLogFile = getAsSecureLogFile(); diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp index 373e29bf6a835f..0b2efdfc16cc5d 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp @@ -207,7 +207,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc, // Older versions of ld.bfd/ld.gold/lld // do not support GOTPCRELX/REX_GOTPCRELX, // and we want to keep back-compatibility. - if (!Ctx.getAsmInfo()->canRelaxRelocations()) + if (!Ctx.getTargetOptions()->X86RelaxRelocations) return ELF::R_X86_64_GOTPCREL; switch (unsigned(Kind)) { default: @@ -259,7 +259,7 @@ static unsigned getRelocType32(MCContext &Ctx, SMLoc Loc, return ELF::R_386_GOTPC; // Older versions of ld.bfd/ld.gold/lld do not support R_386_GOT32X and we // want to maintain compatibility. - if (!Ctx.getAsmInfo()->canRelaxRelocations()) + if (!Ctx.getTargetOptions()->X86RelaxRelocations) return ELF::R_386_GOT32; return Kind == MCFixupKind(X86::reloc_signed_4byte_relax) diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index d3b7d97a83caf0..64d4d411e7b43b 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -546,13 +546,13 @@ void X86AsmPrinter::LowerTlsAddr(X86MCInstLower &MCInstLowering, const MCSymbolRefExpr *Sym = MCSymbolRefExpr::create( MCInstLowering.GetSymbolFromOperand(MI.getOperand(3)), SRVK, Ctx); - // As of binutils 2.32, ld has a bogus TLS relaxation error when the GD/LD + // Before binutils 2.41, ld has a bogus TLS relaxation error when the GD/LD // code sequence using R_X86_64_GOTPCREL (instead of R_X86_64_GOTPCRELX) is // attempted to be relaxed to IE/LE (binutils PR24784). Work around the bug by // only using GOT when GOTPCRELX is enabled. - // TODO Delete the workaround when GOTPCRELX becomes commonplace. + // TODO Delete the workaround when rustc no longer relies on the hack bool UseGot = MMI->getModule()->getRtLibUseGOT() && - Ctx.getAsmInfo()->canRelaxRelocations(); + Ctx.getTargetOptions()->X86RelaxRelocations; if (Is64Bits) { bool NeedsPadding = SRVK == MCSymbolRefExpr::VK_TLSGD; diff --git a/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_minimal.s b/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_minimal.s index 2e020b74361aca..ae582c9cdc566c 100644 --- a/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_minimal.s +++ b/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_minimal.s @@ -1,5 +1,5 @@ # RUN: rm -rf %t && mkdir -p %t -# RUN: llvm-mc -triple=aarch64-unknown-linux-gnu -relax-relocations=false \ +# RUN: llvm-mc -triple=aarch64-unknown-linux-gnu -x86-relax-relocations=false \ # RUN: -position-independent -filetype=obj -o %t/elf_minimal.o %s # RUN: llvm-jitlink -noexec %t/elf_minimal.o diff --git a/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_relocations.s b/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_relocations.s index b260961f741d72..fccef479c2c36f 100644 --- a/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_relocations.s +++ b/llvm/test/ExecutionEngine/JITLink/AArch64/ELF_relocations.s @@ -1,5 +1,5 @@ # RUN: rm -rf %t && mkdir -p %t -# RUN: llvm-mc -triple=aarch64-unknown-linux-gnu -relax-relocations=false \ +# RUN: llvm-mc -triple=aarch64-unknown-linux-gnu -x86-relax-relocations=false \ # RUN: -position-independent -filetype=obj -o %t/elf_reloc.o %s # RUN: llvm-jitlink -noexec \ # RUN: -abs external_data=0xdeadbeef \ diff --git a/llvm/test/ExecutionEngine/JITLink/x86-64/COFF_small_pic_relocations.s b/llvm/test/ExecutionEngine/JITLink/x86-64/COFF_small_pic_relocations.s index 38f4fb11ba0122..b429b94bb3e644 100644 --- a/llvm/test/ExecutionEngine/JITLink/x86-64/COFF_small_pic_relocations.s +++ b/llvm/test/ExecutionEngine/JITLink/x86-64/COFF_small_pic_relocations.s @@ -1,5 +1,5 @@ # RUN: rm -rf %t && mkdir -p %t -# RUN: llvm-mc -triple=x86_64-windows-msvc -relax-relocations=false \ +# RUN: llvm-mc -triple=x86_64-windows-msvc -x86-relax-relocations=false \ # RUN: -position-independent -filetype=obj -o %t/coff_sm_reloc.o %s # RUN: llvm-jitlink -noexec \ # RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \ diff --git a/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_common_var.s b/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_common_var.s index faa963f3b531b1..8bf384576c5705 100644 --- a/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_common_var.s +++ b/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_common_var.s @@ -1,5 +1,5 @@ # RUN: rm -rf %t && mkdir -p %t -# RUN: llvm-mc -triple=x86_64-unknown-linux -relax-relocations=false -position-independent -filetype=obj -o %t/elf_common.o %s +# RUN: llvm-mc -triple=x86_64-unknown-linux -x86-relax-relocations=false -position-independent -filetype=obj -o %t/elf_common.o %s # RUN: llvm-jitlink -entry=load_common -noexec -check %s %t/elf_common.o # # Check that common variable GOT entry is synthesized correctly. diff --git a/llvm/test/MC/ELF/got-relaxed-i386.s b/llvm/test/MC/ELF/got-relaxed-i386.s index 465b6fa07f6f4f..260390067b7b1f 100644 --- a/llvm/test/MC/ELF/got-relaxed-i386.s +++ b/llvm/test/MC/ELF/got-relaxed-i386.s @@ -1,5 +1,5 @@ // RUN: llvm-mc -filetype=obj -triple i386-pc-linux %s -o - | llvm-readobj -r - | FileCheck %s -// RUN: llvm-mc -filetype=obj -relax-relocations=false -triple i386-pc-linux %s -o - | llvm-readobj -r - | FileCheck --check-prefix=OLD %s +// RUN: llvm-mc -filetype=obj -x86-relax-relocations=false -triple i386-pc-linux %s -o - | llvm-readobj -r - | FileCheck --check-prefix=OLD %s movl mov@GOT(%ebx), %eax mull mul@GOT(%ebx) diff --git a/llvm/test/MC/ELF/relocation-386.s b/llvm/test/MC/ELF/relocation-386.s index dd252f5ff74cb2..524f981ed8a278 100644 --- a/llvm/test/MC/ELF/relocation-386.s +++ b/llvm/test/MC/ELF/relocation-386.s @@ -1,5 +1,5 @@ -// RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu %s -relax-relocations=false -o - | llvm-readobj -r - | FileCheck %s --check-prefix=CHECK --check-prefix=I386 -// RUN: llvm-mc -filetype=obj -triple i386-pc-elfiamcu %s -relax-relocations=false -o - | llvm-readobj -r - | FileCheck %s --check-prefix=CHECK --check-prefix=IAMCU +// RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu %s -x86-relax-relocations=false -o - | llvm-readobj -r - | FileCheck %s --check-prefix=CHECK --check-prefix=I386 +// RUN: llvm-mc -filetype=obj -triple i386-pc-elfiamcu %s -x86-relax-relocations=false -o - | llvm-readobj -r - | FileCheck %s --check-prefix=CHECK --check-prefix=IAMCU // RUN: not llvm-mc -filetype=obj -triple=i686 --defsym ERR=1 %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=ERR --implicit-check-not=error: // Test that we produce the correct relocation types and that the relocations diff --git a/llvm/test/MC/X86/gotpcrelx.s b/llvm/test/MC/X86/gotpcrelx.s index 91f20c6c567aa0..e63e3e9a946fd1 100644 --- a/llvm/test/MC/X86/gotpcrelx.s +++ b/llvm/test/MC/X86/gotpcrelx.s @@ -1,6 +1,6 @@ # RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o # RUN: llvm-readobj -r %t.o | FileCheck %s --check-prefixes=CHECK,COMMON -# RUN: llvm-mc -filetype=obj -triple=x86_64 -relax-relocations=false %s -o %t1.o +# RUN: llvm-mc -filetype=obj -triple=x86_64 -x86-relax-relocations=false %s -o %t1.o # RUN: llvm-readobj -r %t1.o | FileCheck %s --check-prefixes=NORELAX,COMMON # COMMON: Relocations [ diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp index 257832ab7671c4..b8a33f74bd570f 100644 --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/tools/gold/gold-plugin.cpp @@ -857,7 +857,7 @@ static std::unique_ptr createLTO(IndexWriteCallback OnIndexWrite, // Disable the new X86 relax relocations since gold might not support them. // FIXME: Check the gold version or add a new option to enable them. - Conf.Options.RelaxELFRelocations = false; + Conf.Options.MCOptions.X86RelaxRelocations = false; // Toggle function/data sections. if (!codegen::getExplicitFunctionSections()) diff --git a/llvm/tools/llvm-mc/llvm-mc.cpp b/llvm/tools/llvm-mc/llvm-mc.cpp index cf6aaa1f06981f..8eb53e44045987 100644 --- a/llvm/tools/llvm-mc/llvm-mc.cpp +++ b/llvm/tools/llvm-mc/llvm-mc.cpp @@ -66,11 +66,6 @@ static cl::opt ShowEncoding("show-encoding", cl::desc("Show instruction encodings"), cl::cat(MCCategory)); -static cl::opt RelaxELFRel( - "relax-relocations", cl::init(true), - cl::desc("Emit R_X86_64_GOTPCRELX instead of R_X86_64_GOTPCREL"), - cl::cat(MCCategory)); - static cl::opt CompressDebugSections( "compress-debug-sections", cl::ValueOptional, cl::init(DebugCompressionType::None), @@ -363,9 +358,10 @@ int main(int argc, char **argv) { cl::HideUnrelatedOptions({&MCCategory, &getColorCategory()}); cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n"); - const MCTargetOptions MCOptions = mc::InitMCTargetOptionsFromFlags(); - setDwarfDebugFlags(argc, argv); + MCTargetOptions MCOptions = mc::InitMCTargetOptionsFromFlags(); + MCOptions.CompressDebugSections = CompressDebugSections.getValue(); + setDwarfDebugFlags(argc, argv); setDwarfDebugProducer(); const char *ProgName = argv[0]; @@ -401,7 +397,6 @@ int main(int argc, char **argv) { TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); assert(MAI && "Unable to create target asm info!"); - MAI->setRelaxELFRelocations(RelaxELFRel); if (CompressDebugSections != DebugCompressionType::None) { if (const char *Reason = compression::getReasonIfUnsupported( compression::formatFor(CompressDebugSections))) { @@ -410,7 +405,6 @@ int main(int argc, char **argv) { return 1; } } - MAI->setCompressDebugSections(CompressDebugSections); MAI->setPreserveAsmComments(PreserveComments); // Package up features to be passed to target/subtarget