353 lines
11 KiB
Plaintext
353 lines
11 KiB
Plaintext
## This test checks how we handle the --elf-cg-profile option.
|
|
|
|
# RUN: yaml2obj %s -o %t.o
|
|
# RUN: llvm-readobj %t.o --cg-profile | FileCheck %s --check-prefix=LLVM
|
|
# RUN: llvm-readelf %t.o --cg-profile | FileCheck %s --check-prefix=GNU
|
|
# RUN: llvm-readobj %t.o --elf-cg-profile | FileCheck %s --check-prefix=LLVM
|
|
# RUN: llvm-readelf %t.o --elf-cg-profile | FileCheck %s --check-prefix=GNU
|
|
|
|
# LLVM: CGProfile [
|
|
# LLVM-NEXT: CGProfileEntry {
|
|
# LLVM-NEXT: From: foo (1)
|
|
# LLVM-NEXT: To: bar (2)
|
|
# LLVM-NEXT: Weight: 89
|
|
# LLVM-NEXT: }
|
|
# LLVM-NEXT: CGProfileEntry {
|
|
# LLVM-NEXT: From: bar (2)
|
|
# LLVM-NEXT: To: foo (1)
|
|
# LLVM-NEXT: Weight: 98
|
|
# LLVM-NEXT: }
|
|
# LLVM-NEXT: ]
|
|
|
|
# GNU: GNUStyle::printCGProfile not implemented
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 89
|
|
- Weight: 98
|
|
EntSize: [[ENTSIZE=<none>]]
|
|
- Name: .rel.llvm.call-graph-profile
|
|
Type: SHT_REL
|
|
Info: .llvm.call-graph-profile
|
|
Relocations:
|
|
- Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x0
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
Symbols:
|
|
- Name: foo
|
|
- Name: bar
|
|
|
|
## Check we report a warning when unable to get the content of the SHT_LLVM_CALL_GRAPH_PROFILE section.
|
|
# RUN: yaml2obj %s -DENTSIZE=0xF -o %t2.o
|
|
# RUN: llvm-readobj %t2.o --cg-profile 2>&1 | FileCheck %s -DFILE=%t2.o --check-prefix=LLVM-ERR
|
|
# RUN: llvm-readelf %t2.o --cg-profile | FileCheck %s --check-prefix=GNU
|
|
|
|
# LLVM-ERR: warning: '[[FILE]]': unable to load the SHT_LLVM_CALL_GRAPH_PROFILE section: section [index 1] has invalid sh_entsize: expected 8, but got 15
|
|
|
|
## Check we report a warning when unable to dump a name of a symbol.
|
|
# RUN: yaml2obj %s --docnum=2 -o %t3.o
|
|
# RUN: llvm-readobj %t3.o --cg-profile 2>&1 | FileCheck %s -DFILE=%t3.o --check-prefix=LLVM-BROKEN-SYM
|
|
# RUN: llvm-readelf %t3.o --cg-profile | FileCheck %s --check-prefix=GNU
|
|
|
|
# LLVM-BROKEN-SYM: CGProfile [
|
|
# LLVM-BROKEN-SYM-NEXT: CGProfileEntry {
|
|
# LLVM-BROKEN-SYM-NEXT: From: A (1)
|
|
# LLVM-BROKEN-SYM-NEXT: warning: '[[FILE]]': unable to read the name of symbol with index 2: st_name (0xff) is past the end of the string table of size 0x5
|
|
# LLVM-BROKEN-SYM-NEXT: To: <?> (2)
|
|
# LLVM-BROKEN-SYM-NEXT: Weight: 10
|
|
# LLVM-BROKEN-SYM-NEXT: }
|
|
# LLVM-BROKEN-SYM-NEXT: CGProfileEntry {
|
|
# LLVM-BROKEN-SYM-NEXT: From: <?> (2)
|
|
# LLVM-BROKEN-SYM-NEXT: To: B (3)
|
|
# LLVM-BROKEN-SYM-NEXT: Weight: 20
|
|
# LLVM-BROKEN-SYM-NEXT: }
|
|
# LLVM-BROKEN-SYM-NEXT: CGProfileEntry {
|
|
# LLVM-BROKEN-SYM-NEXT: From: (0)
|
|
# LLVM-BROKEN-SYM-NEXT: warning: '[[FILE]]': unable to read the name of symbol with index 4: unable to get symbol from section [index 4]: invalid symbol index (4)
|
|
# LLVM-BROKEN-SYM-NEXT: To: <?> (4)
|
|
# LLVM-BROKEN-SYM-NEXT: Weight: 20
|
|
# LLVM-BROKEN-SYM-NEXT: }
|
|
# LLVM-BROKEN-SYM-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 10
|
|
- Weight: 20
|
|
- Weight: 20
|
|
- Name: .rel.llvm.call-graph-profile
|
|
Type: SHT_REL
|
|
Info: .llvm.call-graph-profile
|
|
Relocations:
|
|
- Symbol: 1
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x0
|
|
Symbol: 2
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: 2
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: 3
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x10
|
|
Symbol: 0x0 ## Null symbol.
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x10
|
|
Symbol: 0x4 ## This index goes past the end of the symbol table.
|
|
Type: R_X86_64_NONE
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
Content: "0041004200" ## '\0', 'A', '\0', 'B', '\0'
|
|
Symbols:
|
|
- StName: 1 ## 'A'
|
|
- StName: 0xFF ## An arbitrary currupted index in the string table.
|
|
- StName: 3 ## 'B'
|
|
|
|
## Check we report a warning when a relocation section is not present.
|
|
# RUN: yaml2obj %s --docnum=3 -o %t4.o
|
|
# RUN: llvm-readobj %t4.o --cg-profile 2>&1 | FileCheck %s -DFILE=%t4.o --check-prefix=LLVM-NO-RELOC
|
|
# RUN: llvm-readobj %t4.o --elf-cg-profile 2>&1 | FileCheck %s -DFILE=%t4.o --check-prefix=LLVM-NO-RELOC
|
|
|
|
# LLVM-NO-RELOC: warning: '[[FILE]]': relocation section for a call graph section doesn't exist
|
|
# LLVM-NO-RELOC-NEXT: CGProfile [
|
|
# LLVM-NO-RELOC-NEXT: CGProfileEntry {
|
|
# LLVM-NO-RELOC-NEXT: Weight: 89
|
|
# LLVM-NO-RELOC-NEXT: }
|
|
# LLVM-NO-RELOC-NEXT: CGProfileEntry {
|
|
# LLVM-NO-RELOC-NEXT: Weight: 98
|
|
# LLVM-NO-RELOC-NEXT: }
|
|
# LLVM-NO-RELOC-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 89
|
|
- Weight: 98
|
|
Symbols:
|
|
- Name: foo
|
|
- Name: bar
|
|
|
|
## Check we report a warning when the number of relocation section entries does not match the number of call graph entries.
|
|
# RUN: yaml2obj %s --docnum=4 -o %t5.o
|
|
# RUN: llvm-readobj %t5.o --cg-profile 2>&1 | FileCheck %s -DFILE=%t5.o --check-prefix=LLVM-RELOC-GRAPH-NOT-MATCH
|
|
# RUN: llvm-readobj %t5.o --elf-cg-profile 2>&1 | FileCheck %s -DFILE=%t5.o --check-prefix=LLVM-RELOC-GRAPH-NOT-MATCH
|
|
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH: warning: '[[FILE]]': number of from/to pairs does not match number of frequencies
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: CGProfile [
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: CGProfileEntry {
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: Weight: 89
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: }
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: CGProfileEntry {
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: Weight: 98
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: }
|
|
# LLVM-RELOC-GRAPH-NOT-MATCH-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 89
|
|
- Weight: 98
|
|
- Name: .rel.llvm.call-graph-profile
|
|
Type: SHT_REL
|
|
Info: .llvm.call-graph-profile
|
|
Relocations:
|
|
- Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x0
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x10
|
|
Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
Symbols:
|
|
- Name: foo
|
|
- Name: bar
|
|
|
|
## Check we report a warning when a REL relocation section can't be loaded.
|
|
# RUN: yaml2obj %s --docnum=5 -o %t6.o
|
|
# RUN: llvm-readobj %t6.o --cg-profile 2>&1 | FileCheck %s -DFILE=%t6.o --check-prefix=LLVM-RELOC-WRONG-SIZE
|
|
# RUN: llvm-readobj %t6.o --elf-cg-profile 2>&1 | FileCheck %s -DFILE=%t6.o --check-prefix=LLVM-RELOC-WRONG-SIZE
|
|
|
|
# LLVM-RELOC-WRONG-SIZE: warning: '[[FILE]]': unable to load relocations for SHT_LLVM_CALL_GRAPH_PROFILE section: section [index 2] has invalid sh_entsize: expected 16, but got 24
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: CGProfile [
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: CGProfileEntry {
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: Weight: 89
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: }
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: CGProfileEntry {
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: Weight: 98
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: }
|
|
# LLVM-RELOC-WRONG-SIZE-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 89
|
|
- Weight: 98
|
|
- Name: .rel.llvm.call-graph-profile
|
|
Type: SHT_REL
|
|
Info: .llvm.call-graph-profile
|
|
Relocations:
|
|
- Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x0
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
EntSize: 24
|
|
Symbols:
|
|
- Name: foo
|
|
- Name: bar
|
|
|
|
## GNU strip may convert SHT_REL to SHT_RELA. Test we can handle SHT_RELA.
|
|
# RUN: yaml2obj %s --docnum=6 -o %t7.o
|
|
# RUN: llvm-readobj %t7.o --cg-profile | FileCheck %s --check-prefix=LLVM-RELA
|
|
# RUN: llvm-readelf %t7.o --cg-profile | FileCheck %s --check-prefix=GNU-RELA
|
|
|
|
# LLVM-RELA: CGProfile [
|
|
# LLVM-RELA-NEXT: CGProfileEntry {
|
|
# LLVM-RELA-NEXT: From: foo (1)
|
|
# LLVM-RELA-NEXT: To: bar (2)
|
|
# LLVM-RELA-NEXT: Weight: 89
|
|
# LLVM-RELA-NEXT: }
|
|
# LLVM-RELA-NEXT: CGProfileEntry {
|
|
# LLVM-RELA-NEXT: From: bar (2)
|
|
# LLVM-RELA-NEXT: To: foo (1)
|
|
# LLVM-RELA-NEXT: Weight: 98
|
|
# LLVM-RELA-NEXT: }
|
|
# LLVM-RELA-NEXT: ]
|
|
|
|
# GNU-RELA: GNUStyle::printCGProfile not implemented
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 89
|
|
- Weight: 98
|
|
- Name: .rela.llvm.call-graph-profile
|
|
Type: SHT_RELA
|
|
Info: .llvm.call-graph-profile
|
|
Relocations:
|
|
- Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x0
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
Symbols:
|
|
- Name: foo
|
|
- Name: bar
|
|
|
|
## Check we report a warning when a RELA relocation section can't be loaded.
|
|
# RUN: yaml2obj %s --docnum=7 -o %t8.o
|
|
# RUN: llvm-readobj %t8.o --cg-profile 2>&1 | FileCheck %s -DFILE=%t8.o --check-prefix=LLVM-RELOC-WRONG-SIZE-RELA
|
|
# RUN: llvm-readobj %t8.o --elf-cg-profile 2>&1 | FileCheck %s -DFILE=%t8.o --check-prefix=LLVM-RELOC-WRONG-SIZE-RELA
|
|
|
|
# LLVM-RELOC-WRONG-SIZE-RELA: warning: '[[FILE]]': unable to load relocations for SHT_LLVM_CALL_GRAPH_PROFILE section: section [index 2] has invalid sh_entsize: expected 24, but got 16
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: CGProfile [
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: CGProfileEntry {
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: Weight: 89
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: }
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: CGProfileEntry {
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: Weight: 98
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: }
|
|
# LLVM-RELOC-WRONG-SIZE-RELA-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .llvm.call-graph-profile
|
|
Type: SHT_LLVM_CALL_GRAPH_PROFILE
|
|
Entries:
|
|
- Weight: 89
|
|
- Weight: 98
|
|
- Name: .rela.llvm.call-graph-profile
|
|
Type: SHT_RELA
|
|
Info: .llvm.call-graph-profile
|
|
Relocations:
|
|
- Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x0
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: bar
|
|
Type: R_X86_64_NONE
|
|
- Offset: 0x8
|
|
Symbol: foo
|
|
Type: R_X86_64_NONE
|
|
EntSize: 16
|
|
Symbols:
|
|
- Name: foo
|
|
- Name: bar
|