forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[llvm-readobj,ELF] Support --decompress/-z (llvm#82594)
When a section has the SHF_COMPRESSED flag, -p/-x dump the compressed content by default. In GNU readelf, if --decompress/-z is specified, -p/-x will dump the decompressed content. This patch implements the option. Close llvm#82507 (cherry picked from commit 26d71d9)
- Loading branch information
Showing
10 changed files
with
209 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
llvm/test/tools/llvm-readobj/ELF/decompress-zlib-unsupported.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# UNSUPPORTED: zlib | ||
# RUN: yaml2obj %s -o %t | ||
# RUN: llvm-readobj -z -p .a -x .b %t 2>&1 | FileCheck %s -DFILE=%t | ||
|
||
# CHECK: String dump of section '.a': | ||
# CHECK-NEXT: warning: '[[FILE]]': LLVM was not built with LLVM_ENABLE_ZLIB or did not find zlib at build time | ||
# CHECK-NEXT: [ 0] . | ||
# CHECK-NEXT: [ 8] . | ||
# CHECK-NEXT: [ 10] . | ||
# CHECK-NEXT: [ 18] x.c. | ||
# CHECK-NEXT: [ 1e] . | ||
# CHECK-NEXT: [ 20] . | ||
# CHECK-NEXT: Hex dump of section '.b': | ||
# CHECK-NEXT: warning: '[[FILE]]': LLVM was not built with LLVM_ENABLE_ZLIB or did not find zlib at build time | ||
# CHECK-NEXT: 0x00000000 01000000 00000000 01000000 00000000 ................ | ||
# CHECK-NEXT: 0x00000010 01000000 00000000 789c6304 00000200 ........x.c..... | ||
# CHECK-NEXT: 0x00000020 02 . | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Sections: | ||
- Name: .a | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 010000000000000001000000000000000100000000000000789c63040000020002 | ||
- Name: .b | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 010000000000000001000000000000000100000000000000789c63040000020002 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# REQUIRES: zlib | ||
## Test --decompress/-z. | ||
|
||
# RUN: yaml2obj %s -o %t | ||
|
||
# RUN: llvm-readelf -z -x .strings -x .not_null_terminated %t | FileCheck %s --check-prefix=HEX | ||
# RUN: llvm-readobj --decompress -p .strings -p .not_null_terminated %t | FileCheck %s --check-prefix=STR | ||
|
||
# HEX: Hex dump of section '.strings': | ||
# HEX-NEXT: 0x00000000 68657265 00617265 00736f6d 65007374 here.are.some.st | ||
# HEX-NEXT: 0x00000010 72696e67 7300 rings. | ||
# HEX: Hex dump of section '.not_null_terminated': | ||
# HEX-NEXT: 0x00000000 6e6f006e 756c6c no.null | ||
|
||
# STR: String dump of section '.strings': | ||
# STR-NEXT: [ 0] here | ||
# STR-NEXT: [ 5] are | ||
# STR-NEXT: [ 9] some | ||
# STR-NEXT: [ e] strings | ||
# STR-EMPTY: | ||
# STR-NEXT: String dump of section '.not_null_terminated': | ||
# STR-NEXT: [ 0] no | ||
# STR-NEXT: [ 3] null{{$}} | ||
# STR-NOT: {{.}} | ||
|
||
# RUN: llvm-readobj -x .strings -p .not_null_terminated %t | FileCheck %s --check-prefix=COMPRESSED | ||
|
||
# COMPRESSED: String dump of section '.not_null_terminated': | ||
# COMPRESSED-NEXT: [ 0] no | ||
# COMPRESSED-NEXT: [ 3] null | ||
# COMPRESSED-NEXT: Hex dump of section '.strings': | ||
# COMPRESSED-NEXT: 0x00000000 01000000 00000000 16000000 00000000 ................ | ||
# COMPRESSED-NEXT: 0x00000010 00000000 00000000 789ccb48 2d4a6548 ........x..H-JeH | ||
# COMPRESSED-NEXT: 0x00000020 04e2e2fc 5c205152 9499975e cc000058 ....\ QR...^...X | ||
# COMPRESSED-NEXT: 0x00000030 2e079b ... | ||
|
||
# RUN: llvm-readelf -z -p .invalid1 -x .invalid2 -x .invalid3 %t 2>&1 | FileCheck %s -DFILE=%t --check-prefix=INVALID | ||
|
||
# INVALID: String dump of section '.invalid1': | ||
# INVALID-NEXT: warning: '[[FILE]]': corrupted compressed section header | ||
# INVALID-NEXT: [ 0] . | ||
# INVALID-NEXT: Hex dump of section '.invalid2': | ||
# INVALID-NEXT: warning: '[[FILE]]': zlib error: Z_DATA_ERROR | ||
# INVALID-NEXT: 0x00000000 01000000 00000000 16000000 00000000 ................ | ||
# INVALID-NEXT: 0x00000010 00000000 00000000 78 ........x | ||
# INVALID-EMPTY: | ||
# INVALID-NEXT: Hex dump of section '.invalid3': | ||
# INVALID-NEXT: warning: '[[FILE]]': unsupported compression type (3) | ||
# INVALID-NEXT: 0x00000000 03000000 00000000 04000000 00000000 ................ | ||
# INVALID-NEXT: 0x00000010 00000000 00000000 789c6360 ........x.c` | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Sections: | ||
- Name: .strings | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 010000000000000016000000000000000000000000000000789ccb482d4a654804e2e2fc5c2051529499975ecc0000582e079b | ||
- Name: .not_null_terminated | ||
Type: SHT_PROGBITS | ||
Content: 6e6f006e756c6c | ||
- Name: .invalid1 | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 01 | ||
- Name: .invalid2 | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 01000000000000001600000000000000000000000000000078 | ||
- Name: .invalid3 | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 030000000000000004000000000000000000000000000000789c6360 |
31 changes: 31 additions & 0 deletions
31
llvm/test/tools/llvm-readobj/ELF/decompress-zstd-unsupported.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# UNSUPPORTED: zstd | ||
# RUN: yaml2obj %s -o %t | ||
# RUN: llvm-readobj -z -p .a -x .b %t 2>&1 | FileCheck %s -DFILE=%t | ||
|
||
# CHECK: String dump of section '.a': | ||
# CHECK-NEXT: warning: '[[FILE]]': LLVM was not built with LLVM_ENABLE_ZSTD or did not find zstd at build time | ||
# CHECK-NEXT: [ 0] . | ||
# CHECK-NEXT: [ 8] . | ||
# CHECK-NEXT: [ 10] . | ||
# CHECK-NEXT: [ 18] (./. .. | ||
# CHECK-NEXT: [ 21] . | ||
# CHECK-NEXT: Hex dump of section '.b': | ||
# CHECK-NEXT: warning: '[[FILE]]': LLVM was not built with LLVM_ENABLE_ZSTD or did not find zstd at build time | ||
# CHECK-NEXT: 0x00000000 02000000 00000000 01000000 00000000 ................ | ||
# CHECK-NEXT: 0x00000010 01000000 00000000 28b52ffd 20010900 ........(./. ... | ||
# CHECK-NEXT: 0x00000020 0001 .. | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Sections: | ||
- Name: .a | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 02000000000000000100000000000000010000000000000028b52ffd200109000001 | ||
- Name: .b | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 02000000000000000100000000000000010000000000000028b52ffd200109000001 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# REQUIRES: zstd | ||
## Test --decompress/-z for zstd. | ||
|
||
# RUN: yaml2obj %s -o %t | ||
|
||
# RUN: llvm-readelf -z -x .strings %t | FileCheck %s --check-prefix=HEX | ||
# RUN: llvm-readobj --decompress -p .strings %t | FileCheck %s --check-prefix=STR | ||
|
||
# HEX: Hex dump of section '.strings': | ||
# HEX-NEXT: 0x00000000 68657265 00617265 00736f6d 65007374 here.are.some.st | ||
# HEX-NEXT: 0x00000010 72696e67 7300 rings. | ||
|
||
# STR: String dump of section '.strings': | ||
# STR-NEXT: [ 0] here | ||
# STR-NEXT: [ 5] are | ||
# STR-NEXT: [ 9] some | ||
# STR-NEXT: [ e] strings | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Sections: | ||
- Name: .strings | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_COMPRESSED] | ||
Content: 02000000000000001600000000000000000000000000000028b52ffd2016b10000686572650061726500736f6d6500737472696e677300 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters