Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[xray] Add llvm-xray extract support for 32 bit ARM
Summary: XRay works on 32-bit ARM but extract didn't support it. See also another previous attempt in D77858. Reviewers: MaskRay, dberris, johnislarry Subscribers: kristof.beyls, hiraditya, danielkiss, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D80185
- Loading branch information
1 parent
57f1c43
commit e62d67f
Showing
4 changed files
with
176 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
## 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 ] | ||
Sections: | ||
- Section: .rel.dyn | ||
Align: 0x0000000000001000 | ||
- Type: PT_LOAD | ||
Flags: [ PF_X, PF_R ] | ||
Sections: | ||
- Section: .text | ||
VAddr: 0x00000000000012B0 | ||
Align: 0x0000000000001000 | ||
- Type: PT_LOAD | ||
Flags: [ PF_W, PF_R ] | ||
Sections: | ||
- Section: xray_instr_map | ||
- Section: 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: 0x00000000000012B0, function: 0x00000000000012B0, kind: function-enter, always-instrument: true, function-name: 'foo()' } | ||
# CHECK-NEXT: - { id: 1, address: 0x00000000000012CC, function: 0x00000000000012B0, kind: function-exit, always-instrument: true, function-name: 'foo()' } | ||
# CHECK-NEXT: - { id: 2, address: 0x00000000000012EC, function: 0x00000000000012EC, kind: function-enter, always-instrument: true, function-name: 'bar()' } | ||
# CHECK-NEXT: - { id: 2, address: 0x0000000000001308, function: 0x00000000000012EC, kind: function-exit, always-instrument: true, function-name: 'bar()' } | ||
# CHECK-NEXT: - { id: 3, address: 0x0000000000001328, function: 0x0000000000001328, kind: function-enter, always-instrument: true, function-name: 'jar()' } | ||
# CHECK-NEXT: - { id: 3, address: 0x0000000000001344, function: 0x0000000000001328, 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: 0x00000000000012B0, function: 0x00000000000012B0, kind: function-enter, always-instrument: true, function-name: _Z3foov } | ||
# MANGLED-NEXT: - { id: 1, address: 0x00000000000012CC, function: 0x00000000000012B0, kind: function-exit, always-instrument: true, function-name: _Z3foov } | ||
# MANGLED-NEXT: - { id: 2, address: 0x00000000000012EC, function: 0x00000000000012EC, kind: function-enter, always-instrument: true, function-name: _Z3barv } | ||
# MANGLED-NEXT: - { id: 2, address: 0x0000000000001308, function: 0x00000000000012EC, kind: function-exit, always-instrument: true, function-name: _Z3barv } | ||
# MANGLED-NEXT: - { id: 3, address: 0x0000000000001328, function: 0x0000000000001328, kind: function-enter, always-instrument: true, function-name: _Z3jarv } | ||
# MANGLED-NEXT: - { id: 3, address: 0x0000000000001344, function: 0x0000000000001328, kind: function-exit, always-instrument: true, function-name: _Z3jarv } | ||
# MANGLED-NEXT: ... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
; RUN: not llvm-xray extract %S/Inputs/elf64-badentrysizes.bin 2>&1 | FileCheck %s | ||
; CHECK: llvm-xray: Cannot extract instrumentation map from '{{.*}}elf64-badentrysizes.bin'. | ||
; CHECK-NEXT: Instrumentation map entries not evenly divisible by size of an XRay sled entry in ELF64. | ||
; CHECK-NEXT: Instrumentation map entries not evenly divisible by size of an XRay sled entry. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
; RUN: not llvm-xray extract %S/Inputs/elf32-noxray.bin 2>&1 | FileCheck %s | ||
; CHECK: llvm-xray: Cannot extract instrumentation map from '{{.*}}elf32-noxray.bin'. | ||
; CHECK-NEXT: File format not supported (only does ELF and Mach-O little endian 64-bit). | ||
; CHECK-NEXT: File format not supported. Supports: AArch64/ARM/ppc64le/x86-64. |