------- Comment #12 from ppluzhnikov at google dot com  2009-06-27 00:49 -------
This appears to still be broken in 32-bit mode.

I just built GCC @148996 on x86_64, and compiled the attached test case with
'-m32':

(gdb) start
Breakpoint 1 at 0x80483d9: file gcc-pr40012-test.c, line 24.
main () at gcc-pr40012-test.c:24
24        list a3 = { 0 };
(gdb) n
25        f0(0, 0, 0, &a3);
(gdb) p &a3
$1 = (list *) 0xffffccb4
(gdb) s
f0 (a=0x0, b=0x0, c=0x0, d=0xffffcc8c) at gcc-pr40012-test.c:15
15          for(problem = d; problem; problem = problem->next) {

Clearly GDB and GCC are in disagreement about the location of a3.

Disassebly shows:

0x080483d0 <main+0>:    push   %ebp
0x080483d1 <main+1>:    mov    %esp,%ebp
0x080483d3 <main+3>:    and    $0xfffffff0,%esp
0x080483d6 <main+6>:    sub    $0x20,%esp
0x080483d9 <main+9>:    movl   $0x0,0x1c(%esp)
0x080483e1 <main+17>:   lea    0x1c(%esp),%eax
0x080483e5 <main+21>:   mov    %eax,0xc(%esp)
0x080483e9 <main+25>:   movl   $0x0,0x8(%esp)
0x080483f1 <main+33>:   movl   $0x0,0x4(%esp)
0x080483f9 <main+41>:   movl   $0x0,(%esp)
0x08048400 <main+48>:   call   0x8048394 <f0>
0x08048405 <main+53>:   mov    $0x0,%eax
0x0804840a <main+58>:   leave  
0x0804840b <main+59>:   ret    

readelf -w:

 <1><1ee>: Abbrev Number: 12 (DW_TAG_subprogram)
    <1ef>   DW_AT_external    : 1       
    <1f0>   DW_AT_name        : (indirect string, offset: 0xf5): main   
    <1f4>   DW_AT_decl_file   : 1       
    <1f5>   DW_AT_decl_line   : 22      
    <1f6>   DW_AT_type        : <0x1df> 
    <1fa>   DW_AT_low_pc      : 0x80483d0       
    <1fe>   DW_AT_high_pc     : 0x804840c       
    <202>   DW_AT_frame_base  : 0x38    (location list)
    <206>   DW_AT_sibling     : <0x218> 
 <2><20a>: Abbrev Number: 13 (DW_TAG_variable)
    <20b>   DW_AT_name        : a3      
    <20e>   DW_AT_decl_file   : 1       
    <20f>   DW_AT_decl_line   : 24      
    <210>   DW_AT_type        : <0x161> 
    <214>   DW_AT_location    : 2 byte block: 91 14     (DW_OP_fbreg: 20)

And

    00000038 080483d0 080483d1 (DW_OP_breg4: 4)
    00000038 080483d1 080483d3 (DW_OP_breg4: 8)
    00000038 080483d3 0804840b (DW_OP_breg5: 8)
    00000038 0804840b 0804840c (DW_OP_breg4: 4)
    00000038 <End of list>


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40012

Reply via email to