This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] rs6000.c ELF bits inclusion
- To: David Edelsohn <dje at watson dot ibm dot com>
- Subject: Re: [PATCH] rs6000.c ELF bits inclusion
- From: "David O'Brien" <obrien at FreeBSD dot org>
- Date: Wed, 2 May 2001 20:31:58 -0700
- Cc: gcc at gcc dot gnu dot org
- Organization: The NUXI BSD group
- References: <obrien@FreeBSD.org> <200105030306.XAA23232@makai.watson.ibm.com>
- Reply-To: obrien at FreeBSD dot org
On Wed, May 02, 2001 at 11:06:57PM -0400, David Edelsohn wrote:
> > W/o this change one must include config/svr4.h rather than
> > config/elfos.h, which is just wrong on BSD hosts as config/svr4.h
> > contains bits specific to that platform vs. the generic ELF object
> > format.
>
> What do you mean by "contains bits specific to that platform"?
> SVR4 is not a platform? For PowerPC, the only defined ABIs are PowerOpen
> (AIX and related to Darwin) and SVR4 (including eABI). eABI is a
> derivative of SVR4. There are no other ABIs. What other "generic" ELF
> object format is FreeBSD for PowerPC using that SVR4 is a conflict?
Did you look at config/svr4.h???
#define WORD_SWITCH_TAKES_ARG(STR) \
(DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
&& strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \
&& strcmp (STR, "Tbss"))
No BSD ELF implementation supports these.
#undef ASM_SPEC
#define ASM_SPEC \
"%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
This ASM spec is wrong.
#define MD_EXEC_PREFIX "/usr/ccs/bin/"
#define MD_STARTFILE_PREFIX "/usr/ccs/lib/"
These MD spec are *WAY* wrong. This is a SVR4 _platform_ setting. Where
in any ELF ABI is this spec specified?
/* Provide a LIB_SPEC appropriate for svr4. Here we tack on the default
standard C library (unless we are building a shared library). */
#undef LIB_SPEC
#define LIB_SPEC "%{!shared:%{!symbolic:-lc}}"
As the comment says, "appropriate for svr4", not all ELF platforms and
certainly not FreeBSD.
/* Provide an ENDFILE_SPEC appropriate for svr4. Here we tack on our own
...
#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
Again, this is a bogus setting to force down ever ELF implementations
throat.
I need this one "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s",
and why should I have to #undef the world?
/* Gcc automatically adds in one of the files /usr/ccs/lib/values-Xc.o,
/usr/ccs/lib/values-Xa.o, or /usr/ccs/lib/values-Xt.o for each final
link step (depending upon the other gcc options selected, such as
-traditional and -ansi). These files each contain one (initialized)
copy of a special variable called `_lib_version'. Each one of these
files has `_lib_version' initialized to a different (enum) value.
The SVR4 library routines query the value of `_lib_version' at run
to decide how they should behave. Specifically, they decide (based
upon the value of `_lib_version') if they will act in a strictly ANSI
conforming manner or not. */
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{!shared: \
I won't even go into how this is very much a system implimentation
setting is only appropriate for "true-blue" generic SVR4 implementations.
/* Define the actual types of some ANSI-mandated types. (These
definitions should work for most SVR4 systems). */
systems => platforms to me.