quinnp updated this revision to Diff 445631. quinnp added a comment. Updating patch to forward `-data-sections=1` to `libLTO`/`gold` instead of just `-data-sections` when `-fdata-sections` is explicitly specified in `clang`. This is to be more explicit since `-data-sections=0` is now being forwared when `-fno-data-sections` is explicitly specified.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D129401/new/ https://reviews.llvm.org/D129401 Files: clang/lib/Driver/ToolChains/CommonArgs.cpp clang/test/Driver/lto-data-sections.c llvm/lib/LTO/LTOCodeGenerator.cpp llvm/test/LTO/PowerPC/data-sections-aix.ll llvm/test/LTO/PowerPC/data-sections-linux.ll
Index: llvm/test/LTO/PowerPC/data-sections-linux.ll =================================================================== --- /dev/null +++ llvm/test/LTO/PowerPC/data-sections-linux.ll @@ -0,0 +1,26 @@ +; RUN: rm -rf %t +; RUN: mkdir %t +; RUN: llvm-as %s -o %t/bc.bc +; RUN: llvm-lto -exported-symbol var -O0 %t/bc.bc -o %t/default.o +; RUN: llvm-lto -exported-symbol var -O0 --data-sections=true %t/bc.bc -o \ +; RUN: %t/data-sections.o +; RUN: llvm-lto -exported-symbol var -O0 --data-sections=false %t/bc.bc -o \ +; RUN: %t/no-data-sections.o +; RUN: obj2yaml %t/default.o | FileCheck --match-full-lines %s +; RUN: obj2yaml %t/data-sections.o | FileCheck --match-full-lines %s +; RUN: obj2yaml %t/no-data-sections.o | FileCheck --match-full-lines \ +; RUN: --check-prefix CHECK-NO-DATA-SECTIONS %s + +target triple = "powerpc64le-unknown-linux-gnu" + +@var = global i32 0 + +; CHECK: Symbols: +; CHECK: - Name: var +; CHECK-NEXT: Type: STT_OBJECT +; CHECK-NEXT: Section: .bss.var + +; CHECK-NO-DATA-SECTIONS: Symbols: +; CHECK-NO-DATA-SECTIONS: - Name: var +; CHECK-NO-DATA-SECTIONS-NEXT: Type: STT_OBJECT +; CHECK-NO-DATA-SECTIONS-NEXT: Section: .bss Index: llvm/test/LTO/PowerPC/data-sections-aix.ll =================================================================== --- /dev/null +++ llvm/test/LTO/PowerPC/data-sections-aix.ll @@ -0,0 +1,22 @@ +; RUN: rm -rf %t +; RUN: mkdir %t +; RUN: llvm-as %s -o %t/bc.bc +; RUN: llvm-lto -exported-symbol var -O0 %t/bc.bc -o %t/default.o +; RUN: llvm-lto -exported-symbol var -O0 --data-sections=true %t/bc.bc -o \ +; RUN: %t/data-sections.o +; RUN: llvm-lto -exported-symbol var -O0 --data-sections=false %t/bc.bc -o \ +; RUN: %t/no-data-sections.o +; RUN: obj2yaml %t/default.o | FileCheck --match-full-lines %s +; RUN: obj2yaml %t/data-sections.o | FileCheck --match-full-lines %s +; RUN: obj2yaml %t/no-data-sections.o | FileCheck --match-full-lines \ +; RUN: --check-prefix CHECK-NO-DATA-SECTIONS %s + +target triple = "powerpc-ibm-aix7.2.0.0" + +@var = global i32 0 + +; CHECK: Symbols: +; CHECK-NOT: - Name: .data + +; CHECK-NO-DATA-SECTIONS: Symbols: +; CHECK-NO-DATA-SECTIONS: - Name: .data Index: llvm/lib/LTO/LTOCodeGenerator.cpp =================================================================== --- llvm/lib/LTO/LTOCodeGenerator.cpp +++ llvm/lib/LTO/LTOCodeGenerator.cpp @@ -19,6 +19,7 @@ #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/Bitcode/BitcodeWriter.h" +#include "llvm/CodeGen/CommandFlags.h" #include "llvm/CodeGen/ParallelCG.h" #include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/Config/config.h" @@ -344,6 +345,14 @@ Config.CPU = "cyclone"; } + // If data-sections is not explicitly set or unset, set data-sections by + // default for ELF and XCOFF to match the behaviour of lld and gold plugin. + llvm::Triple::ObjectFormatType ObjectFormat = Triple.getObjectFormat(); + if (!codegen::getExplicitDataSections() && + (ObjectFormat == llvm::Triple::ObjectFormatType::ELF || + ObjectFormat == llvm::Triple::ObjectFormatType::XCOFF)) + Config.Options.DataSections = true; + TargetMach = createTargetMachine(); assert(TargetMach && "Unable to create target machine"); Index: clang/test/Driver/lto-data-sections.c =================================================================== --- /dev/null +++ clang/test/Driver/lto-data-sections.c @@ -0,0 +1,10 @@ +// RUN: touch %t.o +// RUN: %clang %t.o -### -flto 2>&1 | FileCheck %s +// RUN: %clang %t.o -### -flto 2>&1 -fdata-sections | FileCheck %s \ +// RUN: --check-prefix=CHECK-DATA-SECTIONS +// RUN: %clang %t.o -### -flto 2>&1 -fno-data-sections | FileCheck %s \ +// RUN: --check-prefix=CHECK-NO-DATA-SECTIONS + +// CHECK-NOT: "-plugin-opt=-data-sections" +// CHECK-DATA-SECTIONS: "-plugin-opt=-data-sections=1" +// CHECK-NO-DATA-SECTIONS: "-plugin-opt=-data-sections=0" Index: clang/lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- clang/lib/Driver/ToolChains/CommonArgs.cpp +++ clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -573,9 +573,12 @@ if (Args.hasFlag(options::OPT_fdata_sections, options::OPT_fno_data_sections, UseSeparateSections)) { - CmdArgs.push_back("-plugin-opt=-data-sections"); + CmdArgs.push_back("-plugin-opt=-data-sections=1"); } + if (Args.hasArg(options::OPT_fno_data_sections)) + CmdArgs.push_back("-plugin-opt=-data-sections=0"); + // Pass an option to enable split machine functions. if (auto *A = Args.getLastArg(options::OPT_fsplit_machine_functions, options::OPT_fno_split_machine_functions)) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits