| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| RUN: rm -rf %t | ||
| RUN: mkdir -p %t/dsymdest | ||
| RUN: cat %p/../../Inputs/basic.macho.x86_64 > %t/basic.macho.x86_64 | ||
|
|
||
| RUN: dsymutil --linker llvm -accelerator=Pub -oso-prepend-path=%p/../.. %t/basic.macho.x86_64 | ||
|
|
||
| Check that the object file in the bundle exists and is sane: | ||
| RUN: llvm-dwarfdump -a %t/basic.macho.x86_64.dSYM/Contents/Resources/DWARF/basic.macho.x86_64 | FileCheck %S/basic-linking-x86.test | ||
|
|
||
| Check that we don't create an empty Remarks directory if there are no remarks. | ||
| RUN: not ls %t/basic.macho.x86_64.dSYM/Contents/Resources/Remarks | ||
|
|
||
| Check that llvm-dwarfdump -a recognizes the bundle as a dSYM: | ||
| RUN: llvm-dwarfdump -a %t/basic.macho.x86_64.dSYM | FileCheck %S/basic-linking-x86.test | ||
|
|
||
| RUN: FileCheck %s --input-file %t/basic.macho.x86_64.dSYM/Contents/Info.plist | ||
|
|
||
| RUN: dsymutil --linker llvm -oso-prepend-path=%p/../.. %t/basic.macho.x86_64 -o %t/dsymdest/basic.macho.x86_64.dSYM | ||
| RUN: llvm-dwarfdump -a %t/dsymdest/basic.macho.x86_64.dSYM/Contents/Resources/DWARF/basic.macho.x86_64 | FileCheck %S/basic-linking-x86.test | ||
| RUN: FileCheck %s --input-file %t/dsymdest/basic.macho.x86_64.dSYM/Contents/Info.plist | ||
|
|
||
| CHECK: <?xml version="1.0" encoding="UTF-8"?> | ||
| CHECK-NEXT: <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| CHECK-NEXT: <plist version="1.0"> | ||
| CHECK-NEXT: <dict> | ||
| CHECK-NEXT: <key>CFBundleDevelopmentRegion</key> | ||
| CHECK-NEXT: <string>English</string> | ||
| CHECK-NEXT: <key>CFBundleIdentifier</key> | ||
| CHECK-NEXT: <string>com.apple.xcode.dsym.basic.macho.x86_64</string> | ||
| CHECK-NEXT: <key>CFBundleInfoDictionaryVersion</key> | ||
| CHECK-NEXT: <string>6.0</string> | ||
| CHECK-NEXT: <key>CFBundlePackageType</key> | ||
| CHECK-NEXT: <string>dSYM</string> | ||
| CHECK-NEXT: <key>CFBundleSignature</key> | ||
| CHECK-NEXT: <string>????</string> | ||
| CHECK-NEXT: <key>CFBundleShortVersionString</key> | ||
| CHECK-NEXT: <string>1.0</string> | ||
| CHECK-NEXT: <key>CFBundleVersion</key> | ||
| CHECK-NEXT: <string>1</string> | ||
| CHECK-NEXT: </dict> | ||
| CHECK-NEXT: </plist> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,190 @@ | ||
| RUN: cat %p/../../Inputs/basic.macho.x86_64 > %t1 | ||
| RUN: dsymutil --linker llvm -accelerator=Pub -f -oso-prepend-path=%p/../.. %t1 | ||
| RUN: llvm-dwarfdump -a %t1.dwarf | FileCheck %s | ||
| RUN: dsymutil --linker llvm -accelerator=Pub -f -o %t2 -oso-prepend-path=%p/../.. %p/../../Inputs/basic.macho.x86_64 | ||
| RUN: llvm-dwarfdump -a %t2 | FileCheck %s | ||
| RUN: dsymutil --linker llvm -accelerator=Pub -f -o - -oso-prepend-path=%p/../.. %p/../../Inputs/basic.macho.x86_64 | llvm-dwarfdump -a - | FileCheck %s --check-prefixes=CHECK,BASIC | ||
| RUN: dsymutil --linker llvm -accelerator=Pub -f -o - -oso-prepend-path=%p/../.. %p/../../Inputs/basic-archive.macho.x86_64 | llvm-dwarfdump -a - | FileCheck %s --check-prefixes=CHECK,ARCHIVE | ||
| RUN: dsymutil --linker llvm -accelerator=Pub -dump-debug-map -oso-prepend-path=%p/../.. %p/../../Inputs/basic.macho.x86_64 | dsymutil -accelerator=Pub -f -y -o - - | llvm-dwarfdump -a - | FileCheck %s --check-prefixes=CHECK,BASIC | ||
| RUN: dsymutil --linker llvm -accelerator=Pub -dump-debug-map -oso-prepend-path=%p/../.. %p/../../Inputs/basic-archive.macho.x86_64 | dsymutil -accelerator=Pub -f -o - -y - | llvm-dwarfdump -a - | FileCheck %s --check-prefixes=CHECK,ARCHIVE | ||
|
|
||
| CHECK: file format Mach-O 64-bit x86-64 | ||
|
|
||
| CHECK: debug_info contents | ||
|
|
||
| CHECK: Compile Unit: | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("Apple LLVM version 6.0 (clang-600.0.39) (based on LLVM 3.5svn)") | ||
| CHECK: DW_AT_language (DW_LANG_C99) | ||
| CHECK: DW_AT_name ("basic1.c") | ||
| CHECK: DW_AT_stmt_list (0x00000000) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000ea0) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("main") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic1.c") | ||
| CHECK: DW_AT_decl_line (23) | ||
| CHECK: DW_AT_prototyped (0x01) | ||
| CHECK: DW_AT_type (0x00000063 | ||
| CHECK: DW_AT_external (0x01) | ||
| CHECK: DW_AT_accessibility (DW_ACCESS_public) | ||
| CHECK: DW_AT_low_pc (0x0000000100000ea0) | ||
| CHECK: DW_AT_high_pc (0x0000000100000ec4) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("argc") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic1.c") | ||
| CHECK: DW_AT_decl_line (23) | ||
| CHECK: DW_AT_type (0x00000063 | ||
| CHECK: DW_AT_location (DW_OP_fbreg -8) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("argv") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic1.c") | ||
| CHECK: DW_AT_decl_line (23) | ||
| CHECK: DW_AT_type (0x0000006a | ||
| CHECK: DW_AT_location (DW_OP_fbreg -16) | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("int") | ||
| CHECK: DW_AT_encoding (DW_ATE_signed) | ||
| CHECK: DW_AT_byte_size (0x04) | ||
| CHECK: DW_TAG_pointer_type | ||
| CHECK: DW_AT_type (0x0000006f | ||
| CHECK: DW_TAG_pointer_type | ||
| CHECK: DW_AT_type (0x00000074 | ||
| CHECK: DW_TAG_const_type | ||
| CHECK: DW_AT_type (0x00000079 | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("char") | ||
| CHECK: DW_AT_encoding (DW_ATE_signed_char) | ||
| CHECK: DW_AT_byte_size (0x01) | ||
| CHECK: NULL | ||
|
|
||
| CHECK: Compile Unit: | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("Apple LLVM version 6.0 (clang-600.0.39) (based on LLVM 3.5svn)") | ||
| CHECK: DW_AT_name ("basic2.c") | ||
| CHECK: DW_AT_stmt_list (0x0000003f) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000ed0) | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("int") | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("private_int") | ||
| CHECK: DW_AT_type (0x000000a7 | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic2.c") | ||
| BASIC: DW_AT_location (DW_OP_addr 0x100001008) | ||
| ARCHIVE: DW_AT_location (DW_OP_addr 0x100001004) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("baz") | ||
| CHECK: DW_AT_type (0x000000a7 | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic2.c") | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001000) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("foo") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic2.c") | ||
| CHECK: DW_AT_type (0x000000a7 | ||
| CHECK: DW_AT_low_pc (0x0000000100000ed0) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f19) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("arg") | ||
| CHECK: DW_AT_type (0x000000a7 | ||
| CHECK: DW_AT_location (DW_OP_fbreg -4) | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("inc") | ||
| CHECK: DW_AT_type (0x000000a7 | ||
| CHECK: DW_AT_low_pc (0x0000000100000f20) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f37) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: NULL | ||
|
|
||
| CHECK: Compile Unit: | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("Apple LLVM version 6.0 (clang-600.0.39) (based on LLVM 3.5svn)") | ||
| CHECK: DW_AT_name ("basic3.c") | ||
| CHECK: DW_AT_stmt_list (0x00000093) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f40) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("val") | ||
| CHECK: DW_AT_type (0x00000162 | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic3.c") | ||
| BASIC: DW_AT_location (DW_OP_addr 0x100001004) | ||
| ARCHIVE: DW_AT_location (DW_OP_addr 0x100001008) | ||
| CHECK: DW_TAG_volatile_type | ||
| CHECK: DW_AT_type (0x00000167 | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("int") | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("bar") | ||
| CHECK: DW_AT_type (0x00000167 | ||
| CHECK: DW_AT_low_pc (0x0000000100000f40) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f84) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("arg") | ||
| CHECK: DW_AT_type (0x00000167 | ||
| CHECK: DW_AT_location (DW_OP_fbreg -8) | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("inc") | ||
| CHECK: DW_AT_type (0x00000167 | ||
| CHECK: DW_AT_low_pc (0x0000000100000f90) | ||
| CHECK: DW_AT_high_pc (0x0000000100000fa9) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
|
|
||
| CHECK: NULL | ||
|
|
||
| CHECK-NOT: .debug_loc contents | ||
|
|
||
| CHECK:.debug_aranges contents: | ||
| CHECK-NEXT:Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x00000000, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT:[0x0000000100000ea0, 0x0000000100000ec4) | ||
| CHECK-NEXT:Address Range Header: length = 0x0000003c, format = DWARF32, version = 0x0002, cu_offset = 0x00000081, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT:[0x0000000100000ed0, 0x0000000100000f19) | ||
| CHECK-NEXT:[0x0000000100000f20, 0x0000000100000f37) | ||
| CHECK-NEXT:Address Range Header: length = 0x0000003c, format = DWARF32, version = 0x0002, cu_offset = 0x00000126, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT:[0x0000000100000f40, 0x0000000100000f84) | ||
| CHECK-NEXT:[0x0000000100000f90, 0x0000000100000fa9) | ||
|
|
||
| CHECK: .debug_line contents: | ||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic1.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: Address Line Column File ISA Discriminator OpIndex Flags | ||
| CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- | ||
| CHECK-NEXT: 0x0000000100000ea0 23 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000eb6 24 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000ec4 24 0 1 0 0 0 is_stmt end_sequence | ||
|
|
||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic2.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: Address Line Column File ISA Discriminator OpIndex Flags | ||
| CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- | ||
| CHECK-NEXT: 0x0000000100000ed0 19 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000ee2 20 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000f19 20 0 1 0 0 0 is_stmt end_sequence | ||
| CHECK-NEXT: 0x0000000100000f20 14 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f24 15 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000f37 15 0 1 0 0 0 is_stmt end_sequence | ||
|
|
||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic3.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: Address Line Column File ISA Discriminator OpIndex Flags | ||
| CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- | ||
| CHECK-NEXT: 0x0000000100000f40 16 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f4b 17 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000f58 18 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f6c 19 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f7b 20 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f84 20 0 1 0 0 0 is_stmt end_sequence | ||
| CHECK-NEXT: 0x0000000100000f90 11 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f9b 12 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000fa9 12 0 1 0 0 0 is_stmt end_sequence |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,183 @@ | ||
| RUN: dsymutil --linker llvm -f -o - -oso-prepend-path=%p/../.. %p/../../Inputs/basic-lto-dw4.macho.x86_64 | llvm-dwarfdump -a - | FileCheck %s | ||
|
|
||
| CHECK: file format Mach-O 64-bit x86-64 | ||
|
|
||
| CHECK: debug_info contents | ||
|
|
||
| CHECK: Compile Unit: {{.*}} version = 0x0004 | ||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("clang version 3.7.0 ") | ||
| CHECK: DW_AT_language (DW_LANG_C99) | ||
| CHECK: DW_AT_name ("basic1.c") | ||
| CHECK: DW_AT_stmt_list (0x00000000) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f40) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f4b) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_low_pc (0x0000000100000f40) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f4b) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_AT_name ("main") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic1.c") | ||
| CHECK: DW_AT_prototyped (true) | ||
| CHECK: DW_AT_type (0x00000000000000a1 | ||
| CHECK: DW_AT_external (true) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_location (DW_OP_reg5 RDI, DW_OP_piece 0x4) | ||
| CHECK: DW_AT_name ("argc") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic1.c") | ||
| CHECK: DW_AT_type (0x00000000000000a1 | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_location (DW_OP_reg4 RSI) | ||
| CHECK: DW_AT_name ("argv") | ||
| CHECK: DW_AT_type (0x00000060 | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_pointer_type | ||
| CHECK: DW_AT_type (0x00000065 | ||
| CHECK: DW_TAG_pointer_type | ||
| CHECK: DW_TAG_const_type | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("char") | ||
| CHECK: DW_AT_encoding (DW_ATE_signed_char) | ||
| CHECK: DW_AT_byte_size (0x01) | ||
| CHECK: NULL | ||
|
|
||
| CHECK: Compile Unit:{{.*}} version = 0x0004 | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("clang version 3.7.0 ") | ||
| CHECK: DW_AT_language (DW_LANG_C99) | ||
| CHECK: DW_AT_name ("basic2.c") | ||
| CHECK: DW_AT_stmt_list (0x00000044) | ||
| CHECK: DW_AT_low_pc (0x0000000100000f50) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f87) | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("int") | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("baz") | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001000) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("private_int") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic2.c") | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001008) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("inc") | ||
| CHECK: DW_AT_type (0x000000a1 | ||
| CHECK: DW_AT_inline (DW_INL_inlined) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_low_pc (0x0000000100000f50) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f87) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_AT_name ("foo") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic2.c") | ||
| CHECK: DW_AT_prototyped (true) | ||
| CHECK: DW_AT_type (0x000000a1 | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_location (0x00000000 | ||
| CHECK: [0x0000000100000f50, 0x0000000100000f5c): DW_OP_reg5 RDI, DW_OP_piece 0x4) | ||
| CHECK: DW_AT_name ("arg") | ||
| CHECK: DW_AT_type (0x000000a1 | ||
| CHECK: DW_TAG_inlined_subroutine | ||
| CHECK: DW_AT_abstract_origin (0x000000d2 "inc") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f61) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f70) | ||
| CHECK: NULL | ||
| CHECK: NULL | ||
|
|
||
| CHECK: Compile Unit: {{.*}} version = 0x0004 | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("clang version 3.7.0 ") | ||
| CHECK: DW_AT_name ("basic3.c") | ||
| CHECK: DW_AT_stmt_list (0x0000009a) | ||
| CHECK: DW_AT_low_pc (0x0000000100000f90) | ||
| CHECK: DW_AT_high_pc (0x0000000100000fb4) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("val") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic3.c") | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001004) | ||
| CHECK: DW_TAG_volatile_type | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("inc") | ||
| CHECK: DW_AT_inline (DW_INL_inlined) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_low_pc (0x0000000100000f90) | ||
| CHECK: DW_AT_high_pc (0x0000000100000fb4) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_AT_name ("bar") | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_location (0x00000025 | ||
| CHECK: [0x0000000100000f90, 0x0000000100000f9f): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
| CHECK: [0x0000000100000fa9, 0x0000000100000fad): DW_OP_reg5 RDI, DW_OP_piece 0x4) | ||
| CHECK: DW_AT_name ("arg") | ||
| CHECK: DW_TAG_inlined_subroutine | ||
| CHECK: DW_AT_abstract_origin (0x0000015f "inc") | ||
| CHECK: DW_AT_ranges (0x00000000 | ||
| CHECK: [0x0000000100000f94, 0x0000000100000f9a) | ||
| CHECK: [0x0000000100000f9f, 0x0000000100000fa7)) | ||
|
|
||
| CHECK: NULL | ||
| CHECK: NULL | ||
|
|
||
|
|
||
| CHECK: .debug_loc contents: | ||
| CHECK-NEXT: 0x00000000: | ||
| CHECK-NEXT: (0x0000000000000000, 0x000000000000000c): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
| CHECK-NOT: : | ||
| CHECK: 0x00000025: | ||
| CHECK-NEXT: (0x0000000000000000, 0x000000000000000f): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
| CHECK-NEXT: (0x0000000000000019, 0x000000000000001d): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
|
|
||
|
|
||
| CHECK: .debug_aranges contents: | ||
| CHECK-NEXT: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x00000000, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT: [0x0000000100000f40, 0x0000000100000f4b) | ||
| CHECK-NEXT: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x00000077, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT: [0x0000000100000f50, 0x0000000100000f87) | ||
| CHECK-NEXT: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x0000011b, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT: [0x0000000100000f90, 0x0000000100000fb4) | ||
|
|
||
| CHECK: .debug_line contents: | ||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic1.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: Address Line Column File ISA Discriminator OpIndex Flags | ||
| CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- | ||
| CHECK-NEXT: 0x0000000100000f40 26 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f44 27 10 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000f49 27 3 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000f4b 27 3 1 0 0 0 end_sequence | ||
|
|
||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic2.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: Address Line Column File ISA Discriminator OpIndex Flags | ||
| CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- | ||
| CHECK-NEXT: 0x0000000100000f50 19 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f54 20 18 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000f5a 20 17 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000f5c 20 10 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000f61 15 10 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f70 20 23 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f74 20 36 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000f83 20 31 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000f85 20 3 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000f87 20 3 1 0 0 0 end_sequence | ||
|
|
||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic3.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: Address Line Column File ISA Discriminator OpIndex Flags | ||
| CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- ------- ------------- | ||
| CHECK-NEXT: 0x0000000100000f90 16 0 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f94 12 10 1 0 0 0 is_stmt prologue_end | ||
| CHECK-NEXT: 0x0000000100000f9a 17 7 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000f9f 12 10 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000fa7 20 1 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000fa9 19 18 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000fab 19 10 1 0 0 0 | ||
| CHECK-NEXT: 0x0000000100000fb2 20 1 1 0 0 0 is_stmt | ||
| CHECK-NEXT: 0x0000000100000fb4 20 1 1 0 0 0 is_stmt end_sequence | ||
|
|
||
| CHECK-NOT: .debug_pubnames contents: | ||
| CHECK-NOT: .debug_pubtypes contents: |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,182 @@ | ||
| RUN: dsymutil --linker llvm -f -o - -oso-prepend-path=%p/../.. %p/../../Inputs/basic-lto.macho.x86_64 | llvm-dwarfdump -a - | FileCheck %s | ||
| RUN: dsymutil --linker llvm -oso-prepend-path=%p/../.. -dump-debug-map %p/../../Inputs/basic-lto.macho.x86_64 | dsymutil -f -o - -y - | llvm-dwarfdump -a - | FileCheck %s | ||
|
|
||
| CHECK: file format Mach-O 64-bit x86-64 | ||
|
|
||
| CHECK: debug_info contents | ||
|
|
||
| CHECK: Compile Unit: | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("Apple LLVM version 6.0 (clang-600.0.39) (based on LLVM 3.5svn)") | ||
| CHECK: DW_AT_language (DW_LANG_C99) | ||
| CHECK: DW_AT_name ("basic1.c") | ||
| CHECK: DW_AT_stmt_list (0x00000000) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f40) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("main") | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic1.c") | ||
| CHECK: DW_AT_decl_line (23) | ||
| CHECK: DW_AT_prototyped (0x01) | ||
| CHECK: DW_AT_type (0x00000063 | ||
| CHECK: DW_AT_external (0x01) | ||
| CHECK: DW_AT_accessibility (DW_ACCESS_public) | ||
| CHECK: DW_AT_low_pc (0x0000000100000f40) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f4b) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("argc") | ||
| CHECK: DW_AT_type (0x00000063 | ||
| CHECK: DW_AT_location (DW_OP_reg5 RDI, DW_OP_piece 0x4) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("argv") | ||
| CHECK: DW_AT_type (0x0000006a | ||
| CHECK: DW_AT_location (DW_OP_reg4 RSI) | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("int") | ||
| CHECK: DW_AT_encoding (DW_ATE_signed) | ||
| CHECK: DW_AT_byte_size (0x04) | ||
| CHECK: DW_TAG_pointer_type | ||
| CHECK: DW_AT_type (0x0000006f | ||
| CHECK: DW_TAG_pointer_type | ||
| CHECK: DW_AT_type (0x00000074 | ||
| CHECK: DW_TAG_const_type | ||
| CHECK: DW_AT_type (0x00000079 | ||
| CHECK: DW_TAG_base_type | ||
| CHECK: DW_AT_name ("char") | ||
| CHECK: DW_AT_encoding (DW_ATE_signed_char) | ||
| CHECK: DW_AT_byte_size (0x01) | ||
| CHECK: NULL | ||
|
|
||
| CHECK: Compile Unit: | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("Apple LLVM version 6.0 (clang-600.0.39) (based on LLVM 3.5svn)") | ||
| CHECK: DW_AT_name ("basic2.c") | ||
| CHECK: DW_AT_stmt_list (0x0000003e) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f50) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("private_int") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic2.c") | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001008) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("baz") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001000) | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("foo") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_low_pc (0x0000000100000f50) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f89) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("arg") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_location (0x00000000 | ||
| CHECK: [0x0000000100000f50, 0x0000000100000f5e): DW_OP_reg5 RDI, DW_OP_piece 0x4) | ||
| CHECK:[[INC1:0x[0-9a-f]*]]{{.*}}DW_TAG_inlined_subroutine | ||
| CHECK: DW_AT_abstract_origin (0x00000128 "inc") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f63) | ||
| CHECK: DW_AT_high_pc (0x0000000100000f72) | ||
| CHECK: DW_AT_call_line (20) | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("inc") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_inline (DW_INL_inlined) | ||
| CHECK: NULL | ||
|
|
||
| CHECK: Compile Unit: | ||
|
|
||
| CHECK: DW_TAG_compile_unit | ||
| CHECK: DW_AT_producer ("Apple LLVM version 6.0 (clang-600.0.39) (based on LLVM 3.5svn)") | ||
| CHECK: DW_AT_name ("basic3.c") | ||
| CHECK: DW_AT_stmt_list (0x0000007e) | ||
| CHECK: DW_AT_comp_dir ("/Inputs") | ||
| CHECK: DW_AT_low_pc (0x0000000100000f90) | ||
| CHECK: DW_TAG_variable | ||
| CHECK: DW_AT_name ("val") | ||
| CHECK: DW_AT_type (0x00000176 | ||
| CHECK: DW_AT_decl_file ("/Inputs{{[/\\]}}basic3.c") | ||
| CHECK: DW_AT_location (DW_OP_addr 0x100001004) | ||
| CHECK: DW_TAG_volatile_type | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("bar") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_low_pc (0x0000000100000f90) | ||
| CHECK: DW_AT_high_pc (0x0000000100000fb4) | ||
| CHECK: DW_AT_frame_base (DW_OP_reg6 RBP) | ||
| CHECK: DW_TAG_formal_parameter | ||
| CHECK: DW_AT_name ("arg") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: DW_AT_location (0x00000025 | ||
| CHECK: [0x0000000100000f90, 0x0000000100000f9f): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
| CHECK: [0x0000000100000fa9, 0x0000000100000fad): DW_OP_reg5 RDI, DW_OP_piece 0x4) | ||
| CHECK: DW_TAG_lexical_block | ||
| CHECK: DW_AT_low_pc (0x0000000100000f94) | ||
| CHECK: DW_AT_high_pc (0x0000000100000fa7) | ||
| CHECK:[[INC2:0x[0-9a-f]*]]{{.*}}DW_TAG_inlined_subroutine | ||
| CHECK: DW_AT_abstract_origin (0x000001d4 "inc") | ||
| CHECK: DW_AT_ranges (0x00000000 | ||
| CHECK: [0x0000000100000f94, 0x0000000100000f9a) | ||
| CHECK: [0x0000000100000f9f, 0x0000000100000fa7)) | ||
| CHECK: NULL | ||
| CHECK: NULL | ||
| CHECK: DW_TAG_subprogram | ||
| CHECK: DW_AT_name ("inc") | ||
| CHECK: DW_AT_type (0x0000000000000063 | ||
| CHECK: NULL | ||
|
|
||
| CHECK: .debug_loc contents: | ||
| CHECK-NEXT: 0x00000000: | ||
| CHECK-NEXT: (0x0000000000000000, 0x000000000000000e): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
| CHECK-NOT: : | ||
| CHECK: 0x00000025: | ||
| CHECK-NEXT: (0x0000000000000000, 0x000000000000000f): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
| CHECK-NEXT: (0x0000000000000019, 0x000000000000001d): DW_OP_reg5 RDI, DW_OP_piece 0x4 | ||
|
|
||
| CHECK: .debug_aranges contents: | ||
| CHECK-NEXT: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x00000000, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT: [0x0000000100000f40, 0x0000000100000f4b) | ||
| CHECK-NEXT: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x00000081, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT: [0x0000000100000f50, 0x0000000100000f89) | ||
| CHECK-NEXT: Address Range Header: length = 0x0000002c, format = DWARF32, version = 0x0002, cu_offset = 0x0000013a, addr_size = 0x08, seg_size = 0x00 | ||
| CHECK-NEXT: [0x0000000100000f90, 0x0000000100000fb4) | ||
|
|
||
|
|
||
| CHECK: .debug_line contents | ||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic1.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: 0x0000000100000f40 23 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000f44 24 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK: 0x0000000100000f4b 24 0 1 0 0 0 is_stmt end_sequence | ||
|
|
||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic2.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: 0x0000000100000f50 19 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000f54 20 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK: 0x0000000100000f63 15 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000f72 20 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000f89 20 0 1 0 0 0 is_stmt end_sequence | ||
|
|
||
| CHECK: file_names[ 1]: | ||
| CHECK-NEXT: name: "basic3.c" | ||
| CHECK-NEXT: dir_index: 0 | ||
| CHECK: 0x0000000100000f90 16 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000f94 12 0 1 0 0 0 is_stmt prologue_end | ||
| CHECK: 0x0000000100000f9a 17 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000f9f 12 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000fa7 20 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000fa9 19 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000fb2 20 0 1 0 0 0 is_stmt | ||
| CHECK: 0x0000000100000fb4 20 0 1 0 0 0 is_stmt end_sequence | ||
|
|
||
| CHECK-NOT: .debug_pubnames contents: | ||
| CHECK-NOT: .debug_pubtypes contents: |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| RUN: cat %p/../../Inputs/basic-with-libfat-test.macho.x86_64 > %t1 | ||
| RUN: dsymutil --linker llvm -f -oso-prepend-path=%p/../.. %t1 | ||
| RUN: llvm-dwarfdump %t1.dwarf | FileCheck %s | ||
|
|
||
| The test binary was created by force-linking the libfat-test.a fat archive | ||
| with the basic linking test archive, like so: | ||
| $ clang -all_load libfat-test.a libbasic.a basic1.macho.x86_64.o -Wl,-dead_strip -u _x86_64_var | ||
|
|
||
| CHECK: DW_AT_name{{.*}}"x86_64_var" | ||
| CHECK: DW_AT_name{{.*}}"basic2.c" | ||
| CHECK: DW_AT_name{{.*}}"basic3.c" | ||
| CHECK: DW_AT_name{{.*}}"basic1.c" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # This test verifies that an empty range list in the .debug_ranges section | ||
| # doesn't crash dsymutil. As clang does not produce this kind of debug | ||
| # info anymore, we used this hand-crafted assembly file to produce a testcase | ||
| # Compile with: | ||
| # llvm-mc -triple x86_64-apple-darwin -filetype=obj -o 1.o empty_range.o | ||
|
|
||
| # RUN: dsymutil --linker llvm -f -y %p/../dummy-debug-map.map -oso-prepend-path %p/../../Inputs/empty_range -o - | llvm-dwarfdump -debug-info - | FileCheck %s | ||
|
|
||
| .section __TEXT,__text,regular,pure_instructions | ||
| .macosx_version_min 10, 11 | ||
| .globl __Z3foov | ||
| .align 4, 0x90 | ||
| __Z3foov: ## @_Z3foov | ||
| Lfunc_begin0: | ||
| pushq %rbp | ||
| movq %rsp, %rbp | ||
| popq %rbp | ||
| retq | ||
| Lfunc_end0: | ||
| .section __DWARF,__debug_abbrev,regular,debug | ||
| Lsection_abbrev: | ||
| .byte 1 ## Abbreviation Code | ||
| .byte 17 ## DW_TAG_compile_unit | ||
| .byte 1 ## DW_CHILDREN_yes | ||
| .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 0x55 ## DW_AT_ranges | ||
| .byte 6 ## DW_FORM_data4 | ||
| .byte 0 ## EOM(1) | ||
| .byte 0 ## EOM(2) | ||
| .byte 0 ## EOM(3) | ||
| .section __DWARF,__debug_info,regular,debug | ||
| Lsection_info: | ||
| .long 22 ## Length of Unit | ||
| .short 2 ## DWARF version number | ||
| .long 0 ## Offset Into Abbrev. Section | ||
| .byte 8 ## Address Size (in bytes) | ||
| .byte 1 ## Abbrev [1] DW_TAG_compile_unit | ||
| .byte 2 ## Abbrev [2] DW_TAG_subprogram | ||
| .quad Lfunc_begin0 ## DW_AT_low_pc | ||
| .long 0 ## DW_AT_ranges (pointing at an empty entry) | ||
| .byte 0 ## End Of Children Mark | ||
| .section __DWARF,__debug_ranges,regular,debug | ||
| Ldebug_range: | ||
| .long 0 | ||
| .long 0 | ||
|
|
||
| # CHECK-NOT: DW_TAG_compile_unit |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| # RUN: rm -rf %t | ||
| # RUN: mkdir -p %t | ||
| # RUN: llc -filetype=obj %p/../../Inputs/frame-dw2.ll -o %t/frame-dw2.o | ||
| # RUN: dsymutil --linker llvm -f -oso-prepend-path=%t -y %s -o - | \ | ||
| # RUN: llvm-dwarfdump -debug-frame - | FileCheck %s | ||
|
|
||
| # This test is meant to verify that identical CIEs will get reused | ||
| # in the same file but not inbetween files. For this to happen, we | ||
| # link twice the same file using this made-up debug map: | ||
|
|
||
| --- | ||
| triple: 'i386-apple-darwin' | ||
| objects: | ||
| - filename: frame-dw2.o | ||
| symbols: | ||
| - { sym: _bar, objAddr: 0x0, binAddr: 0x1000, size: 0x12 } | ||
| - { sym: _baz, objAddr: 0x0, binAddr: 0x2000, size: 0x12 } | ||
| - filename: frame-dw2.o | ||
| symbols: | ||
| - { sym: _bar, objAddr: 0x0, binAddr: 0x3000, size: 0x12 } | ||
| - { sym: _baz, objAddr: 0x0, binAddr: 0x4000, size: 0x12 } | ||
| ... | ||
|
|
||
| # CHECK: .debug_frame contents: | ||
| # CHECK: 00000000 {{[0-9a-f]*}} ffffffff CIE | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=00000000 pc=00001000...00001 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=00000000 pc=00002000...00002 | ||
| # CHECK: [[CIECU2:[0-9a-f]*]] {{[0-9a-f]*}} ffffffff CIE | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=[[CIECU2]] pc=00003000...00003 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=[[CIECU2]] pc=00004000...00004 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: .eh_frame contents: |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # RUN: rm -rf %t | ||
| # RUN: mkdir -p %t | ||
| # RUN: llc -filetype=obj %p/../../Inputs/frame-dw2.ll -o %t/frame-dw2.o | ||
| # RUN: llc -filetype=obj %p/../../Inputs/frame-dw4.ll -o %t/frame-dw4.o | ||
| # RUN: dsymutil --linker llvm -f -oso-prepend-path=%t -y %s -o - | \ | ||
| # RUN: llvm-dwarfdump -debug-frame - | FileCheck %s | ||
|
|
||
| # Check the handling of multiple different CIEs. To have CIEs that | ||
| # appear to be different, use a dwarf2 version of the file along with | ||
| # a dwarf 4 version. The CIE header version (and layout) will be different. | ||
| --- | ||
| triple: 'i386-apple-darwin' | ||
| objects: | ||
| - filename: frame-dw2.o | ||
| symbols: | ||
| - { sym: _bar, objAddr: 0x0, binAddr: 0x1000, size: 0x12 } | ||
| - { sym: _baz, objAddr: 0x0, binAddr: 0x2000, size: 0x12 } | ||
| - filename: frame-dw4.o | ||
| symbols: | ||
| - { sym: _baz, objAddr: 0x0, binAddr: 0x3000, size: 0x12 } | ||
| - filename: frame-dw2.o | ||
| symbols: | ||
| - { sym: _bar, objAddr: 0x0, binAddr: 0x4000, size: 0x12 } | ||
| ... | ||
|
|
||
| # CHECK: .debug_frame contents: | ||
| # CHECK: 00000000 {{[0-9a-f]*}} ffffffff CIE | ||
| # CHECK-NEXT: Format: DWARF32 | ||
| # CHECK-NEXT: Version:{{.*}}1 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=00000000 pc=00001000...00001 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=00000000 pc=00002000...00002 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: [[CIEDW4:[0-9a-f]*]] 00000010 ffffffff CIE | ||
| # CHECK-NEXT: Format: DWARF32 | ||
| # CHECK-NEXT: Version:{{.*}}4 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=[[CIEDW4]] pc=00003000...00003 | ||
| # CHECK: [[CIEDW1_2:[0-9a-f]*]] 00000010 ffffffff CIE | ||
| # CHECK-NEXT: Format: DWARF32 | ||
| # CHECK-NEXT: Version:{{.*}}1 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: FDE cie=[[CIEDW1_2]] pc=00004000...00004 | ||
| # CHECK-NOT: FDE | ||
| # CHECK: .eh_frame contents: |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| RUN: rm -rf %t | ||
| RUN: mkdir -p %t | ||
|
|
||
| RUN: cat %p/../../Inputs/basic.macho.x86_64 > %t/basic.macho.x86_64 | ||
| RUN: cat %p/../../Inputs/basic-archive.macho.x86_64 > %t/basic-archive.macho.x86_64 | ||
| RUN: cat %p/../../Inputs/basic-lto.macho.x86_64 > %t/basic-lto.macho.x86_64 | ||
| RUN: cat %p/../../Inputs/basic-lto-dw4.macho.x86_64 > %t/basic-lto-dw4.macho.x86_64 | ||
|
|
||
| # Multiple inputs in flat mode | ||
| RUN: dsymutil --linker llvm -f -oso-prepend-path=%p/../.. %t/basic.macho.x86_64 %t/basic-archive.macho.x86_64 %t/basic-lto.macho.x86_64 %t/basic-lto-dw4.macho.x86_64 | ||
| RUN: llvm-dwarfdump -a %t/basic.macho.x86_64.dwarf \ | ||
| RUN: | FileCheck %S/basic-linking-x86.test --check-prefixes=CHECK,BASIC | ||
| RUN: llvm-dwarfdump -a %t/basic-archive.macho.x86_64.dwarf \ | ||
| RUN: | FileCheck %S/basic-linking-x86.test --check-prefixes=CHECK,ARCHIVE | ||
| RUN: llvm-dwarfdump -a %t/basic-lto.macho.x86_64.dwarf | FileCheck %S/basic-lto-linking-x86.test | ||
| RUN: llvm-dwarfdump -a %t/basic-lto-dw4.macho.x86_64.dwarf | FileCheck %S/basic-lto-dw4-linking-x86.test | ||
|
|
||
| # Multiple inputs that end up in the same named bundle | ||
| RUN: dsymutil --linker llvm -oso-prepend-path=%p/../.. %t/basic.macho.x86_64 %t/basic-archive.macho.x86_64 %t/basic-lto.macho.x86_64 %t/basic-lto-dw4.macho.x86_64 -o %t.dSYM | ||
| RUN: llvm-dwarfdump -a %t.dSYM/Contents/Resources/DWARF/basic.macho.x86_64 \ | ||
| RUN: | FileCheck %S/basic-linking-x86.test --check-prefixes=CHECK,BASIC | ||
| RUN: llvm-dwarfdump -a %t.dSYM/Contents/Resources/DWARF/basic-archive.macho.x86_64 \ | ||
| RUN: | FileCheck %S/basic-linking-x86.test --check-prefixes=CHECK,ARCHIVE | ||
| RUN: llvm-dwarfdump -a %t.dSYM/Contents/Resources/DWARF/basic-lto.macho.x86_64 | FileCheck %S/basic-lto-linking-x86.test | ||
| RUN: llvm-dwarfdump -a %t.dSYM/Contents/Resources/DWARF/basic-lto-dw4.macho.x86_64 | FileCheck %S/basic-lto-dw4-linking-x86.test | ||
|
|
||
| # Multiple inputs in a named bundle in flat mode... impossible. | ||
| RUN: not dsymutil --linker llvm -f -oso-prepend-path=%p/../.. %t/basic.macho.x86_64 %t/basic-archive.macho.x86_64 %t/basic-lto.macho.x86_64 %t/basic-lto-dw4.macho.x86_64 -o %t.dSYM 2>&1 | FileCheck %s | ||
|
|
||
| CHECK: error: cannot use -o with multiple inputs in flat mode |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,7 @@ | ||
| RUN: dsymutil -oso-prepend-path=%p %p/Inputs/call-site-entry.macho.x86_64 -o %t.dSYM | ||
| RUN: llvm-dwarfdump %t.dSYM | FileCheck %s -implicit-check-not=DW_AT_call_return_pc | ||
|
|
||
| RUN: dsymutil --linker llvm -oso-prepend-path=%p %p/Inputs/call-site-entry.macho.x86_64 -o %t.dSYM | ||
| RUN: llvm-dwarfdump %t.dSYM | FileCheck %s -implicit-check-not=DW_AT_call_return_pc | ||
|
|
||
| CHECK: DW_AT_call_return_pc (0x0000000100000fa4) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,7 @@ | ||
| RUN: dsymutil -oso-prepend-path=%p %p/Inputs/tail-call.macho.x86_64 -o %t.dSYM | ||
| RUN: llvm-dwarfdump %t.dSYM | FileCheck %s -implicit-check-not=DW_AT_call_pc | ||
|
|
||
| RUN: dsymutil --linker llvm -oso-prepend-path=%p %p/Inputs/tail-call.macho.x86_64 -o %t.dSYM | ||
| RUN: llvm-dwarfdump %t.dSYM | FileCheck %s -implicit-check-not=DW_AT_call_pc | ||
|
|
||
| CHECK: DW_AT_call_pc (0x0000000100000f95) |