* [PATCH 0/5] Fix gold on x86
@ 2020-10-10 21:55 H.J. Lu
2020-10-10 21:55 ` [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note H.J. Lu
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: H.J. Lu @ 2020-10-10 21:55 UTC (permalink / raw)
To: binutils
This set of patches fixes gold on x86. I will check in them next Tuesday
if there are no objections.
H.J. Lu (5):
gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note
gold: Update GNU_PROPERTY_X86_XXX macros
gold: Discard .note.gnu.property section
gold: Skip some incremental tests for GCC 9 or later
gold: Skip some incremental tests for -fcf-protection
elfcpp/elfcpp.h | 18 +++-
gold/configure | 74 +++++++++++++++
gold/configure.ac | 20 +++++
gold/layout.cc | 15 +++-
gold/output.cc | 1 +
gold/output.h | 12 +++
gold/testsuite/Makefile.am | 20 ++++-
gold/testsuite/Makefile.in | 134 ++++++++++++++--------------
gold/testsuite/gnu_property_a.S | 4 +-
gold/testsuite/gnu_property_b.S | 4 +-
gold/testsuite/gnu_property_c.S | 4 +-
gold/testsuite/gnu_property_test.sh | 24 ++++-
gold/testsuite/justsyms_lib.t | 28 ++++++
gold/testsuite/script_test_10.t | 1 +
gold/x86_64.cc | 34 ++++++-
15 files changed, 310 insertions(+), 83 deletions(-)
create mode 100644 gold/testsuite/justsyms_lib.t
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note
2020-10-10 21:55 [PATCH 0/5] Fix gold on x86 H.J. Lu
@ 2020-10-10 21:55 ` H.J. Lu
2020-10-11 0:20 ` Fangrui Song
2020-10-10 21:55 ` [PATCH 2/5] gold: Update GNU_PROPERTY_X86_XXX macros H.J. Lu
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: H.J. Lu @ 2020-10-10 21:55 UTC (permalink / raw)
To: binutils
The NT_GNU_PROPERTY_TYPE_0 note should be aligned to 8 bytes for 64-bit
ELF as specified by gABI. A note section can be only placed in a PT_NOTE
segment with the same alignment.
PR gold/22914
PR gold/23535
* layout.cc (Layout::attach_allocated_section_to_segment): Place
a note section in a PT_NOTE segment with the same alignment. Set
the alignment of the PT_NOTE segment from the alignment of the
note section.
(Layout::create_note): Align the NT_GNU_PROPERTY_TYPE_0 note to 8
bytes for 64-bit ELF.
(Layout::segment_precedes): Place segments with larger alignments
first.
* output.cc (Output_segment::Output_segment): Initialize align_.
* output.h (Output_segment): Add align, set_align and align_.
* testsuite/Makefile.am (gnu_property_test.stdout): Pass -lhSWn
to $(TEST_READELF).
(gnu_property_test): Pass --build-id to ld.
* testsuite/Makefile.in: Regenerated.
* testsuite/gnu_property_test.sh (check_alignment): New.
Use check_alignment to check the NT_GNU_PROPERTY_TYPE_0 note
alignment. Verify that there are 2 PT_NOTE segments.
---
gold/layout.cc | 15 ++++++++++++++-
gold/output.cc | 1 +
gold/output.h | 12 ++++++++++++
gold/testsuite/Makefile.am | 4 ++--
gold/testsuite/Makefile.in | 4 ++--
gold/testsuite/gnu_property_test.sh | 20 ++++++++++++++++++++
6 files changed, 51 insertions(+), 5 deletions(-)
diff --git a/gold/layout.cc b/gold/layout.cc
index 13e533aaf21..6948ff7214c 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -2062,12 +2062,15 @@ Layout::attach_allocated_section_to_segment(const Target* target,
// segment.
if (os->type() == elfcpp::SHT_NOTE)
{
+ uint64_t os_align = os->addralign();
+
// See if we already have an equivalent PT_NOTE segment.
for (p = this->segment_list_.begin();
p != segment_list_.end();
++p)
{
if ((*p)->type() == elfcpp::PT_NOTE
+ && (*p)->align() == os_align
&& (((*p)->flags() & elfcpp::PF_W)
== (seg_flags & elfcpp::PF_W)))
{
@@ -2081,6 +2084,7 @@ Layout::attach_allocated_section_to_segment(const Target* target,
Output_segment* oseg = this->make_output_segment(elfcpp::PT_NOTE,
seg_flags);
oseg->add_output_section_to_nonload(os, seg_flags);
+ oseg->set_align(os_align);
}
}
@@ -3184,6 +3188,10 @@ Layout::create_note(const char* name, int note_type,
#else
const int size = 32;
#endif
+ // The NT_GNU_PROPERTY_TYPE_0 note conforms to gABI.
+ const int addralign = ((note_type == elfcpp::NT_GNU_PROPERTY_TYPE_0
+ ? parameters->target().get_size()
+ : size) / 8);
// The contents of the .note section.
size_t namesz = strlen(name) + 1;
@@ -3247,7 +3255,7 @@ Layout::create_note(const char* name, int note_type,
return NULL;
Output_section_data* posd = new Output_data_const_buffer(buffer, notehdrsz,
- size / 8,
+ addralign,
"** note header");
os->add_output_section_data(posd);
@@ -3705,6 +3713,11 @@ Layout::segment_precedes(const Output_segment* seg1,
{
if (type1 != type2)
return type1 < type2;
+ uint64_t align1 = seg1->align();
+ uint64_t align2 = seg2->align();
+ // Place segments with larger alignments first.
+ if (align1 != align2)
+ return align1 > align2;
gold_assert(flags1 != flags2
|| this->script_options_->saw_phdrs_clause());
return flags1 < flags2;
diff --git a/gold/output.cc b/gold/output.cc
index 75d2fc354a5..ed021c9178f 100644
--- a/gold/output.cc
+++ b/gold/output.cc
@@ -4113,6 +4113,7 @@ Output_segment::Output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags)
: vaddr_(0),
paddr_(0),
memsz_(0),
+ align_(0),
max_align_(0),
min_p_align_(0),
offset_(0),
diff --git a/gold/output.h b/gold/output.h
index 77b6697e067..35170c3a4f8 100644
--- a/gold/output.h
+++ b/gold/output.h
@@ -4688,6 +4688,16 @@ class Output_segment
offset() const
{ return this->offset_; }
+ // Return the segment alignment.
+ uint64_t
+ align() const
+ { return this->align_; }
+
+ // Set the segment alignment.
+ void
+ set_align(uint64_t align)
+ { this->align_ = align; }
+
// Whether this is a segment created to hold large data sections.
bool
is_large_data_segment() const
@@ -4910,6 +4920,8 @@ class Output_segment
uint64_t paddr_;
// The size of the segment in memory.
uint64_t memsz_;
+ // The segment alignment.
+ uint64_t align_;
// The maximum section alignment. The is_max_align_known_ field
// indicates whether this has been finalized.
uint64_t max_align_;
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 0644e23a1bb..026d1010b0b 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -3306,9 +3306,9 @@ check_SCRIPTS += gnu_property_test.sh
check_DATA += gnu_property_test.stdout
MOSTLYCLEANFILES += gnu_property_test
gnu_property_test.stdout: gnu_property_test
- $(TEST_READELF) -n $< >$@
+ $(TEST_READELF) -lhSWn $< >$@
gnu_property_test: gcctestdir/ld gnu_property_a.o gnu_property_b.o gnu_property_c.o
- gcctestdir/ld -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
+ gcctestdir/ld --build-id -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
gnu_property_main.o: gnu_property_main.c
$(COMPILE) -c -o $@ $<
gnu_property_a.o: gnu_property_a.S
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index dfcafcdc570..35c442ee8b7 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -9525,9 +9525,9 @@ uninstall-am:
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_2.o: exception_test_2.cc gcctestdir/as
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -Wa,-madd-bnd-prefix -o $@ $<
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_test.stdout: gnu_property_test
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -n $< >$@
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lhSWn $< >$@
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_test: gcctestdir/ld gnu_property_a.o gnu_property_b.o gnu_property_c.o
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld --build-id -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_main.o: gnu_property_main.c
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $<
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_a.o: gnu_property_a.S
diff --git a/gold/testsuite/gnu_property_test.sh b/gold/testsuite/gnu_property_test.sh
index 4a2d217cbe9..1806d3474cc 100755
--- a/gold/testsuite/gnu_property_test.sh
+++ b/gold/testsuite/gnu_property_test.sh
@@ -53,8 +53,28 @@ check_count()
fi
}
+check_alignment ()
+{
+ if egrep -q "Class:[ \t]+ELF64" "$1"
+ then
+ align=8
+ else
+ align=4
+ fi
+ if ! egrep -q ".note.gnu.property[ \t]+NOTE.*$align$" "$1"
+ then
+ echo "Wrong .note.gnu.property alignment in $1:"
+ egrep ".note.gnu.property[ \t]+NOTE.*$align" "$1"
+ exit 1
+ fi
+}
+
+check_alignment gnu_property_test.stdout
+
check_count gnu_property_test.stdout "GNU\s*0x[0-9a-f]*\s*NT_GNU_PROPERTY_TYPE_0" 1
+check_count gnu_property_test.stdout "^ NOTE" 2
+
check gnu_property_test.stdout "stack size: 0x111100"
check gnu_property_test.stdout "no copy on protected"
check gnu_property_test.stdout "x86 ISA used: i486, SSE2, SSE4_2, AVX512CD"
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/5] gold: Update GNU_PROPERTY_X86_XXX macros
2020-10-10 21:55 [PATCH 0/5] Fix gold on x86 H.J. Lu
2020-10-10 21:55 ` [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note H.J. Lu
@ 2020-10-10 21:55 ` H.J. Lu
2020-10-10 21:55 ` [PATCH 3/5] gold: Discard .note.gnu.property section H.J. Lu
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: H.J. Lu @ 2020-10-10 21:55 UTC (permalink / raw)
To: binutils
This patch updates GNU_PROPERTY_X86_XXX macros for gold:
1. GNU_PROPERTY_X86_UINT32_AND_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in all relocatable inputs:
#define GNU_PROPERTY_X86_UINT32_AND_LO 0xc0000002
#define GNU_PROPERTY_X86_UINT32_AND_HI 0xc0007fff
2. GNU_PROPERTY_X86_UINT32_OR_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in any relocatable inputs:
#define GNU_PROPERTY_X86_UINT32_OR_LO 0xc0008000
#define GNU_PROPERTY_X86_UINT32_OR_HI 0xc000ffff
3. GNU_PROPERTY_X86_UINT32_OR_AND_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in any relocatable inputs and the property is
present in all relocatable inputs:
#define GNU_PROPERTY_X86_UINT32_OR_AND_LO 0xc0010000
#define GNU_PROPERTY_X86_UINT32_OR_AND_HI 0xc0017fff
4. GNU_PROPERTY_X86_FEATURE_2_NEEDED, GNU_PROPERTY_X86_FEATURE_2_USED
and GNU_PROPERTY_X86_FEATURE_2_XXX bits.
GNU_PROPERTY_X86_FEATURE_1_AND is unchanged. GNU_PROPERTY_X86_ISA_1_USED
and GNU_PROPERTY_X86_ISA_1_NEEDED are updated to better support targeted
processors since GNU_PROPERTY_X86_ISA_1_?86 aren't isn't very useful.
A new set of GNU_PROPERTY_X86_ISA_1_XXX bits are defined. The previous
GNU_PROPERTY_X86_ISA_1_XXX macros are deprecated and renamed to
GNU_PROPERTY_X86_COMPAT_ISA_1_XXX and GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX.
elfcpp/
* elfcpp.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ...
(GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ...
(GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This.
(GNU_PROPERTY_X86_UINT32_AND_LO): New.
(GNU_PROPERTY_X86_UINT32_AND_HI): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_LO): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_HI): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise.
(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): New.
(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): Likewise.
(GNU_PROPERTY_X86_FEATURE_1_AND): Updated to
(GNU_PROPERTY_X86_UINT32_AND_LO + 0).
(GNU_PROPERTY_X86_ISA_1_NEEDED): New. Defined to
GNU_PROPERTY_X86_UINT32_OR_LO + 2.
(GNU_PROPERTY_X86_FEATURE_2_NEEDED): New. Defined to
(GNU_PROPERTY_X86_UINT32_OR_LO + 1).
(GNU_PROPERTY_X86_ISA_1_USED): New. Defined to
GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2.
(GNU_PROPERTY_X86_FEATURE_2_USED): New. Defined to
(GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1).
gold/
* x86_64.cc (Target_x86_64::Target_x86_64): Initialize
feature_2_used_, feature_2_needed_ and object_feature_2_used_.
(Target_x86_64::feature_2_used_): New data member.
(Target_x86_64::feature_2_needed_): Likewise.
(Target_x86_64::object_isa_1_used_): Likewise.
(Target_x86_64::record_gnu_property): Support
GNU_PROPERTY_X86_COMPAT_ISA_1_USED,
GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED,
GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED,
GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED,
GNU_PROPERTY_X86_FEATURE_2_USED and
GNU_PROPERTY_X86_FEATURE_2_NEEDED.
(Target_x86_64::merge_gnu_properties): Merge FEATURE_2_USED bits.
Initialize object_feature_2_used_.
(Target_x86_64::do_finalize_gnu_properties): Support
GNU_PROPERTY_X86_FEATURE_2_USED and
GNU_PROPERTY_X86_FEATURE_2_NEEDED.
* testsuite/gnu_property_a.S (GNU_PROPERTY_X86_ISA_1_USED): Set
to 0xc0010002.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
* testsuite/gnu_property_b.S (GNU_PROPERTY_X86_ISA_1_USED): Set
to 0xc0010002.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
* testsuite/gnu_property_c.S (GNU_PROPERTY_X86_ISA_1_USED): Set
to 0xc0010002.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
* testsuite/gnu_property_test.sh: Updated.
---
elfcpp/elfcpp.h | 18 ++++++++++++---
gold/testsuite/gnu_property_a.S | 4 ++--
gold/testsuite/gnu_property_b.S | 4 ++--
gold/testsuite/gnu_property_c.S | 4 ++--
gold/testsuite/gnu_property_test.sh | 4 ++--
gold/x86_64.cc | 34 +++++++++++++++++++++++++++--
6 files changed, 55 insertions(+), 13 deletions(-)
diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h
index 65d803c00e2..4b6ff94a654 100644
--- a/elfcpp/elfcpp.h
+++ b/elfcpp/elfcpp.h
@@ -1013,9 +1013,21 @@ enum
GNU_PROPERTY_STACK_SIZE = 1,
GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
GNU_PROPERTY_LOPROC = 0xc0000000,
- GNU_PROPERTY_X86_ISA_1_USED = 0xc0000000,
- GNU_PROPERTY_X86_ISA_1_NEEDED = 0xc0000001,
- GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002,
+ GNU_PROPERTY_X86_COMPAT_ISA_1_USED = 0xc0000000,
+ GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED = 0xc0000001,
+ GNU_PROPERTY_X86_UINT32_AND_LO = 0xc0000002,
+ GNU_PROPERTY_X86_UINT32_AND_HI = 0xc0007fff,
+ GNU_PROPERTY_X86_UINT32_OR_LO = 0xc0008000,
+ GNU_PROPERTY_X86_UINT32_OR_HI = 0xc000ffff,
+ GNU_PROPERTY_X86_UINT32_OR_AND_LO = 0xc0010000,
+ GNU_PROPERTY_X86_UINT32_OR_AND_HI = 0xc0017fff,
+ GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 0,
+ GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0,
+ GNU_PROPERTY_X86_FEATURE_1_AND = GNU_PROPERTY_X86_UINT32_AND_LO + 0,
+ GNU_PROPERTY_X86_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 2,
+ GNU_PROPERTY_X86_FEATURE_2_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 1,
+ GNU_PROPERTY_X86_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2,
+ GNU_PROPERTY_X86_FEATURE_2_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1,
GNU_PROPERTY_HIPROC = 0xdfffffff,
GNU_PROPERTY_LOUSER = 0xe0000000,
GNU_PROPERTY_HIUSER = 0xffffffff
diff --git a/gold/testsuite/gnu_property_a.S b/gold/testsuite/gnu_property_a.S
index 463bc8e52fe..5fbbbc9c4bb 100644
--- a/gold/testsuite/gnu_property_a.S
+++ b/gold/testsuite/gnu_property_a.S
@@ -1,8 +1,8 @@
#define NT_GNU_PROPERTY_TYPE_0 5
#define GNU_PROPERTY_STACK_SIZE 1
-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
#if __SIZEOF_PTRDIFF_T__ == 8
diff --git a/gold/testsuite/gnu_property_b.S b/gold/testsuite/gnu_property_b.S
index 0c0c038ead1..7028f73d7ab 100644
--- a/gold/testsuite/gnu_property_b.S
+++ b/gold/testsuite/gnu_property_b.S
@@ -2,8 +2,8 @@
#define GNU_PROPERTY_STACK_SIZE 1
#define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
#if __SIZEOF_PTRDIFF_T__ == 8
diff --git a/gold/testsuite/gnu_property_c.S b/gold/testsuite/gnu_property_c.S
index ace159a9a9d..c8cbd8bce28 100644
--- a/gold/testsuite/gnu_property_c.S
+++ b/gold/testsuite/gnu_property_c.S
@@ -2,8 +2,8 @@
#define GNU_PROPERTY_STACK_SIZE 1
#define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
#if __SIZEOF_PTRDIFF_T__ == 8
diff --git a/gold/testsuite/gnu_property_test.sh b/gold/testsuite/gnu_property_test.sh
index 1806d3474cc..a4096005b78 100755
--- a/gold/testsuite/gnu_property_test.sh
+++ b/gold/testsuite/gnu_property_test.sh
@@ -77,8 +77,8 @@ check_count gnu_property_test.stdout "^ NOTE" 2
check gnu_property_test.stdout "stack size: 0x111100"
check gnu_property_test.stdout "no copy on protected"
-check gnu_property_test.stdout "x86 ISA used: i486, SSE2, SSE4_2, AVX512CD"
-check gnu_property_test.stdout "x86 ISA needed: i486, SSE2, SSE4_2, AVX512CD"
+check gnu_property_test.stdout "x86 ISA used: x86-64-v2, <unknown: 10>, <unknown: 100>, <unknown: 1000>"
+check gnu_property_test.stdout "x86 ISA needed: x86-64-v2, <unknown: 10>, <unknown: 100>, <unknown: 1000>"
check gnu_property_test.stdout "x86 feature: IBT"
exit 0
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index 1d9d9209bf3..bacd89f2eff 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -706,8 +706,9 @@ class Target_x86_64 : public Sized_target<size, false>
rela_irelative_(NULL), copy_relocs_(elfcpp::R_X86_64_COPY),
got_mod_index_offset_(-1U), tlsdesc_reloc_info_(),
tls_base_symbol_defined_(false), isa_1_used_(0), isa_1_needed_(0),
- feature_1_(0), object_isa_1_used_(0), object_feature_1_(0),
- seen_first_object_(false)
+ feature_1_(0), feature_2_used_(0), feature_2_needed_(0),
+ object_isa_1_used_(0), object_feature_1_(0),
+ object_feature_2_used_(0), seen_first_object_(false)
{ }
// Hook for a new output section.
@@ -1382,6 +1383,8 @@ class Target_x86_64 : public Sized_target<size, false>
uint32_t isa_1_used_;
uint32_t isa_1_needed_;
uint32_t feature_1_;
+ uint32_t feature_2_used_;
+ uint32_t feature_2_needed_;
// Target-specific properties from the current object.
// These bits get ORed into ISA_1_USED_ after all properties for the object
// have been processed. But if either is all zeroes (as when the property
@@ -1391,6 +1394,7 @@ class Target_x86_64 : public Sized_target<size, false>
// These bits get ANDed into FEATURE_1_ after all properties for the object
// have been processed.
uint32_t object_feature_1_;
+ uint32_t object_feature_2_used_;
// Whether we have seen our first object, for use in initializing FEATURE_1_.
bool seen_first_object_;
};
@@ -1594,9 +1598,15 @@ Target_x86_64<size>::record_gnu_property(
switch (pr_type)
{
+ case elfcpp::GNU_PROPERTY_X86_COMPAT_ISA_1_USED:
+ case elfcpp::GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED:
+ case elfcpp::GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED:
+ case elfcpp::GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED:
case elfcpp::GNU_PROPERTY_X86_ISA_1_USED:
case elfcpp::GNU_PROPERTY_X86_ISA_1_NEEDED:
case elfcpp::GNU_PROPERTY_X86_FEATURE_1_AND:
+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED:
+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED:
if (pr_datasz != 4)
{
gold_warning(_("%s: corrupt .note.gnu.property section "
@@ -1625,6 +1635,12 @@ Target_x86_64<size>::record_gnu_property(
// If we see multiple feature props in one object, OR them together.
this->object_feature_1_ |= val;
break;
+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED:
+ this->object_feature_2_used_ |= val;
+ break;
+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED:
+ this->feature_2_needed_ |= val;
+ break;
}
}
@@ -1642,15 +1658,23 @@ Target_x86_64<size>::merge_gnu_properties(const Object*)
else if (this->isa_1_used_ != 0)
this->isa_1_used_ |= this->object_isa_1_used_;
this->feature_1_ &= this->object_feature_1_;
+ // If any object is missing the FEATURE_2_USED property, we must
+ // omit it from the output file.
+ if (this->object_feature_2_used_ == 0)
+ this->feature_2_used_ = 0;
+ else if (this->feature_2_used_ != 0)
+ this->feature_2_used_ |= this->object_feature_2_used_;
}
else
{
this->isa_1_used_ = this->object_isa_1_used_;
this->feature_1_ = this->object_feature_1_;
+ this->feature_2_used_ = this->object_feature_2_used_;
this->seen_first_object_ = true;
}
this->object_isa_1_used_ = 0;
this->object_feature_1_ = 0;
+ this->object_feature_2_used_ = 0;
}
static inline void
@@ -1676,6 +1700,12 @@ Target_x86_64<size>::do_finalize_gnu_properties(Layout* layout) const
if (this->feature_1_ != 0)
add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_1_AND,
this->feature_1_);
+ if (this->feature_2_used_ != 0)
+ add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED,
+ this->feature_2_used_);
+ if (this->feature_2_needed_ != 0)
+ add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED,
+ this->feature_2_needed_);
}
// Write the first three reserved words of the .got.plt section.
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/5] gold: Discard .note.gnu.property section
2020-10-10 21:55 [PATCH 0/5] Fix gold on x86 H.J. Lu
2020-10-10 21:55 ` [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note H.J. Lu
2020-10-10 21:55 ` [PATCH 2/5] gold: Update GNU_PROPERTY_X86_XXX macros H.J. Lu
@ 2020-10-10 21:55 ` H.J. Lu
2020-10-10 21:55 ` [PATCH 4/5] gold: Skip some incremental tests for GCC 9 or later H.J. Lu
2020-10-10 21:55 ` [PATCH 5/5] gold: Skip some incremental tests for -fcf-protection H.J. Lu
4 siblings, 0 replies; 8+ messages in thread
From: H.J. Lu @ 2020-10-10 21:55 UTC (permalink / raw)
To: binutils
Discard .note.gnu.property section since it changes the expected section
order.
PR gold/23503
* testsuite/Makefile.am (justsyms_lib): Pass
-T $(srcdir)/justsyms_lib.t to gold.
* testsuite/Makefile.in: Regenerated.
* testsuite/justsyms_lib.t: New file.
* testsuite/script_test_10.t: Discard .note.gnu.property section.
---
gold/testsuite/Makefile.am | 2 +-
gold/testsuite/Makefile.in | 2 +-
gold/testsuite/justsyms_lib.t | 28 ++++++++++++++++++++++++++++
gold/testsuite/script_test_10.t | 1 +
4 files changed, 31 insertions(+), 2 deletions(-)
create mode 100644 gold/testsuite/justsyms_lib.t
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 026d1010b0b..c2692f96776 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2044,7 +2044,7 @@ MOSTLYCLEANFILES += justsyms_lib
justsyms_lib.o: justsyms_lib.c
$(COMPILE) -c -o $@ $<
justsyms_lib: justsyms_lib.o gcctestdir/ld
- gcctestdir/ld -o $@ -z norelro -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
+ gcctestdir/ld -o $@ -z norelro -T $(srcdir)/justsyms_lib.t -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
check_PROGRAMS += binary_test
MOSTLYCLEANFILES += binary.txt
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 35c442ee8b7..7f2e0dcd562 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -8834,7 +8834,7 @@ uninstall-am:
@GCC_TRUE@@NATIVE_LINKER_TRUE@justsyms_lib.o: justsyms_lib.c
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $<
@GCC_TRUE@@NATIVE_LINKER_TRUE@justsyms_lib: justsyms_lib.o gcctestdir/ld
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ -z norelro -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ -z norelro -T $(srcdir)/justsyms_lib.t -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
# Copy the file to the build directory to avoid worrying about the
# full pathname in the generated symbols.
@GCC_TRUE@@NATIVE_LINKER_TRUE@binary.txt: $(srcdir)/binary.in
diff --git a/gold/testsuite/justsyms_lib.t b/gold/testsuite/justsyms_lib.t
new file mode 100644
index 00000000000..632f7cde24d
--- /dev/null
+++ b/gold/testsuite/justsyms_lib.t
@@ -0,0 +1,28 @@
+/* justsyms_lib.t -- test --just-symbols for gold.
+
+ Copyright (C) 2018 Free Software Foundation, Inc.
+
+ This file is part of gold.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+ /DISCARD/ : { *(.note.gnu.property) }
+}
diff --git a/gold/testsuite/script_test_10.t b/gold/testsuite/script_test_10.t
index eff0b05f4b5..a9fc72ddc02 100644
--- a/gold/testsuite/script_test_10.t
+++ b/gold/testsuite/script_test_10.t
@@ -30,5 +30,6 @@ SECTIONS
.sec3 : { *(.sec3) }
.data : { *(.data) }
.bss : { *(.bss) }
+ /DISCARD/ : { *(.note.gnu.property) }
}
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/5] gold: Skip some incremental tests for GCC 9 or later
2020-10-10 21:55 [PATCH 0/5] Fix gold on x86 H.J. Lu
` (2 preceding siblings ...)
2020-10-10 21:55 ` [PATCH 3/5] gold: Discard .note.gnu.property section H.J. Lu
@ 2020-10-10 21:55 ` H.J. Lu
2020-10-10 21:55 ` [PATCH 5/5] gold: Skip some incremental tests for -fcf-protection H.J. Lu
4 siblings, 0 replies; 8+ messages in thread
From: H.J. Lu @ 2020-10-10 21:55 UTC (permalink / raw)
To: binutils
Skip incremental_copy_test and incremental_comdat_test_1 for GCC 9 or
later since they failed with GCC 9 or later.
PR gold/23539
* configure.ac: Check for GCC 9 or later.
* configure: Regenerated.
* testsuite/Makefile.am (check_PROGRAMS): Skip
incremental_copy_test and incremental_comdat_test_1 for GCC 9 or
later.
* testsuite/Makefile.in: Regenerated.
---
gold/configure | 37 +++++++++++++
gold/configure.ac | 10 ++++
gold/testsuite/Makefile.am | 4 ++
gold/testsuite/Makefile.in | 106 +++++++++++++++++++------------------
4 files changed, 105 insertions(+), 52 deletions(-)
diff --git a/gold/configure b/gold/configure
index 199a739e7d1..ca4680791e5 100755
--- a/gold/configure
+++ b/gold/configure
@@ -665,6 +665,8 @@ STATIC_TLS_TRUE
TLS_FALSE
TLS_TRUE
MERGE_CONSTANTS_FLAG
+GCC9_FALSE
+GCC9_TRUE
MCMODEL_MEDIUM_FALSE
MCMODEL_MEDIUM_TRUE
FN_PTRS_IN_SO_WITHOUT_PIC_FALSE
@@ -7491,6 +7493,37 @@ else
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc >= 9" >&5
+$as_echo_n "checking for gcc >= 9... " >&6; }
+if ${gold_cv_prog_gcc9+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if !defined __GNUC__ || __GNUC__ < 9
+error
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gold_cv_prog_gcc9=yes
+else
+ gold_cv_prog_gcc9=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gold_cv_prog_gcc9" >&5
+$as_echo "$gold_cv_prog_gcc9" >&6; }
+ if test "$gold_cv_prog_gcc9" = "yes"; then
+ GCC9_TRUE=
+ GCC9_FALSE='#'
+else
+ GCC9_TRUE='#'
+ GCC9_FALSE=
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fmerge-constants" >&5
$as_echo_n "checking whether $CC supports -fmerge-constants... " >&6; }
if ${gold_cv_merge_constants+:} false; then :
@@ -10444,6 +10477,10 @@ if test -z "${MCMODEL_MEDIUM_TRUE}" && test -z "${MCMODEL_MEDIUM_FALSE}"; then
as_fn_error $? "conditional \"MCMODEL_MEDIUM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${GCC9_TRUE}" && test -z "${GCC9_FALSE}"; then
+ as_fn_error $? "conditional \"GCC9\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${TLS_TRUE}" && test -z "${TLS_FALSE}"; then
as_fn_error $? "conditional \"TLS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/gold/configure.ac b/gold/configure.ac
index eca4f01c111..469d9838c5f 100644
--- a/gold/configure.ac
+++ b/gold/configure.ac
@@ -372,6 +372,16 @@ dnl Whether we can test -mcmodel=medium.
AM_CONDITIONAL(MCMODEL_MEDIUM,
[test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
+dnl Test for gcc 9 or later. Some incremental tests fail with GCC 9 or
+dnl later.
+AC_CACHE_CHECK([for gcc >= 9], [gold_cv_prog_gcc9],
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+#if !defined __GNUC__ || __GNUC__ < 9
+error
+#endif
+])], [gold_cv_prog_gcc9=yes], [gold_cv_prog_gcc9=no])])
+AM_CONDITIONAL(GCC9, [test "$gold_cv_prog_gcc9" = "yes"])
+
AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
[gold_cv_merge_constants], [
save_CFLAGS="$CFLAGS"
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index c2692f96776..5d376b1938c 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -3256,7 +3256,9 @@ incremental_test_6: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
$(TEST_AR) rc two_file_test_6.a two_file_test_1.o two_file_test_tmp_6.o two_file_test_2.o
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie two_file_test_main.o -Wl,--incremental-unchanged two_file_test_6.a -Wl,--incremental-unknown
+if !GCC9
check_PROGRAMS += incremental_copy_test
+endif
incremental_copy_test: copy_test_v1.o copy_test.o copy_test_1.so copy_test_2.so
cp -f copy_test_v1.o copy_test_tmp.o
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
@@ -3276,7 +3278,9 @@ common_test_1_v1.o: common_test_1_v1.c
common_test_1_v2.o: common_test_1_v2.c
$(COMPILE) -c $(COMMON_TEST_C_CFLAGS) -o $@ $<
+if !GCC9
check_PROGRAMS += incremental_comdat_test_1
+endif
incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_comdat_test_2_v2.o incr_comdat_test_2_v3.o gcctestdir/ld
cp -f incr_comdat_test_2_v1.o incr_comdat_test_1_tmp.o
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie incr_comdat_test_1.o incr_comdat_test_1_tmp.o
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 7f2e0dcd562..a76966698a8 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -107,7 +107,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
$(am__EXEEXT_31) $(am__EXEEXT_32) $(am__EXEEXT_33) \
$(am__EXEEXT_34) $(am__EXEEXT_35) $(am__EXEEXT_36) \
$(am__EXEEXT_37) $(am__EXEEXT_38) $(am__EXEEXT_39) \
- $(am__EXEEXT_40) $(am__EXEEXT_41) $(am__EXEEXT_42)
+ $(am__EXEEXT_40) $(am__EXEEXT_41) $(am__EXEEXT_42) \
+ $(am__EXEEXT_43) $(am__EXEEXT_44) $(am__EXEEXT_45) \
+ $(am__EXEEXT_46)
@NATIVE_OR_CROSS_LINKER_TRUE@am__append_1 = object_unittest \
@NATIVE_OR_CROSS_LINKER_TRUE@ binary_unittest leb128_unittest \
@NATIVE_OR_CROSS_LINKER_TRUE@ overflow_unittest
@@ -889,11 +891,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3 \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4 \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = two_file_test_tmp_2.o \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_3.o \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4.base \
@@ -901,31 +899,35 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_5.a \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_6.a \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gnu_property_test
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = gnu_property_test.sh
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = gnu_property_test.stdout
-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = pr22266
-@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = aarch64_pr23870
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = incremental_copy_test
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = incremental_common_test_1
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = incremental_comdat_test_1
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = exception_x86_64_bnd_test
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_88 = gnu_property_test.sh
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_89 = gnu_property_test.stdout
+@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_90 = pr22266
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_91 = aarch64_pr23870
# These tests work with native and cross linkers.
# Test script section order.
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_88 = script_test_10.sh
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_89 = script_test_10.stdout
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = script_test_10
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = script_test_10.sh
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = script_test_10.stdout
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = script_test_10
# These tests work with cross linkers only.
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_91 = split_i386.sh
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = split_i386_1.stdout split_i386_2.stdout \
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_i386.sh
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_i386_1.stdout split_i386_2.stdout \
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_3.stdout split_i386_4.stdout split_i386_r.stdout
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = split_i386_1 split_i386_2 split_i386_3 \
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_i386_1 split_i386_2 split_i386_3 \
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_4 split_i386_r
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = split_x86_64.sh \
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x86_64.sh \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.sh \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.sh \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.sh
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_x86_64_1.stdout \
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x86_64_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_2.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_3.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4.stdout \
@@ -933,14 +935,14 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.stdout
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4 split_x86_64_r
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_x32.sh
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x32_1.stdout split_x32_2.stdout \
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = split_x32.sh
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = split_x32_1.stdout split_x32_2.stdout \
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_3.stdout split_x32_4.stdout split_x32_r.stdout
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x32_1 split_x32_2 split_x32_3 \
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = split_x32_1 split_x32_2 split_x32_3 \
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_4 split_x32_r
@@ -961,7 +963,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
# Check Thumb to ARM farcall veneers
# Check handling of --target1-abs, --target1-rel and --target2 options
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = arm_abs_global.sh \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = arm_abs_global.sh \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_in_range.sh \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_out_of_range.sh \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_v4bx.sh \
@@ -984,7 +986,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.sh
# The test demonstrates why the constructor of a target object should not access options.
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = arm_abs_global.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = arm_abs_global.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range.stdout \
@@ -1037,7 +1039,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = arm_abs_global \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = arm_abs_global \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range \
@@ -1088,20 +1090,20 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = aarch64_reloc_none.sh \
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = aarch64_reloc_none.sh \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.sh \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.sh \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.sh
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = aarch64_reloc_none.stdout \
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = aarch64_reloc_none.stdout \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.stdout \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.stdout \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.stdout
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = aarch64_reloc_none \
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_109 = aarch64_reloc_none \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430 \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = split_s390.sh
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_110 = split_s390.sh
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_111 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4.stdout split_s390_n1.stdout split_s390_n2.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a1.stdout split_s390_a2.stdout split_s390_z1_ns.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z2_ns.stdout split_s390_z3_ns.stdout split_s390_z4_ns.stdout \
@@ -1113,7 +1115,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns.stdout split_s390x_n1_ns.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_n2_ns.stdout split_s390x_r.stdout
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = split_s390_z1 split_s390_z2 split_s390_z3 \
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_112 = split_s390_z1 split_s390_z2 split_s390_z3 \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4 split_s390_n1 split_s390_n2 split_s390_a1 \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a2 split_s390_z1_ns split_s390_z2_ns split_s390_z3_ns \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4_ns split_s390_n1_ns split_s390_n2_ns split_s390_r \
@@ -1122,10 +1124,10 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z1_ns split_s390x_z2_ns split_s390x_z3_ns \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns split_s390x_n1_ns split_s390x_n2_ns split_s390x_r
-@DEFAULT_TARGET_X86_64_TRUE@am__append_109 = *.dwo *.dwp
-@DEFAULT_TARGET_X86_64_TRUE@am__append_110 = dwp_test_1.sh \
+@DEFAULT_TARGET_X86_64_TRUE@am__append_113 = *.dwo *.dwp
+@DEFAULT_TARGET_X86_64_TRUE@am__append_114 = dwp_test_1.sh \
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh
-@DEFAULT_TARGET_X86_64_TRUE@am__append_111 = dwp_test_1.stdout \
+@DEFAULT_TARGET_X86_64_TRUE@am__append_115 = dwp_test_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.stdout
subdir = testsuite
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -1351,13 +1353,13 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3$(EXEEXT) \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4$(EXEEXT) \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test$(EXEEXT)
-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = pr22266$(EXEEXT)
-@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_42 = aarch64_pr23870$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = incremental_copy_test$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_42 = incremental_common_test_1$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_43 = incremental_comdat_test_1$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_44 = exception_x86_64_bnd_test$(EXEEXT)
+@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_45 = pr22266$(EXEEXT)
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_46 = aarch64_pr23870$(EXEEXT)
@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am_aarch64_pr23870_OBJECTS = aarch64_pr23870_foo.$(OBJEXT)
aarch64_pr23870_OBJECTS = $(am_aarch64_pr23870_OBJECTS)
aarch64_pr23870_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -2812,9 +2814,9 @@ MOSTLYCLEANFILES = *.so *.syms *.stdout *.stderr $(am__append_4) \
$(am__append_34) $(am__append_37) $(am__append_41) \
$(am__append_47) $(am__append_51) $(am__append_52) \
$(am__append_58) $(am__append_78) $(am__append_81) \
- $(am__append_83) $(am__append_90) $(am__append_93) \
- $(am__append_96) $(am__append_99) $(am__append_102) \
- $(am__append_105) $(am__append_108) $(am__append_109)
+ $(am__append_83) $(am__append_94) $(am__append_97) \
+ $(am__append_100) $(am__append_103) $(am__append_106) \
+ $(am__append_109) $(am__append_112) $(am__append_113)
# We will add to these later, for each individual test. Note
# that we add each test under check_SCRIPTS or check_PROGRAMS;
@@ -2823,18 +2825,18 @@ check_SCRIPTS = $(am__append_2) $(am__append_19) $(am__append_23) \
$(am__append_29) $(am__append_35) $(am__append_42) \
$(am__append_45) $(am__append_49) $(am__append_53) \
$(am__append_56) $(am__append_62) $(am__append_73) \
- $(am__append_76) $(am__append_79) $(am__append_84) \
- $(am__append_88) $(am__append_91) $(am__append_94) \
- $(am__append_97) $(am__append_100) $(am__append_103) \
- $(am__append_106) $(am__append_110)
+ $(am__append_76) $(am__append_79) $(am__append_88) \
+ $(am__append_92) $(am__append_95) $(am__append_98) \
+ $(am__append_101) $(am__append_104) $(am__append_107) \
+ $(am__append_110) $(am__append_114)
check_DATA = $(am__append_3) $(am__append_20) $(am__append_24) \
$(am__append_30) $(am__append_36) $(am__append_43) \
$(am__append_46) $(am__append_50) $(am__append_54) \
$(am__append_57) $(am__append_63) $(am__append_74) \
- $(am__append_77) $(am__append_80) $(am__append_85) \
- $(am__append_89) $(am__append_92) $(am__append_95) \
- $(am__append_98) $(am__append_101) $(am__append_104) \
- $(am__append_107) $(am__append_111)
+ $(am__append_77) $(am__append_80) $(am__append_89) \
+ $(am__append_93) $(am__append_96) $(am__append_99) \
+ $(am__append_102) $(am__append_105) $(am__append_108) \
+ $(am__append_111) $(am__append_115)
BUILT_SOURCES = $(am__append_40)
TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 5/5] gold: Skip some incremental tests for -fcf-protection
2020-10-10 21:55 [PATCH 0/5] Fix gold on x86 H.J. Lu
` (3 preceding siblings ...)
2020-10-10 21:55 ` [PATCH 4/5] gold: Skip some incremental tests for GCC 9 or later H.J. Lu
@ 2020-10-10 21:55 ` H.J. Lu
4 siblings, 0 replies; 8+ messages in thread
From: H.J. Lu @ 2020-10-10 21:55 UTC (permalink / raw)
To: binutils
Skip incremental_test_2, incremental_test_3, incremental_test_4,
incremental_test_5 and incremental_common_test_1 when -fcf-protection
is used to compile gold since gold doesn't properly support
-fcf-protection on Intel CET enabled OS.
PR gold/23539
* configure.ac: Check for -fcf-protection
* configure: Regenerated.
* testsuite/Makefile.am (check_PROGRAMS): Skip incremental_test_2,
incremental_test_3, incremental_test_4, incremental_test_5,
and incremental_common_test_1 for -fcf-protection.
* testsuite/Makefile.in: Regenerated.
---
gold/configure | 37 +++++++++++
gold/configure.ac | 10 +++
gold/testsuite/Makefile.am | 10 +++
gold/testsuite/Makefile.in | 126 ++++++++++++++++++-------------------
4 files changed, 120 insertions(+), 63 deletions(-)
diff --git a/gold/configure b/gold/configure
index ca4680791e5..e264a65ac3c 100755
--- a/gold/configure
+++ b/gold/configure
@@ -665,6 +665,8 @@ STATIC_TLS_TRUE
TLS_FALSE
TLS_TRUE
MERGE_CONSTANTS_FLAG
+CFLAGS_CF_PROTECTION_FALSE
+CFLAGS_CF_PROTECTION_TRUE
GCC9_FALSE
GCC9_TRUE
MCMODEL_MEDIUM_FALSE
@@ -7524,6 +7526,37 @@ else
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fcf-protection" >&5
+$as_echo_n "checking for -fcf-protection... " >&6; }
+if ${gold_cv_cflags_cf_protection+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if !defined __x86_64__ || !defined __CET__
+error
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ gold_cv_cflags_cf_protection=yes
+else
+ gold_cv_cflags_cf_protection=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gold_cv_cflags_cf_protection" >&5
+$as_echo "$gold_cv_cflags_cf_protection" >&6; }
+ if test "$gold_cv_cflags_cf_protection" = "yes"; then
+ CFLAGS_CF_PROTECTION_TRUE=
+ CFLAGS_CF_PROTECTION_FALSE='#'
+else
+ CFLAGS_CF_PROTECTION_TRUE='#'
+ CFLAGS_CF_PROTECTION_FALSE=
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fmerge-constants" >&5
$as_echo_n "checking whether $CC supports -fmerge-constants... " >&6; }
if ${gold_cv_merge_constants+:} false; then :
@@ -10481,6 +10514,10 @@ if test -z "${GCC9_TRUE}" && test -z "${GCC9_FALSE}"; then
as_fn_error $? "conditional \"GCC9\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${CFLAGS_CF_PROTECTION_TRUE}" && test -z "${CFLAGS_CF_PROTECTION_FALSE}"; then
+ as_fn_error $? "conditional \"CFLAGS_CF_PROTECTION\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${TLS_TRUE}" && test -z "${TLS_FALSE}"; then
as_fn_error $? "conditional \"TLS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/gold/configure.ac b/gold/configure.ac
index 469d9838c5f..6e3978b4dfa 100644
--- a/gold/configure.ac
+++ b/gold/configure.ac
@@ -382,6 +382,16 @@ error
])], [gold_cv_prog_gcc9=yes], [gold_cv_prog_gcc9=no])])
AM_CONDITIONAL(GCC9, [test "$gold_cv_prog_gcc9" = "yes"])
+dnl Test for -fcf-protection on x86-64. Some incremental tests fail with
+dnl -fcf-protection.
+AC_CACHE_CHECK([for -fcf-protection], [gold_cv_cflags_cf_protection],
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+#if !defined __x86_64__ || !defined __CET__
+error
+#endif
+])], [gold_cv_cflags_cf_protection=yes], [gold_cv_cflags_cf_protection=no])])
+AM_CONDITIONAL(CFLAGS_CF_PROTECTION, [test "$gold_cv_cflags_cf_protection" = "yes"])
+
AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
[gold_cv_merge_constants], [
save_CFLAGS="$CFLAGS"
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 5d376b1938c..d3aace6f3cd 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -3199,7 +3199,9 @@ two_file_test_2_ndebug.o: two_file_test_2.cc
two_file_test_main_ndebug.o: two_file_test_main.cc
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
+if !CFLAGS_CF_PROTECTION
check_PROGRAMS += incremental_test_2
+endif
MOSTLYCLEANFILES += two_file_test_tmp_2.o
incremental_test_2: two_file_test_1_v1_ndebug.o two_file_test_1_ndebug.o two_file_test_1b_ndebug.o \
two_file_test_2_ndebug.o two_file_test_main_ndebug.o gcctestdir/ld
@@ -3209,7 +3211,9 @@ incremental_test_2: two_file_test_1_v1_ndebug.o two_file_test_1_ndebug.o two_fil
cp -f two_file_test_1_ndebug.o two_file_test_tmp_2.o
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie two_file_test_tmp_2.o two_file_test_1b_ndebug.o two_file_test_2_ndebug.o two_file_test_main_ndebug.o
+if !CFLAGS_CF_PROTECTION
check_PROGRAMS += incremental_test_3
+endif
MOSTLYCLEANFILES += two_file_test_tmp_3.o
incremental_test_3: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
two_file_test_2.o two_file_test_main.o gcctestdir/ld
@@ -3219,7 +3223,9 @@ incremental_test_3: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
cp -f two_file_test_1b.o two_file_test_tmp_3.o
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie two_file_test_1.o two_file_test_tmp_3.o two_file_test_2.o two_file_test_main.o
+if !CFLAGS_CF_PROTECTION
check_PROGRAMS += incremental_test_4
+endif
MOSTLYCLEANFILES += incremental_test_4.base two_file_test_tmp_4.o
incremental_test_4: two_file_test_1.o two_file_test_1b.o two_file_test_2_v1.o \
two_file_test_2.o two_file_test_main.o gcctestdir/ld
@@ -3230,7 +3236,9 @@ incremental_test_4: two_file_test_1.o two_file_test_1b.o two_file_test_2_v1.o \
cp -f two_file_test_2.o two_file_test_tmp_4.o
$(CXXLINK) -Wl,--incremental-update,--incremental-base=incremental_test_4.base -Wl,-z,norelro,-no-pie two_file_test_1.o two_file_test_1b.o two_file_test_tmp_4.o two_file_test_main.o
+if !CFLAGS_CF_PROTECTION
check_PROGRAMS += incremental_test_5
+endif
MOSTLYCLEANFILES += two_file_test_5.a
incremental_test_5: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
two_file_test_2.o two_file_test_main.o gcctestdir/ld
@@ -3266,7 +3274,9 @@ incremental_copy_test: copy_test_v1.o copy_test.o copy_test_1.so copy_test_2.so
cp -f copy_test.o copy_test_tmp.o
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
+if !CFLAGS_CF_PROTECTION
check_PROGRAMS += incremental_common_test_1
+endif
incremental_common_test_1: common_test_1_v1.o common_test_1_v2.o gcctestdir/ld
cp -f common_test_1_v1.o common_test_1_tmp.o
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie common_test_1_tmp.o
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index a76966698a8..a9a902890b9 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -109,7 +109,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
$(am__EXEEXT_37) $(am__EXEEXT_38) $(am__EXEEXT_39) \
$(am__EXEEXT_40) $(am__EXEEXT_41) $(am__EXEEXT_42) \
$(am__EXEEXT_43) $(am__EXEEXT_44) $(am__EXEEXT_45) \
- $(am__EXEEXT_46)
+ $(am__EXEEXT_46) $(am__EXEEXT_47)
@NATIVE_OR_CROSS_LINKER_TRUE@am__append_1 = object_unittest \
@NATIVE_OR_CROSS_LINKER_TRUE@ binary_unittest leb128_unittest \
@NATIVE_OR_CROSS_LINKER_TRUE@ overflow_unittest
@@ -884,14 +884,10 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ defsym_test defsym_test.syms
@GCC_FALSE@ehdr_start_test_5_DEPENDENCIES =
@NATIVE_LINKER_FALSE@ehdr_start_test_5_DEPENDENCIES =
-
-# Test the --incremental-unchanged flag with an archive library.
-# The second link should not update the library.
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = incremental_test_2 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5 \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = incremental_test_2 \
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3 \
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4 \
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = two_file_test_tmp_2.o \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_3.o \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4.base \
@@ -899,35 +895,39 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_5.a \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_6.a \
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gnu_property_test
-@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = incremental_copy_test
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = incremental_common_test_1
-@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = incremental_comdat_test_1
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = exception_x86_64_bnd_test
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_88 = gnu_property_test.sh
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_89 = gnu_property_test.stdout
-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_90 = pr22266
-@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_91 = aarch64_pr23870
+
+# Test the --incremental-unchanged flag with an archive library.
+# The second link should not update the library.
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = incremental_test_6
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = incremental_copy_test
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = incremental_common_test_1
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = incremental_comdat_test_1
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_88 = exception_x86_64_bnd_test
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_89 = gnu_property_test.sh
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_90 = gnu_property_test.stdout
+@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_91 = pr22266
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_92 = aarch64_pr23870
# These tests work with native and cross linkers.
# Test script section order.
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = script_test_10.sh
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = script_test_10.stdout
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = script_test_10
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = script_test_10.sh
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = script_test_10.stdout
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = script_test_10
# These tests work with cross linkers only.
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_i386.sh
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_i386_1.stdout split_i386_2.stdout \
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_i386.sh
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_i386_1.stdout split_i386_2.stdout \
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_3.stdout split_i386_4.stdout split_i386_r.stdout
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_i386_1 split_i386_2 split_i386_3 \
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_i386_1 split_i386_2 split_i386_3 \
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_4 split_i386_r
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x86_64.sh \
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x86_64.sh \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.sh \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.sh \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.sh
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x86_64_1.stdout \
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = split_x86_64_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_2.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_3.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4.stdout \
@@ -935,14 +935,14 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.stdout
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4 split_x86_64_r
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = split_x32.sh
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = split_x32_1.stdout split_x32_2.stdout \
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = split_x32.sh
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = split_x32_1.stdout split_x32_2.stdout \
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_3.stdout split_x32_4.stdout split_x32_r.stdout
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = split_x32_1 split_x32_2 split_x32_3 \
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = split_x32_1 split_x32_2 split_x32_3 \
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_4 split_x32_r
@@ -963,7 +963,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
# Check Thumb to ARM farcall veneers
# Check handling of --target1-abs, --target1-rel and --target2 options
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = arm_abs_global.sh \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = arm_abs_global.sh \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_in_range.sh \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_out_of_range.sh \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_v4bx.sh \
@@ -986,7 +986,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.sh
# The test demonstrates why the constructor of a target object should not access options.
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = arm_abs_global.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = arm_abs_global.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range.stdout \
@@ -1039,7 +1039,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.stdout \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = arm_abs_global \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = arm_abs_global \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range \
@@ -1090,20 +1090,20 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel \
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = aarch64_reloc_none.sh \
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = aarch64_reloc_none.sh \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.sh \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.sh \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.sh
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = aarch64_reloc_none.stdout \
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_109 = aarch64_reloc_none.stdout \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.stdout \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.stdout \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.stdout
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_109 = aarch64_reloc_none \
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_110 = aarch64_reloc_none \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430 \
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_110 = split_s390.sh
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_111 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_111 = split_s390.sh
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_112 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4.stdout split_s390_n1.stdout split_s390_n2.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a1.stdout split_s390_a2.stdout split_s390_z1_ns.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z2_ns.stdout split_s390_z3_ns.stdout split_s390_z4_ns.stdout \
@@ -1115,7 +1115,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns.stdout split_s390x_n1_ns.stdout \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_n2_ns.stdout split_s390x_r.stdout
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_112 = split_s390_z1 split_s390_z2 split_s390_z3 \
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_113 = split_s390_z1 split_s390_z2 split_s390_z3 \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4 split_s390_n1 split_s390_n2 split_s390_a1 \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a2 split_s390_z1_ns split_s390_z2_ns split_s390_z3_ns \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4_ns split_s390_n1_ns split_s390_n2_ns split_s390_r \
@@ -1124,10 +1124,10 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z1_ns split_s390x_z2_ns split_s390x_z3_ns \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns split_s390x_n1_ns split_s390x_n2_ns split_s390x_r
-@DEFAULT_TARGET_X86_64_TRUE@am__append_113 = *.dwo *.dwp
-@DEFAULT_TARGET_X86_64_TRUE@am__append_114 = dwp_test_1.sh \
+@DEFAULT_TARGET_X86_64_TRUE@am__append_114 = *.dwo *.dwp
+@DEFAULT_TARGET_X86_64_TRUE@am__append_115 = dwp_test_1.sh \
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh
-@DEFAULT_TARGET_X86_64_TRUE@am__append_115 = dwp_test_1.stdout \
+@DEFAULT_TARGET_X86_64_TRUE@am__append_116 = dwp_test_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.stdout
subdir = testsuite
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -1349,17 +1349,17 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_3$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_5$(EXEEXT) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20976$(EXEEXT)
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = incremental_test_2$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5$(EXEEXT) \
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6$(EXEEXT)
-@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = incremental_copy_test$(EXEEXT)
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_42 = incremental_common_test_1$(EXEEXT)
-@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_43 = incremental_comdat_test_1$(EXEEXT)
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_44 = exception_x86_64_bnd_test$(EXEEXT)
-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_45 = pr22266$(EXEEXT)
-@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_46 = aarch64_pr23870$(EXEEXT)
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = incremental_test_2$(EXEEXT) \
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3$(EXEEXT) \
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4$(EXEEXT) \
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = incremental_test_6$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_42 = incremental_copy_test$(EXEEXT)
+@CFLAGS_CF_PROTECTION_FALSE@@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_43 = incremental_common_test_1$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC9_FALSE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_44 = incremental_comdat_test_1$(EXEEXT)
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_45 = exception_x86_64_bnd_test$(EXEEXT)
+@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_46 = pr22266$(EXEEXT)
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_47 = aarch64_pr23870$(EXEEXT)
@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am_aarch64_pr23870_OBJECTS = aarch64_pr23870_foo.$(OBJEXT)
aarch64_pr23870_OBJECTS = $(am_aarch64_pr23870_OBJECTS)
aarch64_pr23870_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -2814,9 +2814,9 @@ MOSTLYCLEANFILES = *.so *.syms *.stdout *.stderr $(am__append_4) \
$(am__append_34) $(am__append_37) $(am__append_41) \
$(am__append_47) $(am__append_51) $(am__append_52) \
$(am__append_58) $(am__append_78) $(am__append_81) \
- $(am__append_83) $(am__append_94) $(am__append_97) \
- $(am__append_100) $(am__append_103) $(am__append_106) \
- $(am__append_109) $(am__append_112) $(am__append_113)
+ $(am__append_83) $(am__append_95) $(am__append_98) \
+ $(am__append_101) $(am__append_104) $(am__append_107) \
+ $(am__append_110) $(am__append_113) $(am__append_114)
# We will add to these later, for each individual test. Note
# that we add each test under check_SCRIPTS or check_PROGRAMS;
@@ -2825,18 +2825,18 @@ check_SCRIPTS = $(am__append_2) $(am__append_19) $(am__append_23) \
$(am__append_29) $(am__append_35) $(am__append_42) \
$(am__append_45) $(am__append_49) $(am__append_53) \
$(am__append_56) $(am__append_62) $(am__append_73) \
- $(am__append_76) $(am__append_79) $(am__append_88) \
- $(am__append_92) $(am__append_95) $(am__append_98) \
- $(am__append_101) $(am__append_104) $(am__append_107) \
- $(am__append_110) $(am__append_114)
+ $(am__append_76) $(am__append_79) $(am__append_89) \
+ $(am__append_93) $(am__append_96) $(am__append_99) \
+ $(am__append_102) $(am__append_105) $(am__append_108) \
+ $(am__append_111) $(am__append_115)
check_DATA = $(am__append_3) $(am__append_20) $(am__append_24) \
$(am__append_30) $(am__append_36) $(am__append_43) \
$(am__append_46) $(am__append_50) $(am__append_54) \
$(am__append_57) $(am__append_63) $(am__append_74) \
- $(am__append_77) $(am__append_80) $(am__append_89) \
- $(am__append_93) $(am__append_96) $(am__append_99) \
- $(am__append_102) $(am__append_105) $(am__append_108) \
- $(am__append_111) $(am__append_115)
+ $(am__append_77) $(am__append_80) $(am__append_90) \
+ $(am__append_94) $(am__append_97) $(am__append_100) \
+ $(am__append_103) $(am__append_106) $(am__append_109) \
+ $(am__append_112) $(am__append_116)
BUILT_SOURCES = $(am__append_40)
TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note
2020-10-10 21:55 ` [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note H.J. Lu
@ 2020-10-11 0:20 ` Fangrui Song
2020-10-11 0:36 ` H.J. Lu
0 siblings, 1 reply; 8+ messages in thread
From: Fangrui Song @ 2020-10-11 0:20 UTC (permalink / raw)
To: H.J. Lu; +Cc: binutils
On 2020-10-10, H.J. Lu via Binutils wrote:
>The NT_GNU_PROPERTY_TYPE_0 note should be aligned to 8 bytes for 64-bit
>ELF as specified by gABI. A note section can be only placed in a PT_NOTE
>segment with the same alignment.
>
> PR gold/22914
> PR gold/23535
> * layout.cc (Layout::attach_allocated_section_to_segment): Place
> a note section in a PT_NOTE segment with the same alignment. Set
> the alignment of the PT_NOTE segment from the alignment of the
> note section.
> (Layout::create_note): Align the NT_GNU_PROPERTY_TYPE_0 note to 8
> bytes for 64-bit ELF.
> (Layout::segment_precedes): Place segments with larger alignments
> first.
> * output.cc (Output_segment::Output_segment): Initialize align_.
> * output.h (Output_segment): Add align, set_align and align_.
> * testsuite/Makefile.am (gnu_property_test.stdout): Pass -lhSWn
> to $(TEST_READELF).
> (gnu_property_test): Pass --build-id to ld.
> * testsuite/Makefile.in: Regenerated.
> * testsuite/gnu_property_test.sh (check_alignment): New.
> Use check_alignment to check the NT_GNU_PROPERTY_TYPE_0 note
> alignment. Verify that there are 2 PT_NOTE segments.
>---
> gold/layout.cc | 15 ++++++++++++++-
> gold/output.cc | 1 +
> gold/output.h | 12 ++++++++++++
> gold/testsuite/Makefile.am | 4 ++--
> gold/testsuite/Makefile.in | 4 ++--
> gold/testsuite/gnu_property_test.sh | 20 ++++++++++++++++++++
> 6 files changed, 51 insertions(+), 5 deletions(-)
>
>diff --git a/gold/layout.cc b/gold/layout.cc
>index 13e533aaf21..6948ff7214c 100644
>--- a/gold/layout.cc
>+++ b/gold/layout.cc
>@@ -2062,12 +2062,15 @@ Layout::attach_allocated_section_to_segment(const Target* target,
> // segment.
> if (os->type() == elfcpp::SHT_NOTE)
> {
>+ uint64_t os_align = os->addralign();
>+
> // See if we already have an equivalent PT_NOTE segment.
> for (p = this->segment_list_.begin();
> p != segment_list_.end();
> ++p)
> {
> if ((*p)->type() == elfcpp::PT_NOTE
>+ && (*p)->align() == os_align
> && (((*p)->flags() & elfcpp::PF_W)
> == (seg_flags & elfcpp::PF_W)))
> {
>@@ -2081,6 +2084,7 @@ Layout::attach_allocated_section_to_segment(const Target* target,
> Output_segment* oseg = this->make_output_segment(elfcpp::PT_NOTE,
> seg_flags);
> oseg->add_output_section_to_nonload(os, seg_flags);
>+ oseg->set_align(os_align);
> }
> }
LG. I used the same approach for LLD: there will be two PT_NOTE if there are
SHT_NOTE of mixed alignments.
>@@ -3184,6 +3188,10 @@ Layout::create_note(const char* name, int note_type,
> #else
> const int size = 32;
> #endif
>+ // The NT_GNU_PROPERTY_TYPE_0 note conforms to gABI.
>+ const int addralign = ((note_type == elfcpp::NT_GNU_PROPERTY_TYPE_0
>+ ? parameters->target().get_size()
>+ : size) / 8);
This comment may be incorrect. gABI uses 64-bit integers on ELFCLASS64.
A NT_GNU_PROPERTY_TYPE_0 has an alignment of 8 but its elements still do
not conform to gABI. This can be Linux ABI or GNU ABI.
> // The contents of the .note section.
> size_t namesz = strlen(name) + 1;
>@@ -3247,7 +3255,7 @@ Layout::create_note(const char* name, int note_type,
> return NULL;
>
> Output_section_data* posd = new Output_data_const_buffer(buffer, notehdrsz,
>- size / 8,
>+ addralign,
> "** note header");
> os->add_output_section_data(posd);
>
>@@ -3705,6 +3713,11 @@ Layout::segment_precedes(const Output_segment* seg1,
> {
> if (type1 != type2)
> return type1 < type2;
>+ uint64_t align1 = seg1->align();
>+ uint64_t align2 = seg2->align();
>+ // Place segments with larger alignments first.
>+ if (align1 != align2)
>+ return align1 > align2;
> gold_assert(flags1 != flags2
> || this->script_options_->saw_phdrs_clause());
> return flags1 < flags2;
>diff --git a/gold/output.cc b/gold/output.cc
>index 75d2fc354a5..ed021c9178f 100644
>--- a/gold/output.cc
>+++ b/gold/output.cc
>@@ -4113,6 +4113,7 @@ Output_segment::Output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags)
> : vaddr_(0),
> paddr_(0),
> memsz_(0),
>+ align_(0),
> max_align_(0),
> min_p_align_(0),
> offset_(0),
>diff --git a/gold/output.h b/gold/output.h
>index 77b6697e067..35170c3a4f8 100644
>--- a/gold/output.h
>+++ b/gold/output.h
>@@ -4688,6 +4688,16 @@ class Output_segment
> offset() const
> { return this->offset_; }
>
>+ // Return the segment alignment.
>+ uint64_t
>+ align() const
>+ { return this->align_; }
>+
>+ // Set the segment alignment.
>+ void
>+ set_align(uint64_t align)
>+ { this->align_ = align; }
>+
> // Whether this is a segment created to hold large data sections.
> bool
> is_large_data_segment() const
>@@ -4910,6 +4920,8 @@ class Output_segment
> uint64_t paddr_;
> // The size of the segment in memory.
> uint64_t memsz_;
>+ // The segment alignment.
>+ uint64_t align_;
> // The maximum section alignment. The is_max_align_known_ field
> // indicates whether this has been finalized.
> uint64_t max_align_;
>diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
>index 0644e23a1bb..026d1010b0b 100644
>--- a/gold/testsuite/Makefile.am
>+++ b/gold/testsuite/Makefile.am
>@@ -3306,9 +3306,9 @@ check_SCRIPTS += gnu_property_test.sh
> check_DATA += gnu_property_test.stdout
> MOSTLYCLEANFILES += gnu_property_test
> gnu_property_test.stdout: gnu_property_test
>- $(TEST_READELF) -n $< >$@
>+ $(TEST_READELF) -lhSWn $< >$@
> gnu_property_test: gcctestdir/ld gnu_property_a.o gnu_property_b.o gnu_property_c.o
>- gcctestdir/ld -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
>+ gcctestdir/ld --build-id -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
> gnu_property_main.o: gnu_property_main.c
> $(COMPILE) -c -o $@ $<
> gnu_property_a.o: gnu_property_a.S
>diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
>index dfcafcdc570..35c442ee8b7 100644
>--- a/gold/testsuite/Makefile.in
>+++ b/gold/testsuite/Makefile.in
>@@ -9525,9 +9525,9 @@ uninstall-am:
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_2.o: exception_test_2.cc gcctestdir/as
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -Wa,-madd-bnd-prefix -o $@ $<
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_test.stdout: gnu_property_test
>-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -n $< >$@
>+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lhSWn $< >$@
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_test: gcctestdir/ld gnu_property_a.o gnu_property_b.o gnu_property_c.o
>-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
>+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld --build-id -o $@ gnu_property_a.o gnu_property_b.o gnu_property_c.o
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_main.o: gnu_property_main.c
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $<
> @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@gnu_property_a.o: gnu_property_a.S
>diff --git a/gold/testsuite/gnu_property_test.sh b/gold/testsuite/gnu_property_test.sh
>index 4a2d217cbe9..1806d3474cc 100755
>--- a/gold/testsuite/gnu_property_test.sh
>+++ b/gold/testsuite/gnu_property_test.sh
>@@ -53,8 +53,28 @@ check_count()
> fi
> }
>
>+check_alignment ()
>+{
>+ if egrep -q "Class:[ \t]+ELF64" "$1"
>+ then
>+ align=8
>+ else
>+ align=4
>+ fi
>+ if ! egrep -q ".note.gnu.property[ \t]+NOTE.*$align$" "$1"
>+ then
>+ echo "Wrong .note.gnu.property alignment in $1:"
>+ egrep ".note.gnu.property[ \t]+NOTE.*$align" "$1"
>+ exit 1
>+ fi
>+}
>+
>+check_alignment gnu_property_test.stdout
>+
> check_count gnu_property_test.stdout "GNU\s*0x[0-9a-f]*\s*NT_GNU_PROPERTY_TYPE_0" 1
>
>+check_count gnu_property_test.stdout "^ NOTE" 2
>+
> check gnu_property_test.stdout "stack size: 0x111100"
> check gnu_property_test.stdout "no copy on protected"
> check gnu_property_test.stdout "x86 ISA used: i486, SSE2, SSE4_2, AVX512CD"
>--
>2.26.2
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note
2020-10-11 0:20 ` Fangrui Song
@ 2020-10-11 0:36 ` H.J. Lu
0 siblings, 0 replies; 8+ messages in thread
From: H.J. Lu @ 2020-10-11 0:36 UTC (permalink / raw)
To: Fangrui Song; +Cc: Binutils
On Sat, Oct 10, 2020 at 5:20 PM Fangrui Song <i@maskray.me> wrote:
>
>
> On 2020-10-10, H.J. Lu via Binutils wrote:
> >The NT_GNU_PROPERTY_TYPE_0 note should be aligned to 8 bytes for 64-bit
> >ELF as specified by gABI. A note section can be only placed in a PT_NOTE
> >segment with the same alignment.
> >
> > PR gold/22914
> > PR gold/23535
> > * layout.cc (Layout::attach_allocated_section_to_segment): Place
> > a note section in a PT_NOTE segment with the same alignment. Set
> > the alignment of the PT_NOTE segment from the alignment of the
> > note section.
> > (Layout::create_note): Align the NT_GNU_PROPERTY_TYPE_0 note to 8
> > bytes for 64-bit ELF.
> > (Layout::segment_precedes): Place segments with larger alignments
> > first.
> > * output.cc (Output_segment::Output_segment): Initialize align_.
> > * output.h (Output_segment): Add align, set_align and align_.
> > * testsuite/Makefile.am (gnu_property_test.stdout): Pass -lhSWn
> > to $(TEST_READELF).
> > (gnu_property_test): Pass --build-id to ld.
> > * testsuite/Makefile.in: Regenerated.
> > * testsuite/gnu_property_test.sh (check_alignment): New.
> > Use check_alignment to check the NT_GNU_PROPERTY_TYPE_0 note
> > alignment. Verify that there are 2 PT_NOTE segments.
> >---
> > gold/layout.cc | 15 ++++++++++++++-
> > gold/output.cc | 1 +
> > gold/output.h | 12 ++++++++++++
> > gold/testsuite/Makefile.am | 4 ++--
> > gold/testsuite/Makefile.in | 4 ++--
> > gold/testsuite/gnu_property_test.sh | 20 ++++++++++++++++++++
> > 6 files changed, 51 insertions(+), 5 deletions(-)
> >
> >diff --git a/gold/layout.cc b/gold/layout.cc
> >index 13e533aaf21..6948ff7214c 100644
> >--- a/gold/layout.cc
> >+++ b/gold/layout.cc
> >@@ -2062,12 +2062,15 @@ Layout::attach_allocated_section_to_segment(const Target* target,
> > // segment.
> > if (os->type() == elfcpp::SHT_NOTE)
> > {
> >+ uint64_t os_align = os->addralign();
> >+
> > // See if we already have an equivalent PT_NOTE segment.
> > for (p = this->segment_list_.begin();
> > p != segment_list_.end();
> > ++p)
> > {
> > if ((*p)->type() == elfcpp::PT_NOTE
> >+ && (*p)->align() == os_align
> > && (((*p)->flags() & elfcpp::PF_W)
> > == (seg_flags & elfcpp::PF_W)))
> > {
> >@@ -2081,6 +2084,7 @@ Layout::attach_allocated_section_to_segment(const Target* target,
> > Output_segment* oseg = this->make_output_segment(elfcpp::PT_NOTE,
> > seg_flags);
> > oseg->add_output_section_to_nonload(os, seg_flags);
> >+ oseg->set_align(os_align);
> > }
> > }
>
> LG. I used the same approach for LLD: there will be two PT_NOTE if there are
> SHT_NOTE of mixed alignments.
>
> >@@ -3184,6 +3188,10 @@ Layout::create_note(const char* name, int note_type,
> > #else
> > const int size = 32;
> > #endif
> >+ // The NT_GNU_PROPERTY_TYPE_0 note conforms to gABI.
> >+ const int addralign = ((note_type == elfcpp::NT_GNU_PROPERTY_TYPE_0
> >+ ? parameters->target().get_size()
> >+ : size) / 8);
>
> This comment may be incorrect. gABI uses 64-bit integers on ELFCLASS64.
> A NT_GNU_PROPERTY_TYPE_0 has an alignment of 8 but its elements still do
> not conform to gABI. This can be Linux ABI or GNU ABI.
>
Changed to
// The NT_GNU_PROPERTY_TYPE_0 note is aligned to the pointer size.
--
H.J.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-10-11 0:36 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-10 21:55 [PATCH 0/5] Fix gold on x86 H.J. Lu
2020-10-10 21:55 ` [PATCH 1/5] gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note H.J. Lu
2020-10-11 0:20 ` Fangrui Song
2020-10-11 0:36 ` H.J. Lu
2020-10-10 21:55 ` [PATCH 2/5] gold: Update GNU_PROPERTY_X86_XXX macros H.J. Lu
2020-10-10 21:55 ` [PATCH 3/5] gold: Discard .note.gnu.property section H.J. Lu
2020-10-10 21:55 ` [PATCH 4/5] gold: Skip some incremental tests for GCC 9 or later H.J. Lu
2020-10-10 21:55 ` [PATCH 5/5] gold: Skip some incremental tests for -fcf-protection H.J. Lu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).