xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/stackmap.test (revision a6436b0b3a7fd9f13d7a059a6a78544a7e0b702f)
1*f97019adSGeorgii Rymar## Here we test how the --stackmap option can be used to dump .llvm_stackmaps sections.
2*f97019adSGeorgii Rymar
3*f97019adSGeorgii Rymar## Check we are able to dump an empty .llvm_stackmaps section. Document that
4*f97019adSGeorgii Rymar## we are only trying to dump the first stack map section and ignore others if any.
5*f97019adSGeorgii Rymar
6*f97019adSGeorgii Rymar# RUN: yaml2obj %s -o %t
7*f97019adSGeorgii Rymar# RUN: llvm-readobj %t --stackmap 2>&1 | \
8*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=EMPTY --implicit-check-not=warning:
9*f97019adSGeorgii Rymar# RUN: llvm-readelf %t --stackmap 2>&1 | \
10*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=EMPTY --implicit-check-not=warning:
11*f97019adSGeorgii Rymar
12*f97019adSGeorgii Rymar# EMPTY:      LLVM StackMap Version: 3
13*f97019adSGeorgii Rymar# EMPTY-NEXT: Num Functions: 0
14*f97019adSGeorgii Rymar# EMPTY-NEXT: Num Constants: 0
15*f97019adSGeorgii Rymar# EMPTY-NEXT: Num Records: 0
16*f97019adSGeorgii Rymar# EMPTY-NOT:  {{.}}
17*f97019adSGeorgii Rymar
18*f97019adSGeorgii Rymar--- !ELF
19*f97019adSGeorgii RymarFileHeader:
20*f97019adSGeorgii Rymar  Class: ELFCLASS64
21*f97019adSGeorgii Rymar  Data:  ELFDATA2LSB
22*f97019adSGeorgii Rymar  Type:  ET_REL
23*f97019adSGeorgii RymarSections:
24*f97019adSGeorgii Rymar  - Name:         [[NAME=.llvm_stackmaps]]
25*f97019adSGeorgii Rymar    Type:         SHT_PROGBITS
26*f97019adSGeorgii Rymar    ContentArray: [ [[VERSION=0x3]] ]
27*f97019adSGeorgii Rymar    Size:         [[SIZE=16]]
28*f97019adSGeorgii Rymar    ShSize:       [[SHSIZE=<none>]]
29*f97019adSGeorgii Rymar    ShOffset:     [[SHOFFSET=<none>]]
30*f97019adSGeorgii Rymar## An arbitrary second broken .llvm_stackmaps section.
31*f97019adSGeorgii Rymar  - Name:         .llvm_stackmaps (1)
32*f97019adSGeorgii Rymar    Type:         SHT_PROGBITS
33*f97019adSGeorgii Rymar    ContentArray: [ 0xFF ]
34*f97019adSGeorgii Rymar    Size:         0x1
35*f97019adSGeorgii Rymar
36*f97019adSGeorgii Rymar## Hide the first stack map section to allow dumpers to locate and validate the second one, which is broken.
37*f97019adSGeorgii Rymar## Check we are able to find it and report a warning properly.
38*f97019adSGeorgii Rymar
39*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DNAME=.foo -o %t.second
40*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.second --stackmap 2>&1 | \
41*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=SECOND -DFILE=%t.second --implicit-check-not=warning:
42*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.second --stackmap 2>&1 | \
43*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=SECOND -DFILE=%t.second --implicit-check-not=warning:
44*f97019adSGeorgii Rymar
45*f97019adSGeorgii Rymar# SECOND: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 2: the stack map section size (1) is less than the minimum possible size of its header (16)
46*f97019adSGeorgii Rymar
47*f97019adSGeorgii Rymar## Check we report a warning when the size of the .llvm_stackmaps section is less
48*f97019adSGeorgii Rymar## than the minimum possible size of its header.
49*f97019adSGeorgii Rymar
50*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSHSIZE=0 -o %t.trunc0
51*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.trunc0 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc0 --check-prefix=TRUNC -DVAL=0
52*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.trunc0 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc0 --check-prefix=TRUNC -DVAL=0
53*f97019adSGeorgii Rymar
54*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSIZE=1 -o %t.trunc1
55*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.trunc1 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc1 --check-prefix=TRUNC -DVAL=1
56*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.trunc1 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc1 --check-prefix=TRUNC -DVAL=1
57*f97019adSGeorgii Rymar
58*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSIZE=15 -o %t.trunc15
59*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.trunc15 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc15 --check-prefix=TRUNC -DVAL=15
60*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.trunc15 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc15 --check-prefix=TRUNC -DVAL=15
61*f97019adSGeorgii Rymar
62*f97019adSGeorgii Rymar# TRUNC: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 1: the stack map section size ([[VAL]]) is less than the minimum possible size of its header (16)
63*f97019adSGeorgii Rymar
64*f97019adSGeorgii Rymar## Check that we report a warning when the version of the stack map section is not supported.
65*f97019adSGeorgii Rymar
66*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DVERSION=2 -o %t.ver2
67*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.ver2 --stackmap 2>&1 | \
68*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=VERSION -DFILE=%t.ver2 --implicit-check-not=warning: -DVERSION=2
69*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.ver2 --stackmap 2>&1 | \
70*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=VERSION -DFILE=%t.ver2 --implicit-check-not=warning: -DVERSION=2
71*f97019adSGeorgii Rymar
72*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DVERSION=4 -o %t.ver4
73*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.ver4 --stackmap 2>&1 | \
74*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=VERSION -DFILE=%t.ver4 --implicit-check-not=warning: -DVERSION=4
75*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.ver4 --stackmap 2>&1 | \
76*f97019adSGeorgii Rymar# RUN:   FileCheck %s --check-prefix=VERSION -DFILE=%t.ver4 --implicit-check-not=warning: -DVERSION=4
77*f97019adSGeorgii Rymar
78*f97019adSGeorgii Rymar# VERSION: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 1: the version ([[VERSION]]) of the stack map section is unsupported, the supported version is 3
79*f97019adSGeorgii Rymar
80*f97019adSGeorgii Rymar## Check that we report a warning when we are unable to read the content of the stack map section.
81*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSHOFFSET=0xffff -o %t.offset
82*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.offset --stackmap 2>&1 | FileCheck %s -DFILE=%t.offset --check-prefix=OFFSET
83*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.offset --stackmap 2>&1 | FileCheck %s -DFILE=%t.offset --check-prefix=OFFSET
84*f97019adSGeorgii Rymar
85*f97019adSGeorgii Rymar# OFFSET: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 1: section [index 1] has a sh_offset (0xffff) + sh_size (0x10) that is greater than the file size (0x1b8)
86