gold: Place .note.gnu.property section before other note sections
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 25 Oct 2021 15:42:24 +0000 (08:42 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 26 Oct 2021 23:24:24 +0000 (16:24 -0700)
Place the .note.gnu.property section before all other note sections to
avoid being placed between other note sections with different alignments.

PR gold/28494
* layout.cc (Layout::create_note): Set order to ORDER_PROPERTY_NOTE
for the .note.gnu.property section.
* layout.h (Output_section_order): Add ORDER_PROPERTY_NOTE.

gold/layout.cc
gold/layout.h

index a27cb071c75d8537800b096287d23eda6cd8a2e0..38e9bceec7e25d93f1fbf54433cf9e5c0b24fa69 100644 (file)
@@ -3245,7 +3245,8 @@ Layout::create_note(const char* name, int note_type,
   if (allocate)
     {
       flags = elfcpp::SHF_ALLOC;
-      order = ORDER_RO_NOTE;
+      order = (note_type == elfcpp::NT_GNU_PROPERTY_TYPE_0
+              ?  ORDER_PROPERTY_NOTE : ORDER_RO_NOTE);
     }
   Output_section* os = this->choose_output_section(NULL, section_name,
                                                   elfcpp::SHT_NOTE,
index 0b378003679a2ea841a00ecd72da3b2224a2da41..05c31714e47da187e8bb8a03f891ef569e09d212 100644 (file)
@@ -399,8 +399,13 @@ enum Output_section_order
   // linker can pick it up quickly.
   ORDER_INTERP,
 
-  // Loadable read-only note sections come next so that the PT_NOTE
-  // segment is on the first page of the executable.
+  // The .note.gnu.property section comes next so that the PT_NOTE
+  // segment is on the first page of the executable and it won't be
+  // placed between other note sections with different alignments.
+  ORDER_PROPERTY_NOTE,
+
+  // Loadable read-only note sections come after the .note.gnu.property
+  // section.
   ORDER_RO_NOTE,
 
   // Put read-only sections used by the dynamic linker early in the