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]

BUG in binutils-2.9.1/ld on m88k-motorola-sysv3


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>