[llvm-readobj][test] - unwind.test: add comments, document the current behavior.

Here I've added comments, added testing for llvm-readelf and documented
the behavior that we already have.

It was discussed in the D80380 thread that we want to improve the
"p_memsz does not match p_filesz for GNU_EH_FRAME" message reported
(and probably convert error to a warning). This patch is a preparation
for that.

Differential revision: https://reviews.llvm.org/D80635
This commit is contained in:
Georgii Rymar 2020-05-27 17:56:25 +03:00
parent 7ff2de4f0c
commit 1bfc58e655
1 changed files with 45 additions and 7 deletions

View File

@ -1,5 +1,16 @@
# RUN: yaml2obj --docnum=1 %s -o %t1.exe
# RUN: llvm-readobj --unwind %t1.exe | FileCheck %s
## In this test we check how the unwind information is dumped with the use of --unwind.
## First, check that both llvm-readobj and llvm-readelf are able to dump a valid unwind information.
## Check that the output is the same for these tools.
## The memory size of the PT_GNU_EH_FRAME equals its file size and they both are equal to 0x3c.
## 0x3c is the size of the .eh_frame_hdr section.
# RUN: yaml2obj --docnum=1 %s -DMEMSIZE=0x3c -DFILESIZE=0x3c -o %t1.valid
# RUN: llvm-readobj --unwind %t1.valid | FileCheck %s
# RUN: llvm-readelf --sections --unwind %t1.valid | FileCheck %s --check-prefixes=SIZE,CHECK
## Validate the size of the .eh_frame_hdr section.
# SIZE: [Nr] Name Type Address Off Size
# SIZE: [ 2] .eh_frame_hdr PROGBITS 00000000004013c0 0000bc 00003c
# CHECK: EHFrameHeader {
# CHECK-NEXT: Address: 0x4013c0
@ -202,19 +213,46 @@ Symbols:
Value: 0x0000000000400000
Binding: STB_GLOBAL
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
VAddr: 0x00400000
PAddr: 0x00400000
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
VAddr: 0x00400000
PAddr: 0x00400000
Sections:
- Section: .text
- Type: PT_GNU_EH_FRAME
Flags: [ PF_X, PF_R ]
VAddr: 0x004013C0
PAddr: 0x004013C0
MemSize: [[MEMSIZE]]
FileSize: [[FILESIZE]]
Sections:
- Section: .eh_frame_hdr
...
## Document we report a error when the memory size of the PT_GNU_EH_FRAME does not match its file size.
## TODO: we want to report a warning and continue dumping instead.
# RUN: yaml2obj --docnum=1 %s -DMEMSIZE=0x3b -DFILESIZE=0x3c -o %t1.size.mismatch
# RUN: not llvm-readobj --unwind %t1.size.mismatch 2>&1 | \
# RUN: FileCheck -DFILE=%t1.size.mismatch %s --check-prefix=SIZE-MISMATCH
# RUN: not llvm-readelf --unwind %t1.size.mismatch 2>&1 | \
# RUN: FileCheck -DFILE=%t1.size.mismatch %s --check-prefix=SIZE-MISMATCH
# SIZE-MISMATCH: error: '[[FILE]]': p_memsz does not match p_filesz for GNU_EH_FRAME
## Check we partially dump the unwind information when the PT_GNU_EH_FRAME segment
## points to truncated data.
# RUN: yaml2obj --docnum=1 %s -DMEMSIZE=0x1 -DFILESIZE=0x1 -o %t1.truncated
# RUN: not llvm-readobj --unwind %t1.truncated 2>&1 | FileCheck -DFILE=%t1.truncated %s --check-prefix=TRUNCATED
# RUN: not llvm-readelf --unwind %t1.truncated 2>&1 | FileCheck -DFILE=%t1.truncated %s --check-prefix=TRUNCATED
# TRUNCATED: EHFrameHeader {
# TRUNCATED-NEXT: Address: 0x4013c0
# TRUNCATED-NEXT: Offset: 0xbc
# TRUNCATED-NEXT: Size: 0x1
# TRUNCATED-NEXT: Corresponding Section: .eh_frame_hdr
# TRUNCATED-NEXT: Header {
# TRUNCATED-NEXT: version: 1
# TRUNCATED-NEXT: eh_frame_ptr_enc: 0x0
# TRUNCATED-NEXT: error: '[[FILE]]': unexpected encoding eh_frame_ptr_enc
## Check we report an error when the tool is unable to parse .eh_frame section.
# RUN: yaml2obj --docnum=2 %s -o %t2.exe