[PATCH] D38721: [ELF] - Teach LLD to report line numbers for data symbols.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 11 03:27:26 PDT 2017


grimar added inline comments.


================
Comment at: test/ELF/Inputs/conflict-debug-variable.s:1
+# Used reduced output from following code and gcc 7.1.0
+# to produce this input file:
----------------
ruiu wrote:
> I don't think we want to have this machine-generated assembly in the test directory. It is hard to verify/edit. Can you do this with llvm-as?
Problem to do that is next. There is a difference in debug information produced by gcc and clang.

clang encodes variables names using `DW_FORM_strp` (represents an offset in `.debug_str`):

```
0x0000001e:   DW_TAG_variable [2]  
                DW_AT_name [DW_FORM_strp]	( .debug_str[0x00000048] = "foo")
                DW_AT_type [DW_FORM_ref4]	(cu + 0x0033 => {0x00000033})
                DW_AT_external [DW_FORM_flag_present]	(true)
                DW_AT_decl_file [DW_FORM_data1]	("/home/umb/tests/566_duplicatesym/1.c")
                DW_AT_decl_line [DW_FORM_data1]	(1)
                DW_AT_location [DW_FORM_exprloc]	(DW_OP_addr 0x0)
```

gcc places string in place using DW_FORM_string:
```
0x0000001d:   DW_TAG_variable [2]  
                 DW_AT_name [DW_FORM_string]	("foo")
                 DW_AT_decl_file [DW_FORM_data1]	("/home/umb/tests/566_duplicatesym/1.c")
                 DW_AT_decl_line [DW_FORM_data1]	(1)
                 DW_AT_type [DW_FORM_ref4]	(cu + 0x0032 => {0x00000032})
                DW_AT_external [DW_FORM_flag_present]	(true)
                 DW_AT_location [DW_FORM_exprloc]	(DW_OP_addr 0x0)
```

We want to support both ways, and this patch supports only first one, because our `LLDDwarfObj`
does not provide `.debug_str` section for DWARF parsers yet.

I tried to use llvm-as + llc and found no way to make output to use gcc way (`DW_FORM_string` for name attribute).
(used clang -S -emit-llvm -g to produce IR). I am not sure is it possible ? Seems - not. 
I think clang has no flags to drop use of `.debug_str`.

I am going to implement support for `DW_FORM_strp` (clang way) after this patch be landed, but we need testcases
for both ways I believe. For following patch I can use llvm-as.

I updated this testcase so it should be more readable. It also should be no need to edit it in future I think.


https://reviews.llvm.org/D38721





More information about the llvm-commits mailing list