## 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: ...