Hi,

I've been looking into this a little further, and it appears to me that 
the problem is in gcc providing the wrong debug info.

readelf -w shows:

in .debug_info:

<2><45>: Abbrev Number: 4 (DW_TAG_variable)
     <46>   DW_AT_name        : a
     <48>   DW_AT_decl_file   : 1
     <49>   DW_AT_decl_line   : 4
     <4a>   DW_AT_type        : <0x8e>
     <4e>   DW_AT_location    : 2 byte block: 91 78      (DW_OP_fbreg: -8)

and then in .debug_loc:
     Offset   Begin    End      Expression
     00000000 f83e f840 (DW_OP_breg1 (r1): 0)
     00000000 f840 f842 (DW_OP_breg4 (r4): 0)
     00000000 f842 f8bc (DW_OP_breg4 (r4): -2)
     00000000 <End of list>

The 2 byte offset I'm seeing appears to be coming from the last line in 
.debug_loc. (If I change that -2 to 0 with a hex editor then the debugger 
finds the variables in the right place).

I'm a total newbie to dwarf and gdb internals, but also see that changing 
the DW_OP_fbreg that describes the variable location to
DW_OP_breg4 allows gdb to see the correct value.

I see this with all the currently distributed msp430-gcc installs I've 
found: those currently distributed in Gentoo, Ubuntu 12.10, as well 
as MacPorts.

In an older Ubuntu with
gcc version 4.5.3 (GNU GCC patched mspgcc-20110716) 
the details are different, but the symptoms are similar. With that compilier,
readelf shows that variable location as DW_OP_fbreg: -10 (when it should 
be -8), and .debug_loc shows:

    Offset   Begin    End      Expression
     00000000 fc38 fc3a (DW_OP_breg1 (r1): 2)
     00000000 fc3a fc3c (DW_OP_breg4 (r4): 2)
     00000000 fc3c fcb4 (DW_OP_breg4 (r4): 0)
     00000000 <End of list>

The net result here is the same that the debugger is looking two bytes off 
of where it should be.

Seems like if I could keep the .debug_loc from the old compiler and the 
.debug_info from the new compiler it would all work...

Any help in getting to the bottom of this would be appreciated.

Carl


On Wed, 5 Dec 2012, Carl Michal wrote:

> Hello,
>
> I've noticed that when debugging programs with gdb on an MSP430 Launchpad 
> (MSP430G2231), the print command in gdb doesn't work properly for local 
> variables.  The issue I'm seeing has very similar symptoms to:
> http://sourceforge.net/tracker/?func=detail&aid=3417263&group_id=42303&atid=432701
> but the mspgcc I'm using appears to be much newer than that.
>
> If I ask gdb:
>>  info address a
> it tells me:
> Symbol "a" is a variable at frame base reg $r4 offset -2+-8.
>
> but looking at the assembly code produced with msp-gcc -S, a is always 
> referenced at -8(r4). The value I get with
> (gdb) print a
> corresponds to the variable at -10(r4). Doing
> (gdb) x/1hd $r4-8
>
> shows the correct value for a.
>
> I'm using
> gcc version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (Gentoo 
> 4.6.3_p20120406 p1.0)
> and
> GNU gdb (Gentoo MSP430 7.2_p20111205) 7.2
> on Gentoo.
>
> Carl
>
>

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to