diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-11-15 16:56:20 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-11-15 16:56:20 +0000 |
| commit | a5d43d004accb38a2c4020d6357b9b9042131557 (patch) | |
| tree | 8d6e4f81a0e60e4fb44dc1d5521cf3bc8629bad3 | |
| parent | 7b056b3048b4c53bbba0e0388570bc6d3aad29a8 (diff) | |
| download | bcm5719-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.cpp | 11 | ||||
| -rw-r--r-- | lld/test/ELF/basic-aarch64.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/basic-mips.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/basic-ppc.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/basic-sparcv9.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/basic.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/basic32.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/basic64be.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/build-id.s | 6 | ||||
| -rw-r--r-- | lld/test/ELF/compressed-debug-input.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/gc-merge-local-sym.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/gc-sections-merge-addend.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/gc-sections-merge-implicit-addend.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/gc-sections-merge.s | 4 | ||||
| -rw-r--r-- | lld/test/ELF/linkerscript/merge-sections.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/merge-string.s | 6 | ||||
| -rw-r--r-- | lld/test/ELF/merge.s | 2 |
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: ) |

