This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: RFA: [buildsym.c] Turn off unused addr bits in linetable


Andrew,

I looked at all the targets that define ADDR_BITS_REMOVE() (which are
arm, h8500, m88k, mips, pa, w65, z8k and sh) and all that define
BREAKPOINT_FROM_PC() (which are arm, mips, mcore and mn10300, as far as
I can tell).

I am convinced that this is the right thing to do.  I really wonder, in
some cases, how could it have worked without it (maybe the stub or the
OS cleared the bits for us).

Anyway, there is only one way of knowing it for sure.  The only thing we
know right now is that ARM is broken without it.

OK to commit?

Fernando

Fernando Nasser wrote:
> 
> Andrew Cagney wrote:
> >
> > Fernando Nasser wrote:
> > >
> > > Some systems like ARM may have extra bits set in the address to indicate
> > > a mode or something else (the LSB=1 means thumb mode for ARM).
> > >
> > > So, before storing line number addresses we may need to turn this bits
> > > off as they may be passed to gdb with the bits on as result of
> > > relocation (ld has no way of knowing it is for a line table entry).
> > >
> > > The following patch passes the line addresses through the target
> > > dependent macro ADDR_BITS_REMOVE() before storing it on the table.
> > >
> > > OK to commit?
> > >
> > > ChangeLog:
> > >
> > >         * buildsym.c (record_line): Turn off unused addr bits.
> >
> > I'm not sure about this.  The ARM has two ways of identifying THUMB code
> > - the LSB and a tacky symbol lookup.
> >
> 
> Yes, but the loader relocation produces _some_ thumb addresses with the
> LSB bit on.  The bit in the symbol table is only used to detect thumb
> addresses that had the bit turned off (I have a second patch that
> optimizes the ARM implementation of ADDR_BITS_REMOVE() but it is not
> necessary for correctness).
> 
> > Others, such as MIPS/MIPS16 don't.  I'm not sure how this will affect
> > that target.  Does the code that uses this address of line also ``turn
> > off unused addr bits''?
> >
> 
> Well, they should.  BRAKPOINT_FROM_PC() is supposed to make the
> necessary address adjustments.  In the ARM case, it does turn off the
> thumb bit (the others will never be set where it is used).
> 
> I don't have a MIPS target to test.  I will depend on someone doing it
> for me.  I will take a look at the macros implementation though.
> 
> Thanks for the heads up.
> 

-- 
Fernando Nasser
Red Hat Canada Ltd.                     E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]