| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,213 @@ | ||
| REQUIRES: x86-registered-target | ||
| RUN: split-file %s %t | ||
| RUN: mkdir -p %t/.build-id/ab | ||
| RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t/asm.s \ | ||
| RUN: -o %t/.build-id/ab/cdef.debug | ||
| RUN: llvm-symbolizer --debug-file-directory=%t --filter-markup < %t/input \ | ||
| RUN: > %t.output 2> %t.err | ||
| RUN: FileCheck %s --input-file=%t.output --match-full-lines \ | ||
| RUN: --implicit-check-not {{.}} | ||
| RUN: FileCheck %s --check-prefix=ERR --input-file=%t.err --match-full-lines | ||
|
|
||
| CHECK: [[BEGIN:\[{3}]]ELF module #0x0 "a.o"; BuildID=abcdef [0x10-0x10f](r)[[END:\]{3}]] | ||
| CHECK: #0.1 0x0000000000000018 second /tmp[[SEP:[/\\]]]tmp.c:8:3 (a.o+0x8) | ||
| CHECK: #0 0x0000000000000018 first /tmp[[SEP]]tmp.c:4:3 (a.o+0x8) | ||
| CHECK: #1.1 0x0000000000000018 second /tmp[[SEP]]tmp.c:8:3 (a.o+0x8) | ||
| CHECK: #1 0x0000000000000018 first /tmp[[SEP]]tmp.c:4:3 (a.o+0x8) | ||
| CHECK: #0.1 0x0000000000000018 second /tmp[[SEP]]tmp.c:8:3 (a.o+0x8) | ||
| CHECK: #0 0x0000000000000018 first /tmp[[SEP]]tmp.c:4:3 (a.o+0x8) | ||
| CHECK: #0 0x0000000000000019 first /tmp[[SEP]]tmp.c:5:1 (a.o+0x9) | ||
| CHECK: #0 0x00000000000000fe (a.o+0xee) | ||
| CHECK: [[BEGIN]]bt:0:0x111[[END]] | ||
|
|
||
| ERR: error: expected at least 2 field(s); found 0 | ||
| ERR: error: no mmap covers address | ||
| ERR: error: expected PC type; found '' | ||
| ERR: error: expected at most 3 field(s); found 4 | ||
|
|
||
| ;--- input | ||
| {{{module:0:a.o:elf:abcdef}}} | ||
| {{{mmap:0x10:256:load:0:r:0}}} | ||
| {{{bt:0:0x19}}} | ||
| {{{bt:1:0x19}}} | ||
| {{{bt:0:0x19:ra}}} | ||
| {{{bt:0:0x19:pc}}} | ||
| {{{bt:0:0xff}}} | ||
|
|
||
| {{{bt}}} | ||
| {{{bt:0:0x111}}} | ||
| {{{bt:0:0:}}} | ||
| {{{bt:0:0:pc:}}} | ||
| ;--- asm.s | ||
| # Generated by running "clang -finline -g -S tmp.c" in the following tmp.c on | ||
| # Linux x86_64: | ||
| # | ||
| # static void second(void); | ||
| # void first(void) { | ||
| # second(); | ||
| # } | ||
| # void second(void) {} | ||
| .text | ||
| .file "tmp.c" | ||
| .globl first # -- Begin function first | ||
| .p2align 4, 0x90 | ||
| .type first,@function | ||
| first: # @first | ||
| .Lfunc_begin0: | ||
| .file 1 "/tmp" "tmp.c" | ||
| .loc 1 3 0 # tmp.c:3:0 | ||
| .cfi_startproc | ||
| # %bb.0: | ||
| pushq %rbp | ||
| .cfi_def_cfa_offset 16 | ||
| .cfi_offset %rbp, -16 | ||
| movq %rsp, %rbp | ||
| .cfi_def_cfa_register %rbp | ||
| .Ltmp0: | ||
| .loc 1 8 3 prologue_end # tmp.c:8:3 | ||
| callq first | ||
| .Ltmp1: | ||
| .loc 1 5 1 # tmp.c:5:1 | ||
| popq %rbp | ||
| .cfi_def_cfa %rsp, 8 | ||
| retq | ||
| .Ltmp2: | ||
| .Lfunc_end0: | ||
| .size first, .Lfunc_end0-first | ||
| .cfi_endproc | ||
| # -- End function | ||
| .section .debug_abbrev,"",@progbits | ||
| .byte 1 # Abbreviation Code | ||
| .byte 17 # DW_TAG_compile_unit | ||
| .byte 1 # DW_CHILDREN_yes | ||
| .byte 37 # DW_AT_producer | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 19 # DW_AT_language | ||
| .byte 5 # DW_FORM_data2 | ||
| .byte 3 # DW_AT_name | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 16 # DW_AT_stmt_list | ||
| .byte 23 # DW_FORM_sec_offset | ||
| .byte 27 # DW_AT_comp_dir | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 17 # DW_AT_low_pc | ||
| .byte 1 # DW_FORM_addr | ||
| .byte 18 # DW_AT_high_pc | ||
| .byte 6 # DW_FORM_data4 | ||
| .byte 0 # EOM(1) | ||
| .byte 0 # EOM(2) | ||
| .byte 2 # Abbreviation Code | ||
| .byte 46 # DW_TAG_subprogram | ||
| .byte 0 # DW_CHILDREN_no | ||
| .byte 3 # DW_AT_name | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 58 # DW_AT_decl_file | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 59 # DW_AT_decl_line | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 39 # DW_AT_prototyped | ||
| .byte 25 # DW_FORM_flag_present | ||
| .byte 63 # DW_AT_external | ||
| .byte 25 # DW_FORM_flag_present | ||
| .byte 32 # DW_AT_inline | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 0 # EOM(1) | ||
| .byte 0 # EOM(2) | ||
| .byte 3 # Abbreviation Code | ||
| .byte 46 # DW_TAG_subprogram | ||
| .byte 1 # DW_CHILDREN_yes | ||
| .byte 17 # DW_AT_low_pc | ||
| .byte 1 # DW_FORM_addr | ||
| .byte 18 # DW_AT_high_pc | ||
| .byte 6 # DW_FORM_data4 | ||
| .byte 64 # DW_AT_frame_base | ||
| .byte 24 # DW_FORM_exprloc | ||
| .byte 3 # DW_AT_name | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 58 # DW_AT_decl_file | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 59 # DW_AT_decl_line | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 39 # DW_AT_prototyped | ||
| .byte 25 # DW_FORM_flag_present | ||
| .byte 63 # DW_AT_external | ||
| .byte 25 # DW_FORM_flag_present | ||
| .byte 0 # EOM(1) | ||
| .byte 0 # EOM(2) | ||
| .byte 4 # Abbreviation Code | ||
| .byte 29 # DW_TAG_inlined_subroutine | ||
| .byte 0 # DW_CHILDREN_no | ||
| .byte 49 # DW_AT_abstract_origin | ||
| .byte 19 # DW_FORM_ref4 | ||
| .byte 17 # DW_AT_low_pc | ||
| .byte 1 # DW_FORM_addr | ||
| .byte 18 # DW_AT_high_pc | ||
| .byte 6 # DW_FORM_data4 | ||
| .byte 88 # DW_AT_call_file | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 89 # DW_AT_call_line | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 87 # DW_AT_call_column | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 0 # EOM(1) | ||
| .byte 0 # EOM(2) | ||
| .byte 0 # EOM(3) | ||
| .section .debug_info,"",@progbits | ||
| .Lcu_begin0: | ||
| .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit | ||
| .Ldebug_info_start0: | ||
| .short 4 # DWARF version number | ||
| .long .debug_abbrev # Offset Into Abbrev. Section | ||
| .byte 8 # Address Size (in bytes) | ||
| .byte 1 # Abbrev [1] 0xb:0x52 DW_TAG_compile_unit | ||
| .long .Linfo_string0 # DW_AT_producer | ||
| .short 12 # DW_AT_language | ||
| .long .Linfo_string1 # DW_AT_name | ||
| .long .Lline_table_start0 # DW_AT_stmt_list | ||
| .long .Linfo_string2 # DW_AT_comp_dir | ||
| .quad .Lfunc_begin0 # DW_AT_low_pc | ||
| .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc | ||
| .byte 2 # Abbrev [2] 0x2a:0x8 DW_TAG_subprogram | ||
| .long .Linfo_string3 # DW_AT_name | ||
| .byte 1 # DW_AT_decl_file | ||
| .byte 7 # DW_AT_decl_line | ||
| # DW_AT_prototyped | ||
| # DW_AT_external | ||
| .byte 1 # DW_AT_inline | ||
| .byte 3 # Abbrev [3] 0x32:0x2a DW_TAG_subprogram | ||
| .quad .Lfunc_begin0 # DW_AT_low_pc | ||
| .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc | ||
| .byte 1 # DW_AT_frame_base | ||
| .byte 86 | ||
| .long .Linfo_string4 # DW_AT_name | ||
| .byte 1 # DW_AT_decl_file | ||
| .byte 3 # DW_AT_decl_line | ||
| # DW_AT_prototyped | ||
| # DW_AT_external | ||
| .byte 4 # Abbrev [4] 0x47:0x14 DW_TAG_inlined_subroutine | ||
| .long 42 # DW_AT_abstract_origin | ||
| .quad .Ltmp0 # DW_AT_low_pc | ||
| .long .Ltmp1-.Ltmp0 # DW_AT_high_pc | ||
| .byte 1 # DW_AT_call_file | ||
| .byte 4 # DW_AT_call_line | ||
| .byte 3 # DW_AT_call_column | ||
| .byte 0 # End Of Children Mark | ||
| .byte 0 # End Of Children Mark | ||
| .Ldebug_info_end0: | ||
| .section .debug_str,"MS",@progbits,1 | ||
| .Linfo_string0: | ||
| .asciz "Debian clang version 13.0.1-6" # string offset=0 | ||
| .Linfo_string1: | ||
| .asciz "tmp.c" # string offset=30 | ||
| .Linfo_string2: | ||
| .asciz "/tmp" # string offset=36 | ||
| .Linfo_string3: | ||
| .asciz "second" # string offset=85 | ||
| .Linfo_string4: | ||
| .asciz "first" # string offset=92 | ||
| .ident "Debian clang version 13.0.1-6" | ||
| .section ".note.GNU-stack","",@progbits | ||
| .addrsig | ||
| .addrsig_sym first | ||
| .section .debug_line,"",@progbits | ||
| .Lline_table_start0: |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| REQUIRES: x86-registered-target | ||
| RUN: split-file %s %t | ||
| RUN: mkdir -p %t/.build-id/ab | ||
| RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t/asm.s \ | ||
| RUN: -o %t/.build-id/ab/cdef.debug | ||
| RUN: llvm-symbolizer --debug-file-directory=%t --filter-markup < %t/input \ | ||
| RUN: > %t.output 2> %t.err | ||
| RUN: FileCheck %s --input-file=%t.output --match-full-lines \ | ||
| RUN: --implicit-check-not {{.}} | ||
| RUN: FileCheck %s --check-prefix=ERR --input-file=%t.err --match-full-lines | ||
|
|
||
| CHECK: [[BEGIN:\[{3}]]ELF module #0x0 "a.o"; BuildID=abcdef [0x0-0x4](r),[0x10-0x11](r)[[END:\]{3}]] | ||
| CHECK: long long byte | ||
| CHECK: long byte | ||
| CHECK: [[BEGIN]]data:0x5[[END]] | ||
|
|
||
| ERR: error: expected 1 field(s); found 0 | ||
| ERR: error: no mmap covers address | ||
|
|
||
| ;--- input | ||
| {{{module:0:a.o:elf:abcdef}}} | ||
| {{{mmap:0:5:load:0:r:0}}} | ||
| {{{mmap:0x10:2:load:0:r:0x3}}} | ||
| {{{data:0x0}}} {{{data:0x1}}} {{{data:0x4}}} | ||
| {{{data:0x10}}} {{{data:0x11}}} | ||
|
|
||
| {{{data}}} | ||
| {{{data:0x5}}} | ||
| ;--- asm.s | ||
| long: | ||
| .long 0x11223344 | ||
| .size long, 4 | ||
| byte: | ||
| .byte 0x42 | ||
| .size byte, 1 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,188 @@ | ||
| REQUIRES: x86-registered-target | ||
| RUN: split-file %s %t | ||
| RUN: mkdir -p %t/.build-id/ab | ||
| RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t/asm.s \ | ||
| RUN: -o %t/.build-id/ab/cdef.debug | ||
| RUN: llvm-symbolizer --debug-file-directory=%t --filter-markup < %t/input \ | ||
| RUN: > %t.output 2> %t.err | ||
| RUN: FileCheck %s --input-file=%t.output --match-full-lines \ | ||
| RUN: --implicit-check-not {{.}} | ||
| RUN: FileCheck %s --check-prefix=ERR --input-file=%t.err --match-full-lines | ||
|
|
||
| CHECK: [[BEGIN:\[{3}]]ELF module #0x0 "a.o"; BuildID=abcdef [0x0-0xff](r)[[END:\]{3}]] | ||
| CHECK: first[/dir[[SEP:[/\\]]]tmp.c:3] | ||
| CHECK: first[/dir[[SEP]]tmp.c:5] | ||
| CHECK: first[/dir[[SEP]]tmp.c:4] | ||
| CHECK: first[/dir[[SEP]]tmp.c:5] | ||
| CHECK: [[BEGIN]]pc:0xff[[END]] | ||
| CHECK: [[BEGIN]]pc:0x100[[END]] | ||
|
|
||
| ERR: error: expected at least 1 field(s); found 0 | ||
| ERR: error: no mmap covers address | ||
| ERR: error: expected PC type; found '' | ||
| ERR: error: expected at most 2 field(s); found 3 | ||
|
|
||
| ;--- input | ||
| {{{module:0:a.o:elf:abcdef}}} | ||
| {{{mmap:0:256:load:0:r:0}}} | ||
| {{{pc:0}}} | ||
| {{{pc:0x9}}} | ||
| {{{pc:0x9:ra}}} | ||
| {{{pc:0x9:pc}}} | ||
| {{{pc:0xff}}} | ||
|
|
||
| {{{pc}}} | ||
| {{{pc:0x100}}} | ||
| {{{pc:0x9:}}} | ||
| {{{pc:0x9:pc:}}} | ||
| ;--- asm.s | ||
| .text | ||
| .file "tmp.c" | ||
| .globl first # -- Begin function first | ||
| .p2align 4, 0x90 | ||
| .type first,@function | ||
| first: # @first | ||
| .Lfunc_begin0: | ||
| .file 1 "/dir" "tmp.c" | ||
| .loc 1 3 0 # tmp.c:3:0 | ||
| .cfi_startproc | ||
| # %bb.0: | ||
| pushq %rbp | ||
| .cfi_def_cfa_offset 16 | ||
| .cfi_offset %rbp, -16 | ||
| movq %rsp, %rbp | ||
| .cfi_def_cfa_register %rbp | ||
| .Ltmp0: | ||
| .loc 1 4 3 prologue_end # tmp.c:4:3 | ||
| callq second | ||
| .loc 1 5 1 # tmp.c:5:1 | ||
| popq %rbp | ||
| .cfi_def_cfa %rsp, 8 | ||
| retq | ||
| .Ltmp1: | ||
| .Lfunc_end0: | ||
| .size first, .Lfunc_end0-first | ||
| .cfi_endproc | ||
| # -- End function | ||
| .globl second # -- Begin function second | ||
| .p2align 4, 0x90 | ||
| .type second,@function | ||
| second: # @second | ||
| .Lfunc_begin1: | ||
| .loc 1 7 0 # tmp.c:7:0 | ||
| .cfi_startproc | ||
| # %bb.0: | ||
| pushq %rbp | ||
| .cfi_def_cfa_offset 16 | ||
| .cfi_offset %rbp, -16 | ||
| movq %rsp, %rbp | ||
| .cfi_def_cfa_register %rbp | ||
| .Ltmp2: | ||
| .loc 1 8 3 prologue_end # tmp.c:8:3 | ||
| callq first | ||
| .loc 1 9 1 # tmp.c:9:1 | ||
| popq %rbp | ||
| .cfi_def_cfa %rsp, 8 | ||
| retq | ||
| .Ltmp3: | ||
| .Lfunc_end1: | ||
| .size second, .Lfunc_end1-second | ||
| .cfi_endproc | ||
| # -- End function | ||
| .section .debug_abbrev,"",@progbits | ||
| .byte 1 # Abbreviation Code | ||
| .byte 17 # DW_TAG_compile_unit | ||
| .byte 1 # DW_CHILDREN_yes | ||
| .byte 37 # DW_AT_producer | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 19 # DW_AT_language | ||
| .byte 5 # DW_FORM_data2 | ||
| .byte 3 # DW_AT_name | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 16 # DW_AT_stmt_list | ||
| .byte 23 # DW_FORM_sec_offset | ||
| .byte 27 # DW_AT_comp_dir | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 17 # DW_AT_low_pc | ||
| .byte 1 # DW_FORM_addr | ||
| .byte 18 # DW_AT_high_pc | ||
| .byte 6 # DW_FORM_data4 | ||
| .byte 0 # EOM(1) | ||
| .byte 0 # EOM(2) | ||
| .byte 2 # Abbreviation Code | ||
| .byte 46 # DW_TAG_subprogram | ||
| .byte 0 # DW_CHILDREN_no | ||
| .byte 17 # DW_AT_low_pc | ||
| .byte 1 # DW_FORM_addr | ||
| .byte 18 # DW_AT_high_pc | ||
| .byte 6 # DW_FORM_data4 | ||
| .byte 64 # DW_AT_frame_base | ||
| .byte 24 # DW_FORM_exprloc | ||
| .byte 3 # DW_AT_name | ||
| .byte 14 # DW_FORM_strp | ||
| .byte 58 # DW_AT_decl_file | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 59 # DW_AT_decl_line | ||
| .byte 11 # DW_FORM_data1 | ||
| .byte 39 # DW_AT_prototyped | ||
| .byte 25 # DW_FORM_flag_present | ||
| .byte 63 # DW_AT_external | ||
| .byte 25 # DW_FORM_flag_present | ||
| .byte 0 # EOM(1) | ||
| .byte 0 # EOM(2) | ||
| .byte 0 # EOM(3) | ||
| .section .debug_info,"",@progbits | ||
| .Lcu_begin0: | ||
| .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit | ||
| .Ldebug_info_start0: | ||
| .short 4 # DWARF version number | ||
| .long .debug_abbrev # Offset Into Abbrev. Section | ||
| .byte 8 # Address Size (in bytes) | ||
| .byte 1 # Abbrev [1] 0xb:0x4a DW_TAG_compile_unit | ||
| .long .Linfo_string0 # DW_AT_producer | ||
| .short 12 # DW_AT_language | ||
| .long .Linfo_string1 # DW_AT_name | ||
| .long .Lline_table_start0 # DW_AT_stmt_list | ||
| .long .Linfo_string2 # DW_AT_comp_dir | ||
| .quad .Lfunc_begin0 # DW_AT_low_pc | ||
| .long .Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc | ||
| .byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_subprogram | ||
| .quad .Lfunc_begin0 # DW_AT_low_pc | ||
| .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc | ||
| .byte 1 # DW_AT_frame_base | ||
| .byte 86 | ||
| .long .Linfo_string3 # DW_AT_name | ||
| .byte 1 # DW_AT_decl_file | ||
| .byte 3 # DW_AT_decl_line | ||
| # DW_AT_prototyped | ||
| # DW_AT_external | ||
| .byte 2 # Abbrev [2] 0x3f:0x15 DW_TAG_subprogram | ||
| .quad .Lfunc_begin1 # DW_AT_low_pc | ||
| .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc | ||
| .byte 1 # DW_AT_frame_base | ||
| .byte 86 | ||
| .long .Linfo_string4 # DW_AT_name | ||
| .byte 1 # DW_AT_decl_file | ||
| .byte 7 # DW_AT_decl_line | ||
| # DW_AT_prototyped | ||
| # DW_AT_external | ||
| .byte 0 # End Of Children Mark | ||
| .Ldebug_info_end0: | ||
| .section .debug_str,"MS",@progbits,1 | ||
| .Linfo_string0: | ||
| .asciz "clang" # string offset=0 | ||
| .Linfo_string1: | ||
| .asciz "tmp.c" # string offset=30 | ||
| .Linfo_string2: | ||
| .asciz "/dir" # string offset=36 | ||
| .Linfo_string3: | ||
| .asciz "first" # string offset=85 | ||
| .Linfo_string4: | ||
| .asciz "second" # string offset=91 | ||
| .ident "clang" | ||
| .section ".note.GNU-stack","",@progbits | ||
| .addrsig | ||
| .addrsig_sym first | ||
| .addrsig_sym second | ||
| .section .debug_line,"",@progbits | ||
| .Lline_table_start0: |