Debian bug report logs - #660
GDB gets address of structure member wrong in memory breakpoint
Package: gdb; Reported by: iwj10@cus.cam.ac.uk (Ian Jackson); 218 days old.
Message received at debian-bugs:
From chiark.chu.cam.ac.uk!ian Thu Oct 19 11:39:58 1995
Return-Path: <ian@chiark.chu.cam.ac.uk>
Received: from pixar.com by mongo.pixar.com with smtp
(Smail3.1.28.1 #15) id m0t5zsj-000B7cC; Thu, 19 Oct 95 11:39 PDT
Received: from artemis.chu.cam.ac.uk by pixar.com with SMTP id AA11619
(5.67b/IDA-1.5 for debian-bugs-pipe@mongo.pixar.com); Thu, 19 Oct 1995 11:36:51 -0700
Received: from chiark.chu.cam.ac.uk by artemis.chu.cam.ac.uk with smtp
(Smail3.1.29.1 #33) id m0t60sA-0007uBC; Thu, 19 Oct 95 19:43 GMT
Received: by chiark.chu.cam.ac.uk
id m0t5zpf-0002YFC
(Debian /\oo/\ Smail3.1.29.1 #29.33); Thu, 19 Oct 95 19:36 BST
Message-Id: <m0t5zpf-0002YFC@chiark.chu.cam.ac.uk>
Date: Thu, 19 Oct 95 19:36 BST
From: Ian Jackson <ian@chiark.chu.cam.ac.uk>
To: sr1@irz301.inf.tu-dresden.de (Sven Rudolph)
Cc: Debian bugs submission address <debian-bugs@pixar.com>
Subject: Re: Bug#660: GDB gets address of structure member wrong in memory breakpoint
In-Reply-To: <199510190118.CAA08031@irz101.inf.tu-dresden.de>
References: <199510190118.CAA08031@irz101.inf.tu-dresden.de>
Sven Rudolph writes in email to me:
> > Package: gdb
> > Version: 4.12
> >
> > As you can see below, when setting a memory breakpoint on a structure
> > member GDB uses the address of the start of the structure by mistake.
> > Applying *& to the member (to take its address and then dereference
> > it) gives correct results.
>
> (typescript deleted)
>
> You used commands that don't even exist in the current version of gdb,
> so i cannot reproduce this problem. I'm not a gdb expert, so please
> try to reproduce this problem on a current gdb (or close the bug) .
These commands have equivalents in gdb 4.14-1. However, the
equivalents don't appear to work for me at all. See the transcript
below.
Please can we keep this bug open until (a) the memory watchpoints,
which are a useful feature, work and (b) we see that the original bug
is fixed.
Ian.
-chiark:~/junk> cat t.c
struct foo { int a,b; };
void fong(struct foo *p, int x) { p->b=x; }
int main(int argc, char **argv) {
struct foo f;
f.a= 2;
f.b= 3;
fong(&f,4);
f.b=5;
fong(&f,6);
}
-chiark:~/junk> gcc -g t.c
-chiark:~/junk> gdb a.out
GDB is free software and you are welcome to 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.
GDB 4.14 (i486-debian-linux), Copyright 1995 Free Software Foundation, Inc...
(gdb) break main
Breakpoint 1 at 0x1093: file t.c, line 7.
(gdb) run
Starting program: /u/ian/junk/a.out
Breakpoint 1, main (argc=1, argv=0xbffff858) at t.c:7
7 f.a= 2;
(gdb) step
8 f.b= 3;
(gdb) step
9 fong(&f,4);
(gdb) print f
$1 = {a = 2, b = 3}
(gdb) watch f.b
Hardware watchpoint 2: f.b
(gdb) watch f.a
Hardware watchpoint 3: f.a
(gdb) watch *&f.b
Hardware watchpoint 4: *&f.b
(gdb) info watchpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x00001093 in main at t.c:7
breakpoint already hit 1 time
2 hw watchpoint keep y f.b
3 hw watchpoint keep y f.a
4 hw watchpoint keep y *&f.b
(gdb) cont
Continuing.
warning: Hardware watchpoint 3: Could not insert watchpoint
warning: Hardware watchpoint 4: Could not insert watchpoint
ptrace: Unknown error -1.
Cannot insert breakpoints.
The same program may be running in another process.
(gdb) quit
The program is running. Quit anyway (and kill it)? (y or n) y
-chiark:~/junk>
Acknowledgement sent to Ian Jackson <ian@chiark.chu.cam.ac.uk>
:
Extra info received and forwarded.
Full text available.
Information forwarded to debian-devel@pixar.com
:
Bug#660
; Package gdb
.
Full text available.
Message received at debian-bugs:
From cus.cam.ac.uk!iwj10 Mon Mar 27 07:15:04 1995
Return-Path: <iwj10@cus.cam.ac.uk>
Received: from pixar.com by mongo.pixar.com with smtp
(Smail3.1.28.1 #15) id m0rtGVT-0006USC; Mon, 27 Mar 95 07:15 PST
Received: from bootes.cus.cam.ac.uk by pixar.com with SMTP id AA14255
(5.65c/IDA-1.4.4 for <debian-bugs@pixar.com>); Mon, 27 Mar 1995 07:09:41 -0800
Received: by bootes.cus.cam.ac.uk
(Smail-3.1.29.0 #30) id m0rtFaj-000BzvC; Mon, 27 Mar 95 15:16 BST
Received: by chiark (Smail3.1.28.1 #3)
id m0rtE8u-0002gOZ; Mon, 27 Mar 95 13:43 BST
Message-Id: <m0rtE8u-0002gOZ.ijackson@nyx.cs.du.edu>
Date: Mon, 27 Mar 95 13:43 BST
From: iwj10@cus.cam.ac.uk (Ian Jackson)
To: Debian bugs submission address <debian-bugs@pixar.com>
Subject: GDB gets address of structure member wrong in memory breakpoint
Package: gdb
Version: 4.12
As you can see below, when setting a memory breakpoint on a structure
member GDB uses the address of the start of the structure by mistake.
Applying *& to the member (to take its address and then dereference
it) gives correct results.
chiark:~/junk> cat t.c
struct foo { int a,b; };
void fong(struct foo *p, int x) { p->b=x; }
int main(int argc, char **argv) {
struct foo f;
f.a= 2;
f.b= 3;
fong(&f,4);
f.b=5;
fong(&f,6);
}
chiark:~/junk> gcc -g t.c
chiark:~/junk> /new/usr/bin/gdb a.out
GDB is free software and you are welcome to 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.
GDB 4.12 (i486-debian-linux), Copyright 1994 Free Software Foundation, Inc...
(gdb) break main
Breakpoint 1 at 0x6f: file t.c, line 7.
(gdb) run
Starting program: /u/ian/junk/a.out
Breakpoint 1, main (argc=1, argv=0xbffff978) at t.c:7
7 f.a= 2;
(gdb) step
8 f.b= 3;
(gdb) step
9 fong(&f,4);
(gdb) print f
$1 = {a = 2, b = 3}
(gdb) abreak f.b
Memorypoint 2: f.b
(gdb) abreak f.a
Memorypoint 3: f.a
(gdb) abreak *&f.b
Memorypoint 4: *&f.b
(gdb) info memory
Num Type Disp Enb Address What
2 memorypoint keep y 0xbffff95c r/w 4 f.b
3 memorypoint keep y 0xbffff95c r/w 4 f.a
4 memorypoint keep y 0xbffff960 r/w 4 *&f.b
(gdb) cont
Continuing.
Memory breakpoint 4 on *&f.b at 0xbffff960 with length 4: accessed.
3 void fong(struct foo *p, int x) { p->b=x; }
(gdb) disable 4
(gdb) cont
Continuing.
Memory breakpoint 2 on f.b at 0xbffff95c with length 4: accessed.
0x224 exit.c:38: No such file or directory.
(gdb) where
#0 0x224 in exit (status=-1073743524) at exit.c:38
(gdb) quit
The program is running. Quit anyway (and kill it)? (y or n) y
chiark:~/junk> gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/2.5.8/specs
gcc version 2.5.8
chiark:~/junk> gcc -c -g t.c
chiark:~/junk> nm -a t.o
00000000 - 00 0003 SLINE
00000003 - 00 0003 SLINE
0000000c - 00 0003 SLINE
00000010 - 00 0005 SLINE
0000001b - 00 0006 SLINE
0000001b - 00 0007 SLINE
00000022 - 00 0008 SLINE
00000029 - 00 0009 SLINE
00000037 - 00 000a SLINE
0000003e - 00 000b SLINE
0000004c - 00 000c SLINE
0000004c - 00 000c SLINE
0000001b - 00 0000 LBRAC
0000004c - 00 0000 RBRAC
00000000 - 00 0000 SO /u/ian/junk/
00000000 t ___gnu_compiled_c
U ___main
00000000 T _fong
00000010 T _main
00000008 - 00 0005 PSYM argc:p1
0000000c - 00 0005 PSYM argv:p22=*23=*2
00000000 - 00 0000 LSYM char:t2=r2;0;127;
00000000 - 00 0000 LSYM complex double:t17=r17;8;0;
00000000 - 00 0000 LSYM complex float:t16=r16;4;0;
00000000 - 00 0000 LSYM complex int:t15=s8real:1,0,32;imag:1,32,32;;
00000000 - 00 0000 LSYM complex long double:t18=r18;12;0;
00000000 - 00 0000 LSYM double:t13=r1;8;0;
fffffff8 - 00 0006 LSYM f:20
00000000 - 00 0000 LSYM float:t12=r1;4;0;
00000000 - 00 0003 FUN fong:F19
00000000 - 00 0000 LSYM foo:T20=s8a:1,0,32;b:1,32,32;;
00000000 t gcc2_compiled.
00000000 - 00 0000 LSYM int:t1=r1;-2147483648;2147483647;
00000000 - 00 0000 LSYM long double:t14=r1;12;0;
00000000 - 00 0000 LSYM long int:t3=r1;-2147483648;2147483647;
00000000 - 00 0000 LSYM long long int:t6=r1;01000000000000000000000;0777777777777777777777;
00000000 - 00 0000 LSYM long long unsigned int:t7=r1;0000000000000;01777777777777777777777;
00000000 - 00 0000 LSYM long unsigned int:t5=r1;0;-1;
00000010 - 00 0005 FUN main:F1
00000008 - 00 0003 PSYM p:p21=*20
00000000 - 00 0000 LSYM short int:t8=r1;-32768;32767;
00000000 - 00 0000 LSYM short unsigned int:t9=r1;0;65535;
00000000 - 00 0000 LSYM signed char:t10=r1;-128;127;
00000000 - 00 0000 SO t.c
00000000 - 00 0000 LSYM unsigned char:t11=r1;0;255;
00000000 - 00 0000 LSYM unsigned int:t4=r1;0;-1;
00000000 - 00 0000 LSYM void:t19=19
0000000c - 00 0003 PSYM x:p1
chiark:~/junk> gzip -9 <t.o | uuencode t.o
begin 664 t.o
M'XL(`$>Q=B\"`WV2/6S30!3'7YJD2=L@(75@8`$$`ZAM?.<D=FP%,1`F)#)0
MB059KO-1IXX=Y:/JB-0IJBK!R,:,Q`P30@(I(+&PL,#`0*4.$1-#!J3P[LYQ
MSE7!DOU^_K]/OW,F48<:+*X[2\)FP_?MT<E1-7NTG1O54J/)X_?X?CC)GI[,
M9K-Q=<J"Q]4_233MU'%U6CO]C([##UD4TTQ<YN)K(;+\2ZA>!;B00IL*>ZQ+
M?`/O>LA4XA+>3T)^)'%;XF<2OY3XH\2YQ()K$OL2/Y7XE<2?)/XF\2^),TL+
M+DC\0.(]B8\E?B[Q&^2T="YW(1GCI,0YM&\Q_GJHCI%?(+,S_!(RB_D:UKP8
MY:8Y?T<]$>NU#)<CSDB<A6L1K\#-B%=!BW@-;D><@_MG^">?4_2=\-G2?,[?
M(;,Y4TFVAV68XF^S@OP.-3;#*O(/M*S.&G++<:CE!)VNZS7J6V!95LL?1H+E
M0'Z8=VT_WQ[Z>WD8;#G@^@-C0"H]8FY24M`*NEHJZ&:$F@G.KMTS!K32HZ9B
M$HJ*%_BM*SQ1_5_BT.^[+;]1%Z$%%JJ8FR3,CWN+9[R+%B7N(<IYEZEHYUUR
MC7@;C1>+ER#_J-'?#7H#D:;SSU2I5M)-]HR\\>IE\1&E8E$M8H3PB/41A9<@
M5!<KC!)#-Q&IM(B)32^PV:%0IA50A7HPW/$:*/%]ZTSB'Q?I?+F$'1"PP_8:
M!V(B4JST]5[#]@RRH6RHU'0[=@M9I>QE$3QOR99=$CWGKJ@'VYTFFL]]\2'8
MEO1PBOW`K:-4KI`R-(/`>$@5G,2>C[$CS6`UL0JPAW$/H[M&EY+*+:K`@=$E
F8'5LUV<_,K?L@5%@]UH.\Z+=QWB*\2K>T#0P#^`OH--.$L,%``#*
`
end
Acknowledgement sent to iwj10@cus.cam.ac.uk (Ian Jackson)
:
New bug report received and forwarded.
Full text available.
Report forwarded to debian-devel@pixar.com
:
Bug#660
; Package gdb
; Resent-Message-ID: <debian-bugs-handler.660.03271520383803@pixar.com>
.
Full text available.
Ian Jackson /
iwj10@thor.cam.ac.uk,
with the debian-bugs tracking mechanism