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