Subject: port-mips/4175: __start vs _start confusion in crt0 entrypoint on NetBSD/mips
To: None <gnats-bugs@gnats.netbsd.org>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: netbsd-bugs
Date: 09/27/1997 23:15:37
>Number:         4175
>Category:       port-mips
>Synopsis:       __start vs _start confusion in crt0 entrypoint on NetBSD/mips
>Confidential:   yes
>Severity:       non-critical
>Priority:       medium
>Responsible:    gnats-admin (GNATS administrator)
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sat Sep 27 23:20:01 1997
>Last-Modified:
>Originator:     Jonathan Stone
>Organization:
	
>Release:        1997-09-01
>Environment:
	
System: NetBSD Reno.DSG.Stanford.EDU 1.2G NetBSD 1.2G (GENERIC) #19: Sat Aug 30 01:09:13 PDT 1997 jonathan@Reno.DSG.Stanford.EDU:/reno/compile/GENERIC pmax


>Description:
	GNU binutils for mips/elf expects _start as the entrypoint
    to crt0.

	The netbsd/mips gcc configuration is set up to use
    __start as the crt0 entrypoint.  The NetBSD/mips crt0.c
    agrees with this.


    The NetBSD/mips gcc driver config tells GCC to invoke ld
    with ``-e __start'' by default.  In  the normal case,
    everything works fine

    However, Programs that specify gcc --nostdlib incur a warning:
    --nostdlib  turns off the explicit -e __start entrypoint, and 
    so GNU ld attempts to link with an entrypoiint of `_start'.

    `_start' is not defined, so the linker sets the entrypoint
    to the start of the text segment.


	This works in almost all cases (since that's where crt0
     usually is) but might fail with, e.g., emacs, or other programs
    that override the default entrypoint.	


>How-To-Repeat:
   Either

	* do a `make build' in /usr/src with a nonnull DESTDIR.
	* build emacs 20.2

>Fix:

	Consider changing /usr/src/gnu/usr.bin/gcc/arch/mips/mips.h
	to _not_ specify an explicit entrypoint, and change crt0.c
	accordingly.
>Audit-Trail:
>Unformatted: