# REQUIRES: x86-registered-target ## Test that the relative names option to llvm-symbolizer works properly. ## See llvm/docs/CommandGuide/llvm-symbolizer.rst for commands ## that would produce this test case # RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o %t.o # RUN: llvm-symbolizer 0 --relativenames --obj=%t.o \ # RUN: | FileCheck %s -DDIR=%p --check-prefix=RELATIVENAMES ## Sanity check for default. # RUN: llvm-symbolizer 0 --obj=%t.o \ # RUN: | FileCheck %s -DDIR=%p --check-prefix=ABSOLUTENAMES ## Ensure last option wins. # RUN: llvm-symbolizer 0 --basenames --relativenames --obj=%t.o \ # RUN: | FileCheck %s -DDIR=%p --check-prefix=RELATIVENAMES # RUN: llvm-symbolizer 0 --relativenames --basenames --obj=%t.o \ # RUN: | FileCheck %s --check-prefix=BASENAMES # ABSOLUTENAMES: {{\\|/}}tmp{{\\|/}}foo{{\\|/}}relativenames.s:4 # RELATIVENAMES: {{^}}foo{{\\|/}}relativenames.s:4 # BASENAMES: {{^}}relativenames.s:4 ## Provide just enough info in debug info for the symbolizer ## to find the line table. .section .debug_abbrev,"",@progbits .byte 0x01 ## Abbreviation Code .byte 0x11 ## DW_TAG_compile_unit .byte 0x01 ## DW_CHILDREN_yes .byte 0x10 ## DW_AT_stmt_list .byte 0x17 ## DW_FORM_sec_offset .byte 0x11 ## DW_AT_low_pc .byte 0x01 ## DW_FORM_addr .byte 0x12 ## DW_AT_high_pc .byte 0x01 ## DW_FORM_addr .byte 0x1b ## DW_AT_comp_dir .byte 0x08 ## DW_FORM_string .byte 0x03 ## DW_AT_name .byte 0x08 ## DW_FORM_string .byte 0x00 ## EOM(1) .byte 0x00 ## EOM(2) .byte 0x02 ## Abbreviation Code .byte 0x2e ## DW_TAG_subprogram .byte 0x0 ## DW_CHILDREN_no .byte 0x11 ## DW_AT_low_pc .byte 0x01 ## DW_FORM_addr .byte 0x12 ## DW_AT_high_pc .byte 0x01 ## DW_FORM_addr .byte 0x00 ## EOM(1) .byte 0x00 ## EOM(2) .byte 0x00 ## EOM(3) .section .debug_info,"",@progbits .long .Ldebug_info_end-.Ldebug_info_start ## length .Ldebug_info_start: .short 0x05 ## version .byte 0x01 ## DW_TAG_compile_unit .byte 0x08 ## address size .long .debug_abbrev ## offset into abbrev section .byte 0x01 ## cu abbrev code .long .debug_line ## DW_AT_stmt_list .quad 0x00 ## DW_AT_low_pc .quad 0x01 ## DW_AT_high_pc .asciz "/tmp" ## DW_AT_comp_dir .asciz "foo/relativenames.s" ## DW_AT_name .byte 0x02 ## subprog abbrev code .quad 0x00 ## DW_AT_low_pc .quad 0x01 ## DW_AT_high_pc .Ldebug_info_end: .section .debug_line,"",@progbits .long .Lunit_end - .Lunit_begin ## unit_length .Lunit_begin: .short 0x05 ## version .byte 0x08 ## address_size .byte 0x00 ## segment_selector_size .long .Lheader_end - .Lheader_begin ## header_length .Lheader_begin: .byte 0x01 ## minimum_instruction_length .byte 0x01 ## maximum_operations_per_instruction .byte 0x01 ## default_is_stmt .byte 0xfb ## line_base .byte 0x0e ## line_range .byte 0x0d ## opcode_base and lengths .byte 0x00, 0x01, 0x01, 0x01, 0x01, 0x00 .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x01 .byte 0x01 ## directory entry format count .byte 0x01, 0x8 ## DW_LNCT_path, DW_FORM_string .byte 0x01 ## directories count .asciz "/tmp" ## directory entry 0 .byte 0x02 ## file_name_entry_format_count .byte 0x02, 0x0B ## DW_LNCT_directory_index, DW_FORM_data1 .byte 0x01, 0x08 ## DW_LNCT_path, DW_FORM_string .byte 0x01 ## filname count .byte 0x00 ## directory index .asciz "foo/relativenames.s" .Lheader_end: .byte 0x04, 0x00 ## set file to zero ## set address to 0x0 .byte 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 .byte 0x15 ## Advance Address by 0 and line by 3 .byte 0x02, 0x01 ## Advance PC by 1 .byte 0x0, 0x1, 0x1 ## DW_LNE_end_sequence .Lunit_end: