| # REQUIRES: x86 |
| # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o |
| |
| # RUN: %lld -lSystem --icf=all %t.o -o %t |
| # RUN: dsymutil -s %t | FileCheck %s -DDIR=%t -DSRC_PATH=%t.o |
| |
| ## This should include no N_FUN entry for _baz (which is ICF'd into _bar), |
| ## but it does include a SECT EXT entry. |
| ## NOTE: We do not omit the N_FUN entry for _bar even though it is of size zero. |
| ## Only folded symbols get omitted. |
| ## NOTE: Unlike ld64, we also omit the N_FUN entry for _baz2. |
| # CHECK: (N_SO ) 00 0000 0000000000000000 '/tmp{{[/\\]}}test.cpp' |
| # CHECK-NEXT: (N_OSO ) 03 0001 {{.*}} '[[SRC_PATH]]' |
| # CHECK-NEXT: (N_FUN ) 01 0000 [[#%.16x,MAIN:]] '_main' |
| # CHECK-NEXT: (N_FUN ) 00 0000 000000000000000b{{$}} |
| # CHECK-NEXT: (N_FUN ) 01 0000 [[#%.16x,BAR:]] '_bar' |
| # CHECK-NEXT: (N_FUN ) 00 0000 0000000000000000{{$}} |
| # CHECK-NEXT: (N_FUN ) 01 0000 [[#BAR]] '_bar2' |
| # CHECK-NEXT: (N_FUN ) 00 0000 0000000000000001{{$}} |
| # CHECK-NEXT: (N_SO ) 01 0000 0000000000000000{{$}} |
| # CHECK-DAG: ( SECT EXT) 01 0000 [[#MAIN]] '_main' |
| # CHECK-DAG: ( SECT EXT) 01 0000 [[#BAR]] '_bar' |
| # CHECK-DAG: ( SECT EXT) 01 0000 [[#BAR]] '_bar2' |
| # CHECK-DAG: ( SECT EXT) 01 0000 [[#BAR]] '_baz' |
| # CHECK-DAG: ( SECT EXT) 01 0000 [[#BAR]] '_baz2' |
| # CHECK-DAG: ( {{.*}}) {{[0-9]+}} 0010 {{[0-9a-f]+}} '__mh_execute_header' |
| # CHECK-DAG: ( {{.*}}) {{[0-9]+}} 0100 0000000000000000 'dyld_stub_binder' |
| # CHECK-EMPTY: |
| |
| .text |
| .globl _bar, _bar2, _baz, _baz2, _main |
| |
| .subsections_via_symbols |
| |
| _bar: |
| _bar2: |
| ret |
| |
| _baz: |
| _baz2: |
| ret |
| |
| _main: |
| Lfunc_begin0: |
| call _bar |
| call _baz |
| ret |
| Lfunc_end0: |
| |
| .section __DWARF,__debug_str,regular,debug |
| .asciz "test.cpp" ## string offset=0 |
| .asciz "/tmp" ## string offset=9 |
| .section __DWARF,__debug_abbrev,regular,debug |
| Lsection_abbrev: |
| .byte 1 ## Abbreviation Code |
| .byte 17 ## DW_TAG_compile_unit |
| .byte 1 ## DW_CHILDREN_yes |
| .byte 3 ## DW_AT_name |
| .byte 14 ## DW_FORM_strp |
| .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 0 ## EOM(3) |
| .section __DWARF,__debug_info,regular,debug |
| .set Lset0, Ldebug_info_end0-Ldebug_info_start0 ## Length of Unit |
| .long Lset0 |
| Ldebug_info_start0: |
| .short 4 ## DWARF version number |
| .set Lset1, Lsection_abbrev-Lsection_abbrev ## Offset Into Abbrev. Section |
| .long Lset1 |
| .byte 8 ## Address Size (in bytes) |
| .byte 1 ## Abbrev [1] 0xb:0x48 DW_TAG_compile_unit |
| .long 0 ## DW_AT_name |
| .long 9 ## DW_AT_comp_dir |
| .quad Lfunc_begin0 ## DW_AT_low_pc |
| .set Lset3, Lfunc_end0-Lfunc_begin0 ## DW_AT_high_pc |
| .long Lset3 |
| .byte 0 ## End Of Children Mark |
| Ldebug_info_end0: |