1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00
llvm-mirror/test/tools/llvm-readobj/string-dump.test
Fangrui Song dbbc693bbe [llvm-readobj] Allow --hex-dump/--string-dump to dump multiple sections
1) `-x foo` currently dumps one `foo`. This change makes it dump all `foo`.
2) `-x foo -x foo` currently dumps `foo` twice. This change makes it dump `foo` once.
   In addition, if foo has section index 9, `-x foo -x 9` dumps `foo` once.
3) Give a warning instead of an error if `foo` does not exist.

The new behaviors match GNU readelf.

Also, print a new line as a separator between two section dumps.
GNU readelf uses two lines, but one seems good enough.

Reviewed By: grimar, jhenderson

Differential Revision: https://reviews.llvm.org/D63475

llvm-svn: 363683
2019-06-18 14:01:03 +00:00

76 lines
2.9 KiB
Plaintext

# Check the dumping of a section as strings.
# RUN: yaml2obj %s > %t
# RUN: llvm-readobj --string-dump=.strings \
# RUN: --string-dump=.not_null_terminated %t > %t.readobj.out
# RUN: FileCheck %s --input-file=%t.readobj.out
# Also test the different ways --string-dump can be specified, i.e. as a short
# flag (-p), with different prefix modes (-p .foo, -p=.foo, -p.foo), and with
# the value being a index section number instead of a section name.
# RUN: llvm-readobj -p=.strings -p=.not_null_terminated %t > %t.readobj.1
# RUN: llvm-readobj -p.strings -p.strings -p.not_null_terminated %t > %t.readobj.2
# RUN: llvm-readobj --string-dump=1 --string-dump=2 %t > %t.readobj.3
# RUN: llvm-readobj -p1 -p1 -p2 %t > %t.readobj.4
# RUN: llvm-readobj -p=1 -p=2 %t > %t.readobj.5
# RUN: cmp %t.readobj.out %t.readobj.1
# RUN: cmp %t.readobj.out %t.readobj.2
# RUN: cmp %t.readobj.out %t.readobj.3
# RUN: cmp %t.readobj.out %t.readobj.4
# RUN: cmp %t.readobj.out %t.readobj.5
# Run readelf flag tests with an additional flag, --file-header, so we can test
# -p grouped with something.
# RUN: llvm-readelf --file-header --string-dump=.strings \
# RUN: --string-dump=.not_null_terminated %t > %t.readelf.out
# RUN: FileCheck %s --input-file=%t.readelf.out
# RUN: llvm-readelf -h -p=.strings -p=.not_null_terminated %t > %t.readelf.1
# RUN: llvm-readelf -p.strings -hp.not_null_terminated %t > %t.readelf.2
# RUN: llvm-readelf -h --string-dump=1 --string-dump=2 %t > %t.readelf.3
# RUN: llvm-readelf -hp1 -p2 %t > %t.readelf.4
# RUN: llvm-readelf -hp 1 -p.not_null_terminated %t > %t.readelf.5
# RUN: llvm-readelf -p=1 -hp=2 %t > %t.readelf.6
# RUN: cmp %t.readelf.out %t.readelf.1
# RUN: cmp %t.readelf.out %t.readelf.2
# RUN: cmp %t.readelf.out %t.readelf.3
# RUN: cmp %t.readelf.out %t.readelf.4
# RUN: cmp %t.readelf.out %t.readelf.5
# RUN: cmp %t.readelf.out %t.readelf.6
# CHECK: String dump of section '.strings':
# CHECK-NEXT: [ 0] here
# CHECK-NEXT: [ 5] are
# CHECK-NEXT: [ 9] some
# CHECK-NEXT: [ e] strings
# CHECK-EMPTY:
# CHECK-NEXT: String dump of section '.not_null_terminated':
# CHECK-NEXT: [ 0] no
# CHECK-NEXT: [ 3] null{{$}}
# CHECK-NOT: {{.}}
# RUN: llvm-readobj --string-dump=does_not_exist %t 2>&1 | FileCheck %s --check-prefix=WARN1
# RUN: llvm-readobj --string-dump=42 %t 2>&1 | FileCheck %s --check-prefix=WARN2
# RUN: llvm-readelf --string-dump=does_not_exist %t 2>&1 | FileCheck %s --check-prefix=WARN1
# RUN: llvm-readelf --string-dump=42 %t 2>&1 | FileCheck %s --check-prefix=WARN2
# WARN1: warning: could not find section 'does_not_exist'
# WARN2: warning: could not find section 42
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .strings
Type: SHT_PROGBITS
Content: 686572650061726500736f6d6500737472696e677300
- Name: .not_null_terminated
Type: SHT_PROGBITS
Content: 6e6f006e756c6c