Files
TheRock/compiler/amd-llvm/llvm/test/tools/llvm-readobj/ELF/call-graph-info.test
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

577 lines
21 KiB
Plaintext

## Tests how --call-graph-info prints the call graph information.
## Check non-relocatable object file handling.
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-readobj --elf-output-style=GNU --call-graph-info %t1 2>&1 | count 0
# RUN: llvm-readobj --elf-output-style=LLVM --call-graph-info %t1 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=LLVM-NONRELOC -DFILE=%t1
# RUN: llvm-readobj --elf-output-style=JSON --pretty-print --call-graph-info %t1 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=JSON-NONRELOC -DFILE=%t1
# LLVM-NONRELOC: CallGraph [
# LLVM-NONRELOC-NEXT: Function {
# LLVM-NONRELOC-NEXT: Names: [foo]
# LLVM-NONRELOC-NEXT: Address: 0x1790
# LLVM-NONRELOC-NEXT: Version: 0
# LLVM-NONRELOC-NEXT: IsIndirectTarget: Yes
# LLVM-NONRELOC-NEXT: TypeID: 0x3ECBEEF531F74424
# LLVM-NONRELOC-NEXT: NumDirectCallees: 0
# LLVM-NONRELOC-NEXT: DirectCallees [
# LLVM-NONRELOC-NEXT: ]
# LLVM-NONRELOC-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-NONRELOC-NEXT: IndirectTypeIDs: []
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: Function {
# LLVM-NONRELOC-NEXT: Names: [bar]
# LLVM-NONRELOC-NEXT: Address: 0x17A0
# LLVM-NONRELOC-NEXT: Version: 0
# LLVM-NONRELOC-NEXT: IsIndirectTarget: Yes
# LLVM-NONRELOC-NEXT: TypeID: 0x3ECBEEF531F74424
# LLVM-NONRELOC-NEXT: NumDirectCallees: 0
# LLVM-NONRELOC-NEXT: DirectCallees [
# LLVM-NONRELOC-NEXT: ]
# LLVM-NONRELOC-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-NONRELOC-NEXT: IndirectTypeIDs: []
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: Function {
# LLVM-NONRELOC-NEXT: Names: [baz]
# LLVM-NONRELOC-NEXT: Address: 0x17B0
# LLVM-NONRELOC-NEXT: Version: 0
# LLVM-NONRELOC-NEXT: IsIndirectTarget: Yes
# LLVM-NONRELOC-NEXT: TypeID: 0x308E4B8159BC8654
# LLVM-NONRELOC-NEXT: NumDirectCallees: 0
# LLVM-NONRELOC-NEXT: DirectCallees [
# LLVM-NONRELOC-NEXT: ]
# LLVM-NONRELOC-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-NONRELOC-NEXT: IndirectTypeIDs: []
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: Function {
# LLVM-NONRELOC-NEXT: Names: [main]
# LLVM-NONRELOC-NEXT: Address: 0x17C0
# LLVM-NONRELOC-NEXT: Version: 0
# LLVM-NONRELOC-NEXT: IsIndirectTarget: Yes
# LLVM-NONRELOC-NEXT: TypeID: 0xFA6809609A76AFCA
# LLVM-NONRELOC-NEXT: NumDirectCallees: 3
# LLVM-NONRELOC-NEXT: DirectCallees [
# LLVM-NONRELOC-NEXT: {
# LLVM-NONRELOC-NEXT: Names: [foo]
# LLVM-NONRELOC-NEXT: Address: 0x1790
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: {
# LLVM-NONRELOC-NEXT: Names: [bar]
# LLVM-NONRELOC-NEXT: Address: 0x17A0
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: {
# LLVM-NONRELOC-NEXT: Names: [baz]
# LLVM-NONRELOC-NEXT: Address: 0x17B0
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: ]
# LLVM-NONRELOC-NEXT: NumIndirectTargetTypeIDs: 2
# LLVM-NONRELOC-NEXT: IndirectTypeIDs: [0x3ECBEEF531F74424, 0x308E4B8159BC8654]
# LLVM-NONRELOC-NEXT: }
# LLVM-NONRELOC-NEXT: ]
# JSON-NONRELOC: "CallGraph": [
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Function": {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "foo"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6032,
# JSON-NONRELOC-NEXT: "Version": 0,
# JSON-NONRELOC-NEXT: "IsIndirectTarget": true,
# JSON-NONRELOC-NEXT: "TypeID": 4524972987496481828,
# JSON-NONRELOC-NEXT: "NumDirectCallees": 0,
# JSON-NONRELOC-NEXT: "DirectCallees": [],
# JSON-NONRELOC-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-NONRELOC-NEXT: "IndirectTypeIDs": []
# JSON-NONRELOC-NEXT: }
# JSON-NONRELOC-NEXT: },
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Function": {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "bar"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6048,
# JSON-NONRELOC-NEXT: "Version": 0,
# JSON-NONRELOC-NEXT: "IsIndirectTarget": true,
# JSON-NONRELOC-NEXT: "TypeID": 4524972987496481828,
# JSON-NONRELOC-NEXT: "NumDirectCallees": 0,
# JSON-NONRELOC-NEXT: "DirectCallees": [],
# JSON-NONRELOC-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-NONRELOC-NEXT: "IndirectTypeIDs": []
# JSON-NONRELOC-NEXT: }
# JSON-NONRELOC-NEXT: },
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Function": {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "baz"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6064,
# JSON-NONRELOC-NEXT: "Version": 0,
# JSON-NONRELOC-NEXT: "IsIndirectTarget": true,
# JSON-NONRELOC-NEXT: "TypeID": 3498816979441845844,
# JSON-NONRELOC-NEXT: "NumDirectCallees": 0,
# JSON-NONRELOC-NEXT: "DirectCallees": [],
# JSON-NONRELOC-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-NONRELOC-NEXT: "IndirectTypeIDs": []
# JSON-NONRELOC-NEXT: }
# JSON-NONRELOC-NEXT: },
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Function": {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "main"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6080,
# JSON-NONRELOC-NEXT: "Version": 0,
# JSON-NONRELOC-NEXT: "IsIndirectTarget": true,
# JSON-NONRELOC-NEXT: "TypeID": 18043682217572872138,
# JSON-NONRELOC-NEXT: "NumDirectCallees": 3,
# JSON-NONRELOC-NEXT: "DirectCallees": [
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "foo"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6032
# JSON-NONRELOC-NEXT: },
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "bar"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6048
# JSON-NONRELOC-NEXT: },
# JSON-NONRELOC-NEXT: {
# JSON-NONRELOC-NEXT: "Names": [
# JSON-NONRELOC-NEXT: "baz"
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "Address": 6064
# JSON-NONRELOC-NEXT: }
# JSON-NONRELOC-NEXT: ],
# JSON-NONRELOC-NEXT: "NumIndirectTargetTypeIDs": 2,
# JSON-NONRELOC-NEXT: "IndirectTypeIDs": [
# JSON-NONRELOC-NEXT: 4524972987496481828,
# JSON-NONRELOC-NEXT: 3498816979441845844
# JSON-NONRELOC-NEXT: ]
# JSON-NONRELOC-NEXT: }
# JSON-NONRELOC-NEXT: }
# JSON-NONRELOC-NEXT: ]
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Sections:
- Name: .text
Type: SHT_PROGBITS
- Type: SHT_LLVM_CALL_GRAPH
Link: .text
ContentArray: [
## --- foo ---
0x00, ## Version
0x01, ## Flags
0x90, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## FunctionEntryPC: 0x1790
0x24, 0x44, 0xF7, 0x31, 0xF5, 0xEE, 0xCB, 0x3E, ## FunctionTypeID: 0x3ECBEEF531F74424
## --- bar ---
0x00, ## Version
0x01, ## Flags
0xA0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## FunctionEntryPC: 0x17A0
0x24, 0x44, 0xF7, 0x31, 0xF5, 0xEE, 0xCB, 0x3E, ## FunctionTypeID: 0x3ECBEEF531F74424
## --- baz ---
0x00, ## Version
0x01, ## Flags
0xB0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## FunctionEntryPC: 0x17B0
0x54, 0x86, 0xBC, 0x59, 0x81, 0x4B, 0x8E, 0x30, ## FunctionTypeID: 0x308E4B8159BC8654
## --- main ---
0x00, ## Version
0x07, ## Flags
0xC0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## FunctionEntryPC: 0x17C0
0xCA, 0xAF, 0x76, 0x9A, 0x60, 0x09, 0x68, 0xFA, ## FunctionTypeID: 0xFA6809609A76AFCA
## Direct Callees
0x03, ## NumDirectCallees
0x90, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Callee 1: 0x1790 (foo)
0xA0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Callee 2: 0x17A0 (bar)
0xB0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Callee 3: 0x17B0 (baz)
## Indirect Callees
0x02, ## NumIndirectTargetTypeIDs
0x24, 0x44, 0xF7, 0x31, 0xF5, 0xEE, 0xCB, 0x3E, ## TypeID 1
0x54, 0x86, 0xBC, 0x59, 0x81, 0x4B, 0x8E, 0x30 ## TypeID 2
]
Symbols:
- Name: foo
Type: STT_FUNC
Section: .text
Value: 0x1790
- Name: bar
Type: STT_FUNC
Section: .text
Value: 0x17A0
- Name: baz
Type: STT_FUNC
Section: .text
Value: 0x17B0
- Name: main
Type: STT_FUNC
Section: .text
Value: 0x17C0
...
## Check relocatable object file handling.
# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-readobj --elf-output-style=GNU --call-graph-info %t2 2>&1 | count 0
# RUN: llvm-readobj --elf-output-style=LLVM --call-graph-info %t2 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=LLVM-RELOC -DFILE=%t2
# RUN: llvm-readobj --elf-output-style=JSON --pretty-print --call-graph-info %t2 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=JSON-RELOC -DFILE=%t2
# LLVM-RELOC: CallGraph [
# LLVM-RELOC-NEXT: Function {
# LLVM-RELOC-NEXT: Name: foo
# LLVM-RELOC-NEXT: Version: 0
# LLVM-RELOC-NEXT: IsIndirectTarget: Yes
# LLVM-RELOC-NEXT: TypeID: 0xF85C699BB8EF20A2
# LLVM-RELOC-NEXT: NumDirectCallees: 0
# LLVM-RELOC-NEXT: DirectCallees [
# LLVM-RELOC-NEXT: ]
# LLVM-RELOC-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-RELOC-NEXT: IndirectTypeIDs: []
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: Function {
# LLVM-RELOC-NEXT: Name: bar
# LLVM-RELOC-NEXT: Version: 0
# LLVM-RELOC-NEXT: IsIndirectTarget: Yes
# LLVM-RELOC-NEXT: TypeID: 0xF85C699BB8EF20A2
# LLVM-RELOC-NEXT: NumDirectCallees: 0
# LLVM-RELOC-NEXT: DirectCallees [
# LLVM-RELOC-NEXT: ]
# LLVM-RELOC-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-RELOC-NEXT: IndirectTypeIDs: []
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: Function {
# LLVM-RELOC-NEXT: Name: baz
# LLVM-RELOC-NEXT: Version: 0
# LLVM-RELOC-NEXT: IsIndirectTarget: Yes
# LLVM-RELOC-NEXT: TypeID: 0x308E4B8159BC8654
# LLVM-RELOC-NEXT: NumDirectCallees: 0
# LLVM-RELOC-NEXT: DirectCallees [
# LLVM-RELOC-NEXT: ]
# LLVM-RELOC-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-RELOC-NEXT: IndirectTypeIDs: []
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: Function {
# LLVM-RELOC-NEXT: Name: caller
# LLVM-RELOC-NEXT: Version: 0
# LLVM-RELOC-NEXT: IsIndirectTarget: Yes
# LLVM-RELOC-NEXT: TypeID: 0xA9494DEF81A01DC
# LLVM-RELOC-NEXT: NumDirectCallees: 3
# LLVM-RELOC-NEXT: DirectCallees [
# LLVM-RELOC-NEXT: {
# LLVM-RELOC-NEXT: Name: foo
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: {
# LLVM-RELOC-NEXT: Name: bar
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: {
# LLVM-RELOC-NEXT: Name: baz
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: ]
# LLVM-RELOC-NEXT: NumIndirectTargetTypeIDs: 2
# LLVM-RELOC-NEXT: IndirectTypeIDs: [0xF85C699BB8EF20A2, 0x308E4B8159BC8654]
# LLVM-RELOC-NEXT: }
# LLVM-RELOC-NEXT: ]
# JSON-RELOC: "CallGraph": [
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Function": {
# JSON-RELOC-NEXT: "Name": "foo",
# JSON-RELOC-NEXT: "Version": 0,
# JSON-RELOC-NEXT: "IsIndirectTarget": true,
# JSON-RELOC-NEXT: "TypeID": 17896295136807035042,
# JSON-RELOC-NEXT: "NumDirectCallees": 0,
# JSON-RELOC-NEXT: "DirectCallees": [],
# JSON-RELOC-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-RELOC-NEXT: "IndirectTypeIDs": []
# JSON-RELOC-NEXT: }
# JSON-RELOC-NEXT: },
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Function": {
# JSON-RELOC-NEXT: "Name": "bar",
# JSON-RELOC-NEXT: "Version": 0,
# JSON-RELOC-NEXT: "IsIndirectTarget": true,
# JSON-RELOC-NEXT: "TypeID": 17896295136807035042,
# JSON-RELOC-NEXT: "NumDirectCallees": 0,
# JSON-RELOC-NEXT: "DirectCallees": [],
# JSON-RELOC-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-RELOC-NEXT: "IndirectTypeIDs": []
# JSON-RELOC-NEXT: }
# JSON-RELOC-NEXT: },
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Function": {
# JSON-RELOC-NEXT: "Name": "baz",
# JSON-RELOC-NEXT: "Version": 0,
# JSON-RELOC-NEXT: "IsIndirectTarget": true,
# JSON-RELOC-NEXT: "TypeID": 3498816979441845844,
# JSON-RELOC-NEXT: "NumDirectCallees": 0,
# JSON-RELOC-NEXT: "DirectCallees": [],
# JSON-RELOC-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-RELOC-NEXT: "IndirectTypeIDs": []
# JSON-RELOC-NEXT: }
# JSON-RELOC-NEXT: },
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Function": {
# JSON-RELOC-NEXT: "Name": "caller",
# JSON-RELOC-NEXT: "Version": 0,
# JSON-RELOC-NEXT: "IsIndirectTarget": true,
# JSON-RELOC-NEXT: "TypeID": 762397922298560988,
# JSON-RELOC-NEXT: "NumDirectCallees": 3,
# JSON-RELOC-NEXT: "DirectCallees": [
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Name": "foo"
# JSON-RELOC-NEXT: },
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Name": "bar"
# JSON-RELOC-NEXT: },
# JSON-RELOC-NEXT: {
# JSON-RELOC-NEXT: "Name": "baz"
# JSON-RELOC-NEXT: }
# JSON-RELOC-NEXT: ],
# JSON-RELOC-NEXT: "NumIndirectTargetTypeIDs": 2,
# JSON-RELOC-NEXT: "IndirectTypeIDs": [
# JSON-RELOC-NEXT: 17896295136807035042,
# JSON-RELOC-NEXT: 3498816979441845844
# JSON-RELOC-NEXT: ]
# JSON-RELOC-NEXT: }
# JSON-RELOC-NEXT: }
# JSON-RELOC-NEXT: ]
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
- Name: .llvm.callgraph
Type: SHT_LLVM_CALL_GRAPH
Link: .text
ContentArray: [
## --- foo ---
## Offset 0x0
0x00, ## Format Version
0x01, ## Flags
## Offset 0x2 (Matches Reloc: foo)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Address of foo
0xA2, 0x20, 0xEF, 0xB8, 0x9B, 0x69, 0x5C, 0xF8, ## TypeID of foo
## --- bar ---
## Offset 0x12
0x00, ## Format Version
0x01, ## Flags
## Offset 0x14 (Matches Reloc: bar)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Address of bar
0xA2, 0x20, 0xEF, 0xB8, 0x9B, 0x69, 0x5C, 0xF8, ## TypeID of bar
## --- baz ---
## Offset 0x24
0x00, ## Format Version
0x01, ## Flags
## Offset 0x26 (Matches Reloc: baz)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Address of baz
0x54, 0x86, 0xBC, 0x59, 0x81, 0x4B, 0x8E, 0x30, ## TypeID of baz
## --- caller ---
## Offset 0x36
0x00, ## Format Version
0x07, ## Flags (HasDirectCallees | IsIndirectTarget | ...)
## Offset 0x38 (Matches Reloc: caller)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Address of caller
0xDC, 0x01, 0x1A, 0xF8, 0xDE, 0x94, 0x94, 0x0A, ## TypeID of caller
## Direct Callees List
0x03, ## NumDirectCallees (3)
## Offset 0x49 (Matches Reloc: foo)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Callee 1: foo
## Offset 0x51 (Matches Reloc: bar)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Callee 2: bar
## Offset 0x59 (Matches Reloc: baz)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Callee 3: baz
## Indirect Callees List
0x02, ## NumIndirectTargetTypeIDs (2)
0xA2, 0x20, 0xEF, 0xB8, 0x9B, 0x69, 0x5C, 0xF8, ## Indirect TypeID 1 (matches foo/bar)
0x54, 0x86, 0xBC, 0x59, 0x81, 0x4B, 0x8E, 0x30 ## Indirect TypeID 2 (matches baz)
]
- Type: SHT_RELA
Info: .llvm.callgraph
Relocations:
- Offset: 0x2
Symbol: foo
Type: R_X86_64_64
- Offset: 0x14
Symbol: bar
Type: R_X86_64_64
- Offset: 0x26
Symbol: baz
Type: R_X86_64_64
- Offset: 0x38
Symbol: caller
Type: R_X86_64_64
- Offset: 0x49
Symbol: foo
Type: R_X86_64_64
- Offset: 0x51
Symbol: bar
Type: R_X86_64_64
- Offset: 0x59
Symbol: baz
Type: R_X86_64_64
Symbols:
- Name: foo
- Name: bar
- Name: baz
- Name: caller
...
## Check ARM 32-bit Thumb address handling.
# RUN: yaml2obj --docnum=3 %s -o %t3
# RUN: llvm-readobj --elf-output-style=LLVM --call-graph-info %t3 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=LLVM-ARM-THUMB -DFILE=%t3
# RUN: llvm-readobj --elf-output-style=JSON --pretty-print --call-graph-info %t3 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=JSON-ARM-THUMB -DFILE=%t3
# LLVM-ARM-THUMB: CallGraph [
# LLVM-ARM-THUMB-NEXT: Function {
# LLVM-ARM-THUMB-NEXT: Name: foo
# LLVM-ARM-THUMB-NEXT: Version: 0
# LLVM-ARM-THUMB-NEXT: IsIndirectTarget: No
# LLVM-ARM-THUMB-NEXT: TypeID: 0x123456789ABCDEF0
# LLVM-ARM-THUMB-NEXT: NumDirectCallees: 0
# LLVM-ARM-THUMB-NEXT: DirectCallees [
# LLVM-ARM-THUMB-NEXT: ]
# LLVM-ARM-THUMB-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-ARM-THUMB-NEXT: IndirectTypeIDs: []
# LLVM-ARM-THUMB-NEXT: }
# LLVM-ARM-THUMB-NEXT: ]
# JSON-ARM-THUMB: "CallGraph": [
# JSON-ARM-THUMB-NEXT: {
# JSON-ARM-THUMB-NEXT: "Function": {
# JSON-ARM-THUMB-NEXT: "Name": "foo",
# JSON-ARM-THUMB-NEXT: "Version": 0,
# JSON-ARM-THUMB-NEXT: "IsIndirectTarget": false,
# JSON-ARM-THUMB-NEXT: "TypeID": 1311768467463790320,
# JSON-ARM-THUMB-NEXT: "NumDirectCallees": 0,
# JSON-ARM-THUMB-NEXT: "DirectCallees": [],
# JSON-ARM-THUMB-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-ARM-THUMB-NEXT: "IndirectTypeIDs": []
# JSON-ARM-THUMB-NEXT: }
# JSON-ARM-THUMB-NEXT: }
# JSON-ARM-THUMB-NEXT: ]
--- !ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_ARM
Sections:
- Name: .text
Type: SHT_PROGBITS
- Name: .llvm.callgraph
Type: SHT_LLVM_CALL_GRAPH
Link: .text
ContentArray: [
## --- foo+1 (Thumb address) ---
0x00, ## Version
0x00, ## Flags
0x01, 0x00, 0x00, 0x00, ## FunctionEntryPC: 0x1 (relative to foo)
0xF0, 0xDE, 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12 ## FunctionTypeID: 0x123456789ABCDEF0
]
- Type: SHT_RELA
Info: .llvm.callgraph
Relocations:
- Offset: 0x2 ## Offset to FunctionEntryPC
Symbol: foo
Type: R_ARM_ABS32
Symbols:
- Name: foo
Type: STT_FUNC
Section: .text
Value: 0x0
...
## Check multiple function names handling.
# RUN: yaml2obj --docnum=4 %s -o %t4
# RUN: llvm-readobj --elf-output-style=LLVM --call-graph-info %t4 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=LLVM-MULTI-NAMES -DFILE=%t4
# RUN: llvm-readobj --elf-output-style=JSON --pretty-print --call-graph-info %t4 2>&1 | \
# RUN: FileCheck %s --match-full-lines --check-prefix=JSON-MULTI-NAMES -DFILE=%t4
# LLVM-MULTI-NAMES: CallGraph [
# LLVM-MULTI-NAMES-NEXT: Function {
# LLVM-MULTI-NAMES-NEXT: Names: [alias, foo]
# LLVM-MULTI-NAMES-NEXT: Address: 0x1000
# LLVM-MULTI-NAMES-NEXT: Version: 0
# LLVM-MULTI-NAMES-NEXT: IsIndirectTarget: Yes
# LLVM-MULTI-NAMES-NEXT: TypeID: 0x0
# LLVM-MULTI-NAMES-NEXT: NumDirectCallees: 0
# LLVM-MULTI-NAMES-NEXT: DirectCallees [
# LLVM-MULTI-NAMES-NEXT: ]
# LLVM-MULTI-NAMES-NEXT: NumIndirectTargetTypeIDs: 0
# LLVM-MULTI-NAMES-NEXT: IndirectTypeIDs: []
# LLVM-MULTI-NAMES-NEXT: }
# LLVM-MULTI-NAMES-NEXT: ]
# JSON-MULTI-NAMES: "CallGraph": [
# JSON-MULTI-NAMES-NEXT: {
# JSON-MULTI-NAMES-NEXT: "Function": {
# JSON-MULTI-NAMES-NEXT: "Names": [
# JSON-MULTI-NAMES-NEXT: "alias",
# JSON-MULTI-NAMES-NEXT: "foo"
# JSON-MULTI-NAMES-NEXT: ],
# JSON-MULTI-NAMES-NEXT: "Address": 4096,
# JSON-MULTI-NAMES-NEXT: "Version": 0,
# JSON-MULTI-NAMES-NEXT: "IsIndirectTarget": true,
# JSON-MULTI-NAMES-NEXT: "TypeID": 0,
# JSON-MULTI-NAMES-NEXT: "NumDirectCallees": 0,
# JSON-MULTI-NAMES-NEXT: "DirectCallees": [],
# JSON-MULTI-NAMES-NEXT: "NumIndirectTargetTypeIDs": 0,
# JSON-MULTI-NAMES-NEXT: "IndirectTypeIDs": []
# JSON-MULTI-NAMES-NEXT: }
# JSON-MULTI-NAMES-NEXT: }
# JSON-MULTI-NAMES-NEXT: ]
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Sections:
- Name: .text
Type: SHT_PROGBITS
- Type: SHT_LLVM_CALL_GRAPH
Link: .text
ContentArray: [
## --- foo/alias ---
0x00, ## Version
0x01, ## Flags
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## FunctionEntryPC: 0x1000
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ## FunctionTypeID: 0
]
Symbols:
- Name: alias
Type: STT_FUNC
Section: .text
Value: 0x1000
- Name: foo
Type: STT_FUNC
Section: .text
Value: 0x1000