diff options
| -rw-r--r-- | llvm/include/llvm/BinaryFormat/Dwarf.def | 4 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFDie.cpp | 3 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-dwarfdump/X86/gnu_call_site.s | 118 | 
3 files changed, 124 insertions, 1 deletions
diff --git a/llvm/include/llvm/BinaryFormat/Dwarf.def b/llvm/include/llvm/BinaryFormat/Dwarf.def index 8214fe2e120..3ade3ea0d33 100644 --- a/llvm/include/llvm/BinaryFormat/Dwarf.def +++ b/llvm/include/llvm/BinaryFormat/Dwarf.def @@ -176,6 +176,8 @@ HANDLE_DW_TAG(0x4103, class_template, 0, GNU)  HANDLE_DW_TAG(0x4106, GNU_template_template_param, 0, GNU)  HANDLE_DW_TAG(0x4107, GNU_template_parameter_pack, 0, GNU)  HANDLE_DW_TAG(0x4108, GNU_formal_parameter_pack, 0, GNU) +HANDLE_DW_TAG(0x4109, GNU_call_site, 0, GNU) +HANDLE_DW_TAG(0x410a, GNU_call_site_parameter, 0, GNU)  HANDLE_DW_TAG(0x4200, APPLE_property, 0, APPLE)  HANDLE_DW_TAG(0xb000, BORLAND_property, 0, BORLAND)  HANDLE_DW_TAG(0xb001, BORLAND_Delphi_string, 0, BORLAND) @@ -338,6 +340,8 @@ HANDLE_DW_AT(0x2106, body_end, 0, GNU)  HANDLE_DW_AT(0x2107, GNU_vector, 0, GNU)  HANDLE_DW_AT(0x2110, GNU_template_name, 0, GNU)  HANDLE_DW_AT(0x210f, GNU_odr_signature, 0, GNU) +HANDLE_DW_AT(0x2111, GNU_call_site_value, 0, GNU) +HANDLE_DW_AT(0x2117, GNU_all_call_sites, 0, GNU)  HANDLE_DW_AT(0x2119, GNU_macros, 0, GNU)  // Extensions for Fission proposal.  HANDLE_DW_AT(0x2130, GNU_dwo_name, 0, GNU) diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp index 1b5744e8bea..a534d3628ef 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp @@ -234,7 +234,8 @@ static void dumpAttribute(raw_ostream &OS, const DWARFDie &Die,    else if (Attr == DW_AT_decl_line || Attr == DW_AT_call_line)      OS << *formValue.getAsUnsignedConstant();    else if (Attr == DW_AT_location || Attr == DW_AT_frame_base || -           Attr == DW_AT_data_member_location) +           Attr == DW_AT_data_member_location || +           Attr == DW_AT_GNU_call_site_value)      dumpLocation(OS, formValue, U, sizeof(BaseIndent) + Indent + 4, DumpOpts);    else      formValue.dump(OS, DumpOpts); diff --git a/llvm/test/tools/llvm-dwarfdump/X86/gnu_call_site.s b/llvm/test/tools/llvm-dwarfdump/X86/gnu_call_site.s new file mode 100644 index 00000000000..5eeda747a1d --- /dev/null +++ b/llvm/test/tools/llvm-dwarfdump/X86/gnu_call_site.s @@ -0,0 +1,118 @@ +# RUN: llvm-mc %s -filetype obj -triple i686-pc-linux -o %t +# RUN: llvm-dwarfdump %t | FileCheck %s + +# CHECK:      DW_TAG_subprogram +# CHECK-NEXT:   DW_AT_external  (true) +# CHECK-NEXT:   DW_AT_name      ("fn4") +# CHECK-NEXT:   DW_AT_linkage_name      () +# CHECK-NEXT:   DW_AT_low_pc    (0x0000000000000000) +# CHECK-NEXT:   DW_AT_high_pc   (0x00000000) +# CHECK-NEXT:   DW_AT_frame_base        (DW_OP_call_frame_cfa) +# CHECK-NEXT:   DW_AT_GNU_all_call_sites        (true) + +# CHECK:      DW_TAG_GNU_call_site +# CHECK-NEXT:   DW_AT_low_pc  (0x0000000000000000) +# CHECK-NEXT:   DW_AT_abstract_origin (cu + 0x0001) + +# CHECK:      DW_TAG_GNU_call_site_parameter +# CHECK-NEXT:   DW_AT_location      (DW_OP_reg0 EAX) +# CHECK-NEXT:   DW_AT_GNU_call_site_value   (DW_OP_addr 0x0) + +.section  .debug_info,"",@progbits +  .long  0x47 +  .value  0x4 +  .long  0 +  .byte  0x4 + +  .uleb128 0x1 # DW_TAG_compile_unit [1] +  .long  0 +  .byte  0x0 +  .long  0 +  .long  0 +  .long  0 +  .long  0 +  .long  0 + +  .uleb128 0xe # DW_TAG_subprogram [14] +  .string  "fn4" +  .long  0 +  .long  0 +  .long  0 +  .uleb128 0x1  # DW_AT_GNU_all_call_sites +  .byte  0x9c + +  .uleb128 0x12 # DW_TAG_GNU_call_site [18] +  .long  0x0 +  .long  0x1 + +  .uleb128 0x13 # DW_TAG_GNU_call_site_parameter [19] +  .uleb128 0x1 +  .byte  0x50 +  .uleb128 0x5 +  .byte  0x3 +  .long  X +  .byte  0 +  .byte  0 +  .byte  0 + +.section .debug_abbrev,"",@progbits +  .uleb128 0x1 +  .uleb128 0x11 +  .byte  0x1 # [1] +  .uleb128 0x25 +  .uleb128 0xe +  .uleb128 0x13 +  .uleb128 0xb +  .uleb128 0x3 +  .uleb128 0xe +  .uleb128 0x1b +  .uleb128 0xe +  .uleb128 0x11 +  .uleb128 0x1 +  .uleb128 0x12 +  .uleb128 0x6 +  .uleb128 0x10 +  .uleb128 0x17 +  .byte  0 +  .byte  0 + +  .uleb128 0xe # [14] +  .uleb128 0x2e +  .byte  0x1 +  .uleb128 0x3f +  .uleb128 0x19 +  .uleb128 0x3 +  .uleb128 0x8 +  .uleb128 0x6e +  .uleb128 0xe +  .uleb128 0x11 +  .uleb128 0x1 +  .uleb128 0x12 +  .uleb128 0x6 +  .uleb128 0x40 +  .uleb128 0x18 +  .uleb128 0x2117 +  .uleb128 0x19 +  .byte  0 +  .byte  0 + +  .uleb128 0x12 # [18] +  .uleb128 0x4109 +  .byte  0x1 +  .uleb128 0x11 +  .uleb128 0x1 +  .uleb128 0x31 +  .uleb128 0x13 +  .byte  0 +  .byte  0 + +  .uleb128 0x13 # [19] +  .uleb128 0x410a +  .byte  0 +  .uleb128 0x2 +  .uleb128 0x18 +  .uleb128 0x2111 +  .uleb128 0x18 +  .byte  0 +  .byte  0 +  .byte  0  | 

