[PATCH] D103131: support debug info for alias variable

kamlesh kumar via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 11 16:44:51 PDT 2021


kamleshbhalui added a comment.

In D103131#2814015 <https://reviews.llvm.org/D103131#2814015>, @dblaikie wrote:

> In D103131#2811969 <https://reviews.llvm.org/D103131#2811969>, @kamleshbhalui wrote:
>
>> In D103131#2811220 <https://reviews.llvm.org/D103131#2811220>, @dblaikie wrote:
>>
>>> Any idea if the GDB test suite covers this functionality? I'd hope so, but maybe it doesn't.
>>>
>>> But yeah, at the moment I don't have any great reason to avoid the imported declaration form - so happy to go with that.
>>
>> Hi David,
>>
>> with imported declaration patch and with current patch(in review or say gcc way) this case works ok(we can print type and value of newname)
>> $cat test.c
>> int oldname = 1;
>> extern int newname attribute((alias("oldname")));
>>
>> but when we make newname static it works with current patch(in review or say gcc way) but it does not work with imported decl patch(https://reviews.llvm.org/D103131?id=347883).
>>
>> Should we go with gcc way or am I missing something?
>> note: used gdb debugger.
>
> An ideas what's happening when `newname` is static? Is the DWARF any different/interesting there? (since the DWARF for imported decl seems like it would have nothing to do with the linkange of the alias - since it doesn't refer to the actual alias in the object file, etc)

There not much different apart from extern has external attribute.
**case 1) when `newname` is static**

.debug_info contents:
0x00000000: Compile Unit: length = 0x00000072, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000076)

0x0000000b: DW_TAG_compile_unit

  DW_AT_producer    ("clang version 13.0.0 (git at github.com:llvm/llvm-project.git 4cd7169f5517167ef456e82c6dcae669bde6c725)")
  DW_AT_language    (DW_LANG_C99)
  DW_AT_name        ("test.c")
  DW_AT_stmt_list   (0x00000000)
  DW_AT_comp_dir    ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin")
  DW_AT_low_pc      (0x0000000000000000)
  DW_AT_high_pc     (0x0000000000000008)

0x0000002a:   DW_TAG_variable

  DW_AT_name      ("oldname")
  DW_AT_type      (0x0000003f "int")
  DW_AT_external  (true)
  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (1)
  DW_AT_location  (DW_OP_addr 0x0)

0x0000003f:   DW_TAG_base_type

  DW_AT_name      ("int")
  DW_AT_encoding  (DW_ATE_signed)
  DW_AT_byte_size (0x04)

0x00000046:   DW_TAG_variable

  DW_AT_name      ("newname")
  DW_AT_type      (0x0000003f "int")
  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (2)
  DW_AT_declaration       (true)

0x00000051:   DW_TAG_imported_declaration

  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (2)
  DW_AT_import    (0x00000046)
  DW_AT_name      ("newname")

0x0000005c:   DW_TAG_subprogram

  DW_AT_low_pc    (0x0000000000000000)
  DW_AT_high_pc   (0x0000000000000008)
  DW_AT_frame_base        (DW_OP_reg6 RBP)
  DW_AT_name      ("main")
  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (3)
  DW_AT_type      (0x0000003f "int")
  DW_AT_external  (true)

0x00000075:   NULL

**case 2) when `newname` is extern**

.debug_info contents:
0x00000000: Compile Unit: length = 0x00000072, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000076)

0x0000000b: DW_TAG_compile_unit

  DW_AT_producer    ("clang version 13.0.0 (git at github.com:llvm/llvm-project.git 4cd7169f5517167ef456e82c6dcae669bde6c725)")
  DW_AT_language    (DW_LANG_C99)
  DW_AT_name        ("test.c")
  DW_AT_stmt_list   (0x00000000)
  DW_AT_comp_dir    ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin")
  DW_AT_low_pc      (0x0000000000000000)
  DW_AT_high_pc     (0x0000000000000008)

0x0000002a:   DW_TAG_variable

  DW_AT_name      ("oldname")
  DW_AT_type      (0x0000003f "int")
  DW_AT_external  (true)
  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (1)
  DW_AT_location  (DW_OP_addr 0x0)

0x0000003f:   DW_TAG_base_type

  DW_AT_name      ("int")
  DW_AT_encoding  (DW_ATE_signed)
  DW_AT_byte_size (0x04)

0x00000046:   DW_TAG_variable

  DW_AT_name      ("newname")
  DW_AT_type      (0x0000003f "int")
  DW_AT_external  (true)
  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (2)
  DW_AT_declaration       (true)

0x00000051:   DW_TAG_imported_declaration

  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (2)
  DW_AT_import    (0x00000046)
  DW_AT_name      ("newname")

0x0000005c:   DW_TAG_subprogram

  DW_AT_low_pc    (0x0000000000000000)
  DW_AT_high_pc   (0x0000000000000008)
  DW_AT_frame_base        (DW_OP_reg6 RBP)
  DW_AT_name      ("main")
  DW_AT_decl_file ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c")
  DW_AT_decl_line (3)
  DW_AT_type      (0x0000003f "int")
  DW_AT_external  (true)

0x00000075:   NULL


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103131/new/

https://reviews.llvm.org/D103131



More information about the cfe-commits mailing list