t-slibgcc-darwin: Move to ...

gcc:
	* config/t-slibgcc-darwin: Move to ...
	* config/t-slibgcc-dummy: .. this.
	Clarify comments.
	* config.gcc (i[34567]86-*-darwin*, x86_64-*-darwin*,
	powerpc-*-darwin*, powerpc64-*-darwin*): Reflect this.
	(i[3456x]86-*-netware*): Add t-slibgcc-dummy to tmake_file.
	(i[34567]86-*-rtems*): Remove extra_parts.
	Use i386/t-rtems.
	Remove i386/t-crtstuff from tmake_file.
	(i[34567]86-*-solaris2*): Remove t-svr4,
	t-slibgcc-elf-ver, t-slibgcc-sld from tmake_file, add
	t-slibgcc-dummy.
	(sparc-*-elf*, sparc64-*-elf*): Remove tmake_file, extra_parts.
	(sparc-*-rtems*, sparc64-*-rtems*): Remove sparc/t-crtin,
	sparc/t-crtfm from tmake_file.
	(sparc*-*-solaris2*): Remove sparc/t-sol2, sparc/t-crtfm,
	t-slibgcc-elf-ver, t-slibgcc-sld, add t-slibgcc-dummy.
	Remove extra_parts.
	* config/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define.
	* config/i386/t-nwld (SHLIB_LINK): Remove.
	* config/i386/t-rtems-i386: Rename to ...
	* config/i386/t-rtems: ... this.
	($(T)crti.o, $(T)crtn.o): Remove.
	(FPBIT, DPBIT, LIB2FUNCS_EXTRA): Remove.
	(dp-bit.c, fp-bit.c, xp-bit.c): Remove.
	(EXTRA_MULTILIB_PARTS, LIBGCC, INSTALL_LIBGCC): Remove.
	* config/i386/t-sol2-10 (LIBGCC, INSTALL_LIBGCC,
	EXTRA_MULTILIB_PARTS): Remove.
	* config/sparc/t-sol2-64: Likewise.
	* config/sparc/t-sol2: Remove.
	* config/sparc/t-crtin: Remove.
	* config/sparc/gmon-sol2.c: Move to ../libgcc/config.
	* config/i386/gmon-sol2.c: Remove.
	* config/i386/sol2-c1.asm: Move to ../libgcc/config/i386/sol2-c1.S.
	* config/i386/sol2-ci.asm: Move to ../libgcc/config/i386/sol2-ci.S.
	* config/i386/sol2-cn.asm: Move to ../libgcc/config/i386/sol2-cn.S.
	* config/i386/sol2-gc1.asm: Remove.
	* config/sparc/sol2-c1.asm: Move to ../libgcc/config/sparc/sol2-c1.S.
	* config/sparc/sol2-ci.asm: Move to ../libgcc/config/sparc/sol2-ci.S.
	* config/sparc/sol2-cn.asm: Move to ../libgcc/config/sparc/sol2-cn.S.
	* config/t-slibgcc-sld: Remove.

	libgcc:
	* Makefile.in (cpu_type): Define.
	* config.host (i[34567]86-*-rtems*): Handle it.
	(i[34567]86-*-solaris2*): Move body ...
	(*-*-solaris2*): ... here.
	New case, generalize.
	(sparc-*-elf*): Handle it.
	(sparc-*-linux*, sparc64-*-linux*): Replace sparc/t-crtfm by t-crtfm.
	(sparc-*-rtems*, sparc64-*-rtems*); Handle it.
	(sparc64-*-solaris2*, sparcv9-*-solaris2*, sparc-*-solaris2*):
	Fold into ...
	(sparc*-*-solaris2*): ... this.
	New case.
	(sparc64-*-elf*): Handle it.
	* config/gmon-sol2.c: Move from ../gcc/config/sparc.
	Merge ../gcc/config/i386/gmon-sol2.c.
	* config/i386/sol2-c1.S: Move from ../gcc/config/i386/sol2-c1.asm.
	Use C comments.
	Merge ../gcc/config/i386/sol2-gc1.asm.
	* config/i386/sol2-ci.S: Move from ../gcc/config/i386/sol2-ci.asm.
	Use C comments.
	* config/i386/sol2-cn.S: Move from ../gcc/config/i386/sol2-cn.asm.
	Use C comments.
	* config/i386/t-crtfm (crtfastmath.o): Use $<.
	* config/i386/t-crtstuff: New file.
	* config/i386/t-softfp: New file.
	* config/i386/t-sol2 ($(T)gmon.o, $(T)gcrt1.o, $(T)crt1.o),
	$(T)crti.o, $(T)crtn.o): Remove.
	(gcrt1.o): New rule.
	(TARGET_LIBGCC2_CFLAGS): Remove.
	* config/sparc/sol2-c1.S: Move from ../gcc/config/sparc/sol2-c1.asm.
	* config/sparc/sol2-ci.S: Move from ../gcc/config/sparc/sol2-ci.asm.
	* config/sparc/sol2-cn.S: Move from ../gcc/config/sparc/sol2-cn.asm.
	* config/sparc/t-sol2: New file.
	* config/sparc/t-crtfm: Move to ...
	* config/t-crtfm: ... this.
	Use $(cpu_type), $<.
	* config/t-crtin: New file.
	* config/sparc/t-softfp: New file.
	* config/sparc/t-softmul: New file.
	* config/t-rtems: New file.
	* config/t-slibgcc: New file.
	* config/t-slibgcc-elf-ver: New file.
	* config/t-slibgcc-gld: New file.
	* config/t-slibgcc-sld: New file.
	* config/t-sol2: New file.
	* configure.ac: Include ../config/lib-ld.m4.
	Call AC_LIB_PROG_LD_GNU.
	Substitute cpu_type.
	* configure: Regenerate.

From-SVN: r174529
This commit is contained in:
Rainer Orth 2011-06-01 14:39:17 +00:00 committed by Rainer Orth
parent ce4fc50608
commit ca24c5ad73
44 changed files with 713 additions and 1079 deletions

View File

@ -1,3 +1,47 @@
2011-06-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/t-slibgcc-darwin: Move to ...
* config/t-slibgcc-dummy: .. this.
Clarify comments.
* config.gcc (i[34567]86-*-darwin*, x86_64-*-darwin*,
powerpc-*-darwin*, powerpc64-*-darwin*): Reflect this.
(i[3456x]86-*-netware*): Add t-slibgcc-dummy to tmake_file.
(i[34567]86-*-rtems*): Remove extra_parts.
Use i386/t-rtems.
Remove i386/t-crtstuff from tmake_file.
(i[34567]86-*-solaris2*): Remove t-svr4,
t-slibgcc-elf-ver, t-slibgcc-sld from tmake_file, add
t-slibgcc-dummy.
(sparc-*-elf*, sparc64-*-elf*): Remove tmake_file, extra_parts.
(sparc-*-rtems*, sparc64-*-rtems*): Remove sparc/t-crtin,
sparc/t-crtfm from tmake_file.
(sparc*-*-solaris2*): Remove sparc/t-sol2, sparc/t-crtfm,
t-slibgcc-elf-ver, t-slibgcc-sld, add t-slibgcc-dummy.
Remove extra_parts.
* config/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define.
* config/i386/t-nwld (SHLIB_LINK): Remove.
* config/i386/t-rtems-i386: Rename to ...
* config/i386/t-rtems: ... this.
($(T)crti.o, $(T)crtn.o): Remove.
(FPBIT, DPBIT, LIB2FUNCS_EXTRA): Remove.
(dp-bit.c, fp-bit.c, xp-bit.c): Remove.
(EXTRA_MULTILIB_PARTS, LIBGCC, INSTALL_LIBGCC): Remove.
* config/i386/t-sol2-10 (LIBGCC, INSTALL_LIBGCC,
EXTRA_MULTILIB_PARTS): Remove.
* config/sparc/t-sol2-64: Likewise.
* config/sparc/t-sol2: Remove.
* config/sparc/t-crtin: Remove.
* config/sparc/gmon-sol2.c: Move to ../libgcc/config.
* config/i386/gmon-sol2.c: Remove.
* config/i386/sol2-c1.asm: Move to ../libgcc/config/i386/sol2-c1.S.
* config/i386/sol2-ci.asm: Move to ../libgcc/config/i386/sol2-ci.S.
* config/i386/sol2-cn.asm: Move to ../libgcc/config/i386/sol2-cn.S.
* config/i386/sol2-gc1.asm: Remove.
* config/sparc/sol2-c1.asm: Move to ../libgcc/config/sparc/sol2-c1.S.
* config/sparc/sol2-ci.asm: Move to ../libgcc/config/sparc/sol2-ci.S.
* config/sparc/sol2-cn.asm: Move to ../libgcc/config/sparc/sol2-cn.S.
* config/t-slibgcc-sld: Remove.
2011-06-01 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (mem_loc_descriptor) <do_ucompare>: Call

