From: Pedro Alves <palves@redhat.com>
To: Jiong Wang <jiwang@tilera.com>
Cc: Yao Qi <yao@codesourcery.com>,
Joel Brobecker <brobecker@adacore.com>,
gdb-patches@sourceware.org, Walter Lee <walt@tilera.com>
Subject: Re: [RFC/TileGX 2/6] simplify the handling of skip prologue for plt stub
Date: Fri, 01 Mar 2013 11:31:00 -0000 [thread overview]
Message-ID: <51309167.5050608@redhat.com> (raw)
In-Reply-To: <512623BE.2030608@tilera.com>
On 02/21/2013 01:40 PM, Jiong Wang wrote:
> On 02/20/2013 12:10 PM, Yao Qi wrote:
>> Is it possible that the section layouts on two pages? I mean, if is possible that NEXT_ADDR is within section FOO and page A, but the end of section FOO is within page A + 1. If this is true, we need to check to the min (page boundary, section boundary), otherwise, we don't have to worry about it.
>
> sure, and I guess the page boundary check is for the risk that the next page is not in memory that need to be paged in.
No, it should be for the case of the next page not being mapped at all. Like when straddling a segment.
Paging should be transparent to ptrace.
> but some of the time, we just need to analyze a few instructions then we could get the result, so we only cross a page when necessary, but this do not make sense for disk file access.
>
> after a second think, I fell it's reasonable that "section_table_xfer_memory_partial" do not handle those gap between sections, because there is no bit on the disk file for those gap, while if the debuggee is loaded and under running, then target_read_memory will use ptrace to fetch runtime memory, then those gap has physical map in memory, and set to zero.
>
Right.
> for x86, this is a issue also. for a simple testcase
>
> char *fmt = "x%d\n";
> int main(int argc, char **argv)
> {
> printf(fmt, argc);
> return 0;
> }
>
> gcc test.c
> gdb a.out
> (gdb) x/10 fmt
> 0x4005c0 <__dso_handle+8>: 174335352 Cannot access memory at address 0x4005c4
> (gdb) b main
> Breakpoint 1 at 0x4004e0
> (gdb) r
> Starting program: /home/jiwang/GDB-TEST/a.out
> Breakpoint 1, 0x00000000004004e0 in main ()
> (gdb) x/10 fmt
> 0x4005c0 <__dso_handle+8>: 174335352 0 990059265 44
> 0x4005d0: 4 -552 72 -236
> 0x4005e0: 112 -184
>
> so, I think fix this issue by checking section boundary simultaneously is a bit strange, the clean and proper way is to stop skip_prologue analysis when the pc is in plt stub.
I do agree that trying to find the end of the prologue of a plt stub is futile. We know plt stubs
aren't "normal" functions, and don't have prologues.
But, I do think the prologue analyzer still has a problem. You should see this
same issue with any small normal function (with no debug info) that happens to
end up close enough to the end of its section.
I suggest limiting the end address of the analysis with something like
in tilegx_skip_prologue
+ /* Don't straddle a section boundary. */
+ s = find_pc_section (start_pc);
+ end_pc = start_pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES;
+ if (s != NULL)
+ end_pc = min (end_pc, obj_section_endaddr (s));
return tilegx_analyze_prologue (gdbarch,
start_pc,
- start_pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES,
+ end_pc,
and also, make tilegx_analyze_prologue never touch memory
over end_addr. It doesn't seem to take that care currently?
--
Pedro Alves
next prev parent reply other threads:[~2013-03-01 11:31 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-18 9:25 Jiong Wang
2013-01-18 13:15 ` Joel Brobecker
2013-01-18 15:12 ` Jiong Wang
2013-01-18 17:30 ` Pedro Alves
2013-02-15 3:22 ` Jiong Wang
2013-02-16 4:50 ` Yao Qi
2013-02-20 2:49 ` Jiong Wang
2013-02-20 4:11 ` Yao Qi
2013-02-21 13:40 ` Jiong Wang
2013-03-01 10:35 ` Jiong Wang
2013-03-01 11:31 ` Pedro Alves [this message]
2013-03-01 14:08 ` Jiong Wang
2013-03-01 15:59 ` Pedro Alves
2013-03-02 1:40 ` [COMMITTED][RFC/TileGX " Jiong Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51309167.5050608@redhat.com \
--to=palves@redhat.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=jiwang@tilera.com \
--cc=walt@tilera.com \
--cc=yao@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox