From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6944 invoked by alias); 22 Nov 2005 00:07:21 -0000 Received: (qmail 6749 invoked by uid 22791); 22 Nov 2005 00:07:19 -0000 X-Spam-Check-By: sourceware.org Received: from ip127.bb146.pacific.net.hk (HELO stl.com.hk) (202.64.146.127) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 22 Nov 2005 00:07:15 +0000 Received: from 221.196.17.210.dyn.pacific.net.hk ([210.17.196.221] helo=[192.168.1.10]) by stl.com.hk with esmtpsa (TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32) (Exim 4.50) id 1EeLbR-0005Zx-6k; Tue, 22 Nov 2005 08:01:41 +0800 Message-ID: <43826100.6000709@tausq.org> Date: Tue, 22 Nov 2005 00:07:00 -0000 From: Randolph Chung User-Agent: Debian Thunderbird 1.0.2 (X11/20050331) MIME-Version: 1.0 To: Daniel Jacobowitz CC: Jim Blandy , gdb@sources.redhat.com Subject: Re: Argument pointers, dwarf and prologue analysis References: <4381603E.1060500@tausq.org> <8f2776cb0511202342k23a2e537pe3cbf569a94c3d03@mail.gmail.com> <4381A22B.20707@tausq.org> <20051121140809.GA18686@nevyn.them.org> <4381E376.5020003@tausq.org> <20051121152640.GA21540@nevyn.them.org> In-Reply-To: <20051121152640.GA21540@nevyn.them.org> Content-Type: multipart/mixed; boundary="------------020301000707030204080501" Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2005-11/txt/msg00457.txt.bz2 This is a multi-part message in MIME format. --------------020301000707030204080501 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1442 > How about full assembly and debug info for some case we get wrong? At > least three frames where the middle one uses its arguments after the > call site, so we have a non-leaf function to look at. ok, here we go: tausq@hiauly3:~$ cat dwarfbug.c void foo(int a, int b, int c, int d, int e) { a = a; } void bar(int a, int b, int c) { b = b; foo(5, 6, 7, 8, 9); a = a; } int main(int argc, char **argv) { bar(1,2,3); return 0; } tausq@hiauly3:~$ gcc -g -o dwarfbug dwarfbug.c tausq@hiauly3:~$ src/build64/gdb/gdb ./dwarfbug GNU gdb 6.3.50.20051115-cvs Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "hppa64-hp-hpux11.11"... (gdb) b foo Breakpoint 1 at 0x4000000000002418: file dwarfbug.c, line 4. (gdb) run Starting program: /home/tausq/dwarfbug Breakpoint 1, foo (a=5, b=6, c=7, d=8, e=9) at dwarfbug.c:4 4 } (gdb) bt #0 foo (a=5, b=6, c=7, d=8, e=9) at dwarfbug.c:4 #1 0x4000000000002474 in bar (a=5, b=6, c=7) at dwarfbug.c:9 #2 0x40000000000024d0 in main (argc=5, argv=0x6) at dwarfbug.c:15 (gdb) quit The program is running. Exit anyway? (y or n) y Assembly and readelf -wi output attached. randolph --------------020301000707030204080501 Content-Type: text/plain; name="dwarfbug.s" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="dwarfbug.s" Content-length: 5706 .LEVEL 2.0w .file "dwarfbug.c" .version "01.01" .file 1 "dwarfbug.c" .section .debug_abbrev,"",@progbits L$debug_abbrev0000 .section .debug_info,"",@progbits L$debug_info0000 .section .debug_line,"",@progbits L$debug_line0000 .text L$text0000 .align 8 .globl foo .type foo, @function L$FB0003 .loc 1 2 0 foo .PROC .CALLINFO FRAME=80,NO_CALLS,SAVE_SP,ENTRY_GR=3 .ENTRY copy %r3,%r1 copy %r30,%r3 std,ma %r1,80(%r30) std %r3,-8(%r30) ldo -64(%r29),%r19 stw %r26,4(%r19) stw %r25,12(%r19) stw %r24,20(%r19) stw %r23,28(%r19) stw %r22,36(%r19) .loc 1 4 0 ldo 64(%r3),%r30 ldd,mb -64(%r30),%r3 bve,n (%r2) .EXIT .PROCEND L$FE0003 .size foo, .-foo .align 8 .globl bar .type bar, @function L$FB0005 .loc 1 7 0 bar .PROC .CALLINFO FRAME=144,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 .ENTRY std %r2,-16(%r30) copy %r3,%r1 copy %r30,%r3 std,ma %r1,144(%r30) std %r3,-8(%r30) std %r4,16(%r3) ldo -64(%r29),%r19 stw %r26,4(%r19) stw %r25,12(%r19) stw %r24,20(%r19) .loc 1 9 0 ldi 5,%r26 ldi 6,%r25 ldi 7,%r24 ldi 8,%r23 ldi 9,%r22 ldo -48(%r30),%r29 copy %r27,%r4 b,l foo,%r2 nop copy %r4,%r27 .loc 1 11 0 ldd -16(%r3),%r2 ldd 16(%r3),%r4 ldo 64(%r3),%r30 ldd,mb -64(%r30),%r3 bve,n (%r2) .EXIT .PROCEND L$FE0005 .size bar, .-bar .align 8 .globl main .type main, @function L$FB0007 .loc 1 14 0 main .PROC .CALLINFO FRAME=144,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 .ENTRY std %r2,-16(%r30) copy %r3,%r1 copy %r30,%r3 std,ma %r1,144(%r30) std %r3,-8(%r30) std %r4,16(%r3) ldo -64(%r29),%r19 stw %r26,4(%r19) std %r25,8(%r19) .loc 1 15 0 ldi 1,%r26 ldi 2,%r25 ldi 3,%r24 ldo -48(%r30),%r29 copy %r27,%r4 b,l bar,%r2 nop copy %r4,%r27 .loc 1 16 0 ldi 0,%r19 .loc 1 17 0 copy %r19,%r28 ldd -16(%r3),%r2 ldd 16(%r3),%r4 ldo 64(%r3),%r30 ldd,mb -64(%r30),%r3 bve,n (%r2) .EXIT .PROCEND L$FE0007 .size main, .-main L$etext0000 .section .debug_info .word 0x155 .half 0x2 .word L$debug_abbrev0000 .byte 0x8 .uleb128 0x1 .word L$debug_line0000 .dword L$etext0000 .dword L$text0000 .stringz "dwarfbug.c" .stringz "/home/tausq" .stringz "GNU C 3.3.4 20040423 (prerelease)" .byte 0x1 .uleb128 0x2 .word 0xb6 .byte 0x1 .stringz "foo" .byte 0x1 .byte 0x2 .byte 0x1 .dword L$FB0003 .dword L$FE0003 .byte 0x1 .byte 0x53 .uleb128 0x3 .stringz "a" .byte 0x1 .byte 0x1 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 4 .uleb128 0x3 .stringz "b" .byte 0x1 .byte 0x1 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 12 .uleb128 0x3 .stringz "c" .byte 0x1 .byte 0x1 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 20 .uleb128 0x3 .stringz "d" .byte 0x1 .byte 0x1 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 28 .uleb128 0x3 .stringz "e" .byte 0x1 .byte 0x1 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 36 .byte 0x0 .uleb128 0x4 .stringz "int" .byte 0x4 .byte 0x5 .uleb128 0x2 .word 0x101 .byte 0x1 .stringz "bar" .byte 0x1 .byte 0x7 .byte 0x1 .dword L$FB0005 .dword L$FE0005 .byte 0x1 .byte 0x53 .uleb128 0x3 .stringz "a" .byte 0x1 .byte 0x6 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 4 .uleb128 0x3 .stringz "b" .byte 0x1 .byte 0x6 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 12 .uleb128 0x3 .stringz "c" .byte 0x1 .byte 0x6 .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 20 .byte 0x0 .uleb128 0x5 .word 0x144 .byte 0x1 .stringz "main" .byte 0x1 .byte 0xe .byte 0x1 .word 0xb6 .dword L$FB0007 .dword L$FE0007 .byte 0x1 .byte 0x53 .uleb128 0x3 .stringz "argc" .byte 0x1 .byte 0xd .word 0xb6 .byte 0x2 .byte 0x83 .sleb128 4 .uleb128 0x3 .stringz "argv" .byte 0x1 .byte 0xd .word 0x144 .byte 0x2 .byte 0x83 .sleb128 8 .byte 0x0 .uleb128 0x6 .byte 0x8 .word 0x14a .uleb128 0x6 .byte 0x8 .word 0x150 .uleb128 0x4 .stringz "char" .byte 0x1 .byte 0x6 .byte 0x0 .section .debug_abbrev .uleb128 0x1 .uleb128 0x11 .byte 0x1 .uleb128 0x10 .uleb128 0x6 .uleb128 0x12 .uleb128 0x1 .uleb128 0x11 .uleb128 0x1 .uleb128 0x3 .uleb128 0x8 .uleb128 0x1b .uleb128 0x8 .uleb128 0x25 .uleb128 0x8 .uleb128 0x13 .uleb128 0xb .byte 0x0 .byte 0x0 .uleb128 0x2 .uleb128 0x2e .byte 0x1 .uleb128 0x1 .uleb128 0x13 .uleb128 0x3f .uleb128 0xc .uleb128 0x3 .uleb128 0x8 .uleb128 0x3a .uleb128 0xb .uleb128 0x3b .uleb128 0xb .uleb128 0x27 .uleb128 0xc .uleb128 0x11 .uleb128 0x1 .uleb128 0x12 .uleb128 0x1 .uleb128 0x40 .uleb128 0xa .byte 0x0 .byte 0x0 .uleb128 0x3 .uleb128 0x5 .byte 0x0 .uleb128 0x3 .uleb128 0x8 .uleb128 0x3a .uleb128 0xb .uleb128 0x3b .uleb128 0xb .uleb128 0x49 .uleb128 0x13 .uleb128 0x2 .uleb128 0xa .byte 0x0 .byte 0x0 .uleb128 0x4 .uleb128 0x24 .byte 0x0 .uleb128 0x3 .uleb128 0x8 .uleb128 0xb .uleb128 0xb .uleb128 0x3e .uleb128 0xb .byte 0x0 .byte 0x0 .uleb128 0x5 .uleb128 0x2e .byte 0x1 .uleb128 0x1 .uleb128 0x13 .uleb128 0x3f .uleb128 0xc .uleb128 0x3 .uleb128 0x8 .uleb128 0x3a .uleb128 0xb .uleb128 0x3b .uleb128 0xb .uleb128 0x27 .uleb128 0xc .uleb128 0x49 .uleb128 0x13 .uleb128 0x11 .uleb128 0x1 .uleb128 0x12 .uleb128 0x1 .uleb128 0x40 .uleb128 0xa .byte 0x0 .byte 0x0 .uleb128 0x6 .uleb128 0xf .byte 0x0 .uleb128 0xb .uleb128 0xb .uleb128 0x49 .uleb128 0x13 .byte 0x0 .byte 0x0 .byte 0x0 .section .debug_pubnames,"",@progbits .word 0x27 .half 0x2 .word L$debug_info0000 .word 0x159 .word 0x5a .stringz "foo" .word 0xbd .stringz "bar" .word 0x101 .stringz "main" .word 0x0 .section .debug_aranges,"",@progbits .word 0x2c .half 0x2 .word L$debug_info0000 .byte 0x8 .byte 0x0 .half 0x0 .half 0x0 .dword L$text0000 .dword L$etext0000-L$text0000 .dword 0x0 .dword 0x0 .ident "GCC: (GNU) 3.3.4 20040423 (prerelease)" --------------020301000707030204080501 Content-Type: text/plain; name="dwarfbug.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="dwarfbug.txt" Content-length: 4460 The section .debug_info contains: Compilation Unit @ offset 0x0: Length: 341 Version: 2 Abbrev Offset: 0 Pointer Size: 8 <0>: Abbrev Number: 1 (DW_TAG_compile_unit) DW_AT_stmt_list : 0 DW_AT_high_pc : 0x40000000000024f0 DW_AT_low_pc : 0x40000000000023f0 DW_AT_name : dwarfbug.c DW_AT_comp_dir : /home/tausq DW_AT_producer : GNU C 3.3.4 20040423 (prerelease) DW_AT_language : 1 (ANSI C) <1><5a>: Abbrev Number: 2 (DW_TAG_subprogram) DW_AT_sibling : DW_AT_external : 1 DW_AT_name : foo DW_AT_decl_file : 1 DW_AT_decl_line : 2 DW_AT_prototyped : 1 DW_AT_low_pc : 0x40000000000023f0 DW_AT_high_pc : 0x4000000000002424 DW_AT_frame_base : 1 byte block: 53 (DW_OP_reg3) <2><79>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : a DW_AT_decl_file : 1 DW_AT_decl_line : 1 DW_AT_type : DW_AT_location : 2 byte block: 83 4 (DW_OP_breg19: 4) <2><85>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : b DW_AT_decl_file : 1 DW_AT_decl_line : 1 DW_AT_type : DW_AT_location : 2 byte block: 83 c (DW_OP_breg19: 12) <2><91>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : c DW_AT_decl_file : 1 DW_AT_decl_line : 1 DW_AT_type : DW_AT_location : 2 byte block: 83 14 (DW_OP_breg19: 20) <2><9d>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : d DW_AT_decl_file : 1 DW_AT_decl_line : 1 DW_AT_type : DW_AT_location : 2 byte block: 83 1c (DW_OP_breg19: 28) <2>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : e DW_AT_decl_file : 1 DW_AT_decl_line : 1 DW_AT_type : DW_AT_location : 2 byte block: 83 24 (DW_OP_breg19: 36) <1>: Abbrev Number: 4 (DW_TAG_base_type) DW_AT_name : int DW_AT_byte_size : 4 DW_AT_encoding : 5 (signed) <1>: Abbrev Number: 2 (DW_TAG_subprogram) DW_AT_sibling : <101> DW_AT_external : 1 DW_AT_name : bar DW_AT_decl_file : 1 DW_AT_decl_line : 7 DW_AT_prototyped : 1 DW_AT_low_pc : 0x4000000000002428 DW_AT_high_pc : 0x400000000000248c DW_AT_frame_base : 1 byte block: 53 (DW_OP_reg3) <2>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : a DW_AT_decl_file : 1 DW_AT_decl_line : 6 DW_AT_type : DW_AT_location : 2 byte block: 83 4 (DW_OP_breg19: 4) <2>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : b DW_AT_decl_file : 1 DW_AT_decl_line : 6 DW_AT_type : DW_AT_location : 2 byte block: 83 c (DW_OP_breg19: 12) <2>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : c DW_AT_decl_file : 1 DW_AT_decl_line : 6 DW_AT_type : DW_AT_location : 2 byte block: 83 14 (DW_OP_breg19: 20) <1><101>: Abbrev Number: 5 (DW_TAG_subprogram) DW_AT_sibling : <144> DW_AT_external : 1 DW_AT_name : main DW_AT_decl_file : 1 DW_AT_decl_line : 14 DW_AT_prototyped : 1 DW_AT_type : DW_AT_low_pc : 0x4000000000002490 DW_AT_high_pc : 0x40000000000024f0 DW_AT_frame_base : 1 byte block: 53 (DW_OP_reg3) <2><125>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : argc DW_AT_decl_file : 1 DW_AT_decl_line : 13 DW_AT_type : DW_AT_location : 2 byte block: 83 4 (DW_OP_breg19: 4) <2><134>: Abbrev Number: 3 (DW_TAG_formal_parameter) DW_AT_name : argv DW_AT_decl_file : 1 DW_AT_decl_line : 13 DW_AT_type : <144> DW_AT_location : 2 byte block: 83 8 (DW_OP_breg19: 8) <1><144>: Abbrev Number: 6 (DW_TAG_pointer_type) DW_AT_byte_size : 8 DW_AT_type : <14a> <1><14a>: Abbrev Number: 6 (DW_TAG_pointer_type) DW_AT_byte_size : 8 DW_AT_type : <150> <1><150>: Abbrev Number: 4 (DW_TAG_base_type) DW_AT_name : char DW_AT_byte_size : 1 DW_AT_encoding : 6 (signed char) --------------020301000707030204080501--