summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2017-11-15 16:56:20 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2017-11-15 16:56:20 +0000
commita5d43d004accb38a2c4020d6357b9b9042131557 (patch)
tree8d6e4f81a0e60e4fb44dc1d5521cf3bc8629bad3
parent7b056b3048b4c53bbba0e0388570bc6d3aad29a8 (diff)
downloadbcm5719-llvm-a5d43d004accb38a2c4020d6357b9b9042131557.tar.gz
bcm5719-llvm-a5d43d004accb38a2c4020d6357b9b9042131557.zip
Propagate sh_entsize out.
No difference in practice other than having sh_entsize in the output. This should simplify the patch for handling SHF_MERGE in -r. Based on a patch by George Rimar. llvm-svn: 318306
-rw-r--r--lld/ELF/SyntheticSections.cpp11
-rw-r--r--lld/test/ELF/basic-aarch64.s2
-rw-r--r--lld/test/ELF/basic-mips.s2
-rw-r--r--lld/test/ELF/basic-ppc.s2
-rw-r--r--lld/test/ELF/basic-sparcv9.s2
-rw-r--r--lld/test/ELF/basic.s2
-rw-r--r--lld/test/ELF/basic32.s2
-rw-r--r--lld/test/ELF/basic64be.s2
-rw-r--r--lld/test/ELF/build-id.s6
-rw-r--r--lld/test/ELF/compressed-debug-input.s2
-rw-r--r--lld/test/ELF/gc-merge-local-sym.s2
-rw-r--r--lld/test/ELF/gc-sections-merge-addend.s2
-rw-r--r--lld/test/ELF/gc-sections-merge-implicit-addend.s2
-rw-r--r--lld/test/ELF/gc-sections-merge.s4
-rw-r--r--lld/test/ELF/linkerscript/merge-sections.s2
-rw-r--r--lld/test/ELF/merge-string.s6
-rw-r--r--lld/test/ELF/merge.s2
17 files changed, 31 insertions, 22 deletions
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp
index b0c4f65a038..e446667d110 100644
--- a/lld/ELF/SyntheticSections.cpp
+++ b/lld/ELF/SyntheticSections.cpp
@@ -2514,8 +2514,16 @@ void elf::mergeSections() {
uint32_t Alignment = std::max<uint32_t>(MS->Alignment, MS->Entsize);
auto I = llvm::find_if(MergeSections, [=](MergeSyntheticSection *Sec) {
+ // While we could create a single synthetic section for two different
+ // values of Entsize, it is better to take Entsize into consideration.
+ //
+ // With a single synthetic section no two pieces with different Entsize
+ // could be equal, so we may as well have two sections.
+ //
+ // Using Entsize in here also allows us to propagate it to the synthetic
+ // section.
return Sec->Name == OutsecName && Sec->Flags == MS->Flags &&
- Sec->Alignment == Alignment;
+ Sec->Entsize == MS->Entsize && Sec->Alignment == Alignment;
});
if (I == MergeSections.end()) {
MergeSyntheticSection *Syn =
@@ -2523,6 +2531,7 @@ void elf::mergeSections() {
MergeSections.push_back(Syn);
I = std::prev(MergeSections.end());
S = Syn;
+ Syn->Entsize = MS->Entsize;
} else {
S = nullptr;
}
diff --git a/lld/test/ELF/basic-aarch64.s b/lld/test/ELF/basic-aarch64.s
index 2b128689f88..6527d3dc0de 100644
--- a/lld/test/ELF/basic-aarch64.s
+++ b/lld/test/ELF/basic-aarch64.s
@@ -81,7 +81,7 @@ _start:
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 1
# CHECK-NEXT: }
# CHECK-NEXT: Section {
# CHECK-NEXT: Index: 3
diff --git a/lld/test/ELF/basic-mips.s b/lld/test/ELF/basic-mips.s
index c8e9cc2da09..a193529b348 100644
--- a/lld/test/ELF/basic-mips.s
+++ b/lld/test/ELF/basic-mips.s
@@ -164,7 +164,7 @@ __start:
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 1
# CHECK-NEXT: }
# CHECK-NEXT: Section {
# CHECK-NEXT: Index: 8
diff --git a/lld/test/ELF/basic-ppc.s b/lld/test/ELF/basic-ppc.s
index 75704325f6e..cda32245fd2 100644
--- a/lld/test/ELF/basic-ppc.s
+++ b/lld/test/ELF/basic-ppc.s
@@ -163,7 +163,7 @@
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 1
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.|
// CHECK-NEXT: )
diff --git a/lld/test/ELF/basic-sparcv9.s b/lld/test/ELF/basic-sparcv9.s
index d06fcd59d55..75c20476a43 100644
--- a/lld/test/ELF/basic-sparcv9.s
+++ b/lld/test/ELF/basic-sparcv9.s
@@ -81,7 +81,7 @@ _start:
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 1
# CHECK-NEXT: }
# CHECK-NEXT: Section {
# CHECK-NEXT: Index: 3
diff --git a/lld/test/ELF/basic.s b/lld/test/ELF/basic.s
index e9b14e7a0ca..a62f3dc0e85 100644
--- a/lld/test/ELF/basic.s
+++ b/lld/test/ELF/basic.s
@@ -83,7 +83,7 @@ _start:
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 1
# CHECK-NEXT: }
# CHECK-NEXT: Section {
# CHECK-NEXT: Index: 3
diff --git a/lld/test/ELF/basic32.s b/lld/test/ELF/basic32.s
index f4abf13a54a..071a06332f0 100644
--- a/lld/test/ELF/basic32.s
+++ b/lld/test/ELF/basic32.s
@@ -80,7 +80,7 @@ _start:
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 1
# CHECK-NEXT: }
# CHECK-NEXT: Section {
# CHECK-NEXT: Index: 3
diff --git a/lld/test/ELF/basic64be.s b/lld/test/ELF/basic64be.s
index c39669bfd54..d16f4a07417 100644
--- a/lld/test/ELF/basic64be.s
+++ b/lld/test/ELF/basic64be.s
@@ -175,7 +175,7 @@ _start:
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 1
# CHECK-NEXT: SectionData (
# CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.|
# CHECK-NEXT: )
diff --git a/lld/test/ELF/build-id.s b/lld/test/ELF/build-id.s
index 5c2d64abb84..9447a14d4e8 100644
--- a/lld/test/ELF/build-id.s
+++ b/lld/test/ELF/build-id.s
@@ -63,15 +63,15 @@ _start:
# DEFAULT: Contents of section .note.test:
# DEFAULT: Contents of section .note.gnu.build-id:
# DEFAULT-NEXT: 04000000 08000000 03000000 474e5500 ............GNU.
-# DEFAULT-NEXT: 1950bcad 6ffba153
+# DEFAULT-NEXT: 894c04e8 fbf5556b
# MD5: Contents of section .note.gnu.build-id:
# MD5-NEXT: 04000000 10000000 03000000 474e5500 ............GNU.
-# MD5-NEXT: 6560b957 58afb40a 70f61d5a 7d76104e
+# MD5-NEXT: 6a51bbd7 9e8ee3f9 2e02d213 711cfec9
# SHA1: Contents of section .note.gnu.build-id:
# SHA1-NEXT: 04000000 14000000 03000000 474e5500 ............GNU.
-# SHA1-NEXT: c41b2962 9fd0d863 0a35299a 746a626f
+# SHA1-NEXT: 9a8618b1 d6fd0e5c eda73dd8 76de5596
# UUID: Contents of section .note.gnu.build-id:
# UUID-NEXT: 04000000 10000000 03000000 474e5500 ............GNU.
diff --git a/lld/test/ELF/compressed-debug-input.s b/lld/test/ELF/compressed-debug-input.s
index e091ed9c2d6..aad8cd02b3b 100644
--- a/lld/test/ELF/compressed-debug-input.s
+++ b/lld/test/ELF/compressed-debug-input.s
@@ -59,7 +59,7 @@
# DATA-NEXT: Link: 0
# DATA-NEXT: Info: 0
# DATA-NEXT: AddressAlignment: 1
-# DATA-NEXT: EntrySize: 0
+# DATA-NEXT: EntrySize: 1
# DATA-NEXT: SectionData (
# DATA-NEXT: 0000: 6C6F6E67 20756E73 69676E65 6420696E |long unsigned in|
# DATA-NEXT: 0010: 7400756E 7369676E 65642063 68617200 |t.unsigned char.|
diff --git a/lld/test/ELF/gc-merge-local-sym.s b/lld/test/ELF/gc-merge-local-sym.s
index a4540af4d9c..b02a3a4e476 100644
--- a/lld/test/ELF/gc-merge-local-sym.s
+++ b/lld/test/ELF/gc-merge-local-sym.s
@@ -15,7 +15,7 @@
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 1
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 61626300 |abc.|
// CHECK-NEXT: )
diff --git a/lld/test/ELF/gc-sections-merge-addend.s b/lld/test/ELF/gc-sections-merge-addend.s
index 1c1f6ee2389..8595f5802be 100644
--- a/lld/test/ELF/gc-sections-merge-addend.s
+++ b/lld/test/ELF/gc-sections-merge-addend.s
@@ -16,7 +16,7 @@
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 1
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 62617200 |bar.|
// CHECK-NEXT: )
diff --git a/lld/test/ELF/gc-sections-merge-implicit-addend.s b/lld/test/ELF/gc-sections-merge-implicit-addend.s
index c725e294a18..8a7c804a830 100644
--- a/lld/test/ELF/gc-sections-merge-implicit-addend.s
+++ b/lld/test/ELF/gc-sections-merge-implicit-addend.s
@@ -16,7 +16,7 @@
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 1
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 62617200 |bar.|
// CHECK-NEXT: )
diff --git a/lld/test/ELF/gc-sections-merge.s b/lld/test/ELF/gc-sections-merge.s
index d7b3eaeca75..ef268865987 100644
--- a/lld/test/ELF/gc-sections-merge.s
+++ b/lld/test/ELF/gc-sections-merge.s
@@ -18,7 +18,7 @@
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 1
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 666F6F00 62617200 |foo.bar.|
// CHECK-NEXT: )
@@ -36,7 +36,7 @@
// GC-NEXT: Link: 0
// GC-NEXT: Info: 0
// GC-NEXT: AddressAlignment: 1
-// GC-NEXT: EntrySize: 0
+// GC-NEXT: EntrySize: 1
// GC-NEXT: SectionData (
// GC-NEXT: 0000: 666F6F00 |foo.|
// GC-NEXT: )
diff --git a/lld/test/ELF/linkerscript/merge-sections.s b/lld/test/ELF/linkerscript/merge-sections.s
index 950d822ec40..f93c15f855e 100644
--- a/lld/test/ELF/linkerscript/merge-sections.s
+++ b/lld/test/ELF/linkerscript/merge-sections.s
@@ -21,7 +21,7 @@
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 2
-# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: EntrySize: 2
# CHECK-NEXT: }
# CHECK: Name: begin
diff --git a/lld/test/ELF/merge-string.s b/lld/test/ELF/merge-string.s
index 5baa6334ef0..d284d0ab523 100644
--- a/lld/test/ELF/merge-string.s
+++ b/lld/test/ELF/merge-string.s
@@ -34,7 +34,7 @@ zed:
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 1
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 61626300 |abc.|
// CHECK-NEXT: )
@@ -52,7 +52,7 @@ zed:
// NOTAIL-NEXT: Link: 0
// NOTAIL-NEXT: Info: 0
// NOTAIL-NEXT: AddressAlignment: 1
-// NOTAIL-NEXT: EntrySize: 0
+// NOTAIL-NEXT: EntrySize: 1
// NOTAIL-NEXT: SectionData (
// NOTAIL-NEXT: 0000: 62630061 626300 |bc.abc.|
// NOTAIL-NEXT: )
@@ -88,7 +88,7 @@ zed:
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 2
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 2
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 14000000 |....|
// CHECK-NEXT: )
diff --git a/lld/test/ELF/merge.s b/lld/test/ELF/merge.s
index fba41346c53..b84d33a3411 100644
--- a/lld/test/ELF/merge.s
+++ b/lld/test/ELF/merge.s
@@ -29,7 +29,7 @@ zed:
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 4
-// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: EntrySize: 4
// CHECK-NEXT: SectionData (
// CHECK-NEXT: 0000: 10000000 42000000
// CHECK-NEXT: )
OpenPOWER on IntegriCloud