[PATCH] D152021: [clang][AIX] Fix Overly Strick LTO Option Checking against `data-sections` when `mxcoff-roptr` is in Effect
Qiongsi Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 13 10:18:26 PDT 2023
qiongsiwu1 updated this revision to Diff 530903.
qiongsiwu1 added a comment.
Revising the logic to pass `-data-sections=` to `libLTO`. We now pass `-data-sections=1` to `libLTO` by default unless it is explicitly turned off.
Old behaviour:
1. Pass `-data-sections=1` if the target requires uses of separate sections, or the user explicitly sets `-fdata-sections`.
2. Pass `-data-sections=0` if the user explicitly specifies `-fno-data-sections`.
3. Pass nothing otherwise.
New behaviour:
1. Pass `-data-section=1` if nothing is specified, or if the target requires uses of separate sections, or the user explicitly sets `-fdata-sections`.
2. Pass `-data-sections=0` if the user explicitly specifies `-fno-data-sections`.
I think the new behaviour is safe because `libLTO` defaults to use data sections when nothing is specified https://github.com/llvm/llvm-project/blob/829ed96b779c10cb023d7e3dbcfad22413979ec4/llvm/lib/LTO/LTOCodeGenerator.cpp#L426.
@hubert.reinterpretcast @MaskRay could you let me know what you think? Thanks so much!
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D152021/new/
https://reviews.llvm.org/D152021
Files:
clang/lib/Driver/ToolChains/CommonArgs.cpp
clang/test/Driver/function-sections.c
clang/test/Driver/hip-options.hip
clang/test/Driver/ppc-roptr.c
Index: clang/test/Driver/ppc-roptr.c
===================================================================
--- clang/test/Driver/ppc-roptr.c
+++ clang/test/Driver/ppc-roptr.c
@@ -12,7 +12,7 @@
// RUN: %clang -### --target=powerpc-ibm-aix-xcoff %s 2>&1 | \
// RUN: FileCheck %s --check-prefix=NO_ROPTR
// RUN: %clang -### --target=powerpc64-ibm-aix-xcoff -mxcoff-roptr -flto %s 2>&1 | \
-// RUN: FileCheck %s --check-prefixes=ROPTR,LINK,LTO_ROPTR
+// RUN: FileCheck %s --check-prefixes=NO_DATA_SECTION_ERR,ROPTR,LINK,LTO_ROPTR
// RUN: touch %t.o
// RUN: %clang -### --target=powerpc64-ibm-aix-xcoff -mxcoff-roptr %t.o 2>&1 | \
// RUN: FileCheck %s --check-prefix=LINK
@@ -33,14 +33,14 @@
// RUN: %clang -### --target=powerpc64le-unknown-linux-gnu -mno-xcoff-roptr -flto \
// RUN: %t.o 2>&1 | FileCheck %s --check-prefix=TARGET_NOROPTR_ERR
-// ROPTR: "-mxcoff-roptr"
-// LINK: "-bforceimprw"
-// LTO_ROPTR: "-bplugin_opt:-mxcoff-roptr"
-// NO_ROPTR-NOT: "-mxcoff-roptr"
-// NO_ROPTR-NOT: "-bforceimprw"
-
// DATA_SECTION_ERR: error: -mxcoff-roptr is supported only with -fdata-sections
// NO_DATA_SECTION_ERR-NOT: error: -mxcoff-roptr is supported only with -fdata-sections
// TARGET_ROPTR_ERR: error: unsupported option '-mxcoff-roptr' for target 'powerpc64le-unknown-linux-gnu'
// TARGET_NOROPTR_ERR: error: unsupported option '-mno-xcoff-roptr' for target 'powerpc64le-unknown-linux-gnu'
// SHARED_ERR: error: -mxcoff-roptr is not supported with -shared
+
+// ROPTR: "-mxcoff-roptr"
+// LINK: "-bforceimprw"
+// LTO_ROPTR: "-bplugin_opt:-mxcoff-roptr"
+// NO_ROPTR-NOT: "-mxcoff-roptr"
+// NO_ROPTR-NOT: "-bforceimprw"
Index: clang/test/Driver/hip-options.hip
===================================================================
--- clang/test/Driver/hip-options.hip
+++ clang/test/Driver/hip-options.hip
@@ -79,7 +79,7 @@
// HIPTHINLTO-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto-unit"
// HIPTHINLTO: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-flto=thin" "-flto-unit" {{.*}} "-fwhole-program-vtables"
// HIPTHINLTO-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto-unit"
-// HIPTHINLTO: lld{{.*}}"-plugin-opt=mcpu=gfx906" "-plugin-opt=thinlto" "-plugin-opt=-force-import-all"
+// HIPTHINLTO: lld{{.*}}"-plugin-opt=mcpu=gfx906" "-plugin-opt=thinlto" {{.*}} "-plugin-opt=-force-import-all"
// Check that -flto=thin is handled correctly, particularly with -fwhole-program-vtables.
//
Index: clang/test/Driver/function-sections.c
===================================================================
--- clang/test/Driver/function-sections.c
+++ clang/test/Driver/function-sections.c
@@ -7,7 +7,6 @@
// CHECK-US-NOT: -fno-unique-section-names
// CHECK-NOUS: -fno-unique-section-names
// CHECK-PLUGIN-DEFAULT-NOT: "-plugin-opt=-function-sections
-// CHECK-PLUGIN-DEFAULT-NOT: "-plugin-opt=-data-sections
// CHECK-PLUGIN-SECTIONS: "-plugin-opt=-function-sections=1"
// CHECK-PLUGIN-SECTIONS: "-plugin-opt=-data-sections=1"
// CHECK-PLUGIN-NO-SECTIONS: "-plugin-opt=-function-sections=0"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -727,13 +727,14 @@
CmdArgs.push_back(
Args.MakeArgString(Twine(PluginOptPrefix) + "-function-sections=0"));
- if (Args.hasFlag(options::OPT_fdata_sections, options::OPT_fno_data_sections,
- UseSeparateSections))
- CmdArgs.push_back(
- Args.MakeArgString(Twine(PluginOptPrefix) + "-data-sections=1"));
- else if (Args.hasArg(options::OPT_fno_data_sections))
- CmdArgs.push_back(
- Args.MakeArgString(Twine(PluginOptPrefix) + "-data-sections=0"));
+ bool UseDataSections =
+ Args.hasFlag(options::OPT_fdata_sections, options::OPT_fno_data_sections,
+ UseSeparateSections) ||
+ !Args.hasArg(options::OPT_fno_data_sections);
+ StringRef DataSectionsOpt =
+ UseDataSections ? "-data-sections=1" : "-data-sections=0";
+ CmdArgs.push_back(
+ Args.MakeArgString(Twine(PluginOptPrefix) + DataSectionsOpt));
if (Args.hasArg(options::OPT_mxcoff_roptr) ||
Args.hasArg(options::OPT_mno_xcoff_roptr)) {
@@ -746,8 +747,7 @@
<< OptStr << ToolChain.getTriple().str();
if (HasRoptr) {
- if (!Args.hasFlag(options::OPT_fdata_sections,
- options::OPT_fno_data_sections, UseSeparateSections))
+ if (!UseDataSections)
D.Diag(diag::err_roptr_requires_data_sections);
CmdArgs.push_back(
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152021.530903.patch
Type: text/x-patch
Size: 4635 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230613/f22cec55/attachment-0001.bin>
More information about the cfe-commits
mailing list