From e6a789ef9bb28222c91816a2cf00cfd6f706efd4 Mon Sep 17 00:00:00 2001 From: Julian Lettner Date: Thu, 9 Mar 2023 11:32:17 -0800 Subject: [PATCH] Remove -lower-global-dtors-via-cxa-atexit flag Remove the `-lower-global-dtors-via-cxa-atexit` escape hatch introduced in D121736 [1], which switched the default lowering of global destructors on MachO to use `__cxa_atexit()` to avoid emitting deprecated `__mod_term_func` sections. I added this flag as an escape hatch in case the switch causes any problems. We didn't discover any problems so now we can remove it. [1] https://reviews.llvm.org/D121736 rdar://90277838 Differential Revision: https://reviews.llvm.org/D145715 --- clang/docs/ReleaseNotes.rst | 3 +++ clang/lib/CodeGen/BackendUtil.cpp | 2 -- llvm/include/llvm/CodeGen/CommandFlags.h | 2 -- llvm/include/llvm/Target/TargetOptions.h | 6 +----- llvm/lib/CodeGen/CommandFlags.cpp | 8 -------- llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 6 +----- llvm/lib/CodeGen/TargetPassConfig.cpp | 3 +-- llvm/test/CodeGen/ARM/ctors_dtors.ll | 4 ---- 8 files changed, 6 insertions(+), 28 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 4a5d3f8..06e4cd2 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -132,6 +132,9 @@ Removed Compiler Flags or higher to use standard C++ modules instead. - The deprecated flag `-fcoroutines-ts` is removed. Please use ``-std=c++20`` or higher to use standard C++ coroutines instead. +- The CodeGen flag `-lower-global-dtors-via-cxa-atexit` which affects how global + destructors are lowered for MachO is removed without replacement. The default + of `-lower-global-dtors-via-cxa-atexit=true` is now the only supported way. Attribute Changes in Clang -------------------------- diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index b03d326..fffaeb8 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -367,8 +367,6 @@ static bool initTargetOptions(DiagnosticsEngine &Diags, Options.BinutilsVersion = llvm::TargetMachine::parseBinutilsVersion(CodeGenOpts.BinutilsVersion); Options.UseInitArray = CodeGenOpts.UseInitArray; - Options.LowerGlobalDtorsViaCxaAtExit = - CodeGenOpts.RegisterGlobalDtorsWithAtExit; Options.DisableIntegratedAS = CodeGenOpts.DisableIntegratedAS; Options.CompressDebugSections = CodeGenOpts.getCompressDebugSections(); Options.RelaxELFRelocations = CodeGenOpts.RelaxELFRelocations; diff --git a/llvm/include/llvm/CodeGen/CommandFlags.h b/llvm/include/llvm/CodeGen/CommandFlags.h index 7b1ef60..475d87b 100644 --- a/llvm/include/llvm/CodeGen/CommandFlags.h +++ b/llvm/include/llvm/CodeGen/CommandFlags.h @@ -94,8 +94,6 @@ std::string getTrapFuncName(); bool getUseCtors(); -bool getLowerGlobalDtorsViaCxaAtExit(); - bool getRelaxELFRelocations(); bool getDataSections(); diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h index d8a4159..22e81165 100644 --- a/llvm/include/llvm/Target/TargetOptions.h +++ b/llvm/include/llvm/Target/TargetOptions.h @@ -130,7 +130,7 @@ namespace llvm { HonorSignDependentRoundingFPMathOption(false), NoZerosInBSS(false), GuaranteedTailCallOpt(false), StackSymbolOrdering(true), EnableFastISel(false), EnableGlobalISel(false), UseInitArray(false), - LowerGlobalDtorsViaCxaAtExit(false), DisableIntegratedAS(false), + DisableIntegratedAS(false), RelaxELFRelocations(true), FunctionSections(false), DataSections(false), IgnoreXCOFFVisibility(false), XCOFFTracebackTable(true), UniqueSectionNames(true), @@ -247,10 +247,6 @@ namespace llvm { /// constructors. unsigned UseInitArray : 1; - /// Use __cxa_atexit to register global destructors; determines how - /// llvm.global_dtors is lowered. - unsigned LowerGlobalDtorsViaCxaAtExit : 1; - /// Disable the integrated assembler. unsigned DisableIntegratedAS : 1; diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index 73521ac..51d259c 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -81,7 +81,6 @@ CGOPT(bool, StackSymbolOrdering) CGOPT(bool, StackRealign) CGOPT(std::string, TrapFuncName) CGOPT(bool, UseCtors) -CGOPT(bool, LowerGlobalDtorsViaCxaAtExit) CGOPT(bool, RelaxELFRelocations) CGOPT_EXP(bool, DataSections) CGOPT_EXP(bool, FunctionSections) @@ -349,12 +348,6 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() { cl::init(false)); CGBINDOPT(UseCtors); - static cl::opt LowerGlobalDtorsViaCxaAtExit( - "lower-global-dtors-via-cxa-atexit", - cl::desc("Lower llvm.global_dtors (global destructors) via __cxa_atexit"), - cl::init(true)); - CGBINDOPT(LowerGlobalDtorsViaCxaAtExit); - static cl::opt RelaxELFRelocations( "relax-elf-relocations", cl::desc( @@ -538,7 +531,6 @@ codegen::InitTargetOptionsFromCodeGenFlags(const Triple &TheTriple) { Options.GuaranteedTailCallOpt = getEnableGuaranteedTailCallOpt(); Options.StackSymbolOrdering = getStackSymbolOrdering(); Options.UseInitArray = !getUseCtors(); - Options.LowerGlobalDtorsViaCxaAtExit = getLowerGlobalDtorsViaCxaAtExit(); Options.RelaxELFRelocations = getRelaxELFRelocations(); Options.DataSections = getExplicitDataSections().value_or(TheTriple.hasDefaultDataSections()); diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 5f9e9ea..e2fbe02 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1202,11 +1202,7 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx, MCSection *TargetLoweringObjectFileMachO::getStaticDtorSection( unsigned Priority, const MCSymbol *KeySym) const { - // TODO(yln): Remove -lower-global-dtors-via-cxa-atexit fallback flag - // (LowerGlobalDtorsViaCxaAtExit) and always issue a fatal error here. - if (TM->Options.LowerGlobalDtorsViaCxaAtExit) - report_fatal_error("@llvm.global_dtors should have been lowered already"); - return StaticDtorSection; + report_fatal_error("@llvm.global_dtors should have been lowered already"); } void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer, diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index c48b520..32fa6cc 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -878,8 +878,7 @@ void TargetPassConfig::addIRPasses() { // For MachO, lower @llvm.global_dtors into @llvm.global_ctors with // __cxa_atexit() calls to avoid emitting the deprecated __mod_term_func. - if (TM->getTargetTriple().isOSBinFormatMachO() && - TM->Options.LowerGlobalDtorsViaCxaAtExit) + if (TM->getTargetTriple().isOSBinFormatMachO()) addPass(createLowerGlobalDtorsLegacyPass()); // Make sure that no unreachable blocks are instruction selected. diff --git a/llvm/test/CodeGen/ARM/ctors_dtors.ll b/llvm/test/CodeGen/ARM/ctors_dtors.ll index b85d5c9..066c250 100644 --- a/llvm/test/CodeGen/ARM/ctors_dtors.ll +++ b/llvm/test/CodeGen/ARM/ctors_dtors.ll @@ -1,5 +1,4 @@ ; RUN: llc < %s -mtriple=arm-apple-darwin | FileCheck %s -check-prefix=DARWIN -; RUN: llc < %s -mtriple=arm-apple-darwin -lower-global-dtors-via-cxa-atexit=false | FileCheck %s -check-prefix=DARWIN-OLD ; RUN: llc < %s -mtriple=arm-linux-gnu -target-abi=apcs | FileCheck %s -check-prefix=ELF ; RUN: llc < %s -mtriple=arm-linux-gnueabi | FileCheck %s -check-prefix=GNUEABI @@ -8,9 +7,6 @@ ; DARWIN: .section __DATA,__mod_init_func,mod_init_funcs ; DARWIN-NOT: __mod_term_func -; DARWIN-OLD: .section __DATA,__mod_init_func,mod_init_funcs -; DARWIN-OLD: .section __DATA,__mod_term_func,mod_term_funcs - ; ELF: .section .ctors,"aw",%progbits ; ELF: .section .dtors,"aw",%progbits -- 2.7.4