This is the mail archive of the gas2@sourceware.cygnus.com mailing list for the gas2 project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Given this small C source
/* foo.c */
extern char global_var;
main () { global_var = 1; }
/* EOF */
should result in an executable with undefined symbols, shouldn't it?
binutils-2.9.1/ld fails to recognize this and produces an executable
without any complaint, which will core dump when running, of course.
I've built the stuff using:
$ env CC=sparc-sun-solaris2.5.1-gcc 'CFLAGS=-O0 -g ' LDFLAGS=-g ' \
LINGUAS=de es fr it' 'INSTALL=/tools/gnu/bin/install -c' \
'INSTALL_DATA=/tools/gnu/bin/install -c -m 644' \
'INSTALL_PROGRAM=/tools/gnu/bin/install -c -m 755' \
/bin/sh ../binutils-2.9.1/configure --host=sparc-sun-solaris2.5.1 \
--target=delta88 --build=sparc-sun-solaris2.5.1 \
--srcdir=../binutils-2.9.1 \
--prefix=/u/b60/manfred/gnu/sparc-sun-solaris2.5.1 \
--enable-targets=delta88,m68k-motorola-sysv,m88k-motorola-sysv3,m68k-unknown-ieee \
--enable-shared=no --verbose
$ gmake -wk SHELL=/u/b60/manfred/gnu/sparc-sun-solaris2.5.1/bin/bash all check info
To simplify checking, fixing (I've already debugged, but cannot find
the reason), ... I've appended a small 88k assembler source, which can
be used to demonstrate the problem.
file "foo.s"
text
align 8
global __start
__start:
or.u r13,r0,hi16(_global_var)
or r12,r0,1
st.b r12,r13,lo16(_global_var)
jmp r1
$ ./gas/as-new -o foo.o foo.s
$ ./binutils/nm-new foo.o
00000010 b .bss
00000010 d .data
00000000 t .text
00000000 T __start
U _global_var
Looks good, so far; but, when linking, NO complaint:
$ ./ld/ld-new -o a.out foo.o
$ ./binutils/nm-new a.out
004000c8 b .bss
004000c8 d .data
000200b8 t .text
000200c8 T __.fini_end
000200c8 T __.fini_start
000200b8 T __.init.end
000200b8 T __.init.start
000200c8 T __.initp.end
000200c8 T __.initp.start
000200c8 T __.tdesc_start
000200b8 T __.text.start
000200c8 T __.text_end
004000c8 B __end
000200b8 T __start
004000c8 D _edata
004000c8 B _end
000200c8 T _etext
U _global_var
As you can see, "global_var" is still undefined. This problem isn't
new, I can easily reproduce it with binutils-2.7 - funnily, we've been
using this linker already without problems for many million lines of
C/C++ code :-?
Any ideas?
Thanks
--
Manfred Hollstein If you have any questions about GNU software:
Hindenburgstr. 13/1 <mailto:manfred@s-direktnet.de>
75446 Wiernsheim, FRG <http://www.s-direktnet.de/HomePages/manfred/>
PGP key: <http://www.s-direktnet.de/HomePages/manfred/manfred.asc>