mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
Recommit r356738 "[llvm-objcopy] - Implement replaceSectionReferences for GroupSection class."
Fix: r356853 + set AddressAlign to 4 in Inputs/compress-debug-sections.yaml for the new group section introduced. Original commit message: Currently, llvm-objcopy incorrectly handles compression and decompression of the sections from COMDAT groups, because we do not implement the replaceSectionReferences for this type of the sections. The patch does that. Differential revision: https://reviews.llvm.org/D59638 llvm-svn: 356856
This commit is contained in:
parent
8009b955b7
commit
298a3ae983
@ -25,6 +25,24 @@ Sections:
|
||||
- Name: .debug_bar
|
||||
Type: SHT_PROGBITS
|
||||
Content: 0000000000000000
|
||||
- Name: .group
|
||||
Type: SHT_GROUP
|
||||
Link: .symtab
|
||||
AddressAlign: 4
|
||||
EntSize: 0x0000000000000004
|
||||
Info: groupname
|
||||
Members:
|
||||
- SectionOrType: GRP_COMDAT
|
||||
- SectionOrType: .text.in.group
|
||||
- SectionOrType: .debug_in_group
|
||||
- Name: .text.in.group
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
|
||||
Content: '00'
|
||||
- Name: .debug_in_group
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [ SHF_GROUP ]
|
||||
Content: '00'
|
||||
Symbols:
|
||||
Global:
|
||||
- Name: .debug_foo
|
||||
@ -35,4 +53,6 @@ Symbols:
|
||||
Section: .notdebug_foo
|
||||
- Name: .Linfo_string0
|
||||
Section: .debug_bar
|
||||
- Name: groupname
|
||||
Section: .group
|
||||
...
|
||||
|
@ -0,0 +1,53 @@
|
||||
# REQUIRES: zlib
|
||||
|
||||
## In this test, we check how llvm-objcopy handles compression/decompression
|
||||
## of debug sections included in a COMDAT group.
|
||||
|
||||
# RUN: yaml2obj %p/Inputs/compress-debug-sections.yaml -o %t.o
|
||||
|
||||
## Check compression of debug sections.
|
||||
# RUN: llvm-objcopy --compress-debug-sections %t.o %t-compressed.o
|
||||
# RUN: llvm-readobj -s -elf-section-groups %t-compressed.o | \
|
||||
# RUN: FileCheck %s --check-prefixes=CHECK,COMPRESS
|
||||
|
||||
## Check zlib-gnu compression of debug sections.
|
||||
# RUN: llvm-objcopy --compress-debug-sections=zlib-gnu %t.o %t-compressed-gnu.o
|
||||
# RUN: llvm-readobj -s -elf-section-groups %t-compressed-gnu.o | \
|
||||
# RUN: FileCheck %s --check-prefixes=CHECK,COMPRESSZLIB
|
||||
|
||||
## Check decompression of debug sections.
|
||||
# RUN: llvm-objcopy --decompress-debug-sections %t-compressed.o %t-decompressed.o
|
||||
# RUN: llvm-readobj -elf-section-groups %t-decompressed.o | \
|
||||
# RUN: FileCheck %s --check-prefixes=CHECK,DECOMPRESS
|
||||
|
||||
## Check decompression of zlib-gnu debug sections.
|
||||
# RUN: llvm-objcopy --decompress-debug-sections %t-compressed-gnu.o %t-decompressed-gnu.o
|
||||
# RUN: llvm-readobj -elf-section-groups %t-decompressed-gnu.o | \
|
||||
# RUN: FileCheck %s --check-prefixes=CHECK,DECOMPRESS
|
||||
|
||||
# COMPRESSZLIB: Name: .zdebug_in_group
|
||||
# COMPRESSZLIB-NEXT: Type: SHT_PROGBITS
|
||||
# COMPRESSZLIB-NEXT: Flags [
|
||||
# COMPRESSZLIB-NEXT: SHF_GROUP
|
||||
# COMPRESSZLIB-NEXT: ]
|
||||
|
||||
# COMPRESS: Name: .debug_in_group
|
||||
# COMPRESS-NEXT: Type: SHT_PROGBITS
|
||||
# COMPRESS-NEXT: Flags [
|
||||
# COMPRESS-NEXT: SHF_COMPRESSED
|
||||
# COMPRESS-NEXT: SHF_GROUP
|
||||
# COMPRESS-NEXT: ]
|
||||
|
||||
# CHECK: Group {
|
||||
# CHECK-NEXT: Name: .group
|
||||
# CHECK-NEXT: Index:
|
||||
# CHECK-NEXT: Link:
|
||||
# CHECK-NEXT: Info:
|
||||
# CHECK-NEXT: Type: COMDAT
|
||||
# CHECK-NEXT: Signature: groupname
|
||||
# CHECK-NEXT: Section(s) in group [
|
||||
# CHECK-NEXT: .text.in.group
|
||||
# COMPRESSZLIB-NEXT: .zdebug_in_group
|
||||
# COMPRESS-NEXT: .debug_in_group
|
||||
# DECOMPRESS-NEXT: .debug_in_group
|
||||
# CHECK-NEXT: ]
|
@ -689,6 +689,13 @@ void GroupSection::markSymbols() {
|
||||
Sym->Referenced = true;
|
||||
}
|
||||
|
||||
void GroupSection::replaceSectionReferences(
|
||||
const DenseMap<SectionBase *, SectionBase *> &FromTo) {
|
||||
for (SectionBase *&Sec : GroupMembers)
|
||||
if (SectionBase *To = FromTo.lookup(Sec))
|
||||
Sec = To;
|
||||
}
|
||||
|
||||
void Section::initialize(SectionTableRef SecTable) {
|
||||
if (Link != ELF::SHN_UNDEF) {
|
||||
LinkSection =
|
||||
|
@ -633,6 +633,8 @@ public:
|
||||
void finalize() override;
|
||||
Error removeSymbols(function_ref<bool(const Symbol &)> ToRemove) override;
|
||||
void markSymbols() override;
|
||||
void replaceSectionReferences(
|
||||
const DenseMap<SectionBase *, SectionBase *> &FromTo) override;
|
||||
|
||||
static bool classof(const SectionBase *S) {
|
||||
return S->Type == ELF::SHT_GROUP;
|
||||
|
Loading…
Reference in New Issue
Block a user