View File

@ -1172,12 +1172,12 @@ i[34567]86-*-darwin*)
need_64bit_isa=yes
# Baseline choice for a machine that allows m64 support.
with_cpu=${with_cpu:-core2}
tmake_file="${tmake_file} t-slibgcc-darwin i386/t-crtpc i386/t-crtfm"
tmake_file="${tmake_file} t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
;;
x86_64-*-darwin*)
with_cpu=${with_cpu:-core2}
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm"
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
tm_file="${tm_file} ${cpu_type}/darwin64.h"
libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
;;
@ -1301,7 +1301,7 @@ i[3456x]86-*-netware*)
*/nwld)
extra_objs="$extra_objs nwld.o"
tm_file="${tm_file} i386/nwld.h"
tmake_file="${tmake_file} i386/t-nwld"
tmake_file="${tmake_file} i386/t-nwld t-slibgcc-dummy"
extra_parts="crt0.o libgcc.def libc.def libcpre.def posixpre.def"
;;
esac
@ -1321,8 +1321,7 @@ i[34567]86-*-nto-qnx*)
;;
i[34567]86-*-rtems*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h newlib-stdint.h"
extra_parts="crtbegin.o crtend.o crti.o crtn.o"
tmake_file="${tmake_file} i386/t-rtems-i386 i386/t-crtstuff t-rtems"
tmake_file="${tmake_file} i386/t-rtems t-rtems"
;;
i[34567]86-*-solaris2*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/sysv4.h sol2.h"
@ -1351,16 +1350,13 @@ i[34567]86-*-solaris2*)
if test x$gas = xyes; then
tm_file="${tm_file} i386/sol2-gas.h"
fi
tmake_file="${tmake_file} t-sol2 t-svr4"
tmake_file="${tmake_file} t-sol2 t-slibgcc-dummy"
c_target_objs="${c_target_objs} sol2-c.o"
cxx_target_objs="${cxx_target_objs} sol2-c.o"
extra_objs="sol2.o"
tm_p_file="${tm_p_file} sol2-protos.h"
if test x$gnu_ld = xyes; then
tmake_file="$tmake_file t-slibgcc-elf-ver"
tm_defines="${tm_defines} TARGET_GNU_LD=1"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi
if test x$gas = xyes; then
tm_file="usegas.h ${tm_file}"
@ -1371,9 +1367,6 @@ i[34567]86-*-solaris2*)
tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h"
tm_defines="${tm_defines} TARGET_BI_ARCH=1"
tmake_file="$tmake_file i386/t-sol2-10"
# i386/t-crtstuff only affects libgcc. Its inclusion
# depends on a runtime test and is thus performed in
# libgcc/configure.ac instead.
need_64bit_hwint=yes
need_64bit_isa=yes
use_gcc_stdint=wrap
@ -2010,13 +2003,13 @@ powerpc-*-darwin*)
*-darwin[0-6]*)
;;
esac
tmake_file="${tmake_file} t-slibgcc-darwin"
tmake_file="${tmake_file} t-slibgcc-dummy"
extra_headers=altivec.h
;;
powerpc64-*-darwin*)
extra_options="${extra_options} ${cpu_type}/darwin.opt"
extra_parts="crt2.o"
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin"
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy"
tm_file="${tm_file} ${cpu_type}/darwin8.h ${cpu_type}/darwin64.h"
extra_headers=altivec.h
;;
@ -2442,13 +2435,10 @@ sparc-*-elf*)
tmake_file="sparc/t-elf"
;;
esac
tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm"
extra_parts="crtbegin.o crtend.o"
;;
sparc-*-rtems*)
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
tmake_file="sparc/t-elf sparc/t-crtin sparc/t-crtfm t-rtems"
extra_parts="crtbegin.o crtend.o"
tmake_file="sparc/t-elf t-rtems"
;;
sparc-*-linux*)
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h"
@ -2505,12 +2495,7 @@ sparc*-*-solaris2*)
tm_file="${tm_file} sol2-gld.h sparc/sol2-gld-bi.h"
fi
tm_file="${tm_file} tm-dwarf2.h"
tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtin sparc/t-crtfm"
if test x$gnu_ld = xyes; then
tmake_file="$tmake_file t-slibgcc-elf-ver"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi
tmake_file="t-sol2 t-slibgcc-dummy sparc/t-sol2-64"
if test x$gas = xyes; then
tm_file="usegas.h ${tm_file}"
fi
@ -2518,7 +2503,6 @@ sparc*-*-solaris2*)
cxx_target_objs="sol2-c.o"
extra_objs="sol2.o"
tm_p_file="${tm_p_file} sol2-protos.h"
extra_parts="crt1.o gcrt1.o gmon.o crtbegin.o crtend.o"
case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
"":yes:* | yes:yes:* )
thread_file=posix
@ -2532,14 +2516,11 @@ sparc-wrs-vxworks)
sparc64-*-elf*)
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h"
extra_options="${extra_options} sparc/little-endian.opt"
tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm"
extra_parts="crtbegin.o crtend.o"
;;
sparc64-*-rtems*)
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h sparc/rtemself.h rtems.h"
extra_options="${extra_options} sparc/little-endian.opt"
tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm t-rtems"
extra_parts="crtbegin.o crtend.o"
tmake_file="${tmake_file} t-rtems"
;;
sparc64-*-linux*)
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/linux64.h"

View File

@ -1,459 +0,0 @@
/*-
* Copyright (c) 1991 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* This is a modified gmon.c by J.W.Hawtin <oolon@ankh.org>,
* 14/8/96 based on the original gmon.c in GCC and the hacked version
* solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do
* process profiling on solaris 2.X X86
*
* It must be used in conjunction with sol2-gc1.asm, which is used to start
* and stop process monitoring.
*
* Differences.
*
* On Solaris 2 _mcount is called by library functions not mcount, so support
* has been added for both.
*
* Also the prototype for profil() is different
*
* Solaris 2 does not seem to have char *minbrk whcih allows the setting of
* the minimum SBRK region so this code has been removed and lets pray malloc
* does not mess it up.
*
* Notes
*
* This code could easily be integrated with the original gmon.c and perhaps
* should be.
*/
#include "tconfig.h"
#include "tsystem.h"
#include <fcntl.h> /* for creat() */
#ifdef DEBUG
#include <stdio.h>
#endif
static void moncontrol (int);
extern void monstartup (char *, char *);
extern void _mcleanup (void);
extern void internal_mcount (
#ifdef __x86_64__
char *, unsigned short *
#else
void
#endif
);
struct phdr {
char *lpc;
char *hpc;
int ncnt;
};
#define HISTFRACTION 2
#define HISTCOUNTER unsigned short
#define HASHFRACTION 1
#define ARCDENSITY 2
#define MINARCS 50
#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all executables start here
and not at 0 */
struct tostruct {
char *selfpc;
long count;
unsigned short link;
};
struct rawarc {
unsigned long raw_frompc;
unsigned long raw_selfpc;
long raw_count;
};
#define ROUNDDOWN(x,y) (((x)/(y))*(y))
#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
/* char *minbrk; */
typedef __SIZE_TYPE__ size_t;
typedef __PTRDIFF_TYPE__ intptr_t;
/*
* froms is actually a bunch of unsigned shorts indexing tos
*/
static int profiling = 3;
static unsigned short *froms;
static struct tostruct *tos = 0;
static long tolimit = 0;
static char *s_lowpc = 0;
static char *s_highpc = 0;
static size_t s_textsize = 0;
static int ssiz;
static char *sbuf;
static int s_scale;
/* see profil(2) where this is describe (incorrectly) */
#define SCALE_1_TO_1 0x10000L
#define MSG "No space for profiling buffer(s)\n"
extern int errno;
extern void *sbrk (intptr_t);
void
monstartup(char *lowpc, char *highpc)
{
size_t monsize;
char *buffer;
register size_t o;
/*
* round lowpc and highpc to multiples of the density we're using
* so the rest of the scaling (here and in gprof) stays in ints.
*/
lowpc = (char *)
ROUNDDOWN((size_t)lowpc, HISTFRACTION*sizeof(HISTCOUNTER));
s_lowpc = lowpc;
highpc = (char *)
ROUNDUP((size_t)highpc, HISTFRACTION*sizeof(HISTCOUNTER));
s_highpc = highpc;
s_textsize = highpc - lowpc;
monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr);
buffer = (char *) sbrk( monsize );
if ( buffer == (char *) -1 ) {
write( 2 , MSG , sizeof(MSG) );
return;
}
froms = (unsigned short *) sbrk( s_textsize / HASHFRACTION );
if ( froms == (unsigned short *) -1 ) {
write( 2 , MSG , sizeof(MSG) );
froms = 0;
return;
}
tolimit = s_textsize * ARCDENSITY / 100;
if ( tolimit < MINARCS ) {
tolimit = MINARCS;
} else if ( tolimit > 65534 ) {
tolimit = 65534;
}
tos = (struct tostruct *) sbrk( tolimit * sizeof( struct tostruct ) );
if ( tos == (struct tostruct *) -1 ) {
write( 2 , MSG , sizeof(MSG) );
froms = 0;
tos = 0;
return;
}
/* minbrk = (char *) sbrk(0);*/
tos[0].link = 0;
sbuf = buffer;
ssiz = monsize;
( (struct phdr *) buffer ) -> lpc = lowpc;
( (struct phdr *) buffer ) -> hpc = highpc;
( (struct phdr *) buffer ) -> ncnt = ssiz;
monsize -= sizeof(struct phdr);
if ( monsize <= 0 )
return;
o = highpc - lowpc;
if( monsize < o )
#ifndef hp300
s_scale = ( (float) monsize / o ) * SCALE_1_TO_1;
#else /* avoid floating point */
{
int quot = o / monsize;
if (quot >= 0x10000)
s_scale = 1;
else if (quot >= 0x100)
s_scale = 0x10000 / quot;
else if (o >= 0x800000)
s_scale = 0x1000000 / (o / (monsize >> 8));
else
s_scale = 0x1000000 / ((o << 8) / monsize);
}
#endif
else
s_scale = SCALE_1_TO_1;
moncontrol(1);
}
void
_mcleanup (void)
{
int fd;
int fromindex;
int endfrom;
char *frompc;
int toindex;
struct rawarc rawarc;
moncontrol(0);
fd = creat( "gmon.out" , 0666 );
if ( fd < 0 ) {
perror( "mcount: gmon.out" );
return;
}
# ifdef DEBUG
fprintf( stderr , "[mcleanup] sbuf %#x ssiz %d\n" , sbuf , ssiz );
# endif /* DEBUG */
write( fd , sbuf , ssiz );
endfrom = s_textsize / (HASHFRACTION * sizeof(*froms));
for ( fromindex = 0 ; fromindex < endfrom ; fromindex++ ) {
if ( froms[fromindex] == 0 ) {
continue;
}
frompc = s_lowpc + (fromindex * HASHFRACTION * sizeof(*froms));
for (toindex=froms[fromindex]; toindex!=0; toindex=tos[toindex].link) {
# ifdef DEBUG
fprintf( stderr ,
"[mcleanup] frompc %#x selfpc %#x count %d\n" ,
frompc , tos[toindex].selfpc , tos[toindex].count );
# endif /* DEBUG */
rawarc.raw_frompc = (unsigned long) frompc;
rawarc.raw_selfpc = (unsigned long) tos[toindex].selfpc;
rawarc.raw_count = tos[toindex].count;
write( fd , &rawarc , sizeof rawarc );
}
}
close( fd );
}
#ifdef __x86_64__
/* See GLIBC for additional information about this technique. */
asm(".globl _mcount\n"
"\t.type\t_mcount, @function\n"
"_mcount:\n"
/* The compiler calls _mcount after the prologue, and does not
save any of the registers. Therefore we must preserve all
seven registers which may contain function arguments. */
"\tsubq\t$0x38,%rsp\n"
"\tmovq\t%rax,(%rsp)\n"
"\tmovq\t%rcx,0x08(%rsp)\n"
"\tmovq\t%rdx,0x10(%rsp)\n"
"\tmovq\t%rsi,0x18(%rsp)\n"
"\tmovq\t%rdi,0x20(%rsp)\n"
"\tmovq\t%r8,0x28(%rsp)\n"
"\tmovq\t%r9,0x30(%rsp)\n"
/* Get SELFPC (pushed by the call to this function) and
FROMPCINDEX (via the frame pointer. */
"\tmovq\t0x38(%rsp),%rdi\n"
"\tmovq\t0x8(%rbp),%rsi\n"
"\tcall\tinternal_mcount\n"
/* Restore the saved registers. */
"\tmovq\t0x30(%rsp),%r9\n"
"\tmovq\t0x28(%rsp),%r8\n"
"\tmovq\t0x20(%rsp),%rdi\n"
"\tmovq\t0x18(%rsp),%rsi\n"
"\tmovq\t0x10(%rsp),%rdx\n"
"\tmovq\t0x08(%rsp),%rcx\n"
"\tmovq\t(%rsp),%rax\n"
"\taddq\t$0x38,%rsp\n"
"\tretq\n"
);
#else
/* Solaris 2 libraries use _mcount. */
asm(".globl _mcount; _mcount: jmp internal_mcount");
/* This is for compatibility with old versions of gcc which used mcount. */
asm(".globl mcount; mcount: jmp internal_mcount");
#endif
void
internal_mcount (
#ifdef __x86_64__
char *selfpc,
unsigned short *frompcindex
#else
void
#endif
)
{
#ifndef __x86_64__
register char *selfpc;
register unsigned short *frompcindex;
#endif
register struct tostruct *top;
register struct tostruct *prevtop;
register long toindex;
static char already_setup;
#ifndef __x86_64__
/*
* find the return address for mcount,
* and the return address for mcount's caller.
*/
/* selfpc = pc pushed by mcount call.
This identifies the function that was just entered. */
selfpc = (void *) __builtin_return_address (0);
/* frompcindex = pc in preceding frame.
This identifies the caller of the function just entered. */
frompcindex = (void *) __builtin_return_address (1);
#endif
if(!already_setup) {
extern char etext[];
already_setup = 1;
#ifdef __x86_64__
monstartup(0, etext);
#else
monstartup((char*)0x08040000, etext);
#endif
#ifdef USE_ONEXIT
on_exit(_mcleanup, 0);
#else
atexit(_mcleanup);
#endif
}
/*
* check that we are profiling
* and that we aren't recursively invoked.
*/
if (profiling) {
goto out;
}
profiling++;
/*
* check that frompcindex is a reasonable pc value.
* for example: signal catchers get called from the stack,
* not from text space. too bad.
*/
frompcindex = (unsigned short *)((long)frompcindex - (long)s_lowpc);
if ((unsigned long)frompcindex > s_textsize) {
goto done;
}
frompcindex =
&froms[((long)frompcindex) / (HASHFRACTION * sizeof(*froms))];
toindex = *frompcindex;
if (toindex == 0) {
/*
* first time traversing this arc
*/
toindex = ++tos[0].link;
if (toindex >= tolimit) {
goto overflow;
}
*frompcindex = toindex;
top = &tos[toindex];
top->selfpc = selfpc;
top->count = 1;
top->link = 0;
goto done;
}
top = &tos[toindex];
if (top->selfpc == selfpc) {
/*
* arc at front of chain; usual case.
*/
top->count++;
goto done;
}
/*
* have to go looking down chain for it.
* top points to what we are looking at,
* prevtop points to previous top.
* we know it is not at the head of the chain.
*/
for (; /* goto done */; ) {
if (top->link == 0) {
/*
* top is end of the chain and none of the chain
* had top->selfpc == selfpc.
* so we allocate a new tostruct
* and link it to the head of the chain.
*/
toindex = ++tos[0].link;
if (toindex >= tolimit) {
goto overflow;
}
top = &tos[toindex];
top->selfpc = selfpc;
top->count = 1;
top->link = *frompcindex;
*frompcindex = toindex;
goto done;
}
/*
* otherwise, check the next arc on the chain.
*/
prevtop = top;
top = &tos[top->link];
if (top->selfpc == selfpc) {
/*
* there it is.
* increment its count
* move it to the head of the chain.
*/
top->count++;
toindex = prevtop->link;
prevtop->link = top->link;
top->link = *frompcindex;
*frompcindex = toindex;
goto done;
}
}
done:
profiling--;
/* and fall through */
out:
return; /* normal return restores saved registers */
overflow:
profiling++; /* halt further profiling */
# define TOLIMIT "mcount: tos overflow\n"
write(2, TOLIMIT, sizeof(TOLIMIT));
goto out;
}
/*
* Control profiling
* profiling is what mcount checks to see if
* all the data structures are ready.
*/
static void
moncontrol(int mode)
{
if (mode)
{
/* start */
profil((unsigned short *)(sbuf + sizeof(struct phdr)),
ssiz - sizeof(struct phdr),
(size_t)s_lowpc, s_scale);
profiling = 0;
} else {
/* stop */
profil((unsigned short *)0, 0, 0, 0);
profiling = 3;
}
}

