Under existing behavior discarded functions are relocated to have the start pc 0. This causes problems when debugging as they typically overlap the first function and lldb symbol resolution frequently chooses a discarded function instead of the correct one. Using the value -1 or -2 (depending on which DWARF section we are writing) is sufficient to prevent lldb from resolving to these symbols. Reviewed By: MaskRay, yurydelendik, sbc100 Differential Revision: https://reviews.llvm.org/D91803
89 lines
3.4 KiB
Plaintext
89 lines
3.4 KiB
Plaintext
RUN: llc -filetype=obj %p/Inputs/debuginfo1.ll -o %t.debuginfo1.o
|
|
RUN: llc -filetype=obj %p/Inputs/debuginfo2.ll -o %t.debuginfo2.o
|
|
RUN: wasm-ld -o %t.wasm %t.debuginfo1.o %t.debuginfo2.o
|
|
RUN: llvm-dwarfdump %t.wasm | FileCheck %s
|
|
|
|
CHECK: file format WASM
|
|
|
|
CHECK: .debug_info contents:
|
|
CHECK: DW_TAG_compile_unit
|
|
CHECK-NEXT: DW_AT_producer ("clang version 7.0.0 (trunk {{.*}})")
|
|
CHECK-NEXT: DW_AT_language (DW_LANG_C99)
|
|
CHECK-NEXT: DW_AT_name ("hi.c")
|
|
|
|
CHECK: DW_TAG_subprogram
|
|
CHECK-NEXT: DW_AT_low_pc
|
|
CHECK-NEXT: DW_AT_high_pc
|
|
CHECK-NEXT: DW_AT_frame_base
|
|
CHECK-NEXT: DW_AT_name ("test")
|
|
CHECK-NEXT: DW_AT_decl_file ("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
|
|
CHECK-NEXT: DW_AT_decl_line (3)
|
|
CHECK-NEXT: DW_AT_prototyped (true)
|
|
|
|
CHECK: DW_TAG_formal_parameter
|
|
CHECK-NEXT: DW_AT_name ("t")
|
|
CHECK-NEXT: DW_AT_decl_file ("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
|
|
CHECK-NEXT: DW_AT_decl_line (3)
|
|
|
|
CHECK: DW_TAG_subprogram
|
|
CHECK-NEXT: DW_AT_low_pc
|
|
CHECK-NEXT: DW_AT_high_pc
|
|
CHECK-NEXT: DW_AT_frame_base
|
|
CHECK-NEXT: DW_AT_name ("_start")
|
|
CHECK-NEXT: DW_AT_decl_file ("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
|
|
CHECK-NEXT: DW_AT_decl_line (7)
|
|
|
|
CHECK: DW_TAG_base_type
|
|
CHECK-NEXT: DW_AT_name ("int")
|
|
CHECK-NEXT: DW_AT_encoding (DW_ATE_signed)
|
|
CHECK-NEXT: DW_AT_byte_size (0x04)
|
|
|
|
CHECK: DW_TAG_compile_unit
|
|
CHECK-NEXT: DW_AT_producer ("clang version 7.0.0 (trunk {{.*}})")
|
|
CHECK-NEXT: DW_AT_language (DW_LANG_C99)
|
|
CHECK-NEXT: DW_AT_name ("hi_foo.c")
|
|
|
|
CHECK: DW_TAG_variable
|
|
CHECK-NEXT: DW_AT_name ("y")
|
|
CHECK-NEXT: DW_AT_type (0x000000a7 "int[2]")
|
|
CHECK-NEXT: DW_AT_external (true)
|
|
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
|
|
CHECK-NEXT: DW_AT_decl_line (1)
|
|
CHECK: DW_AT_location (DW_OP_addr 0x400)
|
|
|
|
CHECK: DW_TAG_array_type
|
|
|
|
CHECK: DW_TAG_subrange_type
|
|
|
|
CHECK: DW_TAG_base_type
|
|
CHECK-NEXT: DW_AT_name ("int")
|
|
CHECK-NEXT: DW_AT_encoding (DW_ATE_signed)
|
|
CHECK-NEXT: DW_AT_byte_size (0x04)
|
|
|
|
CHECK: DW_TAG_base_type
|
|
CHECK-NEXT: DW_AT_name ("__ARRAY_SIZE_TYPE__")
|
|
CHECK-NEXT: DW_AT_byte_size (0x08)
|
|
CHECK-NEXT: DW_AT_encoding (DW_ATE_unsigned)
|
|
|
|
CHECK: DW_TAG_variable
|
|
CHECK-NEXT: DW_AT_name ("z")
|
|
CHECK-NEXT: DW_AT_type (0x000000a7 "int[2]")
|
|
CHECK-NEXT: DW_AT_external (true)
|
|
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
|
|
CHECK-NEXT: DW_AT_decl_line (8)
|
|
CHECK-NEXT: DW_AT_location (DW_OP_addr 0xffffffff)
|
|
|
|
CHECK: DW_TAG_subprogram
|
|
CHECK-NEXT: DW_AT_low_pc
|
|
CHECK-NEXT: DW_AT_high_pc
|
|
CHECK-NEXT: DW_AT_frame_base
|
|
CHECK-NEXT: DW_AT_name ("foo")
|
|
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
|
|
CHECK-NEXT: DW_AT_decl_line (3)
|
|
|
|
CHECK: DW_TAG_formal_parameter
|
|
CHECK-NEXT: DW_AT_name ("p")
|
|
CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c")
|
|
CHECK-NEXT: DW_AT_decl_line (3)
|
|
|