1## This test checks how we handle the --bb-addr-map option.
2
3## Check 64-bit:
4# RUN: yaml2obj %s -DBITS=64 -DADDR=0xFFFFFFFF1 -o %t1.x64.o
5# RUN: llvm-readobj %t1.x64.o --bb-addr-map | FileCheck %s -DADDR=0xFFFFFFFF1 --check-prefix=LLVM
6# RUN: llvm-readelf %t1.x64.o --bb-addr-map | FileCheck %s --check-prefix=GNU
7
8## Check 32-bit:
9# RUN: yaml2obj %s -DBITS=32 -o %t1.x32.o
10# RUN: llvm-readobj %t1.x32.o --bb-addr-map | FileCheck -DADDR=0x11111 %s --check-prefix=LLVM
11# RUN: llvm-readelf %t1.x32.o --bb-addr-map | FileCheck %s --check-prefix=GNU
12
13## Check that a malformed section can be handled.
14# RUN: yaml2obj %s -DBITS=32 -DSIZE=4 -o %t2.o
15# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s -DOFFSET=0x00000004 -DFILE=%t2.o --check-prefix=TRUNCATED
16
17# LLVM:      BBAddrMap [
18# LLVM-NEXT:   Function {
19# LLVM-NEXT:     At: [[ADDR]]
20# LLVM-NEXT:     BB entries [
21# LLVM-NEXT:       {
22# LLVM-NEXT:         Offset: 0x0
23# LLVM-NEXT:         Size: 0x1
24# LLVM-NEXT:         HasReturn: No
25# LLVM-NEXT:         HasTailCall: Yes
26# LLVM-NEXT:         IsEHPad: No
27# LLVM-NEXT:         CanFallThrough: No
28# LLVM-NEXT:       }
29# LLVM-NEXT:       {
30# LLVM-NEXT:         Offset: 0x3
31# LLVM-NEXT:         Size: 0x4
32# LLVM-NEXT:         HasReturn: Yes
33# LLVM-NEXT:         HasTailCall: No
34# LLVM-NEXT:         IsEHPad: Yes
35# LLVM-NEXT:         CanFallThrough: No
36# LLVM-NEXT:       }
37# LLVM-NEXT:     ]
38# LLVM-NEXT:   }
39# LLVM-NEXT:   Function {
40# LLVM-NEXT:     At: 0x22222
41# LLVM-NEXT:     BB entries [
42# LLVM-NEXT:       {
43# LLVM-NEXT:         Offset: 0x6
44# LLVM-NEXT:         Size: 0x7
45# LLVM-NEXT:         HasReturn: No
46# LLVM-NEXT:         HasTailCall: No
47# LLVM-NEXT:         IsEHPad: No
48# LLVM-NEXT:         CanFallThrough: Yes
49# LLVM-NEXT:       }
50# LLVM-NEXT:     ]
51# LLVM-NEXT:   }
52# LLVM-NEXT: ]
53# LLVM-NEXT: BBAddrMap [
54# LLVM-NEXT:   Function {
55# LLVM-NEXT:     At: 0x33333
56# LLVM-NEXT:     BB entries [
57# LLVM-NEXT:       {
58# LLVM-NEXT:         Offset: 0x9
59# LLVM-NEXT:         Size: 0xA
60# LLVM-NEXT:         HasReturn: Yes
61# LLVM-NEXT:         HasTailCall: Yes
62# LLVM-NEXT:         IsEHPad: No
63# LLVM-NEXT:         CanFallThrough: Yes
64# LLVM-NEXT:       }
65# LLVM-NEXT:     ]
66# LLVM-NEXT:   }
67# LLVM-NEXT: ]
68
69# GNU: GNUStyle::printBBAddrMaps not implemented
70
71# TRUNCATED:      BBAddrMap [
72# TRUNCATED-NEXT:   warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 1: unable to decode LEB128 at offset [[OFFSET]]: malformed uleb128, extends past end
73# TRUNCATED-NEXT: ]
74## Check that the other valid section is properly dumped.
75# TRUNCATED-NEXT: BBAddrMap [
76# TRUNCATED-NEXT:   Function {
77# TRUNCATED-NEXT:          At: 0x33333
78# TRUNCATED-NEXT:          BB entries [
79# TRUNCATED-NEXT:            {
80# TRUNCATED-NEXT:         Offset: 0x9
81# TRUNCATED-NEXT:         Size: 0xA
82# TRUNCATED-NEXT:         HasReturn: Yes
83# TRUNCATED-NEXT:         HasTailCall: Yes
84# TRUNCATED-NEXT:         IsEHPad: No
85# TRUNCATED-NEXT:         CanFallThrough: Yes
86# TRUNCATED-NEXT:       }
87# TRUNCATED-NEXT:     ]
88# TRUNCATED-NEXT:   }
89# TRUNCATED-NEXT: ]
90
91--- !ELF
92FileHeader:
93  Class: ELFCLASS[[BITS]]
94  Data:  ELFDATA2LSB
95  Type:  ET_EXEC
96Sections:
97  - Name:   bb_addr_map_1
98    Type:   SHT_LLVM_BB_ADDR_MAP
99    ShSize: [[SIZE=<none>]]
100    Entries:
101      - Address: [[ADDR=0x11111]]
102        BBEntries:
103          - AddressOffset: 0x0
104            Size:          0x1
105            Metadata:      0xF0000002
106          - AddressOffset: 0x3
107            Size:          0x4
108            Metadata:      0x5
109      - Address: 0x22222
110        BBEntries:
111          - AddressOffset: 0x6
112            Size:          0x7
113            Metadata:      0x8
114  - Name:   dummy_section
115    Type:   SHT_PROGBITS
116    Size:   16
117  - Name:   bb_addr_map_2
118    Type:   SHT_LLVM_BB_ADDR_MAP
119    Entries:
120      - Address: 0x33333
121        BBEntries:
122          - AddressOffset: 0x9
123            Size:          0xa
124            Metadata:      0xb
125