View File

@ -1,151 +0,0 @@
! crt1.s for Solaris 2, x86
! Copyright (C) 1993, 1998, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 1992
!
! This file is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 3, or (at your option) any
! later version.
!
! This file is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! General Public License for more details.
!
! Under Section 7 of GPL version 3, you are granted additional
! permissions described in the GCC Runtime Library Exception, version
! 3.1, as published by the Free Software Foundation.
!
! You should have received a copy of the GNU General Public License and
! a copy of the GCC Runtime Library Exception along with this program;
! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
! <http://www.gnu.org/licenses/>.
! This file takes control of the process from the kernel, as specified
! in section 3 of the System V Application Binary Interface, Intel386
! Processor Supplement. It has been constructed from information obtained
! from the ABI, information obtained from single stepping existing
! Solaris executables through their startup code with gdb, and from
! information obtained by single stepping executables on other i386 SVR4
! implementations. This file is the first thing linked into any executable.
.ident "GNU C crt1.s"
.weak _cleanup
.weak _DYNAMIC
.text
! Start creating the initial frame by pushing a NULL value for the return
! address of the initial frame, and mark the end of the stack frame chain
! (the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
! Initialize the first stack frame pointer in %ebp (the contents of which
! are unspecified at process initialization).
.globl _start
_start:
pushl $0x0
pushl $0x0
movl %esp,%ebp
! As specified per page 3-32 of the ABI, %edx contains a function
! pointer that should be registered with atexit(), for proper
! shared object termination. Just push it onto the stack for now
! to preserve it. We want to register _cleanup() first.
pushl %edx
! Check to see if there is an _cleanup() function linked in, and if
! so, register it with atexit() as the last thing to be run by
! atexit().
movl $_cleanup,%eax
testl %eax,%eax
je .L1
pushl $_cleanup
call atexit
addl $0x4,%esp
.L1:
! Now check to see if we have an _DYNAMIC table, and if so then
! we need to register the function pointer previously in %edx, but
! now conveniently saved on the stack as the argument to pass to
! atexit().
movl $_DYNAMIC,%eax
testl %eax,%eax
je .L2
call atexit
.L2:
! Register _fini() with atexit(). We will take care of calling _init()
! directly.
pushl $_fini
call atexit
! Compute the address of the environment vector on the stack and load
! it into the global variable _environ. Currently argc is at 8 off
! the frame pointer. Fetch the argument count into %eax, scale by the
! size of each arg (4 bytes) and compute the address of the environment
! vector which is 16 bytes (the two zero words we pushed, plus argc,
! plus the null word terminating the arg vector) further up the stack,
! off the frame pointer (whew!).
movl 8(%ebp),%eax
leal 16(%ebp,%eax,4),%edx
movl %edx,_environ
! Push the environment vector pointer, the argument vector pointer,
! and the argument count on to the stack to set up the arguments
! for _init(), _fpstart(), and main(). Note that the environment
! vector pointer and the arg count were previously loaded into
! %edx and %eax respectively. The only new value we need to compute
! is the argument vector pointer, which is at a fixed address off
! the initial frame pointer.
!
! Make sure the stack is properly aligned.
!
andl $0xfffffff0,%esp
subl $4,%esp
pushl %edx
leal 12(%ebp),%edx
pushl %edx
pushl %eax
! Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
! main(argc, argv, environ).
call _init
call __fpstart
call main
! Pop the argc, argv, and environ arguments off the stack, push the
! value returned from main(), and call exit().
addl $12,%esp
pushl %eax
call exit
! An inline equivalent of _exit, as specified in Figure 3-26 of the ABI.
pushl $0x0
movl $0x1,%eax
lcall $7,$0
! If all else fails, just try a halt!
hlt
.type _start,@function
.size _start,.-_start
! A dummy profiling support routine for non-profiling executables,
! in case we link in some objects that have been compiled for profiling.
.weak _mcount
_mcount:
ret
.type _mcount,@function
.size _mcount,.-_mcount

View File

@ -1,40 +0,0 @@
! crti.s for Solaris 2, x86.
! Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 1992
!
! This file is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 3, or (at your option) any
! later version.
!
! This file is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! General Public License for more details.
!
! Under Section 7 of GPL version 3, you are granted additional
! permissions described in the GCC Runtime Library Exception, version
! 3.1, as published by the Free Software Foundation.
!
! You should have received a copy of the GNU General Public License and
! a copy of the GCC Runtime Library Exception along with this program;
! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
! <http://www.gnu.org/licenses/>.
! This file just supplies labeled starting points for the .init and .fini
! sections. It is linked in before the values-Xx.o files and also before
! crtbegin.o.
.ident "GNU C crti.s"
.section .init
.globl _init
.type _init,@function
_init:
.section .fini
.globl _fini
.type _fini,@function
_fini:

View File

@ -1,35 +0,0 @@
! crtn.s for Solaris 2, x86.
! Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 1992
!
! This file is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 3, or (at your option) any
! later version.
!
! This file is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! General Public License for more details.
!
! Under Section 7 of GPL version 3, you are granted additional
! permissions described in the GCC Runtime Library Exception, version
! 3.1, as published by the Free Software Foundation.
!
! You should have received a copy of the GNU General Public License and
! a copy of the GCC Runtime Library Exception along with this program;
! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
! <http://www.gnu.org/licenses/>.
! This file just supplies returns for the .init and .fini sections. It is
! linked in after all other files.
.ident "GNU C crtn.o"
.section .init
ret $0x0
.section .fini
ret $0x0

View File

@ -1,155 +0,0 @@
! gcrt1.s for Solaris 2, x86
! Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 1992
!
! This file is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 3, or (at your option) any
! later version.
!
! This file is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! General Public License for more details.
!
! Under Section 7 of GPL version 3, you are granted additional
! permissions described in the GCC Runtime Library Exception, version
! 3.1, as published by the Free Software Foundation.
!
! You should have received a copy of the GNU General Public License and
! a copy of the GCC Runtime Library Exception along with this program;
! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
! <http://www.gnu.org/licenses/>.
! This file takes control of the process from the kernel, as specified
! in section 3 of the System V Application Binary Interface, Intel386
! Processor Supplement. It has been constructed from information obtained
! from the ABI, information obtained from single stepping existing
! Solaris executables through their startup code with gdb, and from
! information obtained by single stepping executables on other i386 SVR4
! implementations. This file is the first thing linked into any executable.
! This is a modified crt1.s by J.W.Hawtin <oolon@ankh.org> 15/8/96,
! to allow program profiling, by calling monstartup on entry and _mcleanup
! on exit
.ident "GNU C gcrt1.s"
.weak _DYNAMIC
.text
! Start creating the initial frame by pushing a NULL value for the return
! address of the initial frame, and mark the end of the stack frame chain
! (the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
! Initialize the first stack frame pointer in %ebp (the contents of which
! are unspecified at process initialization).
.globl _start
_start:
pushl $0x0
pushl $0x0
movl %esp,%ebp
! As specified per page 3-32 of the ABI, %edx contains a function
! pointer that should be registered with atexit(), for proper
! shared object termination. Just push it onto the stack for now
! to preserve it. We want to register _cleanup() first.
pushl %edx
! Check to see if there is an _cleanup() function linked in, and if
! so, register it with atexit() as the last thing to be run by
! atexit().
movl $_mcleanup,%eax
testl %eax,%eax
je .L1
pushl $_mcleanup
call atexit
addl $0x4,%esp
.L1:
! Now check to see if we have an _DYNAMIC table, and if so then
! we need to register the function pointer previously in %edx, but
! now conveniently saved on the stack as the argument to pass to
! atexit().
movl $_DYNAMIC,%eax
testl %eax,%eax
je .L2
call atexit
.L2:
! Register _fini() with atexit(). We will take care of calling _init()
! directly.
pushl $_fini
call atexit
! Start profiling
pushl %ebp
movl %esp,%ebp
pushl $_etext
pushl $_start
call monstartup
addl $8,%esp
popl %ebp
! Compute the address of the environment vector on the stack and load
! it into the global variable _environ. Currently argc is at 8 off
! the frame pointer. Fetch the argument count into %eax, scale by the
! size of each arg (4 bytes) and compute the address of the environment
! vector which is 16 bytes (the two zero words we pushed, plus argc,
! plus the null word terminating the arg vector) further up the stack,
! off the frame pointer (whew!).
movl 8(%ebp),%eax
leal 16(%ebp,%eax,4),%edx
movl %edx,_environ
! Push the environment vector pointer, the argument vector pointer,
! and the argument count on to the stack to set up the arguments
! for _init(), _fpstart(), and main(). Note that the environment
! vector pointer and the arg count were previously loaded into
! %edx and %eax respectively. The only new value we need to compute
! is the argument vector pointer, which is at a fixed address off
! the initial frame pointer.
!
! Make sure the stack is properly aligned.
!
andl $0xfffffff0,%esp
subl $4,%esp
pushl %edx
leal 12(%ebp),%edx
pushl %edx
pushl %eax
! Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
! main(argc, argv, environ).
call _init
call __fpstart
call main
! Pop the argc, argv, and environ arguments off the stack, push the
! value returned from main(), and call exit().
addl $12,%esp
pushl %eax
call exit
! An inline equivalent of _exit, as specified in Figure 3-26 of the ABI.
pushl $0x0
movl $0x1,%eax
lcall $7,$0
! If all else fails, just try a halt!
hlt
.type _start,@function
.size _start,.-_start

View File

@ -45,6 +45,3 @@ nwld.o: $(srcdir)/config/i386/nwld.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_P_H)
s-crt0: $(srcdir)/unwind-dw2-fde.h
# To keep DRIVER_DEFINES correct.
SHLIB_LINK = dummy

28
gcc/config/i386/t-rtems Normal file
View File

@ -0,0 +1,28 @@
# Copyright (C) 1999, 2001, 2002, 2005, 2007, 2011
# Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
#
MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
msoft-float
MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
MULTILIB_MATCHES = msoft-float=mno-m80387
MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
MULTILIB_EXCEPTIONS = \
mtune=pentium/*msoft-float* \
mtune=pentiumpro/*msoft-float*

View File

@ -1,69 +0,0 @@
# Copyright (C) 1999, 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
#
#
# This file was based on t-sol2 - x68 Solaris implementation. Actually,
# the source code to create crti.o anf crtn.o are exactly the same
# as the ones for Solaris. Later, we might want to have a RTEMS's
# version of these files.
#
$(T)crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s
$(GCC_FOR_TARGET) -c -o $(T)crti.o crti.s
$(T)crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
sed -e '/^!/d' <$(srcdir)/config/i386/sol2-cn.asm >crtn.s
$(GCC_FOR_TARGET) -c -o $(T)crtn.o crtn.s
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
FPBIT = fp-bit.c
DPBIT = dp-bit.c
LIB2FUNCS_EXTRA = xp-bit.c
dp-bit.c: $(srcdir)/config/fp-bit.c
echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
echo '#endif' >> dp-bit.c
cat $(srcdir)/config/fp-bit.c >> dp-bit.c
fp-bit.c: $(srcdir)/config/fp-bit.c
echo '#define FLOAT' > fp-bit.c
echo '#ifdef __LITTLE_ENDIAN__' >> fp-bit.c
echo '#define FLOAT_BIT_ORDER_MISMATCH' >>fp-bit.c
echo '#endif' >> fp-bit.c
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
xp-bit.c: $(srcdir)/config/fp-bit.c
echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c
cat $(srcdir)/config/fp-bit.c >> xp-bit.c
MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
msoft-float
MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
MULTILIB_MATCHES = msoft-float=mno-m80387
MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
MULTILIB_EXCEPTIONS = \
mtune=pentium/*msoft-float* \
mtune=pentiumpro/*msoft-float*
EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

View File

@ -1,4 +1,4 @@
# Copyright (C) 2004 Free Software Foundation, Inc.
# Copyright (C) 2004, 2011 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
@ -19,11 +19,3 @@
MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = 32 amd64
MULTILIB_OSDIRNAMES = . amd64
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
# GCC contains i386 assembler sources for some of the startfiles
# which aren't appropriate for amd64. Just use the installed
# versions of: crt1.o crti.o crtn.o gcrt1.o
EXTRA_MULTILIB_PARTS=gmon.o crtbegin.o crtend.o

View File

@ -1,6 +0,0 @@
EXTRA_PARTS += crti.o crtn.o
$(T)crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm
$(T)crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm

View File

@ -1,39 +0,0 @@
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
# 2002 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# gmon build rule:
$(T)gmon.o: $(srcdir)/config/sparc/gmon-sol2.c $(GCC_PASSES) \
$(TCONFIG_H) tsystem.h coretypes.h $(TM_H) stmp-int-hdrs
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \
-c $(srcdir)/config/sparc/gmon-sol2.c -o $(T)gmon.o
# Assemble startup files.
$(T)crt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm
$(T)gcrt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -DGCRT1 -o $(T)gcrt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm
# We need to use -fPIC when we are using gcc to compile the routines in
# crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when
# we will be doing that, we just always use -fPIC when compiling the
# routines in crtstuff.c.
CRTSTUFF_T_CFLAGS = -fPIC
TARGET_LIBGCC2_CFLAGS = -fPIC

View File

@ -2,6 +2,3 @@ MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = sparcv8plus sparcv9
MULTILIB_MATCHES =
MULTILIB_OSDIRNAMES = . sparcv9
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

View File

@ -1,2 +0,0 @@
# To keep DRIVER_DEFINES correct.
SHLIB_LINK = dummy

View File

@ -0,0 +1,3 @@
# SHLIB_LINK must be non-empty so ENABLE_SHARED_LIBGCC is defined correctly
# in DRIVER_DEFINES if libgcc configuration has been moved to toplevel.
SHLIB_LINK = dummy

View File

@ -29,6 +29,9 @@ sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/sol2.c
# This is required by gcc/ada/gcc-interface/Makefile.in.
TARGET_LIBGCC2_CFLAGS = -fPIC
# Use unwind-dw2-fde-glibc.c. Unless linker support and dl_iterate_phdr
# are present, automatically falls back to unwind-dw2-fde.c.
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \

View File

@ -1,3 +1,55 @@
2011-06-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* Makefile.in (cpu_type): Define.
* config.host (i[34567]86-*-rtems*): Handle it.
(i[34567]86-*-solaris2*): Move body ...
(*-*-solaris2*): ... here.
New case, generalize.
(sparc-*-elf*): Handle it.
(sparc-*-linux*, sparc64-*-linux*): Replace sparc/t-crtfm by t-crtfm.
(sparc-*-rtems*, sparc64-*-rtems*); Handle it.
(sparc64-*-solaris2*, sparcv9-*-solaris2*, sparc-*-solaris2*):
Fold into ...
(sparc*-*-solaris2*): ... this.
New case.
(sparc64-*-elf*): Handle it.
* config/gmon-sol2.c: Move from ../gcc/config/sparc.
Merge ../gcc/config/i386/gmon-sol2.c.
* config/i386/sol2-c1.S: Move from ../gcc/config/i386/sol2-c1.asm.
Use C comments.
Merge ../gcc/config/i386/sol2-gc1.asm.
* config/i386/sol2-ci.S: Move from ../gcc/config/i386/sol2-ci.asm.
Use C comments.
* config/i386/sol2-cn.S: Move from ../gcc/config/i386/sol2-cn.asm.
Use C comments.
* config/i386/t-crtfm (crtfastmath.o): Use $<.
* config/i386/t-crtstuff: New file.
* config/i386/t-softfp: New file.
* config/i386/t-sol2 ($(T)gmon.o, $(T)gcrt1.o, $(T)crt1.o),
$(T)crti.o, $(T)crtn.o): Remove.
(gcrt1.o): New rule.
(TARGET_LIBGCC2_CFLAGS): Remove.
* config/sparc/sol2-c1.S: Move from ../gcc/config/sparc/sol2-c1.asm.
* config/sparc/sol2-ci.S: Move from ../gcc/config/sparc/sol2-ci.asm.
* config/sparc/sol2-cn.S: Move from ../gcc/config/sparc/sol2-cn.asm.
* config/sparc/t-sol2: New file.
* config/sparc/t-crtfm: Move to ...
* config/t-crtfm: ... this.
Use $(cpu_type), $<.
* config/t-crtin: New file.
* config/sparc/t-softfp: New file.
* config/sparc/t-softmul: New file.
* config/t-rtems: New file.
* config/t-slibgcc: New file.
* config/t-slibgcc-elf-ver: New file.
* config/t-slibgcc-gld: New file.
* config/t-slibgcc-sld: New file.
* config/t-sol2: New file.
* configure.ac: Include ../config/lib-ld.m4.
Call AC_LIB_PROG_LD_GNU.
Substitute cpu_type.
* configure: Regenerate.
2011-05-27 Bernd Schmidt <bernds@codesourcery.com>
PR bootstrap/49173

View File

@ -1,6 +1,6 @@
# Makefile.in
# Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation
# Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation
#
# This file is part of GCC.
#
@ -35,6 +35,7 @@ shlib_slibdir = @slibdir@
SHELL = @SHELL@
cpu_type = @cpu_type@
enable_shared = @enable_shared@
decimal_float = @decimal_float@
enable_decimal_float = @enable_decimal_float@

View File

@ -1,6 +1,6 @@
# libgcc host-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
# 2008, 2009, 2010 Free Software Foundation, Inc.
# 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
#This file is part of GCC.
@ -168,6 +168,31 @@ case ${host} in
;;
*-*-rtems*)
;;
*-*-solaris2*)
tmake_file="$tmake_file t-sol2 t-slibgcc t-slibgcc-elf-ver"
if test $with_gnu_ld = yes; then
tmake_file="$tmake_file t-slibgcc-gld"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi
# Add cpu-specific t-sol2 after t-slibgcc-* so it can augment SHLIB_MAPFILES.
tmake_file="$tmake_file $cpu_type/t-sol2"
extra_parts="gmon.o crtbegin.o crtend.o"
case ${host} in
i?86-*-solaris2.1[0-9]*)
# Solaris 10+/x86 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
# part of the base system.
;;
sparc*-*-solaris2.1[0-9]*)
# Solaris 10+/SPARC lacks crt1.o and gcrt1.o.
extra_parts="$extra_parts crt1.o gcrt1.o"
;;
*)
tmake_file="$tmake_file t-crtin"
extra_parts="$extra_parts crt1.o crti.o crtn.o gcrt1.o"
;;
esac
;;
*-*-vxworks*)
;;
*-*-elf)
@ -309,19 +334,10 @@ i[3456x]86-*-netware*)
i[34567]86-*-nto-qnx*)
;;
i[34567]86-*-rtems*)
extra_parts="crtbegin.o crtend.o crti.o crtn.o"
tmake_file="${tmake_file} t-crtin i386/t-softfp i386/t-crtstuff t-rtems"
;;
i[34567]86-*-solaris2*)
tmake_file="${tmake_file} i386/t-sol2"
case ${host} in
*-*-solaris2.1[0-9]*)
# Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
# part of the base system.
extra_parts="gmon.o crtbegin.o crtend.o"
;;
*)
extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
;;
esac
;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
;;
@ -519,18 +535,31 @@ sparc-*-netbsdelf*)
sparc64-*-openbsd*)
;;
sparc-*-elf*)
case ${host} in
*-leon[3-9]*)
;;
*)
tmake_file="sparc/t-softmul"
;;
esac
tmake_file="${tmake_file} sparc/t-softfp t-crtin t-crtfm"
extra_parts="crtbegin.o crtend.o crti.o crtn.o crtfastmath.o"
;;
sparc-*-linux*) # SPARC's running GNU/Linux, libc6
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} sparc/t-crtfm"
tmake_file="${tmake_file} t-crtfm"
;;
sparc-*-rtems* | sparc64-*-rtems* )
tmake_file="sparc/t-elf t-crtin t-crtfm t-rtems"
extra_parts="crtbegin.o crtend.o crti.o crtn.o crtfastmath.o"
;;
sparc64-*-solaris2* | sparcv9-*-solaris2*)
;;
sparc-*-solaris2*)
sparc*-*-solaris2*)
tmake_file="$tmake_file t-crtfm"
extra_parts="$extra_parts crtfastmath.o"
;;
sparc64-*-elf*)
tmake_file="${tmake_file} t-crtin t-crtfm"
extra_parts="crtbegin.o crtend.o crti.o crtn.o crtfastmath.o"
;;
sparc-wrs-vxworks)
;;
@ -538,7 +567,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*)
;;
sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} sparc/t-crtfm"
tmake_file="${tmake_file} t-crtfm"
;;
sparc64-*-netbsd*)
;;

View File

@ -28,32 +28,67 @@
* SUCH DAMAGE.
*/
/* FIXME: Check comment. */
/* Mangled into a form that works on SPARC Solaris 2 by Mark Eichin
* for Cygnus Support, July 1992.
*
* This is a modified gmon.c by J.W.Hawtin <oolon@ankh.org>,
* 14/8/96 based on the original gmon.c in GCC and the hacked version
* solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do
* process profiling on solaris 2.X X86
*
* It must be used in conjunction with sol2-gc1.asm, which is used to start
* and stop process monitoring.
*
* Differences.
*
* On Solaris 2 _mcount is called by library functions not mcount, so support
* has been added for both.
*
* Also the prototype for profil() is different
*
* Solaris 2 does not seem to have char *minbrk whcih allows the setting of
* the minimum SBRK region so this code has been removed and lets pray malloc
* does not mess it up.
*
* Notes
*
* This code could easily be integrated with the original gmon.c and perhaps
* should be.
*/
#include "tconfig.h"
#include "tsystem.h"
#include <fcntl.h> /* for creat() */
#if 0
#include "sparc/gmon.h"
#else
#ifdef DEBUG
#include <stdio.h>
#endif
static void moncontrol (int);
extern void monstartup (char *, char *);
extern void _mcleanup (void);
struct phdr {
char *lpc;
char *hpc;
int ncnt;
};
#define HISTFRACTION 2
#define HISTCOUNTER unsigned short
#define HASHFRACTION 1
#define ARCDENSITY 2
#define MINARCS 50
#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all executables start here
and not at 0 */
struct tostruct {
char *selfpc;
long count;
unsigned short link;
};
struct rawarc {
unsigned long raw_frompc;
unsigned long raw_selfpc;
@ -62,10 +97,14 @@ struct rawarc {
#define ROUNDDOWN(x,y) (((x)/(y))*(y))
#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
#endif
/* extern mcount() asm ("mcount"); */
/*extern*/ char *minbrk /* asm ("minbrk") */;
typedef __SIZE_TYPE__ size_t;
typedef __PTRDIFF_TYPE__ intptr_t;
extern int errno;
extern void *sbrk (intptr_t);
/*
* froms is actually a bunch of unsigned shorts indexing tos
@ -76,7 +115,7 @@ static struct tostruct *tos = 0;
static long tolimit = 0;
static char *s_lowpc = 0;
static char *s_highpc = 0;
static unsigned long s_textsize = 0;
static size_t s_textsize = 0;
static int ssiz;
static char *sbuf;
@ -92,23 +131,23 @@ extern void _mcleanup (void);
void monstartup(char *lowpc, char *highpc)
{
int monsize;
size_t monsize;
char *buffer;
register int o;
register size_t o;
/*
* round lowpc and highpc to multiples of the density we're using
* so the rest of the scaling (here and in gprof) stays in ints.
*/
lowpc = (char *)
ROUNDDOWN((unsigned long)lowpc, HISTFRACTION*sizeof(HISTCOUNTER));
ROUNDDOWN((size_t)lowpc, HISTFRACTION*sizeof(HISTCOUNTER));
s_lowpc = lowpc;
highpc = (char *)
ROUNDUP((unsigned long)highpc, HISTFRACTION*sizeof(HISTCOUNTER));
ROUNDUP((size_t)highpc, HISTFRACTION*sizeof(HISTCOUNTER));
s_highpc = highpc;
s_textsize = highpc - lowpc;
monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr);
buffer = sbrk( monsize );
buffer = (char *) sbrk( monsize );
if ( buffer == (char *) -1 ) {
write( 2 , MSG , sizeof(MSG) );
return;
@ -206,8 +245,9 @@ _mcleanup(void)
return;
}
# ifdef DEBUG
fprintf( stderr , "[mcleanup] sbuf 0x%x ssiz %d\n" , sbuf , ssiz );
fprintf( stderr , "[mcleanup] sbuf %#x ssiz %d\n" , sbuf , ssiz );
# endif /* DEBUG */
write( fd , sbuf , ssiz );
endfrom = s_textsize / (HASHFRACTION * sizeof(*froms));
for ( fromindex = 0 ; fromindex < endfrom ; fromindex++ ) {
@ -218,7 +258,7 @@ _mcleanup(void)
for (toindex=froms[fromindex]; toindex!=0; toindex=tos[toindex].link) {
# ifdef DEBUG
fprintf( stderr ,
"[mcleanup] frompc 0x%x selfpc 0x%x count %d\n" ,
"[mcleanup] frompc %#x selfpc %#x count %d\n" ,
frompc , tos[toindex].selfpc , tos[toindex].count );
# endif /* DEBUG */
rawarc.raw_frompc = (unsigned long) frompc;
@ -230,6 +270,7 @@ _mcleanup(void)
close( fd );
}
#ifdef __sparc__
/*
* The SPARC stack frame is only held together by the frame pointers
* in the register windows. According to the SVR4 SPARC ABI
@ -273,25 +314,99 @@ static void internal_mcount (char *, unsigned short *) __attribute__ ((used));
asm(".global _mcount; _mcount: mov %i7,%o1; mov %o7,%o0;b,a internal_mcount");
/* This is for compatibility with old versions of gcc which used mcount. */
asm(".global mcount; mcount: mov %i7,%o1; mov %o7,%o0;b,a internal_mcount");
#elif defined __x86_64__
extern void internal_mcount (char *, unsigned short *);
static void internal_mcount(char *selfpc, unsigned short *frompcindex)
/* See GLIBC for additional information about this technique. */
asm(".globl _mcount\n"
"\t.type\t_mcount, @function\n"
"_mcount:\n"
/* The compiler calls _mcount after the prologue, and does not
save any of the registers. Therefore we must preserve all
seven registers which may contain function arguments. */
"\tsubq\t$0x38,%rsp\n"
"\tmovq\t%rax,(%rsp)\n"
"\tmovq\t%rcx,0x08(%rsp)\n"
"\tmovq\t%rdx,0x10(%rsp)\n"
"\tmovq\t%rsi,0x18(%rsp)\n"
"\tmovq\t%rdi,0x20(%rsp)\n"
"\tmovq\t%r8,0x28(%rsp)\n"
"\tmovq\t%r9,0x30(%rsp)\n"
/* Get SELFPC (pushed by the call to this function) and
FROMPCINDEX (via the frame pointer. */
"\tmovq\t0x38(%rsp),%rdi\n"
"\tmovq\t0x8(%rbp),%rsi\n"
"\tcall\tinternal_mcount\n"
/* Restore the saved registers. */
"\tmovq\t0x30(%rsp),%r9\n"
"\tmovq\t0x28(%rsp),%r8\n"
"\tmovq\t0x20(%rsp),%rdi\n"
"\tmovq\t0x18(%rsp),%rsi\n"
"\tmovq\t0x10(%rsp),%rdx\n"
"\tmovq\t0x08(%rsp),%rcx\n"
"\tmovq\t(%rsp),%rax\n"
"\taddq\t$0x38,%rsp\n"
"\tretq\n"
);
#else
extern void internal_mcount (void);
/* Solaris 2 libraries use _mcount. */
asm(".globl _mcount; _mcount: jmp internal_mcount");
/* This is for compatibility with old versions of gcc which used mcount. */
asm(".globl mcount; mcount: jmp internal_mcount");
#endif
#ifdef __sparc__
static
#endif
void
internal_mcount (
#if defined __sparc__ || defined __x86_64__
char *selfpc,
unsigned short *frompcindex
#else
void
#endif
)
{
#if !defined __sparc__ && !defined __x86_64__
register char *selfpc;
register unsigned short *frompcindex;
#endif
register struct tostruct *top;
register struct tostruct *prevtop;
register long toindex;
static char already_setup;
#if !defined __sparc__ && !defined __x86_64__
/*
* find the return address for mcount,
* and the return address for mcount's caller.
*/
/* selfpc = pc pushed by mcount call.
This identifies the function that was just entered. */
selfpc = (void *) __builtin_return_address (0);
/* frompcindex = pc in preceding frame.
This identifies the caller of the function just entered. */
frompcindex = (void *) __builtin_return_address (1);
#endif
if(!already_setup) {
extern char etext[];
#ifdef __sparc__
extern char _start[];
extern char _init[];
#endif
already_setup = 1;
#if defined __sparc__
monstartup(_start < _init ? _start : _init, etext);
#elif defined __x86_64__
monstartup(0, etext);
#else
monstartup((char*)0x08040000, etext);
#endif
#ifdef USE_ONEXIT
on_exit(_mcleanup, 0);
#else
@ -410,7 +525,8 @@ static void moncontrol(int mode)
/* start */
profil((unsigned short *)(sbuf + sizeof(struct phdr)),
ssiz - sizeof(struct phdr),
(long)s_lowpc, s_scale);
(size_t)s_lowpc, s_scale);
profiling = 0;
} else {
/* stop */

View File

@ -0,0 +1,173 @@
/* crt1.s for Solaris 2, x86
Copyright (C) 1993, 1998, 2008, 2009, 2011 Free Software Foundation, Inc.
Written By Fred Fish, Nov 1992
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This file is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* This file takes control of the process from the kernel, as specified
in section 3 of the System V Application Binary Interface, Intel386
Processor Supplement. It has been constructed from information obtained
from the ABI, information obtained from single stepping existing
Solaris executables through their startup code with gdb, and from
information obtained by single stepping executables on other i386 SVR4
implementations. This file is the first thing linked into any
executable. */
#ifndef GCRT1
.ident "GNU C crt1.s"
#define CLEANUP _cleanup
#else
/* This is a modified crt1.s by J.W.Hawtin <oolon@ankh.org> 15/8/96,
to allow program profiling, by calling monstartup on entry and _mcleanup
on exit. */
.ident "GNU C gcrt1.s"
#define CLEANUP _mcleanup
#endif
.weak _cleanup
.weak _DYNAMIC
.text
/* Start creating the initial frame by pushing a NULL value for the return
address of the initial frame, and mark the end of the stack frame chain
(the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
Initialize the first stack frame pointer in %ebp (the contents of which
are unspecified at process initialization). */
.globl _start
_start:
pushl $0x0
pushl $0x0
movl %esp,%ebp
/* As specified per page 3-32 of the ABI, %edx contains a function
pointer that should be registered with atexit(), for proper
shared object termination. Just push it onto the stack for now
to preserve it. We want to register _cleanup() first. */
pushl %edx
/* Check to see if there is an _cleanup() function linked in, and if
so, register it with atexit() as the last thing to be run by
atexit(). */
movl $CLEANUP,%eax
testl %eax,%eax
je .L1
pushl $CLEANUP
call atexit
addl $0x4,%esp
.L1:
/* Now check to see if we have an _DYNAMIC table, and if so then
we need to register the function pointer previously in %edx, but
now conveniently saved on the stack as the argument to pass to
atexit(). */
movl $_DYNAMIC,%eax
testl %eax,%eax
je .L2
call atexit
.L2:
/* Register _fini() with atexit(). We will take care of calling _init()
directly. */
pushl $_fini
call atexit
#ifdef GCRT1
/* Start profiling. */
pushl %ebp
movl %esp,%ebp
pushl $_etext
pushl $_start
call monstartup
addl $8,%esp
popl %ebp
#endif
/* Compute the address of the environment vector on the stack and load
it into the global variable _environ. Currently argc is at 8 off
the frame pointer. Fetch the argument count into %eax, scale by the
size of each arg (4 bytes) and compute the address of the environment
vector which is 16 bytes (the two zero words we pushed, plus argc,
plus the null word terminating the arg vector) further up the stack,
off the frame pointer (whew!). */
movl 8(%ebp),%eax
leal 16(%ebp,%eax,4),%edx
movl %edx,_environ
/* Push the environment vector pointer, the argument vector pointer,
and the argument count on to the stack to set up the arguments
for _init(), _fpstart(), and main(). Note that the environment
vector pointer and the arg count were previously loaded into
%edx and %eax respectively. The only new value we need to compute
is the argument vector pointer, which is at a fixed address off
the initial frame pointer. */
/* Make sure the stack is properly aligned. */
andl $0xfffffff0,%esp
subl $4,%esp
pushl %edx
leal 12(%ebp),%edx
pushl %edx
pushl %eax
/* Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
main(argc, argv, environ). */
call _init
call __fpstart
call main
/* Pop the argc, argv, and environ arguments off the stack, push the
value returned from main(), and call exit(). */
addl $12,%esp
pushl %eax
call exit
/* An inline equivalent of _exit, as specified in Figure 3-26 of the ABI. */
pushl $0x0
movl $0x1,%eax
lcall $7,$0
/* If all else fails, just try a halt! */
hlt
.type _start,@function
.size _start,.-_start
#ifndef GCRT1
/* A dummy profiling support routine for non-profiling executables,
in case we link in some objects that have been compiled for profiling. */
.weak _mcount
_mcount:
ret
.type _mcount,@function
.size _mcount,.-_mcount
#endif

View File

@ -0,0 +1,40 @@
/* crti.s for Solaris 2, x86.
Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
Written By Fred Fish, Nov 1992
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This file is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* This file just supplies labeled starting points for the .init and .fini
sections. It is linked in before the values-Xx.o files and also before
crtbegin.o. */
.ident "GNU C crti.s"
.section .init
.globl _init
.type _init,@function
_init:
.section .fini
.globl _fini
.type _fini,@function
_fini:

View File

@ -0,0 +1,35 @@
/* crtn.s for Solaris 2, x86.
Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
Written By Fred Fish, Nov 1992
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This file is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* This file just supplies returns for the .init and .fini sections. It is
linked in after all other files. */
.ident "GNU C crtn.o"
.section .init
ret $0x0
.section .fini
ret $0x0

View File

@ -1,5 +1,4 @@
# This is an endfile, Use -minline-all-stringops to ensure
# that __builtin_memset doesn't refer to the lib function memset().
crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c
$(gcc_compile) -msse -minline-all-stringops -c \
$(gcc_srcdir)/config/i386/crtfastmath.c
$(gcc_compile) -msse -minline-all-stringops -c $<

View File

@ -0,0 +1,7 @@
# The pushl in CTOR initialization interferes with frame pointer elimination.
# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
# because then __FRAME_END__ might not be the last thing in .eh_frame
# section. -fno-asynchronous-unwind-tables is off by default for i386
# and is on by default for x86-64. We turn it off for both i386 and
# x86-64.
CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables

View File

@ -1,25 +1,3 @@
# gmon build rule:
$(T)gmon.o: $(gcc_srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CFLAGS) \
-c $(gcc_srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
# Assemble startup files.
# Apparently Sun believes that assembler files don't need comments, because no
# single ASCII character is valid (tried them all). So we manually strip out
# the comments with sed. This bug may only be in the Early Access releases.
$(T)gcrt1.o: $(gcc_srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)gcrt1.o gcrt1.s
$(T)crt1.o: $(gcc_srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-c1.asm >crt1.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)crt1.o crt1.s
$(T)crti.o: $(gcc_srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-ci.asm >crti.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)crti.o crti.s
$(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-cn.asm >crtn.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)crtn.o crtn.s
# We need to use -fPIC when we are using gcc to compile the routines in
# crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when
@ -29,9 +7,7 @@ $(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
# We must also enable optimization to avoid having any code appear after
# the call & alignment statement, but before we switch back to the
# .text section.
CRTSTUFF_T_CFLAGS = -fPIC -O2
TARGET_LIBGCC2_CFLAGS = -fPIC
# Add support for the introduction of 128-bit long double.
SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver

View File

@ -1,2 +0,0 @@
crtfastmath.o: $(gcc_srcdir)/config/sparc/crtfastmath.c
$(gcc_compile) -c $(gcc_srcdir)/config/sparc/crtfastmath.c

View File

@ -0,0 +1,29 @@
# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
FPBIT = fp-bit.c
DPBIT = dp-bit.c
$(gcc_objdir)/dp-bit.c: $(gcc_srcdir)/config/fp-bit.c
cat $< > $@
$(gcc_objdir)/fp-bit.c: $(gcc_srcdir)/config/fp-bit.c
echo '#define FLOAT' > $@
cat $< >> $@

View File

@ -0,0 +1,2 @@
LIB1ASMSRC = sparc/lb1spc.asm
LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3

View File

@ -0,0 +1,6 @@
# We need to use -fPIC when we are using gcc to compile the routines in
# crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when
# we will be doing that, we just always use -fPIC when compiling the
# routines in crtstuff.c.
CRTSTUFF_T_CFLAGS = -fPIC

2
libgcc/config/t-crtfm Normal file
View File

@ -0,0 +1,2 @@
crtfastmath.o: $(gcc_srcdir)/config/$(cpu_type)/crtfastmath.c
$(gcc_compile) -c $<

4
libgcc/config/t-crtin Normal file
View File

@ -0,0 +1,4 @@
crti.o: $(srcdir)/config/$(cpu_type)/sol2-ci.S
$(crt_compile) -c $<
crtn.o: $(srcdir)/config/$(cpu_type)/sol2-cn.S
$(crt_compile) -c $<

4
libgcc/config/t-rtems Normal file
View File

@ -0,0 +1,4 @@
# If we are building next to newlib, this will let us find the RTEMS
# limits.h when building libgcc2. Otherwise, newlib must be installed
# first.
HOST_LIBGCC2_CFLAGS = -I$(srcdir)/../newlib/libc/sys/rtems/include

View File

@ -1,4 +1,5 @@
# Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2011
# Free Software Foundation, Inc.
#
# This file is part of GCC.
#
@ -16,35 +17,35 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# Build a shared libgcc library with the Solaris linker.
# Build a shared libgcc library.
SHLIB_EXT = .so
SHLIB_SOLINK = @shlib_base_name@.so
SHLIB_SONAME = @shlib_base_name@.so.1
SHLIB_SOVERSION = 1
SHLIB_SONAME = @shlib_base_name@.so.$(SHLIB_SOVERSION)
SHLIB_MAP = @shlib_map_file@
SHLIB_OBJS = @shlib_objs@
SHLIB_DIR = @multilib_dir@
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
SHLIB_LC = -lc
SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
-Wl,-M,$(SHLIB_MAP) -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
@multilib_flags@ $(SHLIB_OBJS) -lc && \
SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
$(SHLIB_LDFLAGS) \
-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
$(SHLIB_OBJS) $(SHLIB_LC) && \
rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
$(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
else true; fi && \
mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
$(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
$(SHLIB_MAKE_SOLINK)
SHLIB_INSTALL = \
$$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$(mkinstalldirs) $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SONAME) \
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \
rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
$(LN_S) $(SHLIB_SONAME) \
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
SHLIB_MAPFILES = $$(libgcc_objdir)/libgcc-std.ver
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \
rm -f $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
$(SHLIB_INSTALL_SOLINK)

View File

@ -0,0 +1,4 @@
# Build a shared libgcc library for ELF with symbol versioning.
SHLIB_MKMAP = $(gcc_srcdir)/mkmap-symver.awk
SHLIB_MAPFILES = libgcc-std.ver

View File

@ -0,0 +1,5 @@
# Build a shared libgcc library for ELF with symbol versioning
# with the GNU linker.
SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
-Wl,--version-script=$(SHLIB_MAP)

View File

@ -0,0 +1,5 @@
# Build a shared libgcc library for ELF with symbol versioning
# with the Solaris linker.
SHLIB_LDFLAGS = -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
-Wl,-M,$(SHLIB_MAP)

34
libgcc/config/t-sol2 Normal file
View File

@ -0,0 +1,34 @@
# Copyright (C) 2004, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# Use unwind-dw2-fde-glibc.c. Unless linker support and dl_iterate_phdr
# are present, automatically falls back to unwind-dw2-fde.c.
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
$(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
# gmon build rule:
gmon.o: $(srcdir)/config/gmon-sol2.c
$(gcc_compile) -c $<
# Assemble startup files.
crt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S
$(crt_compile) -c $<
gcrt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S
$(crt_compile) -c -DGCRT1 $<
HOST_LIBGCC2_CFLAGS = -fPIC

19
libgcc/configure vendored
View File

@ -555,6 +555,7 @@ ac_subst_vars='LTLIBOBJS
LIBOBJS
asm_hidden_op
extra_parts
cpu_type
tmake_file
set_use_emutls
set_have_cc_tls
@ -3742,6 +3743,23 @@ $as_echo "$libgcc_cv_fixed_point" >&6; }
fixed_point=$libgcc_cv_fixed_point
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
if test "${acl_cv_prog_gnu_ld+set}" = set; then :
$as_echo_n "(cached) " >&6
else
# I'd rather use --version here, but apparently some GNU ld's only accept -v.
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
acl_cv_prog_gnu_ld=yes
else
acl_cv_prog_gnu_ld=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
$as_echo "$acl_cv_prog_gnu_ld" >&6; }
with_gnu_ld=$acl_cv_prog_gnu_ld
# Check for assembler CFI support.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports CFI directives" >&5
$as_echo_n "checking whether assembler supports CFI directives... " >&6; }
@ -3938,6 +3956,7 @@ tmake_file="${tmake_file_}"
# We need multilib support.
ac_config_files="$ac_config_files Makefile"

View File

@ -4,6 +4,7 @@ sinclude(../config/enable.m4)
sinclude(../config/tls.m4)
sinclude(../config/acx.m4)
sinclude(../config/no-executables.m4)
sinclude(../config/lib-ld.m4)
sinclude(../config/override.m4)
sinclude(../config/dfp.m4)
@ -166,6 +167,8 @@ AC_CACHE_CHECK([whether fixed-point is supported], [libgcc_cv_fixed_point],
fixed_point=$libgcc_cv_fixed_point
AC_SUBST(fixed_point)
AC_LIB_PROG_LD_GNU
# Check for assembler CFI support.
AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi],
[AC_COMPILE_IFELSE(
@ -268,6 +271,7 @@ tmake_file="${tmake_file_}"
AC_SUBST(tmake_file)
# Substitute configuration variables
AC_SUBST(cpu_type)
AC_SUBST(extra_parts)
AC_SUBST(asm_hidden_op)