[gnu.gdb.bug] Possible gdb 2.8 bug: wrong function name.

pardo@JUNE.CS.WASHINGTON.EDU (04/05/89)

The following code shows gdb giving the wrong name to a
function that contains a static const char.  The names and
types of parameters (and hence their values) are hidden.

I suspect that this is a gdb problem, since `dbx' gets it
right.  When the program is compiled with `cc', the same
thing happens.  When compiled without `-g' the correct thing
happens (with either compiler).

Machine: VAX 8550, Ultrix 2.3.  Gcc 1.34 (config.gcc),
gdb 2.8


gcc -g -Wall -ansi -v -c a.c
gcc version 1.34
 /uns/usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -T -$ -D__STRICT_ANSI__ -D__vax__ -D__unix__ -Wall a.c /tmp/cc000602.cpp
GNU CPP version 1.34
 /uns/usr/local/lib/gcc-cc1 /tmp/cc000602.cpp -quiet -dumpbase a.c -g -Wall -ansi -version -o /tmp/cc000602.s
GNU C version 1.34 (vax) compiled by GNU C version 1.34.
a.c: In function zurk:
a.c:6: warning: implicit declaration of function `printf'
a.c: In function main:
a.c:15: warning: implicit declaration of function `exit'
 as /tmp/cc000602.s -o a.o
Loading run ... done

a.c:
- --------
    void
zurk (char const *s)
{
    static char const * const wrong_name = "wrong!!!";

    printf ("%s=%s\n", s, wrong_name);
}



    int
main (int argc, char const * const * argv)
{
    zurk ("ha!");
    exit (0);
    return (0);
}
- --------

a.s:
- --------
#NO_APP
gcc_compiled.:
	.stabs "a.c",100,0,0,Ltext
Ltext:
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
.stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
.stabs "short int:t6=r1;-32768;32767;",128,0,0,0
.stabs "long long int:t7=r1;0;-1;",128,0,0,0
.stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
.stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
.stabs "signed char:t10=r1;-128;127;",128,0,0,0
.stabs "unsigned char:t11=r1;0;255;",128,0,0,0
.stabs "float:t12=r1;4;0;",128,0,0,0
.stabs "double:t13=r1;8;0;",128,0,0,0
.stabs "long double:t14=r1;8;0;",128,0,0,0
.stabs "void:t15=15",128,0,0,0
.text
	.align 0
LC0:
	.ascii "wrong!!!\0"
	.align 2
_wrong_name.0:
	.long LC0
	.align 0
LC1:
	.ascii "%s=%s\12\0"
	.align 1
.globl _zurk
_zurk:
	.stabd 68,0,3
	.word 0x0
LBB2:
	.stabd 68,0,6
	pushl _wrong_name.0
	pushl 4(ap)
	pushab LC1
	calls $3,_printf
LBE2:
	.stabd 68,0,7
	ret
.stabs "zurk:F15",36,0,0,_zurk
.stabs "s:p16=*2",160,0,0,4
.stabs "wrong_name:V16",36,0,0,_wrong_name.0
.stabn 192,0,0,LBB2
.stabn 224,0,0,LBE2
	.align 0
LC2:
	.ascii "ha!\0"
	.align 1
.globl _main
_main:
	.stabd 68,0,13
	.word 0x0
	.stabd 68,0,14
	pushab LC2
	calls $1,_zurk
	.stabd 68,0,15
	clrl -(sp)
	calls $1,_exit
	.stabd 68,0,16
	clrl r0
	ret
	.stabd 68,0,17
	ret
.stabs "main:F1",36,0,0,_main
.stabs "argc:p1",160,0,0,4
.stabs "argv:p17=*16",160,0,0,8



GDB 2.8, Copyright (C) 1988 Free Software Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "info copying" to see the conditions.
Reading symbol data from /u1/pardo/tmp/bug4/run...done.
Type "help" for a list of commands.
(gdb) break printf
Breakpoint 1 at 0xa2
(gdb) run
Starting program: /u1/pardo/tmp/bug4/run 

Bpt 1, 0xa2 in printf (92, 125, 76)
(gdb) where
#0  0xa2 in printf (92, 125, 76)
#1  0x7c in wrong_name (125) (a.c line 6)
#2  0x91 in main (argc=1, argv=(char **) 0x7fffe078, 2147475584) (a.c line 14)
(gdb) up
#1  0x7c in wrong_name (125) (a.c line 6)
(gdb) list
1	    void
2	zurk (char const *s)
3	{
4	    static char const * const wrong_name = "wrong!!!";
5	
6	    printf ("%s=%s\n", s, wrong_name);
7	}
8	
9	
10	
(gdb) print s
No symbol "s" in current context.
(gdb) 


(Note: the function has the wrong name, the parameter is `125' instead
    of something like `char *s=0d125 "ha!".  Finally, the symbol is not
    found by `print s'.)