[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728 --- Comment #14 from Jakub Jelinek jakub at gcc dot gnu.org 2012-11-28 23:01:14 UTC --- Author: jakub Date: Wed Nov 28 23:01:03 2012 New Revision: 193911 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=193911 Log: PR debug/36728 PR debug/55467 PR middle-end/55507 PR bootstrap/55511 * cselib.c (cselib_process_insn): If cselib_preserve_constants, don't reset table and exit early on volatile insns and setjmp. Reset table afterwards on setjmp. * gcc.dg/guality/pr36728-1.c: Include ../nop.h, make sure the asm are non-empty and add dependency between the first and second asm. * gcc.dg/guality/pr36728-2.c: Likewise. * gcc.dg/guality/pr36728-3.c: New test. * gcc.dg/guality/pr36728-4.c: New test. Added: trunk/gcc/testsuite/gcc.dg/guality/pr36728-3.c trunk/gcc/testsuite/gcc.dg/guality/pr36728-4.c Modified: trunk/gcc/ChangeLog trunk/gcc/cselib.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gcc.dg/guality/pr36728-1.c trunk/gcc/testsuite/gcc.dg/guality/pr36728-2.c
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #13 from jakub at gcc dot gnu dot org 2010-03-10 18:17 --- Subject: Bug 36728 Author: jakub Date: Wed Mar 10 18:17:10 2010 New Revision: 157363 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=157363 Log: PR debug/43290 * reg-notes.def (REG_CFA_SET_VDRAP): New note. * dwarf2out.c (dwarf2out_frame_debug_expr): Remove rule 20 - setting of fde-vdrap_reg. (dwarf2out_frame_debug): Handle REG_CFA_SET_VDRAP note. (based_loc_descr): Only express drap or vdrap regno based expressions using DW_OP_fbreg when not optimizing. * config/i386/i386.c (ix86_get_drap_rtx): When not optimizing, make the vDRAP = DRAP assignment RTX_FRAME_RELATED_P and add REG_CFA_SET_VDRAP note. PR debug/36728 * gcc.dg/guality/pr36728-1.c: New test. * gcc.dg/guality/pr36728-2.c: New test. Added: trunk/gcc/testsuite/gcc.dg/guality/pr36728-1.c trunk/gcc/testsuite/gcc.dg/guality/pr36728-2.c Modified: trunk/gcc/ChangeLog trunk/gcc/config/i386/i386.c trunk/gcc/dwarf2out.c trunk/gcc/reg-notes.def trunk/gcc/testsuite/ChangeLog -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #11 from hjl at gcc dot gnu dot org 2008-07-06 01:19 --- Subject: Bug 36728 Author: hjl Date: Sun Jul 6 01:18:49 2008 New Revision: 137517 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=137517 Log: 2008-07-05 H.J. Lu [EMAIL PROTECTED] Xuepeng Guo [EMAIL PROTECTED] PR debug/36728 * dwarf2out.c (dw_fde_node): Add drap_reg and vdrap_reg. Remove cfa_uses_expression. (add_cfi): Check drap_reg instead of cfa_uses_expression. (dwarf2out_frame_debug_expr): Add rule 20 to handle virtual drap. Update rule 19 to set drap_reg instead of cfa_uses_expression. (dwarf2out_begin_prologue): Initialize drap_reg and vdrap_reg to INVALID_REGNUM. (based_loc_descr): Use cfa+offset to represent the location of arguments passed on stack when drap is used to align stack. * config/i386/i386.c (ix86_get_drap_rtx): Set RTX_FRAME_RELATED_P bit on virtual drap insn. Modified: branches/stack/gcc/ChangeLog.stackalign branches/stack/gcc/config/i386/i386.c branches/stack/gcc/dwarf2out.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #12 from hjl dot tools at gmail dot com 2008-07-06 01:21 --- Fixed. -- hjl dot tools at gmail dot com changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #1 from hjl dot tools at gmail dot com 2008-07-04 13:17 --- Created an attachment (id=15852) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=15852action=view) A testcase with drap [EMAIL PROTECTED] stack-10]$ /export/build/gnu/gcc-stack-internal/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc-stack-internal/build-x86_64-linux/gcc/ -m32 foo.c -g [EMAIL PROTECTED] stack-10]$ gdb a.out GNU gdb 6.8.50.20080605-cvs Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type show copying and show warranty for details. This GDB was configured as x86_64-unknown-linux-gnu... (gdb) b foo Breakpoint 1 at 0x80483a8: file foo.c, line 7. (gdb) r Starting program: /export/home/hjl/bugs/gcc/stack-10/a.out Breakpoint 1, foo (dummy1=-5725018, dummy2=0, dummy3=-5724977, dummy4=-5724952, dummy5=-5724933, dummy6=-5724905, size=-5724890) at foo.c:7 7 { (gdb) next 8 volatile char * ptr=__builtin_alloca(size); (gdb) 11xxx = 2; (gdb) 12ptr [1]= 30; (gdb) 13printf (%d: %d\n, xxx, ptr [1]); (gdb) p xxx $1 = 0 (gdb) p ptr [1] $2 = 0 '\0' (gdb) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #2 from hjl dot tools at gmail dot com 2008-07-04 13:19 --- Created an attachment (id=15853) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=15853action=view) A testcase without drap [EMAIL PROTECTED] stack-10]$ /export/build/gnu/gcc-stack-internal/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc-stack-internal/build-x86_64-linux/gcc/ -m32 bar.c -g [EMAIL PROTECTED] stack-10]$ gdb a.out GNU gdb 6.8.50.20080605-cvs Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type show copying and show warranty for details. This GDB was configured as x86_64-unknown-linux-gnu... (gdb) b foo Breakpoint 1 at 0x80483b1: file bar.c, line 11. (gdb) r Starting program: /export/home/hjl/bugs/gcc/stack-10/a.out Breakpoint 1, foo (dummy1=1, dummy2=2, dummy3=3, dummy4=4, dummy5=5, dummy6=6, size=30) at bar.c:11 11xxx = 2; (gdb) next 12ptr [1]= 30; (gdb) 13printf (%d: %d\n, xxx, ptr [1]); (gdb) p xxx $1 = 3 (gdb) p ptr [1] $2 = 0 '\0' (gdb) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #3 from rguenth at gcc dot gnu dot org 2008-07-04 13:46 --- Great. That IMHO blocks the merge of the stack-branch. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #4 from hjl at gcc dot gnu dot org 2008-07-04 14:18 --- Subject: Bug 36728 Author: hjl Date: Fri Jul 4 14:17:18 2008 New Revision: 137460 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=137460 Log: 2008-07-04 Xuepeng Guo [EMAIL PROTECTED] PR debug/36728 * dwarf2out.c (based_loc_descr): For local variables, use sp+offset when stack is aligned without drap and fp+offset when stack is aligned with drap. Modified: branches/stack/gcc/ChangeLog.stackalign branches/stack/gcc/dwarf2out.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #5 from hjl dot tools at gmail dot com 2008-07-04 14:40 --- Xuepeng, revision 137460 fixes both local variables and incoming arguments on 32bit. But it still fails incoming arguments on 64bit: bash-3.2$ ./xgcc -B./ -g /tmp/foo.c bash-3.2$ gdb foo GNU gdb Fedora (6.8-10.fc9) ... (gdb) b foo Breakpoint 1 at 0x4004ac: file /tmp/foo.c, line 7. (gdb) r Starting program: /export/build/gnu/gcc-stack/build-x86_64-linux/gcc/a.out Breakpoint 1, foo (dummy1=0, dummy2=4195829, dummy3=750006345, dummy4=1, dummy5=0, dummy6=4195211, size=702562328) at /tmp/foo.c:7 7 { Missing separate debuginfos, use: debuginfo-install glibc.x86_64 (gdb) next 8 volatile char * ptr=__builtin_alloca(size); (gdb) 11xxx = 2; (gdb) 12ptr [1]= 30; (gdb) p xxx $1 = 2 (gdb) p ptr [1] $2 = 63 '?' (gdb) next 13printf (%d: %d\n, xxx, ptr [1]); (gdb) p ptr [1] $3 = 30 '\036' (gdb) p size $4 = -14032866 (gdb) The difference on 64bit is the first 6 integer parameters are passed in register and the rest on stack. Can you look into it? Thanks. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #6 from hjl dot tools at gmail dot com 2008-07-04 15:04 --- The code in question is movq%r10, %rax #, tmp73 movl%edi, -52(%rbp) # dummy1, dummy1 movl%esi, -56(%rbp) # dummy2, dummy2 movl%edx, -60(%rbp) # dummy3, dummy3 movl%ecx, -64(%rbp) # dummy4, dummy4 movl%r8d, -68(%rbp) # dummy5, dummy5 movl%r9d, -72(%rbp) # dummy6, dummy6 .loc 1 5 0 movl16(%rax), %eax # size, tmp63 r10 is used for DRAP. But size accessed by rax, not by DRAP. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #7 from hjl dot tools at gmail dot com 2008-07-04 15:16 --- Joey, this is caused by ix86_get_drap_rtx: /* Assign DRAP to vDRAP and returns vDRAP */ unsigned int regno = find_drap_reg (); rtx drap_vreg; rtx arg_ptr; rtx seq; arg_ptr = gen_rtx_REG (Pmode, regno); crtl-drap_reg = arg_ptr; start_sequence (); drap_vreg = copy_to_reg (arg_ptr); seq = get_insns (); end_sequence (); emit_insn_before (seq, NEXT_INSN (entry_of_function ())); return drap_vreg; Do we really need vDRAP? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #8 from hjl dot tools at gmail dot com 2008-07-04 15:21 --- (In reply to comment #7) Joey, this is caused by ix86_get_drap_rtx: Do we really need vDRAP? Yes, it is needed. Xuepeng, we need to update dwarf2out.c to track vDRAP. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #9 from hjl dot tools at gmail dot com 2008-07-04 16:04 --- We can start with Index: config/i386/i386.c === --- config/i386/i386.c (revision 137474) +++ config/i386/i386.c (working copy) @@ -6628,7 +6628,7 @@ ix86_get_drap_rtx (void) unsigned int regno = find_drap_reg (); rtx drap_vreg; rtx arg_ptr; - rtx seq; + rtx seq, insn; arg_ptr = gen_rtx_REG (Pmode, regno); crtl-drap_reg = arg_ptr; @@ -6638,7 +6638,9 @@ ix86_get_drap_rtx (void) seq = get_insns (); end_sequence (); - emit_insn_before (seq, NEXT_INSN (entry_of_function ())); + insn = emit_insn_before (seq, NEXT_INSN (entry_of_function ())); + RTX_FRAME_RELATED_P (insn) = 1; + return drap_vreg; } else -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728
[Bug debug/36728] [stack]: gdb doesn't work with stack alignment
--- Comment #10 from hjl dot tools at gmail dot com 2008-07-04 20:35 --- A patch is posted at http://gcc.gnu.org/ml/gcc-patches/2008-07/msg00347.html -- hjl dot tools at gmail dot com changed: What|Removed |Added URL||http://gcc.gnu.org/ml/gcc- ||patches/2008- ||07/msg00347.html http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36728