|  | 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:    #0    0x00000000000000fe (a.o+0xee) | 
|  | ERR: warning: expected at most 3 field(s); found 4 | 
|  | CHECK: [[BEGIN]]bt:0:0x111[[END]] | 
|  | ERR: error: no mmap covers address | 
|  |  | 
|  | ERR: error: expected at least 2 field(s); found 0 | 
|  | ERR: error: expected PC type; found '' | 
|  |  | 
|  | ;--- 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:0:0xff:pc:ext}}} | 
|  | {{{bt:0:0x111}}} | 
|  |  | 
|  | {{{bt}}} | 
|  | {{{bt:0:0:}}} | 
|  | ;--- 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: |