[PATCH] D43858: Do not create multiple NOTE segments.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 28 18:33:44 PST 2018
This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rLLD326410: Do not create multiple NOTE segments. (authored by ruiu, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D43858?vs=136431&id=136455#toc
Repository:
rLLD LLVM Linker
https://reviews.llvm.org/D43858
Files:
ELF/Writer.cpp
test/ELF/note-contiguous.s
Index: test/ELF/note-contiguous.s
===================================================================
--- test/ELF/note-contiguous.s
+++ test/ELF/note-contiguous.s
@@ -8,12 +8,13 @@
// CHECK-NEXT: Offset:
// CHECK-NEXT: VirtualAddress:
// CHECK-NEXT: PhysicalAddress:
-// CHECK-NEXT: FileSize: 8
-// CHECK-NEXT: MemSize: 8
+// CHECK-NEXT: FileSize: 16
+// CHECK-NEXT: MemSize: 16
// CHECK-NEXT: Flags [
// CHECK-NEXT: PF_R
// CHECK-NEXT: ]
// CHECK-NEXT: Alignment: 1
+// CHECK-NOT: Type: PT_NOTE
// RUN: echo "SECTIONS { .note : { *(.note.a) *(.note.b) } }" > %t.script
// RUN: ld.lld %t.o --script %t.script -o %t2
@@ -29,6 +30,7 @@
// SCRIPT-NEXT: PF_R
// SCRIPT-NEXT: ]
// SCRIPT-NEXT: Alignment: 1
+// SCRIPT-NOT: Type: PT_NOTE
.section .note.a, "a", @note
.quad 0
Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -668,16 +668,17 @@
// * It is easy to check if a give branch was taken.
// * It is easy two see how similar two ranks are (see getRankProximity).
enum RankFlags {
- RF_NOT_ADDR_SET = 1 << 16,
- RF_NOT_INTERP = 1 << 15,
- RF_NOT_ALLOC = 1 << 14,
- RF_WRITE = 1 << 13,
- RF_EXEC_WRITE = 1 << 12,
- RF_EXEC = 1 << 11,
- RF_NON_TLS_BSS = 1 << 10,
- RF_NON_TLS_BSS_RO = 1 << 9,
- RF_NOT_TLS = 1 << 8,
- RF_BSS = 1 << 7,
+ RF_NOT_ADDR_SET = 1 << 18,
+ RF_NOT_INTERP = 1 << 17,
+ RF_NOT_ALLOC = 1 << 16,
+ RF_WRITE = 1 << 15,
+ RF_EXEC_WRITE = 1 << 13,
+ RF_EXEC = 1 << 12,
+ RF_NON_TLS_BSS = 1 << 11,
+ RF_NON_TLS_BSS_RO = 1 << 10,
+ RF_NOT_TLS = 1 << 9,
+ RF_BSS = 1 << 8,
+ RF_NOTE = 1 << 7,
RF_PPC_NOT_TOCBSS = 1 << 6,
RF_PPC_OPD = 1 << 5,
RF_PPC_TOCL = 1 << 4,
@@ -765,6 +766,12 @@
if (IsNoBits)
Rank |= RF_BSS;
+ // We create a NOTE segment for contiguous .note sections, so make
+ // them contigous if there are more than one .note section with the
+ // same attributes.
+ if (Sec->Type == SHT_NOTE)
+ Rank |= RF_NOTE;
+
// Some architectures have additional ordering restrictions for sections
// within the same PT_LOAD.
if (Config->EMachine == EM_PPC64) {
@@ -790,6 +797,7 @@
if (Name == ".branch_lt")
Rank |= RF_PPC_BRANCH_LT;
}
+
if (Config->EMachine == EM_MIPS) {
// All sections with SHF_MIPS_GPREL flag should be grouped together
// because data in these sections is addressable with a gp relative address.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43858.136455.patch
Type: text/x-patch
Size: 2426 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180301/4e320eb8/attachment.bin>
More information about the llvm-commits
mailing list