Mirror of the gdb mailing list
 help / color / mirror / Atom feed
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 
>
>  
>
>



  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