[fpc-devel] AVR debug info - bug 0033914

Christo christo.crause at gmail.com
Mon Jul 2 22:19:19 CEST 2018


On Mon, 2018-07-02 at 15:47 +0200, Joost van der Sluis wrote:
> Op 30-06-18 om 21:51 schreef Christo:
> > 
> > I'm trying to figure out how to fix bug 33914. This bug causes gdb to read variable
> > addresses
> > from flash, not RAM.  Looking at the DWARF info, the address of a variable is written as a
> > word,
> > while gdb expects a prefixed address ($800000 + address) to indicate a RAM address, so the
> > size
> > of the address needs to be larger than 16 bits.  In dbgdwarf.pas it appears as if the size
> > of
> > addresses are taken from pint/puint in globtype.pas and aitconst_ptr_unaligned in
> > aasmtai.pas,
> > all of which are 16 bit sizes for AVR.
> > 
> > Of course all instances pint/puint types and aitconst_ptr_unaligned constants are appended
> > with
> > "_d" as part of this indirection.  A patch with this approach is attached to the bug report.
> > 
> > This appears to work correctly, but I'm not sure this is an elegant way of fixing the
> > problem.
> > Any comments or hints on how to fix the issue more elegantly?

> Has been a long time ago, but my guess is that in some DWARF-header 
> there is an offset for the memory-locations. (The unit-info maybe?)

I haven't noticed this in any header. It seems as if addresses are provided by the linker,
although I may be mistaken.

> You should have a look at the Dwarf-specs. And maybe have a look at 
> other platforms, what is generated there.

Thanks, I compared the generated assembly output of FPC and GCC, that is how I noticed the
discrepancy in address size and the sizes allocated to addresses.  Since the avr-gcc program
debugged fine, I tried to tweak the dbgdwarf unit to produce similar sized values.



More information about the fpc-devel mailing list