20000317 sourceware import

This commit is contained in:
Ranjith Kumaran
2000-03-17 22:48:54 +00:00
parent fae4c299f1
commit 03261851a1
420 changed files with 66815 additions and 0 deletions

350
libgloss/rs6000/Makefile.in Normal file
View File

@ -0,0 +1,350 @@
# Copyright (c) 1995, 1996, 1998 Cygnus Support
#
# The authors hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose, provided
# that existing copyright notices are retained in all copies and that this
# notice is included verbatim in any distributions. No written agreement,
# license, or royalty fee is required for any of the authorized uses.
# Modifications to this software may be copyrighted by their authors
# and need not follow the licensing terms described here, provided that
# the new terms are clearly indicated on the first page of each file where
# they apply.
#
#
# This currently works with the PPC simulator.
#
VPATH = @srcdir@ @srcdir@/..
srcdir = @srcdir@
objdir = .
srcroot = $(srcdir)/../..
objroot = $(objdir)/../..
prefix = @prefix@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
target_alias = @target_alias@
bindir = @bindir@
libdir = @libdir@
tooldir = $(exec_prefix)/$(target_alias)
# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
SHELL = /bin/sh
CC = @CC@
AS = @AS@
AR = @AR@
LD = @LD@
RANLIB = @RANLIB@
OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
then echo ${objroot}/../binutils/objdump ; \
else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
then echo ${objroot}/../binutils/objcopy ; \
else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
OBJS = fstat.o getpid.o isatty.o kill.o putnum.o stat.o unlink.o mcount.o
CFLAGS = -g
SCRIPTS = ${SIM_SCRIPTS} ${MVME_SCRIPTS} ${YELLOWKNIFE_SCRIPTS} ${ADS_SCRIPTS}
# Here is all of the simulator stuff
SIM_SCRIPTS =
SIM_LDFLAGS =
SIM_BSP = libsim.a
SIM_CRT0 = sim-crt0.o
SIM_OBJS = sim-print.o sim-inbyte.o sim-sbrk.o sim-abort.o sim-errno.o simulator.o
SIM_TEST = sim-test
SIM_INSTALL = install-sim
# Here is all the mvme stuff
MVME_SCRIPTS =
MVME_LDFLAGS =
MVME_BSP = libmvme.a
MVME_CRT0 = crt0.o
MVME_OBJS = mvme-exit.o mvme-inbyte.o mvme-outbyte.o open.o close.o lseek.o sbrk.o mvme-read.o mvme-print.o
MVME_TEST = mvme-test
MVME_INSTALL = install-mvme
# Here is the Solaris stuff
#SOLARIS_SCRIPTS=
#SOLARIS_LDFLAGS=
#SOLARIS_BSP = libsolaris.a
#SOLARIS_CRT0 =
#SOLARIS_OBJS = sol-cfuncs.o sol-syscall.o
#SOLARIS_TEST = sol-test
#SOLARIS_INSTALL= install-solaris
# Here is the Linux stuff
#LINUX_SCRIPTS =
#LINUX_LDFLAGS =
#LINUX_BSP = liblinux.a
#LINUX_CRT0 =
#LINUX_OBJS = lin-cfuncs.o lin-syscall.o
#LINUX_TEST = linux-test
#LINUX_INSTALL = install-linux
YELLOWKNIFE_SCRIPTS = yellowknife.ld
YELLOWKNIFE_CRT0 = crt0.o
YELLOWKNIFE_BSP = libyk.a
YELLOWKNIFE_OBJS = open.o close.o lseek.o sbrk.o mvme-exit.o mvme-inbyte.o mvme-outbyte.o mvme-read.o mvme-print.o
YELLOWKNIFE_TEST = yellowknife-test
YELLOWKNIFE_INSTALL = install-yellowknife
ADS_SCRIPTS = ads.ld
ADS_CRT0 = crt0.o
ADS_BSP = libads.a
ADS_OBJS = open.o close.o lseek.o sbrk.o ads-exit.o ads-io.o
ADS_TEST = ads-test
ADS_INSTALL = install-ads
MBX_SCRIPTS = mbx.ld
MBX_SPECS = mbx.specs
MBX_CRT0 = crt0.o
MBX_BSP = libmbx.a
MBX_OBJS = open.o close.o lseek.o sbrk.o read.o write.o mbx-exit.o mbx-inbyte.o mbx-outbyte.o mbx-print.o
MBX_TEST = mbx-test
MBX_INSTALL = install-mbx
# Host specific makefile fragment comes in here.
@host_makefile_frag@
#
# build a test program for each target board. Just trying to get
# it to link is a good test, so we ignore all the errors for now.
#
all: \
${SIM_CRT0} ${SIM_BSP} \
${MVME_CRT0} ${MVME_BSP} \
${SOLARIS_CRT0} ${SOLARIS_BSP} \
${LINUX_CRT0} ${LINUX_BSP} \
${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP} \
${ADS_CRT0} ${ADS_BSP} \
${MBX_CRT0} ${MBX_BSP}
#
# here's where we build the board support packages for each target
#
${SIM_BSP}: ${OBJS} ${SIM_OBJS}
${AR} ${ARFLAGS} $@ ${SIM_OBJS} ${OBJS}
${RANLIB} $@
${MVME_BSP}: ${OBJS} ${MVME_OBJS}
${AR} ${ARFLAGS} $@ ${MVME_OBJS} ${OBJS}
${RANLIB} $@
${LINUX_BSP}: ${OBJS} ${LINUX_OBJS}
${AR} ${ARFLAGS} $@ ${LINUX_OBJS} ${OBJS}
${RANLIB} $@
${SOLARIS_BSP}: ${OBJS} ${SOLARIS_OBJS}
${AR} ${ARFLAGS} $@ ${SOLARIS_OBJS}
${RANLIB} $@
${YELLOWKNIFE_BSP}: ${OBJS} ${YELLOWKNIFE_OBJS}
${AR} ${ARFLAGS} $@ ${YELLOWKNIFE_OBJS} ${OBJS}
${RANLIB} $@
${ADS_BSP}: ${OBJS} ${ADS_OBJS}
${AR} ${ARFLAGS} $@ ${ADS_OBJS} ${OBJS}
${RANLIB} $@
${MBX_BSP}: ${OBJS} ${MBX_OBJS}
${AR} ${ARFLAGS} $@ ${MBX_OBJS} ${OBJS}
${RANLIB} $@
#
# here's where we build the test programs for each target
#
.PHONY: test
test: ${SIM_TEST} ${MVME_TEST} ${YELLOWKNIFE_TEST} ${ADS_TEST} ${MBX_TEST}
sim-test: sim-test.x sim-test.dis
sim-test.x: test.o ${SIM_CRT0} ${SIM_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
${SIM_CRT0} test.o \
-o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP}
sim-test.dis: sim-test.x
${OBJDUMP} -d sim-test.x > sim-test.dis
mvme-test: mvme-test.x mvme-test.dis mvme-test.srec
mvme-test.x: test.o ${MVME_CRT0} ${MVME_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
${SIM_CRT0} test.o \
-o mvme-test.x ${LIBS_FOR_TARGET} -lc ${MVME_BSP}
mvme-test.dis: mvme-test.x
${OBJDUMP} -d mvme-test.x > mvme-test.dis
mvme-test.srec: mvme-test.x
${OBJCOPY} -O srec mvme-test.x mvme-test.srec
sol-test: sol-test.x sol-test.dis sol-test.srec
sol-test.x: test.o ${SOLARIS_CRT0} ${SOLARIS_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
${SIM_CRT0} test.o \
-o sol-test.x ${LIBS_FOR_TARGET} -lc ${SOLARIS_BSP}
sol-test.dis: sol-test.x
${OBJDUMP} -d sol-test.x > sol-test.dis
sol-test.srec: sol-test.x
${OBJCOPY} -O srec sol-test.x sol-test.srec
linux-test: linux-test.x linux-test.dis linux-test.srec
linux-test.x: test.o ${LINUX_CRT0} ${LINUX_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
${SIM_CRT0} test.o \
-o linux-test.x ${LIBS_FOR_TARGET} -lc ${LINUX_BSP}
linux-test.dis: linux-test.x
${OBJDUMP} -d linux-test.x > linux-test.dis
linux-test.srec: linux-test.x
${OBJCOPY} -O srec linux-test.x linux-test.srec
yellowknife-test: yellowknife-test.x yellowknife-test.dis yellowknife-test.srec
yellowknife-test.x: test.o ${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
-T${srcdir}/yellowknife.ld ${YELLOWKNIFE_CRT0} test.o \
-o yellowknife-test.x $(LIBS_FOR_TARGET) ${YELLOWKNIFE_BSP} -lc ${YELLOWKNIFE_BSP}
yellowknife-test.dis: yellowknife-test.x
${OBJDUMP} -d yellowknife-test.x > yellowknife-test.dis
yellowknife-test.srec: yellowknife-test.x
${OBJCOPY} -O srec yellowknife-test.x yellowknife-test.srec
ads-test: ads-test.x ads-test.dis ads-test.srec
ads-test.x: test.o ${ADS_CRT0} ${ADS_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
-T${srcdir}/ads.ld ${ADS_CRT0} test.o \
-o ads-test.x $(LIBS_FOR_TARGET) ${ADS_BSP} -lc ${ADS_BSP}
ads-test.dis: ads-test.x
${OBJDUMP} -d ads-test.x > ads-test.dis
ads-test.srec: ads-test.x
${OBJCOPY} -O srec ads-test.x ads-test.srec
mbx-test: mbx-test.x mbx-test.dis mbx-test.srec
mbx-test.x: test.o ${MBX_CRT0} ${MBX_BSP}
${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
-T${srcdir}/mbx.ld ${MBX_CRT0} test.o \
-o mbx-test.x $(LIBS_FOR_TARGET) ${MBX_BSP} -lc ${MBX_BSP}
mbx-test.dis: mbx-test.x
${OBJDUMP} -d mbx-test.x > mbx-test.dis
mbx-test.srec: mbx-test.x
${OBJCOPY} -O srec mbx-test.x mbx-test.srec
#
#
#
crt0.o: crt0.S
simulator.o: simulator.S
sim-crt0.o: sim-crt0.S
mount.o: mount.S
mvme-exit.o: mvme-exit.S
mvme-inbyte.o: mvme-inbyte.S
mvme-outbyte.o: mvme-outbyte.S
ads-exit.o: ads-exit.S
ads-io.o: ads-io.c
mbx-exit.o: mbx-exit.c
mbx-inbyte.o: mbx-inbyte.c
mbx-outbyte.o: mbx-outbyte.c
mbx-print.o: mbx-print.c
sol-cfuncs.o: sol-cfuncs.c
sol-syscall.o: sol-syscall.S
close.o: $(srcdir)/../close.c
fstat.o: $(srcdir)/../fstat.c
getpid.o: $(srcdir)/../getpid.c
isatty.o: $(srcdir)/../isatty.c
kill.o: $(srcdir)/../kill.c
lseek.o: $(srcdir)/../lseek.c
open.o: $(srcdir)/../open.c
putnum.o: $(srcdir)/../putnum.c
sbrk.o: $(srcdir)/../sbrk.c
stat.o: $(srcdir)/../stat.c
unlink.o: $(srcdir)/../unlink.c
# Don't optimize when compiling the test program, makes confusion in
# the debugger.
test.o: $(srcdir)/test.c
$(CC) -g $(CFLAGS_MRELOCATABLE) $(INCLUDES) -c $(CFLAGS) $<
clean mostlyclean:
rm -f a.out core *.i *.o *-test *.srec *.dis *.x
distclean maintainer-clean realclean: clean
rm -f Makefile config.status *~
.PHONY: install info install-info clean-info
install: ${SIM_INSTALL} ${MVME_INSTALL} ${SOLARIS_INSTALL} ${LINUX_INSTALL} ${YELLOWKNIFE_INSTALL} ${ADS_INSTALL} ${MBX_INSTALL}
install-sim:
set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
install-mvme:
set -e; for x in ${MVME_CRT0} ${MVME_BSP} ${MVME_SCRIPTS}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
install-solaris:
set -e; for x in ${SOLARIS_CRT0} ${SOLARIS_BSP} ${SOLARIS_SCRIPTS}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
install-linux:
set -e; for x in ${LINUX_CRT0} ${LINUX_BSP} ${LINUX_SCRIPTS}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
install-yellowknife:
set -e; for x in ${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
set -e; for x in ${YELLOWKNIFE_SCRIPTS}; do ${INSTALL_DATA} $(srcdir)/$$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
install-ads:
set -e; for x in ${ADS_CRT0} ${ADS_BSP}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
set -e; for x in ${ADS_SCRIPTS}; do ${INSTALL_DATA} $(srcdir)/$$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
install-mbx:
set -e; for x in ${MBX_CRT0} ${MBX_BSP}; do ${INSTALL_DATA} $$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
set -e; for x in ${MBX_SCRIPTS} ${MBX_SPECS}; do ${INSTALL_DATA} $(srcdir)/$$x ${tooldir}/lib${MULTISUBDIR}/$$x; done
doc:
info:
install-info:
clean-info:
Makefile: Makefile.in config.status @host_makefile_frag_path@
$(SHELL) config.status
config.status: configure
$(SHELL) config.status --recheck

View File

@ -0,0 +1,28 @@
/*
* ads-exit.S -- _exit stub for targets using the sds monitor
*
* Copyright (c) 1998 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
FUNC_START(_exit)
/*
* Insure that the debugger tells the client that the PC is in _exit,
* not whatever function happens to follow this function.
*/
0: trap
b 0b
FUNC_END(_exit)

55
libgloss/rs6000/ads-io.c Normal file
View File

@ -0,0 +1,55 @@
/*
* ads-io.c -- stub io functions for targets using the sds monitor
*
* Copyright (c) 1998 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
int inbyte(void)
{
return -1;
}
void outbyte(char c)
{
}
/*
* write -- write some bytes to the output device.
*/
int
write (int fd, char *ptr, unsigned len)
{
return len;
}
/*
* print -- do a raw print of a string
*/
void
print (char *ptr)
{
}
/*
* read -- read bytes from the serial port. Ignore fd, since
* we only have stdin.
*/
int read (int fd, char *buf, int nbytes)
{
return -1;
}

154
libgloss/rs6000/ads.ld Normal file
View File

@ -0,0 +1,154 @@
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
"elf32-powerpc")
OUTPUT_ARCH(powerpc)
ENTRY(_start)
/* Do we need any of these for elf?
__DYNAMIC = 0; */
PROVIDE (__stack = 0x2000000);
MEMORY
{
ram (rwx) : ORIGIN = 0x10000, LENGTH = 0x2000000
}
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0x10000 + SIZEOF_HEADERS;
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.rela.text :
{ *(.rela.text) *(.rela.gnu.linkonce.t*) }
.rela.data :
{ *(.rela.data) *(.rela.gnu.linkonce.d*) }
.rela.rodata :
{ *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rela.ctors : { *(.rela.ctors) }
.rela.dtors : { *(.rela.dtors) }
.rela.init : { *(.rela.init) }
.rela.fini : { *(.rela.fini) }
.rela.bss : { *(.rela.bss) }
.rela.plt : { *(.rela.plt) }
.rela.sdata : { *(.rela.sdata2) }
.rela.sbss : { *(.rela.sbss2) }
.rela.sdata2 : { *(.rela.sdata2) }
.rela.sbss2 : { *(.rela.sbss2) }
.plt : { *(.plt) }
.text :
{
*(.text)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
} =0
.init : { *(.init) } =0
.fini : { *(.fini) } =0
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
.rodata1 : { *(.rodata1) }
.gcc_except_table : { *(.gcc_except_table) }
_etext = .;
PROVIDE (etext = .);
.sdata2 : { *(.sdata2) }
.sbss2 : { *(.sbss2) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. It would
be more correct to do this:
. = ALIGN(0x10000) + (ALIGN(8) & (0x10000 - 1));
The current expression does not correctly handle the case of a
text segment ending precisely at the end of a page; it causes the
data segment to skip a page. The above expression does not have
this problem, but it will currently (2/95) cause BFD to allocate
a single segment, combining both text and data, for this case.
This will prevent the text segment from being shared among
multiple executions of the program; I think that is more
important than losing a page of the virtual address space (note
that no actual memory is lost; the page which is skipped can not
be referenced). */
. = ALIGN(8) + 0x10000;
.data :
{
*(.data)
*(.gnu.linkonce.d*)
CONSTRUCTORS
}
.data1 : { *(.data1) }
.got1 : { *(.got1) }
.dynamic : { *(.dynamic) }
/* Put .ctors and .dtors next to the .got2 section, so that the pointers
get relocated with -mrelocatable. Also put in the .fixup pointers.
The current compiler no longer needs this, but keep it around for 2.7.2 */
PROVIDE (_GOT2_START_ = .);
.got2 : { *(.got2) }
PROVIDE (__CTOR_LIST__ = .);
.ctors : { *(.ctors) }
PROVIDE (__CTOR_END__ = .);
PROVIDE (__DTOR_LIST__ = .);
.dtors : { *(.dtors) }
PROVIDE (__DTOR_END__ = .);
PROVIDE (_FIXUP_START_ = .);
.fixup : { *(.fixup) }
PROVIDE (_FIXUP_END_ = .);
PROVIDE (_GOT2_END_ = .);
PROVIDE (_GOT_START_ = .);
.got : { *(.got) }
.got.plt : { *(.got.plt) }
PROVIDE (_GOT_END_ = .);
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata : { *(.sdata) }
_edata = .;
PROVIDE (edata = .);
.sbss :
{
PROVIDE (__sbss_start = .);
*(.sbss)
*(.scommon)
PROVIDE (__sbss_end = .);
}
.bss :
{
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(COMMON)
}
_end = . ;
PROVIDE (end = .);
/* These are needed for ELF backends which have not yet been
converted to the new style linker. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}

1191
libgloss/rs6000/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.5)dnl
AC_INIT(sim-crt0.S)
if test "${enable_shared}" = "yes" ; then
echo "Shared libraries not supported for cross compiling, ignored"
fi
if test "$srcdir" = "." ; then
if test "${with_target_subdir}" != "." ; then
libgloss_topdir="${srcdir}/${with_multisrctop}../../.."
else
libgloss_topdir="${srcdir}/${with_multisrctop}../.."
fi
else
libgloss_topdir="${srcdir}/../.."
fi
AC_CONFIG_AUX_DIR($libgloss_topdir)
AC_CANONICAL_SYSTEM
AC_ARG_PROGRAM
AC_PROG_INSTALL
# FIXME: We temporarily define our own version of AC_PROG_CC. This is
# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
# are probably using a cross compiler, which will not be able to fully
# link an executable. This should really be fixed in autoconf
# itself.
AC_DEFUN(LIB_AC_PROG_CC,
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
AC_CHECK_PROG(CC, gcc, gcc)
if test -z "$CC"; then
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
fi
AC_PROG_CC_GNU
if test $ac_cv_prog_gcc = yes; then
GCC=yes
dnl Check whether -g works, even if CFLAGS is set, in case the package
dnl plays around with CFLAGS (such as to build both debugging and
dnl normal versions of a library), tasteless as that idea is.
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
AC_PROG_CC_G
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
])
LIB_AC_PROG_CC
AS=${AS-as}
AC_SUBST(AS)
AR=${AR-ar}
AC_SUBST(AR)
LD=${LD-ld}
AC_SUBST(LD)
AC_PROG_RANLIB
host_makefile_frag=${srcdir}/../config/ppc.mh
dnl We have to assign the same value to other variables because autoconf
dnl doesn't provide a mechanism to substitute a replacement keyword with
dnl arbitrary data or pathnames.
dnl
host_makefile_frag_path=$host_makefile_frag
AC_SUBST(host_makefile_frag_path)
AC_SUBST_FILE(host_makefile_frag)
AC_OUTPUT(Makefile,
. ${libgloss_topdir}/config-ml.in,
srcdir=${srcdir}
target=${target}
ac_configure_args="${ac_configure_args} --enable-multilib"
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
libgloss_topdir=${libgloss_topdir}
)

128
libgloss/rs6000/crt0.S Normal file
View File

@ -0,0 +1,128 @@
/*
* crt0.S -- startup file for PowerPC systems.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "crt0.S"
.section ".got2","aw"
.align 2
.LCTOC1 = .+32768
.extern FUNC_NAME(atexit)
.globl FUNC_NAME(__atexit)
.section ".sdata","aw"
.align 2
FUNC_NAME(__atexit): /* tell C's eabi-ctor's we have an atexit function */
.long FUNC_NAME(atexit)@fixup /* and that it is to register __do_global_dtors */
.section ".fixup","aw"
.align 2
.long FUNC_NAME(__atexit)
.section ".got2","aw"
.Ltable = .-.LCTOC1
.long .LCTOC1 /* address we think .LCTOC1 is loaded at */
.Lsbss_start = .-.LCTOC1
.long __sbss_start
.Lsbss_end = .-.LCTOC1
.long __sbss_end
.Lbss_start = .-.LCTOC1
.long __bss_start
.Lend = .-.LCTOC1
.long _end
.Lstack = .-.LCTOC1 /* stack address if set by user */
.long __stack
.text
.Lptr:
.long .LCTOC1-.Laddr
.globl _start
.type _start,@function
_start:
bl .Laddr /* get current address */
.Laddr:
mflr r4 /* real address of .Laddr */
lwz r5,(.Lptr-.Laddr)(r4) /* linker generated address of .LCTOC1 */
add r5,r5,r4 /* correct to real pointer */
lwz r4,.Ltable(r5) /* get linker's idea of where .Laddr is */
subf r4,r4,r5 /* calculate difference between where linked and current */
/* clear bss and sbss */
lwz r6,.Lbss_start(r5) /* calculate beginning of the BSS */
lwz r7,.Lend(r5) /* calculate end of the BSS */
add r6,r6,r4 /* adjust pointers */
add r7,r7,r4
cmplw 1,r6,r7
bc 4,4,.Ldone1
subf r8,r6,r7 /* number of bytes to zero */
srwi r9,r8,2 /* number of words to zero */
mtctr r9
li r0,0 /* zero to clear memory */
addi r6,r6,-4 /* adjust so we can use stwu */
.Lloop:
stwu r0,4(r6) /* zero bss */
bdnz .Lloop
.Ldone1:
lwz r6,.Lsbss_start(r5) /* calculate beginning of the SBSS */
lwz r7,.Lsbss_end(r5) /* calculate end of the SBSS */
add r6,r6,r4 /* adjust pointers */
add r7,r7,r4
cmplw 1,r6,r7
bc 4,4,.Ldone
subf r8,r6,r7 /* number of bytes to zero */
srwi r9,r8,2 /* number of words to zero */
mtctr r9
li r0,0 /* zero to clear memory */
addi r6,r6,-4 /* adjust so we can use stwu */
.Lloop2:
stwu r0,4(r6) /* zero bss */
bdnz .Lloop2
.Ldone:
lwz r0,.Lstack(r5) /* stack address or 0 */
cmplwi 1,r0,0 /* equal to 0? */
bc 12,6,.Lnostack /* use default stack if == 0 */
mr sp,r0 /* use user defined stack */
.Lnostack:
/* set up initial stack frame */
addi sp,sp,-4 /* make sure we don't overwrite debug mem */
lis r0,0
stw r0,0(sp) /* clear back chain */
stwu sp,-64(sp) /* push another stack frame */
/* Let her rip */
bl FUNC_NAME(main)
/* return value from main is argument to exit */
bl FUNC_NAME(exit)
trap
.Lstart:
.size _start,.Lstart-_start

View File

@ -0,0 +1,27 @@
/*
* mbx-exit.c -- exit function for targets using the eppcbug monitor
*
* Copyright (c) 1998 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
void _exit(int stat)
{
asm volatile ("li 10,0xf00; sc\n");
while (1) ;
return;
}

View File

@ -0,0 +1,60 @@
/*
* mbx-inbyte.c -- inbyte function for targets using the eppcbug monitor
*
* Copyright (c) 1998 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
int inbyte(void)
{
struct {
unsigned clun;
unsigned dlun;
char *data;
unsigned len;
unsigned rsrvd;
char buf[4];
} ipb, *inpb;
struct {
int status;
int cnt;
} opb, *outpb;
inpb = &ipb;
outpb = &opb;
do {
inpb->clun = 0;
inpb->dlun = 0;
inpb->data = ipb.buf;
inpb->len = 1;
inpb->rsrvd = 0;
asm volatile (
"mr 3,%0\n"
"mr 4,%1\n"
"li 10,0x200\n"
"sc"
: /* no outputs */
: "r" (inpb), "r" (outpb)
: "3", "4", "10"
);
} while (outpb->status == 0 && outpb->cnt == 0);
if (outpb->status == 0)
return ipb.buf[0] & 0xff;
return -1;
}

View File

@ -0,0 +1,71 @@
/*
* mbx-outbyte.c -- outbyte function for targets using the eppcbug monitor
*
* Copyright (c) 1998 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
static int sendbyte(char c)
{
struct {
unsigned clun;
unsigned dlun;
char *data;
unsigned len;
unsigned rsrvd;
char buf[4];
} ipb, *inpb;
struct {
int status;
int cnt;
} opb, *outpb;
inpb = &ipb;
outpb = &opb;
inpb->clun = 0;
inpb->dlun = 0;
inpb->data = ipb.buf;
inpb->len = 1;
inpb->rsrvd = 0;
inpb->buf[0] = c;
asm volatile (
"mr 3,%0\n"
"mr 4,%1\n"
"li 10,0x201\n"
"sc"
: /* no outputs */
: "r" (inpb), "r" (outpb)
: "3", "4", "10"
);
return (outpb->status == 0 && outpb->cnt == 1);
}
#define GDB_QUOTE_OUTBYTES 1
void outbyte(char c)
{
#ifdef GDB_QUOTE_OUTBYTES
/*
* GDB monitor.c will echo characters quoted with ^O
*/
while (!sendbyte('\017')) ;
#endif
while (!sendbyte(c)) ;
}

View File

@ -0,0 +1,31 @@
/* mbx-print.c -- print a string on the output device.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
/*
* print -- do a raw print of a string
*/
void
print (ptr)
char *ptr;
{
int len = 0;
char *p = ptr;
while (*p != '\0')
p++;
write (1, ptr, p-ptr);
}

134
libgloss/rs6000/mbx.ld Normal file
View File

@ -0,0 +1,134 @@
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
"elf32-powerpc")
OUTPUT_ARCH(powerpc)
ENTRY(_start)
/* Do we need any of these for elf?
__DYNAMIC = 0; */
PROVIDE (__stack = 0x0);
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0x2000 + SIZEOF_HEADERS;
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.rela.text :
{ *(.rela.text) *(.rela.gnu.linkonce.t*) }
.rela.data :
{ *(.rela.data) *(.rela.gnu.linkonce.d*) }
.rela.rodata :
{ *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rela.ctors : { *(.rela.ctors) }
.rela.dtors : { *(.rela.dtors) }
.rela.init : { *(.rela.init) }
.rela.fini : { *(.rela.fini) }
.rela.bss : { *(.rela.bss) }
.rela.plt : { *(.rela.plt) }
.rela.sdata : { *(.rela.sdata2) }
.rela.sbss : { *(.rela.sbss2) }
.rela.sdata2 : { *(.rela.sdata2) }
.rela.sbss2 : { *(.rela.sbss2) }
.plt : { *(.plt) }
.text :
{
*(.text)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
} =0
.init : { *(.init) } =0
.fini : { *(.fini) } =0
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
.rodata1 : { *(.rodata1) }
_etext = .;
PROVIDE (etext = .);
.sdata2 : { *(.sdata2) }
.sbss2 : { *(.sbss2) }
. = ALIGN(8);
.data :
{
*(.data)
*(.gnu.linkonce.d*)
CONSTRUCTORS
}
.data1 : { *(.data1) }
.got1 : { *(.got1) }
.dynamic : { *(.dynamic) }
/* Put .ctors and .dtors next to the .got2 section, so that the pointers
get relocated with -mrelocatable. Also put in the .fixup pointers.
The current compiler no longer needs this, but keep it around for 2.7.2 */
PROVIDE (_GOT2_START_ = .);
.got2 : { *(.got2) }
PROVIDE (__CTOR_LIST__ = .);
.ctors : { *(.ctors) }
PROVIDE (__CTOR_END__ = .);
PROVIDE (__DTOR_LIST__ = .);
.dtors : { *(.dtors) }
PROVIDE (__DTOR_END__ = .);
PROVIDE (_FIXUP_START_ = .);
.fixup : { *(.fixup) }
PROVIDE (_FIXUP_END_ = .);
PROVIDE (_GOT2_END_ = .);
PROVIDE (_GOT_START_ = .);
.got : { *(.got) }
.got.plt : { *(.got.plt) }
PROVIDE (_GOT_END_ = .);
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata : { *(.sdata) }
_edata = .;
PROVIDE (edata = .);
.sbss :
{
PROVIDE (__sbss_start = .);
*(.sbss)
*(.scommon)
PROVIDE (__sbss_end = .);
}
.bss :
{
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(COMMON)
}
_end = . ;
PROVIDE (end = .);
/* These are needed for ELF backends which have not yet been
converted to the new style linker. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}

12
libgloss/rs6000/mbx.specs Normal file
View File

@ -0,0 +1,12 @@
*lib_default:
--start-group -lmbx -lc --end-group
*startfile_default:
ecrti.o%s crt0.o%s
*endfile_default:
ecrtn.o%s
*link_start_default:
-T mbx.ld%s

27
libgloss/rs6000/mcount.S Normal file
View File

@ -0,0 +1,27 @@
/*
* mcount.S -- dummy module for profiling.
*
* Copyright (c) 1997 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "mcount-dummy.S"
.text
FUNC_START(_mcount)
mflr r11
lwz r0,4(sp)
mtctr r11
mtlr r0
bctr
FUNC_END(_mcount)

View File

@ -0,0 +1,23 @@
/*
* sim-errno.c -- return address of errno for current thread.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
int errno;
int *
__errno ()
{
return &errno;
}

View File

@ -0,0 +1,32 @@
/*
* mvme-exit.S -- _exit function for targets using the ppcbug monitor
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "mvme-exit.S"
.text
FUNC_START(_exit)
li r10,0x63
sc
/*
* Insure that the debugger tells the client that the PC is in _exit,
* not whatever function happens to follow this function.
*/
0: trap
b 0b /* we never should return, but... */
FUNC_END(_exit)

View File

@ -0,0 +1,31 @@
/*
* mvme-inbyte.S -- inbyte function for targets using the ppcbug monitor
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "mvme-inbyte.S"
.text
FUNC_START(inbyte)
li r10,0x0
sc
blr
FUNC_END(inbyte)
FUNC_START(__inln)
li r10,0x2
sc
blr
FUNC_END(__inln)

View File

@ -0,0 +1,43 @@
/*
* mvme-outbyte.S -- outbyte function for targets using the ppcbug monitor
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "mvme-outbyte.S"
.text
FUNC_START(outbyte)
li r10,0x20
sc
blr
FUNC_END(outbyte)
FUNC_START(__outstr)
li r10,0x21
sc
blr
FUNC_END(__outstr)
FUNC_START(__outln)
li r10,0x22
sc
blr
FUNC_END(__outln)
FUNC_START(__pcrlf)
li r10,0x26
sc
blr
FUNC_END(__pcrlf)

View File

@ -0,0 +1,76 @@
/* mvme-print.c -- print a string on the output device.
*
* Copyright (c) 1996 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
/*
* write -- write some bytes to the output device.
*/
int
write (fd, ptr, len)
int fd;
char *ptr;
unsigned len;
{
char *done = ptr + len;
char *q;
unsigned len2;
while (ptr < done)
{
if (*ptr == '\n')
{
__pcrlf ();
ptr++;
}
else
{
q = ptr;
while ( (q < done) && ((ptr - q) < 254))
{
if (*q == '\n')
{
__outln (ptr, q);
ptr = ++q;
}
else
q++;
}
if (ptr != q)
{
__outstr (ptr, q);
ptr = q;
}
}
}
return len;
}
/*
* print -- do a raw print of a string
*/
void
print (ptr)
char *ptr;
{
int len = 0;
char *p = ptr;
while (*p != '\0')
p++;
write (1, ptr, p-ptr);
}

View File

@ -0,0 +1,49 @@
/* mvme-read.c -- read bytes from a input device.
*
* Copyright (c) 1996 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
extern int inbyte ();
extern char * __inln ();
/*
* read -- read bytes from the serial port. Ignore fd, since
* we only have stdin.
*/
int
read (fd, buf, nbytes)
int fd;
char *buf;
int nbytes;
{
if (nbytes >= 256)
{
char *read_end = __inln (buf);
*read_end = '\n';
return read_end - buf + 1;
}
else
{
int i, c;
for (i = 0; i < nbytes; i++) {
*buf++ = c = inbyte ();
if (c == '\n' || c == '\r') {
buf[-1] = '\n'; /* convert \r to \n */
buf[0] = '\0';
break;
}
}
return i;
}
}

View File

@ -0,0 +1,21 @@
/*
* sim-abort.c -- PowerPC abort support when running under the simulator.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
void abort(void)
{
write (2, "Abort called.\n", sizeof("Abort called.\n")-1);
exit (1);
}

View File

@ -0,0 +1,45 @@
/*
* crt0.S -- startup file for PowerPC systems.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "sim-crt0.S"
.text
.globl _start
.type _start,@function
_start:
lis r0,0
stw r0,0(sp) /* clear back chain */
stwu sp,-64(sp) /* push another stack frame */
/* Let her rip */
bl FUNC_NAME(main)
/* return value from main is argument to exit */
bl FUNC_NAME(exit)
.Lstart:
.size _start,.Lstart-_start
.extern FUNC_NAME(atexit)
.globl FUNC_NAME(__atexit)
.section ".sdata","aw"
.align 2
FUNC_NAME(__atexit): /* tell C's eabi-ctor's we have an atexit function */
.long FUNC_NAME(atexit)@fixup /* and that it is to register __do_global_dtors */
.section ".fixup","aw"
.align 2
.long FUNC_NAME(__atexit)

View File

@ -0,0 +1,33 @@
/*
* sim-errno.c -- return address of errno for current thread.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
int errno;
int *
__errno ()
{
return &errno;
}
/* syscall handler branches here in case of error. */
int
_cerror (e)
int e;
{
errno = e;
return -1;
}

View File

@ -0,0 +1,26 @@
/*
* sim-inbyte.c -- read a character from standard input.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
int
inbyte ()
{
char c;
if (read (0, &c, 1) <= 0)
return -1;
return c;
}

View File

@ -0,0 +1,43 @@
/* sim-print.c -- print a string on the output device.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
/*
* print -- do a raw print of a string
*/
void
print (ptr)
char *ptr;
{
int len = 0;
char *p = ptr;
while (*p != '\0')
p++;
write (1, ptr, p-ptr);
}
/*
* outbyte -- write a single character.
*/
void
outbyte (c_int)
int c_int;
{
char c = c_int;
write (1, &c, 1);
}

View File

@ -0,0 +1,30 @@
/*
* sim-sbrk.c -- PowerPC sbrk support when running under the simulator.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
extern char _end[];
static char *curbrk = _end;
char *
sbrk (incr)
int incr;
{
char *oldbrk = curbrk;
curbrk += incr;
if (brk (curbrk) == -1)
return (char *) -1;
return oldbrk;
}

View File

@ -0,0 +1,79 @@
/*
* simulator.S -- PowerPC simulator system calls.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
FUNC_START(_exit)
li r0, 1
sc
/*
* Insure that the debugger tells the client that the PC is in _exit,
* not whatever function happens to follow this function.
*/
0: trap
b 0b /* we never should return, but... */
FUNC_END(_exit)
FUNC_START(read)
li r0,3
sc
bns+ 0f
b FUNC_NAME(_cerror)
0: blr
FUNC_END(read)
FUNC_START(write)
li r0,4
sc
bns+ 0f
b FUNC_NAME(_cerror)
0: blr
FUNC_END(write)
FUNC_START(open)
li r0,5
sc
bns+ 0f
b FUNC_NAME(_cerror)
0: blr
FUNC_END(open)
FUNC_START(close)
li r0,6
sc
bns+ 0f
b FUNC_NAME(_cerror)
0: blr
FUNC_END(close)
FUNC_START(brk)
li r0,17
sc
bns+ 0f
b FUNC_NAME(_cerror)
0: blr
FUNC_END(brk)
FUNC_START(lseek)
li r0,199
sc
bns+ 0f
b FUNC_NAME(_cerror)
0: blr
FUNC_END(lseek)

View File

@ -0,0 +1,277 @@
/*
* solaris-cfuncs.S -- C functions for Solaris.
*
* Copyright (c) 1996 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/unistd.h>
#ifndef __STDC__
#define const
#endif
/* Solaris stat packet */
typedef long solaris_off_t;
typedef long solaris_uid_t;
typedef long solaris_gid_t;
typedef long unsigned solaris_mode_t;
typedef long unsigned solaris_nlink_t;
typedef long unsigned solaris_dev_t;
typedef long unsigned solaris_ino_t;
typedef long solaris_time_t;
typedef struct {
solaris_time_t tv_sec;
long tv_nsec;
} solaris_timestruc_t;
#define _ST_FSTYPSZ 16
struct solaris_stat {
solaris_dev_t st_dev;
long st_pad1[3];
solaris_ino_t st_ino;
solaris_mode_t st_mode;
solaris_nlink_t st_nlink;
solaris_uid_t st_uid;
solaris_gid_t st_gid;
solaris_dev_t st_rdev;
long st_pad2[2];
solaris_off_t st_size;
long st_pad3;
solaris_timestruc_t st_atim;
solaris_timestruc_t st_mtim;
solaris_timestruc_t st_ctim;
long st_blksize;
long st_blocks;
char st_fstype[_ST_FSTYPSZ];
long st_pad4[8];
};
/* Solaris termios packet */
#define SOLARIS_NCCS 19
typedef unsigned long solaris_tcflag_t;
typedef unsigned char solaris_cc_t;
typedef unsigned long solaris_speed_t;
struct solaris_termios {
solaris_tcflag_t c_iflag;
solaris_tcflag_t c_oflag;
solaris_tcflag_t c_cflag;
solaris_tcflag_t c_lflag;
solaris_cc_t c_cc[SOLARIS_NCCS];
};
#define SOLARIS_TIOC ('T'<<8)
#define SOLARIS_TCGETS (SOLARIS_TIOC|13)
/* Debug support */
#ifdef DEBUG
#define TRACE(msg) trace (msg)
#define TRACE1(msg,num) trace1 (msg,(unsigned)num)
static void
trace (msg)
const char *msg;
{
const char *p;
for (p = msg; *p != '\0'; p++)
;
(void) write (2, msg, p-msg);
}
static void
trace1 (msg, num)
const char *msg;
unsigned int num;
{
char buffer[16];
char *p = &buffer[ sizeof(buffer) ];
trace (msg);
*--p = '\0';
*--p = '\n';
do {
*--p = '0' + (num % 10);
num /= 10;
} while (num != 0);
trace (p);
}
#else
#define TRACE(msg)
#define TRACE1(msg,num)
#endif
/* Errno support */
int errno;
int *
__errno ()
{
return &errno;
}
/* syscall handler branches here to set errno. Error codes
that are common between newlib and Solaris are the same. */
int
_cerror (e)
int e;
{
TRACE1("got to _cerror ",e);
errno = e;
return -1;
}
/* Sbrk support */
extern char _end[];
static char *curbrk = _end;
void *
sbrk (incr)
size_t incr;
{
char *oldbrk = curbrk;
TRACE("got to sbrk\n");
curbrk += incr;
if (brk (curbrk) == -1)
return (char *) -1;
return (void *)oldbrk;
}
/* Isatty support */
int
isatty (fd)
int fd;
{
struct solaris_termios t;
int ret;
ret = (ioctl (fd, SOLARIS_TCGETS, &t) == 0);
TRACE1("got to isatty, returned ", ret);
return ret;
}
/* Convert Solaris {,f}stat to newlib.
Fortunately, the st_mode bits are the same. */
static void
solaris_to_newlib_stat (solaris, newlib)
struct solaris_stat *solaris;
struct stat *newlib;
{
static struct stat zero_stat;
*newlib = zero_stat;
newlib->st_dev = solaris->st_dev;
newlib->st_ino = solaris->st_ino;
newlib->st_mode = solaris->st_mode;
newlib->st_nlink = solaris->st_nlink;
newlib->st_uid = solaris->st_uid;
newlib->st_gid = solaris->st_gid;
newlib->st_rdev = solaris->st_rdev;
newlib->st_size = solaris->st_size;
newlib->st_blksize = solaris->st_blksize;
newlib->st_blocks = solaris->st_blocks;
newlib->st_atime = solaris->st_atim.tv_sec;
newlib->st_mtime = solaris->st_mtim.tv_sec;
newlib->st_ctime = solaris->st_ctim.tv_sec;
}
int
stat (file, newlib_stat)
const char *file;
struct stat *newlib_stat;
{
int ret;
struct solaris_stat st;
TRACE("got to stat\n");
ret = _stat (file, &st);
if (ret >= 0)
solaris_to_newlib_stat (&st, newlib_stat);
return ret;
}
int
lstat (file, newlib_stat)
const char *file;
struct stat *newlib_stat;
{
int ret;
struct solaris_stat st;
TRACE("got to lstat\n");
ret = _lstat (file, &st);
if (ret >= 0)
solaris_to_newlib_stat (&st, newlib_stat);
return ret;
}
int
fstat (fd, newlib_stat)
int fd;
struct stat *newlib_stat;
{
int ret;
struct solaris_stat st;
TRACE("got to fstat\n");
ret = _fstat (fd, &st);
if (ret >= 0)
solaris_to_newlib_stat (&st, newlib_stat);
return ret;
}
/* Nops */
int
getrusage ()
{
_cerror (EINVAL);
return -1;
}
char *
getcwd(buf, size)
char *buf;
size_t size;
{
if (!buf || size < 2)
return ".";
buf[0] = '.';
buf[1] = '\0';
return buf;
}

View File

@ -0,0 +1,280 @@
/*
* solaris-syscall.S -- System call stubs for Solaris.
*
* Copyright (c) 1996 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "ppc-asm.h"
.file "solaris-syscall.S"
#define SYS_syscall 0
#define SYS_exit 1
#define SYS_fork 2
#define SYS_read 3
#define SYS_write 4
#define SYS_open 5
#define SYS_close 6
#define SYS_wait 7
#define SYS_creat 8
#define SYS_link 9
#define SYS_unlink 10
#define SYS_exec 11
#define SYS_chdir 12
#define SYS_time 13
#define SYS_mknod 14
#define SYS_chmod 15
#define SYS_chown 16
#define SYS_brk 17
#define SYS_stat 18
#define SYS_lseek 19
#define SYS_getpid 20
#define SYS_mount 21
#define SYS_umount 22
#define SYS_setuid 23
#define SYS_getuid 24
#define SYS_stime 25
#define SYS_ptrace 26
#define SYS_alarm 27
#define SYS_fstat 28
#define SYS_pause 29
#define SYS_utime 30
#define SYS_stty 31
#define SYS_gtty 32
#define SYS_access 33
#define SYS_nice 34
#define SYS_statfs 35
#define SYS_sync 36
#define SYS_kill 37
#define SYS_fstatfs 38
#define SYS_pgrpsys 39
#define SYS_xenix 40
#define SYS_dup 41
#define SYS_pipe 42
#define SYS_times 43
#define SYS_profil 44
#define SYS_plock 45
#define SYS_setgid 46
#define SYS_getgid 47
#define SYS_signal 48
#define SYS_msgsys 49
#define SYS_syssun 50
#define SYS_sysi86 50
#define SYS_sysppc 50
#define SYS_acct 51
#define SYS_shmsys 52
#define SYS_semsys 53
#define SYS_ioctl 54
#define SYS_uadmin 55
#define SYS_utssys 57
#define SYS_fdsync 58
#define SYS_execve 59
#define SYS_umask 60
#define SYS_chroot 61
#define SYS_fcntl 62
#define SYS_ulimit 63
#define SYS_rmdir 79
#define SYS_mkdir 80
#define SYS_getdents 81
#define SYS_sysfs 84
#define SYS_getmsg 85
#define SYS_putmsg 86
#define SYS_poll 87
#define SYS_lstat 88
#define SYS_symlink 89
#define SYS_readlink 90
#define SYS_setgroups 91
#define SYS_getgroups 92
#define SYS_fchmod 93
#define SYS_fchown 94
#define SYS_sigprocmask 95
#define SYS_sigsuspend 96
#define SYS_sigaltstack 97
#define SYS_sigaction 98
#define SYS_sigpending 99
#define SYS_context 100
#define SYS_evsys 101
#define SYS_evtrapret 102
#define SYS_statvfs 103
#define SYS_fstatvfs 104
#define SYS_nfssys 106
#define SYS_waitsys 107
#define SYS_sigsendsys 108
#define SYS_hrtsys 109
#define SYS_acancel 110
#define SYS_async 111
#define SYS_priocntlsys 112
#define SYS_pathconf 113
#define SYS_mincore 114
#define SYS_mmap 115
#define SYS_mprotect 116
#define SYS_munmap 117
#define SYS_fpathconf 118
#define SYS_vfork 119
#define SYS_fchdir 120
#define SYS_readv 121
#define SYS_writev 122
#define SYS_xstat 123
#define SYS_lxstat 124
#define SYS_fxstat 125
#define SYS_xmknod 126
#define SYS_clocal 127
#define SYS_setrlimit 128
#define SYS_getrlimit 129
#define SYS_lchown 130
#define SYS_memcntl 131
#define SYS_getpmsg 132
#define SYS_putpmsg 133
#define SYS_rename 134
#define SYS_uname 135
#define SYS_setegid 136
#define SYS_sysconfig 137
#define SYS_adjtime 138
#define SYS_systeminfo 139
#define SYS_seteuid 141
#define SYS_vtrace 142
#define SYS_fork1 143
#define SYS_sigtimedwait 144
#define SYS_lwp_info 145
#define SYS_yield 146
#define SYS_lwp_sema_wait 147
#define SYS_lwp_sema_post 148
#define SYS_modctl 152
#define SYS_fchroot 153
#define SYS_utimes 154
#define SYS_vhangup 155
#define SYS_gettimeofday 156
#define SYS_getitimer 157
#define SYS_setitimer 158
#define SYS_lwp_create 159
#define SYS_lwp_exit 160
#define SYS_lwp_suspend 161
#define SYS_lwp_continue 162
#define SYS_lwp_kill 163
#define SYS_lwp_self 164
#define SYS_lwp_setprivate 165
#define SYS_lwp_getprivate 166
#define SYS_lwp_wait 167
#define SYS_lwp_mutex_unlock 168
#define SYS_lwp_mutex_lock 169
#define SYS_lwp_cond_wait 170
#define SYS_lwp_cond_signal 171
#define SYS_lwp_cond_broadcast 172
#define SYS_pread 173
#define SYS_pwrite 174
#define SYS_llseek 175
#define SYS_inst_sync 176
#define SYS_kaio 178
#define SYS_tsolsys 184
#define SYS_acl 185
#define SYS_auditsys 186
#define SYS_processor_bind 187
#define SYS_processor_info 188
#define SYS_p_online 189
#define SYS_sigqueue 190
#define SYS_clock_gettime 191
#define SYS_clock_settime 192
#define SYS_clock_getres 193
#define SYS_timer_create 194
#define SYS_timer_delete 195
#define SYS_timer_settime 196
#define SYS_timer_gettime 197
#define SYS_timer_getoverrun 198
#define SYS_nanosleep 199
#define SYS_facl 200
#define SYS_door 201
#define SYS_setreuid 202
#define SYS_setregid 203
#define SYS_install_utrap 204
#define SYS_signotifywait 210
#define SYS_lwp_sigredirect 211
#define SYS_lwp_alarm 212
.text
FUNC_START(_exit)
li r0,SYS_exit
sc
/*
* Insure that the debugger tells the client that the PC is in _exit,
* not whatever function happens to follow this function.
*/
0: trap
b 0b /* we never should return, but... */
FUNC_END(_exit)
#define SYSCALL(syscall,name) \
FUNC_START(name); \
li r0,syscall; \
sc; \
bns+ 0f; \
b FUNC_NAME(_cerror); \
0: blr; \
FUNC_END(name)
SYSCALL(SYS_access,access)
SYSCALL(SYS_alarm,alarm)
SYSCALL(SYS_brk,brk)
SYSCALL(SYS_chdir,chdir)
SYSCALL(SYS_chmod,chomd)
SYSCALL(SYS_chown,chown)
SYSCALL(SYS_close,close)
SYSCALL(SYS_creat,creat)
SYSCALL(SYS_dup,dup)
SYSCALL(SYS_exec,exec)
SYSCALL(SYS_fork,fork)
SYSCALL(SYS_fstat,_fstat)
SYSCALL(SYS_getpid,getpid)
SYSCALL(SYS_ioctl,ioctl)
SYSCALL(SYS_kill,kill)
SYSCALL(SYS_link,link)
SYSCALL(SYS_lseek,lseek)
SYSCALL(SYS_nice,nice)
SYSCALL(SYS_open,open)
SYSCALL(SYS_pause,pause)
SYSCALL(SYS_pipe,pipe)
SYSCALL(SYS_ptrace,ptrace)
SYSCALL(SYS_read,read)
SYSCALL(SYS_signal,signal)
SYSCALL(SYS_stat,_stat)
SYSCALL(SYS_sync,sync)
SYSCALL(SYS_sysppc,sysppc)
SYSCALL(SYS_time,time)
SYSCALL(SYS_times,times)
SYSCALL(SYS_unlink,unlink)
SYSCALL(SYS_wait,wait)
SYSCALL(SYS_write,write)
SYSCALL(SYS_umask,umask)
SYSCALL(SYS_execve,execve)
SYSCALL(SYS_fcntl,fcntl)
SYSCALL(SYS_ulimit,ulimit)
SYSCALL(SYS_mkdir,mkdir)
SYSCALL(SYS_rmdir,rmdir)
SYSCALL(SYS_getdents,getdents)
SYSCALL(SYS_lstat,_lstat)
SYSCALL(SYS_symlink,symlink)
SYSCALL(SYS_readlink,readlink)
SYSCALL(SYS_sigprocmask,sigprocmask)
SYSCALL(SYS_sigsuspend,sigsuspend)
SYSCALL(SYS_sigaction,sigaction)
SYSCALL(SYS_mmap,mmap)
SYSCALL(SYS_mprotect,mprotect)
SYSCALL(SYS_munmap,munmap)
SYSCALL(SYS_fpathconf,fpathconf)
SYSCALL(SYS_vfork,vfork)
SYSCALL(SYS_setrlimit,setrlimit)
SYSCALL(SYS_getrlimit,getrlimit)
SYSCALL(SYS_rename,rename)
SYSCALL(SYS_utimes,utimes)
SYSCALL(SYS_gettimeofday,gettimeofday)

23
libgloss/rs6000/test.c Normal file
View File

@ -0,0 +1,23 @@
extern int led_putnum();
extern char putDebugChar(),print(),putnum();
main()
{
char buf[20];
outbyte ('&');
outbyte ('@');
outbyte ('$');
outbyte ('%');
print ("FooBar\r\n");
#if 0
write (2, "Enter 5 characters... ", 24);
read (0, buf, 5);
print (buf);
print ("\r\n");
#endif
/* whew, we made it */
print ("\r\nDone...");
}

View File

@ -0,0 +1,146 @@
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
"elf32-powerpc")
OUTPUT_ARCH(powerpc)
ENTRY(_start)
/* Do we need any of these for elf?
__DYNAMIC = 0; */
PROVIDE (__stack = 0);
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0x50000 + SIZEOF_HEADERS;
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.rela.text :
{ *(.rela.text) *(.rela.gnu.linkonce.t*) }
.rela.data :
{ *(.rela.data) *(.rela.gnu.linkonce.d*) }
.rela.rodata :
{ *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rela.ctors : { *(.rela.ctors) }
.rela.dtors : { *(.rela.dtors) }
.rela.init : { *(.rela.init) }
.rela.fini : { *(.rela.fini) }
.rela.bss : { *(.rela.bss) }
.rela.plt : { *(.rela.plt) }
.rela.sdata : { *(.rela.sdata2) }
.rela.sbss : { *(.rela.sbss2) }
.rela.sdata2 : { *(.rela.sdata2) }
.rela.sbss2 : { *(.rela.sbss2) }
.plt : { *(.plt) }
.text :
{
*(.text)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
} =0
.init : { *(.init) } =0
.fini : { *(.fini) } =0
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
.rodata1 : { *(.rodata1) }
_etext = .;
PROVIDE (etext = .);
.sdata2 : { *(.sdata2) }
.sbss2 : { *(.sbss2) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. It would
be more correct to do this:
. = ALIGN(0x50000) + (ALIGN(8) & (0x50000 - 1));
The current expression does not correctly handle the case of a
text segment ending precisely at the end of a page; it causes the
data segment to skip a page. The above expression does not have
this problem, but it will currently (2/95) cause BFD to allocate
a single segment, combining both text and data, for this case.
This will prevent the text segment from being shared among
multiple executions of the program; I think that is more
important than losing a page of the virtual address space (note
that no actual memory is lost; the page which is skipped can not
be referenced). */
. = ALIGN(8) + 0x50000;
.data :
{
*(.data)
*(.gnu.linkonce.d*)
CONSTRUCTORS
}
.data1 : { *(.data1) }
.got1 : { *(.got1) }
.dynamic : { *(.dynamic) }
/* Put .ctors and .dtors next to the .got2 section, so that the pointers
get relocated with -mrelocatable. Also put in the .fixup pointers.
The current compiler no longer needs this, but keep it around for 2.7.2 */
PROVIDE (_GOT2_START_ = .);
.got2 : { *(.got2) }
PROVIDE (__CTOR_LIST__ = .);
.ctors : { *(.ctors) }
PROVIDE (__CTOR_END__ = .);
PROVIDE (__DTOR_LIST__ = .);
.dtors : { *(.dtors) }
PROVIDE (__DTOR_END__ = .);
PROVIDE (_FIXUP_START_ = .);
.fixup : { *(.fixup) }
PROVIDE (_FIXUP_END_ = .);
PROVIDE (_GOT2_END_ = .);
PROVIDE (_GOT_START_ = .);
.got : { *(.got) }
.got.plt : { *(.got.plt) }
PROVIDE (_GOT_END_ = .);
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata : { *(.sdata) }
_edata = .;
PROVIDE (edata = .);
.sbss :
{
PROVIDE (__sbss_start = .);
*(.sbss)
*(.scommon)
PROVIDE (__sbss_end = .);
}
.bss :
{
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(COMMON)
}
_end = . ;
PROVIDE (end = .);
/* These are needed for ELF backends which have not yet been
converted to the new style linker. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}