public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Randolph Chung <randolph@tausq.org>
To: Daniel Jacobowitz <drow@false.org>
Cc: Jim Blandy <jimb@red-bean.com>,  gdb@sources.redhat.com
Subject: Re: Argument pointers, dwarf and prologue analysis
Date: Tue, 22 Nov 2005 00:07:00 -0000	[thread overview]
Message-ID: <43826100.6000709@tausq.org> (raw)
In-Reply-To: <20051121152640.GA21540@nevyn.them.org>

[-- Attachment #1: Type: text/plain, Size: 1442 bytes --]

> 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

[-- Attachment #2: dwarfbug.s --]
[-- Type: text/plain, Size: 5706 bytes --]

	.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)"

[-- Attachment #3: dwarfbug.txt --]
[-- Type: text/plain, Size: 4460 bytes --]

The section .debug_info contains:

  Compilation Unit @ offset 0x0:
   Length:        341
   Version:       2
   Abbrev Offset: 0
   Pointer Size:  8
 <0><b>: 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     : <b6>	
     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        : <b6>	
     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        : <b6>	
     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        : <b6>	
     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        : <b6>	
     DW_AT_location    : 2 byte block: 83 1c 	(DW_OP_breg19: 28)
 <2><a9>: Abbrev Number: 3 (DW_TAG_formal_parameter)
     DW_AT_name        : e	
     DW_AT_decl_file   : 1	
     DW_AT_decl_line   : 1	
     DW_AT_type        : <b6>	
     DW_AT_location    : 2 byte block: 83 24 	(DW_OP_breg19: 36)
 <1><b6>: Abbrev Number: 4 (DW_TAG_base_type)
     DW_AT_name        : int	
     DW_AT_byte_size   : 4	
     DW_AT_encoding    : 5	(signed)
 <1><bd>: 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><dc>: Abbrev Number: 3 (DW_TAG_formal_parameter)
     DW_AT_name        : a	
     DW_AT_decl_file   : 1	
     DW_AT_decl_line   : 6	
     DW_AT_type        : <b6>	
     DW_AT_location    : 2 byte block: 83 4 	(DW_OP_breg19: 4)
 <2><e8>: Abbrev Number: 3 (DW_TAG_formal_parameter)
     DW_AT_name        : b	
     DW_AT_decl_file   : 1	
     DW_AT_decl_line   : 6	
     DW_AT_type        : <b6>	
     DW_AT_location    : 2 byte block: 83 c 	(DW_OP_breg19: 12)
 <2><f4>: Abbrev Number: 3 (DW_TAG_formal_parameter)
     DW_AT_name        : c	
     DW_AT_decl_file   : 1	
     DW_AT_decl_line   : 6	
     DW_AT_type        : <b6>	
     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        : <b6>	
     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        : <b6>	
     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)


  reply	other threads:[~2005-11-22  0:07 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-21  5:50 Randolph Chung
2005-11-21  7:42 ` Jim Blandy
2005-11-21 10:32   ` Randolph Chung
2005-11-21 14:08     ` Daniel Jacobowitz
2005-11-21 15:11       ` Randolph Chung
2005-11-21 15:26         ` Daniel Jacobowitz
2005-11-22  0:07           ` Randolph Chung [this message]
2005-11-22  5:15             ` Jim Blandy
2005-11-22  6:39               ` Randolph Chung

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43826100.6000709@tausq.org \
    --to=randolph@tausq.org \
    --cc=drow@false.org \
    --cc=gdb@sources.redhat.com \
    --cc=jimb@red-bean.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).