[llvm-dev] Instruction boundaries
Muhui Jiang via llvm-dev
llvm-dev at lists.llvm.org
Tue Jun 26 06:38:12 PDT 2018
Hi Paulr
I am using the llvm-dwarfdump. This is not the end of the function, thus
there is no 'end_sequence' reported. Here I just want to give you an
exception because you said that all the instructions should be listed
inside dwarf line table. However, I found that it will lost some
instructions. And some instruction's source line is zero.
Besides, I also noticed that inline data is listed inside the line table.
Regards
Muhui
2018-06-26 9:08 GMT-04:00 <paul.robinson at sony.com>:
> There should be a line-table entry for the end of the function, which
> appears to be missing from the dump you provided. llvm-dwarfdump should
> report this address with 'end_sequence' in the Flags. Are you using a
> different dumper?
>
>
>
> I am not sure but my guess would be that inline data is not represented in
> the line table. The line table's primary purpose is to inform the debugger
> about good breakpoint locations, and clearly you do not want to set
> breakpoints in data. Inline data is probably contained within the code
> ranges described in the DW_TAG_subprogram, however.
>
> --paulr
>
>
>
> *From:* Muhui Jiang [mailto:jiangmuhui at gmail.com]
> *Sent:* Tuesday, June 26, 2018 1:44 AM
> *To:* Robinson, Paul
> *Cc:* Yajin; llvm-dev
> *Subject:* Re: [llvm-dev] Instruction boundaries
>
>
>
> Hi Paulr
>
>
>
> According to my observation. Not all the instructions are listed in the
> line table.
>
>
>
> For example. We have address 0xa3a0 and 0xa3a4 as the instructions
>
>
>
> .text:0000A394 CMP R1, #0x42
>
> .text:0000A398 BHI loc_AB70
>
> .text:0000A39C ADR R1, off_A3A8
>
> .text:0000A3A0 LDR R0, [R1,R0,LSL#2]
>
> .text:0000A3A4 MOV PC, R0
>
> .text:0000A3A4 ; ------------------------------
> ---------------------------------------------
>
> .text:0000A3A8 off_A3A8 DCD loc_AB3C ; DATA XREF:
> main+AC↑o
>
> .text:0000A3AC DCD loc_AB34
>
> .text:0000A3B0 DCD loc_AB70
>
> .text:0000A3B4 DCD loc_AB70
>
>
>
> However, inside the line table. The description is end at 0xa39c. Do you
> have any ideas?
>
>
>
> 196 0x000000000000a38c 956 7 1 0 0
>
> 197 0x000000000000a39c 0 7 1 0 0
>
>
> 198 0x000000000000a7d8 959 27 1 0 0 is_stmt
>
> 199 0x000000000000a7f8 959 25 1 0 0
>
> 200 0x000000000000a7fc 961 11 1 0 0 is_stmt
>
> 201 0x000000000000a800 964 15 1 0 0 is_stmt
>
> 202 0x000000000000a808 964 15 1 0 0
>
>
>
> Regards
>
> Muhui
>
>
>
>
>
> 2018-06-25 23:31 GMT-04:00 Muhui Jiang <jiangmuhui at gmail.com>:
>
> Hi paulr
>
>
>
> Thanks for your reply. Though DWARF info give me the code address ranges,
> there might be inline data. If so, how to handle this case?
>
>
>
> As for the dwarf line table. Sometimes, the source line might be zero. Do
> you know why? If all instructions should be describe in the line table, I
> think analyzing Dwarf line table is enough to get all the instructions
> addresses. Do you agree?
>
>
>
> I would also cc my supervisor for the discussion.
>
>
>
> Regards
>
> Muhui
>
>
>
> <paul.robinson at sony.com>于2018年6月26日 周二上午2:38写道:
>
> The main DWARF info should provide the code address ranges for each
> function, as well as the starting source location. You could then use the
> line table to map code ranges to individual source lines. That could give
> you a reasonable grasp of the source range for each function.
>
> All addresses in the DWARF line table will be instruction addresses. And
> in fact, all instructions should be described in the line table (assuming
> all source was compiled with debug info).
>
> --paulr
>
>
>
> *From:* llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] *On Behalf Of *Muhui
> Jiang via llvm-dev
> *Sent:* Monday, June 25, 2018 11:36 AM
> *To:* llvm-dev
> *Subject:* [llvm-dev] Instruction boundaries
>
>
>
> Hi
>
>
>
> I was wondering whether there are any methods to know what part of the
> target binary is code.
>
>
>
> I have some ideas and hope to get your comments.
>
>
>
> I would like to use LLVM's source level debugging information to extract
> the source lines belonging to every functions. Then use the dwarf mapping
> table to transfer the source level information to binary address. Are
> there any better methods?
>
>
>
> Besides, is the address listed inside dwarf line mapping table must be
> code rather than data?
>
>
>
> Regards
>
> Muhui
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180626/3bad739e/attachment.html>
More information about the llvm-dev
mailing list