## This test makes sure we can extract the instrumentation map from an
## XRay-instrumented PIE file.
## Generated from the following source:
## __attribute__((xray_always_instrument)) void foo() {}
## __attribute__((xray_always_instrument)) void bar() {}
## __attribute__((xray_always_instrument)) void jar() {}
## Built with the following arguments:
## -target armv7a-linux-androideabi -nostdlib -fxray-instrument -fPIC -shared
--- !ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_ARM
Flags: [ EF_ARM_SOFT_FLOAT, EF_ARM_EABI_VER5 ]
Entry: 0x00000000000012B0
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_R ]
FirstSec: .rel.dyn
LastSec: .rel.dyn
Align: 0x0000000000001000
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
FirstSec: .text
LastSec: .text
VAddr: 0x00000000000012B0
Align: 0x0000000000001000
- Type: PT_LOAD
Flags: [ PF_W, PF_R ]
FirstSec: xray_instr_map
LastSec: xray_fn_idx
VAddr: 0x00000000000033CC
Align: 0x0000000000001000
Sections:
- Name: .rel.dyn
Type: SHT_REL
Flags: [ SHF_ALLOC ]
Address: 0x0000000000000200
Link: .dynsym
AddressAlign: 0x0000000000000004
Relocations:
- Offset: 0x00000000000033CC
Type: R_ARM_RELATIVE
- Offset: 0x00000000000033DC
Type: R_ARM_RELATIVE
- Offset: 0x00000000000033EC
Type: R_ARM_RELATIVE
- Offset: 0x00000000000033FC
Type: R_ARM_RELATIVE
- Offset: 0x000000000000340C
Type: R_ARM_RELATIVE
- Offset: 0x000000000000341C
Type: R_ARM_RELATIVE
- Offset: 0x0000000000003430
Type: R_ARM_RELATIVE
- Offset: 0x0000000000003434
Type: R_ARM_RELATIVE
- Offset: 0x0000000000003438
Type: R_ARM_RELATIVE
- Offset: 0x000000000000343C
Type: R_ARM_RELATIVE
- Offset: 0x0000000000003440
Type: R_ARM_RELATIVE
- Offset: 0x0000000000003444
Type: R_ARM_RELATIVE
- Offset: 0x00000000000033F0
Symbol: _Z3barv
Type: R_ARM_ABS32
- Offset: 0x0000000000003400
Symbol: _Z3barv
Type: R_ARM_ABS32
- Offset: 0x00000000000033D0
Symbol: _Z3foov
Type: R_ARM_ABS32
- Offset: 0x00000000000033E0
Symbol: _Z3foov
Type: R_ARM_ABS32
- Offset: 0x0000000000003410
Symbol: _Z3jarv
Type: R_ARM_ABS32
- Offset: 0x0000000000003420
Symbol: _Z3jarv
Type: R_ARM_ABS32
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Address: 0x00000000000012B0
AddressAlign: 0x0000000000000004
Size: 180
- Name: xray_instr_map
Type: SHT_PROGBITS
Flags: [ SHF_WRITE, SHF_ALLOC, SHF_LINK_ORDER ]
Address: 0x00000000000033CC
Link: .text
AddressAlign: 0x0000000000000001
Content: B0120000000000000001000000000000CC120000000000000101000000000000EC120000000000000001000000000000081300000000000001010000000000002813000000000000000100000000000044130000000000000101000000000000
- Name: xray_fn_idx
Type: SHT_PROGBITS
Flags: [ SHF_WRITE, SHF_ALLOC, SHF_LINK_ORDER ]
Address: 0x0000000000003430
Link: .text
AddressAlign: 0x0000000000000008
Content: CC330000EC330000EC3300000C3400000C3400002C340000
DynamicSymbols:
- Name: _Z3barv
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
Value: 0x00000000000012EC
Size: 0x000000000000003C
- Name: _Z3foov
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
Value: 0x00000000000012B0
Size: 0x000000000000003C
- Name: _Z3jarv
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
Value: 0x0000000000001328
Size: 0x000000000000003C
...
# RUN: yaml2obj %s -o %t.so
# RUN: llvm-xray extract %t.so -s | FileCheck %s
# CHECK: ---
# CHECK-NEXT: - { id: 1, address: 0x12B0, function: 0x12B0, kind: function-enter, always-instrument: true, function-name: 'foo()' }
# CHECK-NEXT: - { id: 1, address: 0x12CC, function: 0x12B0, kind: function-exit, always-instrument: true, function-name: 'foo()' }
# CHECK-NEXT: - { id: 2, address: 0x12EC, function: 0x12EC, kind: function-enter, always-instrument: true, function-name: 'bar()' }
# CHECK-NEXT: - { id: 2, address: 0x1308, function: 0x12EC, kind: function-exit, always-instrument: true, function-name: 'bar()' }
# CHECK-NEXT: - { id: 3, address: 0x1328, function: 0x1328, kind: function-enter, always-instrument: true, function-name: 'jar()' }
# CHECK-NEXT: - { id: 3, address: 0x1344, function: 0x1328, kind: function-exit, always-instrument: true, function-name: 'jar()' }
# CHECK-NEXT: ...
# RUN: llvm-xray extract -s --no-demangle %t.so | FileCheck --check-prefix=MANGLED %s
# MANGLED: ---
# MANGLED-NEXT: - { id: 1, address: 0x12B0, function: 0x12B0, kind: function-enter, always-instrument: true, function-name: _Z3foov }
# MANGLED-NEXT: - { id: 1, address: 0x12CC, function: 0x12B0, kind: function-exit, always-instrument: true, function-name: _Z3foov }
# MANGLED-NEXT: - { id: 2, address: 0x12EC, function: 0x12EC, kind: function-enter, always-instrument: true, function-name: _Z3barv }
# MANGLED-NEXT: - { id: 2, address: 0x1308, function: 0x12EC, kind: function-exit, always-instrument: true, function-name: _Z3barv }
# MANGLED-NEXT: - { id: 3, address: 0x1328, function: 0x1328, kind: function-enter, always-instrument: true, function-name: _Z3jarv }
# MANGLED-NEXT: - { id: 3, address: 0x1344, function: 0x1328, kind: function-exit, always-instrument: true, function-name: _Z3jarv }
# MANGLED-NEXT: ...