[comp.bugs.4bsd] /bin/ld doesn't set the entry address + FIX

rcodi@yabbie.rmit.oz (Ian Donaldson) (03/17/88)

Subject: /bin/ld doesn't set the entry address + FIX
Index:	/usr/src/bin/ld.c 4.3BSD

Description:
	/bin/ld fails to put the entry address as specified by -T
	in the <a.out.h> header.

	This bug didn't exist in 4.2bsd ld.

Repeat-By:
	"xx.c" is a typical hello-world program
	cc -c xx.c
	ld -T 123456 /lib/crt0.o xx.o -lc
	od -X a.out | head -5

	Note that the a_entry field is zero.  
	On 4.2bsd, it would have been 123456.

	On the Vax, the load-address and entry address are both 0 for
	UNIX binaries, so the problem doesn't exist unless you are
	cross-compiling.  I suspect also that the program that
	reads vmunix on the VAX while loading the kernel ignores 
	the a_entry field, assuming 0x80000000. 

Fix:
	Apply the following patch.

---------------
*** /usr/src/bin/ld.c.orig	Tue Oct 13 12:55:00 1987
--- /usr/src/bin/ld.c		Thu Mar 17 12:10:02 1988
***************
*** 1125,1131 ****
  		else
  			filhdr.a_entry = entrypt->n_value;
  	} else
! 		filhdr.a_entry = 0;
  	filhdr.a_trsize = (rflag ? trsize:0);
  	filhdr.a_drsize = (rflag ? drsize:0);
  	tout = &toutb;
--- 1125,1131 ----
  		else
  			filhdr.a_entry = entrypt->n_value;
  	} else
! 		filhdr.a_entry = textbase;
  	filhdr.a_trsize = (rflag ? trsize:0);
  	filhdr.a_drsize = (rflag ? drsize:0);
  	tout = &toutb;
---------------

Ian D