[PATCH] D40365: [ELF] Rename .bss.rel.ro to .data.rel.ro.bss for some Linker Scripts.

Peter Smith via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 24 00:48:50 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL318940: [ELF] Rename .bss.rel.ro to .data.rel.ro.bss for some Linker Scripts. (authored by psmith).

Changed prior to commit:
  https://reviews.llvm.org/D40365?vs=123972&id=124130#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D40365

Files:
  lld/trunk/ELF/Writer.cpp
  lld/trunk/test/ELF/relro-script.s


Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -289,7 +289,14 @@
 
   InX::Bss = make<BssSection>(".bss", 0, 1);
   Add(InX::Bss);
-  InX::BssRelRo = make<BssSection>(".bss.rel.ro", 0, 1);
+
+  // If there is a SECTIONS command and a .data.rel.ro section name use name
+  // .data.rel.ro.bss so that we match in the .data.rel.ro output section.
+  // This makes sure our relro is contiguous.
+  bool HasDataRelRo =
+      Script->HasSectionsCommand && findSection(".data.rel.ro");
+  InX::BssRelRo = make<BssSection>(
+      HasDataRelRo ? ".data.rel.ro.bss" : ".bss.rel.ro", 0, 1);
   Add(InX::BssRelRo);
 
   // Add MIPS-specific sections.
Index: lld/trunk/test/ELF/relro-script.s
===================================================================
--- lld/trunk/test/ELF/relro-script.s
+++ lld/trunk/test/ELF/relro-script.s
@@ -0,0 +1,29 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/copy-in-shared.s -o %t2.o
+// RUN: ld.lld -shared %t.o %t2.o -o %t.so
+
+// ld.bfd and gold use .data.rel.ro rather than .bss.rel.ro. When a linker
+// script, such as ld.bfd's internal linker script has a .data.rel.ro
+// OutputSection we rename .bss.rel.ro to .data.rel.ro.bss in order to match in
+// .data.rel.ro. This keeps the relro sections contiguous.
+
+// Use the same sections and ordering as the ld.bfd internal linker script.
+// RUN: echo "SECTIONS { \
+// RUN: .data.rel.ro : { *(.data.rel.ro .data.rel.ro.*) } \
+// RUN: .dynamic : { *(.dynamic) } \
+// RUN: .got : { *(.got) } \
+// RUN: .got.plt : { *(.got.plt) } \
+// RUN: } " > %t.script
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t3.o
+// RUN: ld.lld %t3.o %t.so -o %t --script=%t.script --print-map | FileCheck %s
+
+// CHECK: .data.rel.ro
+// CHECK-NEXT: <internal>:(.bss.rel.ro)
+        .section .text, "ax", @progbits
+        .global _start
+        .global bar
+        .global foo
+_start:
+        .quad bar
+        .quad foo


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D40365.124130.patch
Type: text/x-patch
Size: 2165 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171124/f1eed989/attachment.bin>


More information about the llvm-commits mailing list