Date: Thu, 15 Jun 2000 20:32:47 -0700 (PDT) From: yakisoba@f2.dion.ne.jp To: freebsd-gnats-submit@FreeBSD.org Subject: gnu/19327: Fix to build 'a.out' binary. Message-ID: <20000616033247.31C4A37BA59@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 19327
>Category: gnu
>Synopsis: Fix to build 'a.out' binary.
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jun 15 20:40:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Naohiko Tsuji
>Release: FreeBSD 4.0-STABLE i386
>Organization:
>Environment:
__FreeBSD_version >= 400012 (GCC 2.95.X and later)
>Description:
After the base compiler is upgraded to GCC 2.95.2, 'a.out' binary
could not build.
CURRENT and 4.0-STABLE GCC Target Macro still support both 'ELF'
and 'a.out'. So this problem is bug ? Or switch to 'ELF' only soon ?
If fix now, correct '__main.o' in libgcc.a like below.
a.out __main.o: ELF __main.o:
U ___CTOR_LIST__
U ___DTOR_LIST__
00000028 T ___do_global_ctors
00000000 T ___do_global_dtors
0000007c T ___main
U __exit_dummy_decl
000000a4 D __exit_dummy_ref
U _atexit
P.S. Now 'ELF' has garbege.
ELF __main.o:
U __do_global_ctors
00000000 T __main
>How-To-Repeat:
>Fix:
1. Delete define 'INVOKE__main' in GCC Target Macro 'i386/freebsd.h'.
2. Add the next line to GCC Target Macro 'i386/freebsd.h'.
#if defined (IN_LIBGCC2) && !defined (__ELF__)
#undef OBJECT_FORMAT_ELF
#undef INIT_SECTION_ASM_OP
#endif
3. Add CFLAGS to 'gnu/lib/libgcc/Makefile'.
CFLAGS+= -DIN_LIBGCC2
4. Improve 'function.c' hack.
*** contrib/gcc/function.c.orig Tue Nov 2 03:56:02 1999
--- contrib/gcc/function.c Mon Jun 12 22:35:02 2000
***************
*** 6040,6059 ****
#define HAS_INIT_SECTION
#endif
- #ifndef GEN_CALL__MAIN
- #define GEN_CALL__MAIN \
- do { \
- emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, \
- VOIDmode, 0); \
- } while (0)
- #endif
-
void
expand_main_function ()
{
! #if defined(INVOKE__main) || !defined (HAS_INIT_SECTION)
GEN_CALL__MAIN;
#endif /* not HAS_INIT_SECTION */
}
extern struct obstack permanent_obstack;
--- 6040,6056 ----
#define HAS_INIT_SECTION
#endif
void
expand_main_function ()
{
! #ifdef GEN_CALL__MAIN
GEN_CALL__MAIN;
+ #else
+ #if !defined (HAS_INIT_SECTION)
+ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, NAME__MAIN), 0,
+ VOIDmode, 0);
#endif /* not HAS_INIT_SECTION */
+ #endif /* GEN_CALL__MAIN */
}
extern struct obstack permanent_obstack;
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000616033247.31C4A37BA59>
