From: Steven Johnson <sjohnson@neurizon.net>
To: Modi Banti <b.modi@sssup.it>
Cc: gdb@sources.redhat.com
Subject: Re: Remote stub for ARM processor
Date: Sun, 27 Jun 2004 23:50:00 -0000 [thread overview]
Message-ID: <40DF5D4D.9060805@neurizon.net> (raw)
In-Reply-To: <web-4609543@sssup.it>
Modi Banti wrote:
> Hi,
>
> I am trying to buikd a remote stub for an ARM processor Simulator. I
> have couple of problems with this...
>
> 1) When a Simulator arrives at a breakpoint it sends the signal
> SIGTRAP 15 (register number): PC to GDB so the GDB stops and shows the
> instruction at PC but since for ARM processor PC point to current
> instruction + 8, so it shows me a wrong line. I am not sure while
> displaying the line GDB takes into account of Pipiline. I can overcome
> this problem tempararily by sending the signal SIGTRAP 15: PC- 8. so
> it works correctly but I am not sure if this is the correct way of
> doing it.
You have this problem with a simulator or the real ARM. I believe you
have to adjust the PC, to point to the actual line currently being
executed. I am not aware of any pipeline awareness in GDB. This is a
particular quirk of the ARM, and is made worse by Interrupts, where the
LR can have various offsets from the real return address, depending on
the IRQ/branch/Arm/thumb mode in question. So trying to find where you
came from can be problematic (not sure how GDB resolves this when it
does a stack trace?)
EG, LR after a BL = PC+4 in ARM, and PC+2 in thumb. but FIQ LR = PC+4
in both ARM and THUMB, but DABT LR = PC+8 for arm and thumb. I believe
its up to the stub/simulator to deal with this quirk and any problems it
might cause GDB's knowledge of the executing program, by adjusting
accordingly.
>
> 2) In reply to GDBs $s#73 (single step) command i send the same packet
> i.e SIGTRAP 15: PC - 8 . I am not sure if I need to send SIGTRAP or
> some other signal. Here also the 'n' command works prefectly fine with
> normal code but if it is a Function call then instead of stopping at
> next line GDB stops at line after that e. g for following code
> Mutex_lock(&mut);
> ++i;
> ++j;
> if I give 'n' command when GDB is at Mutex_lock(&mut) then it gives
> some series of $s#73 commands and finaly stops at ++j instead of
> stopping at ++i. this happens only in case of function call for normal
> statements it works perfectly fine. Here I am not sure whether SIGTRAP
> is a right signal and secondly sending PC -15 is correct or not ( if i
> send just PC here then insted og going to next instruction GDB steps
> in the function call).
> Can anybody help me with this or tell me which part of code in GDB
> handles this step instruction?
n wont stop on the function call. It should stop on the ++i; the GDB
manual says about "next":
"This is similar to `step', but function calls that appear
within the line of code are executed without stopping. Execution
stops when control reaches a different line of code at the
original stack level that was executing when you gave the `next'
command."
Im pretty sure the signal you send matters not in the reply.
Im sure you meant PC-8?? Maybe this has something to do with LR?
because a function call will use LR? Maybe you need to "adjust" LR as
well, depending on circumstances, otherwise LR wont point to the ++i; it
will point to the ++j; (potentially confusing GDB if it uses it).
Sorry I cant be more helpful or categoric, we (my company) are in the
process of writing a GDB target stub for ARM, id be interested to know
how you fare with this problem.
Steven
>
> Thanks and regards,
> Banti
>
>
>
>
next prev parent reply other threads:[~2004-06-27 23:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-27 2:26 Modi Banti
2004-06-27 23:50 ` Steven Johnson [this message]
2004-06-28 14:03 ` Modi Banti
2004-07-10 16:11 ` How does GDB informs remote stub about '^Cremote_interrupt called ' Modi Banti
2004-07-11 5:32 ` Alexander Stante
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=40DF5D4D.9060805@neurizon.net \
--to=sjohnson@neurizon.net \
--cc=b.modi@sssup.it \
--cc=gdb@sources.redhat.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