20000317 sourceware import
This commit is contained in:
350
libgloss/rs6000/Makefile.in
Normal file
350
libgloss/rs6000/Makefile.in
Normal 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
|
28
libgloss/rs6000/ads-exit.S
Normal file
28
libgloss/rs6000/ads-exit.S
Normal 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
55
libgloss/rs6000/ads-io.c
Normal 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
154
libgloss/rs6000/ads.ld
Normal 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
1191
libgloss/rs6000/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
90
libgloss/rs6000/configure.in
Normal file
90
libgloss/rs6000/configure.in
Normal 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
128
libgloss/rs6000/crt0.S
Normal 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
|
27
libgloss/rs6000/mbx-exit.c
Normal file
27
libgloss/rs6000/mbx-exit.c
Normal 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;
|
||||
}
|
||||
|
60
libgloss/rs6000/mbx-inbyte.c
Normal file
60
libgloss/rs6000/mbx-inbyte.c
Normal 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;
|
||||
}
|
71
libgloss/rs6000/mbx-outbyte.c
Normal file
71
libgloss/rs6000/mbx-outbyte.c
Normal 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)) ;
|
||||
}
|
||||
|
||||
|
31
libgloss/rs6000/mbx-print.c
Normal file
31
libgloss/rs6000/mbx-print.c
Normal 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
134
libgloss/rs6000/mbx.ld
Normal 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
12
libgloss/rs6000/mbx.specs
Normal 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
27
libgloss/rs6000/mcount.S
Normal 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)
|
23
libgloss/rs6000/mvme-errno.c
Normal file
23
libgloss/rs6000/mvme-errno.c
Normal 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;
|
||||
}
|
32
libgloss/rs6000/mvme-exit.S
Normal file
32
libgloss/rs6000/mvme-exit.S
Normal 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)
|
31
libgloss/rs6000/mvme-inbyte.S
Normal file
31
libgloss/rs6000/mvme-inbyte.S
Normal 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)
|
43
libgloss/rs6000/mvme-outbyte.S
Normal file
43
libgloss/rs6000/mvme-outbyte.S
Normal 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)
|
76
libgloss/rs6000/mvme-print.c
Normal file
76
libgloss/rs6000/mvme-print.c
Normal 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);
|
||||
}
|
49
libgloss/rs6000/mvme-read.c
Normal file
49
libgloss/rs6000/mvme-read.c
Normal 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;
|
||||
}
|
||||
}
|
21
libgloss/rs6000/sim-abort.c
Normal file
21
libgloss/rs6000/sim-abort.c
Normal 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);
|
||||
}
|
45
libgloss/rs6000/sim-crt0.S
Normal file
45
libgloss/rs6000/sim-crt0.S
Normal 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)
|
33
libgloss/rs6000/sim-errno.c
Normal file
33
libgloss/rs6000/sim-errno.c
Normal 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;
|
||||
}
|
26
libgloss/rs6000/sim-inbyte.c
Normal file
26
libgloss/rs6000/sim-inbyte.c
Normal 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;
|
||||
}
|
43
libgloss/rs6000/sim-print.c
Normal file
43
libgloss/rs6000/sim-print.c
Normal 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);
|
||||
}
|
30
libgloss/rs6000/sim-sbrk.c
Normal file
30
libgloss/rs6000/sim-sbrk.c
Normal 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;
|
||||
}
|
79
libgloss/rs6000/simulator.S
Normal file
79
libgloss/rs6000/simulator.S
Normal 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)
|
277
libgloss/rs6000/sol-cfuncs.c
Normal file
277
libgloss/rs6000/sol-cfuncs.c
Normal 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;
|
||||
}
|
280
libgloss/rs6000/sol-syscall.S
Normal file
280
libgloss/rs6000/sol-syscall.S
Normal 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
23
libgloss/rs6000/test.c
Normal 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...");
|
||||
}
|
146
libgloss/rs6000/yellowknife.ld
Normal file
146
libgloss/rs6000/yellowknife.ld
Normal 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 . */
|
||||
}
|
Reference in New Issue
Block a user