summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/csu/hppa64/Makefile62
-rw-r--r--lib/csu/hppa64/crt0.c138
-rw-r--r--lib/csu/hppa64/md_init.h53
3 files changed, 253 insertions, 0 deletions
diff --git a/lib/csu/hppa64/Makefile b/lib/csu/hppa64/Makefile
new file mode 100644
index 00000000000..2a9c8cf1056
--- /dev/null
+++ b/lib/csu/hppa64/Makefile
@@ -0,0 +1,62 @@
+# $OpenBSD: Makefile,v 1.1 2005/04/01 10:56:42 mickey Exp $
+# from: @(#)Makefile 5.5 (Berkeley) 5/21/91
+
+CFLAGS+= -DLIBC_SCCS
+OBJS= crt0.o gcrt0.o crtbegin.o crtend.o crtbeginS.o crtendS.o
+SRCS= crt0.c crtbegin.c crtbeginS.c crtend.c crtendS.c
+
+ELFDIR= ${.CURDIR}/../common_elf
+.PATH: ${ELFDIR}
+CFLAGS+= -I${ELFDIR} -I${.CURDIR}
+
+PICFLAG?=-fPIC
+
+all: ${OBJS}
+
+crt0.o: crt0.c
+ @echo ${COMPILE.c} -DCRT0 ${.CURDIR}/crt0.c -o ${.TARGET}
+ @${COMPILE.c} -DCRT0 ${.CURDIR}/crt0.c -o ${.TARGET}.o
+ @${LD} -x -r -o ${.TARGET} ${.TARGET}.o
+ @rm -f ${.TARGET}.o
+
+gcrt0.o: crt0.c
+ @echo ${COMPILE.c} -DMCRT0 ${.CURDIR}/crt0.c -o ${.TARGET}
+ @${COMPILE.c} -DMCRT0 ${.CURDIR}/crt0.c -o ${.TARGET}.o
+ @${LD} -x -r -o ${.TARGET} ${.TARGET}.o
+ @rm -f ${.TARGET}.o
+
+crtbegin.o: crtbegin.c
+ @echo ${COMPILE.c} ${ELFDIR}/crtbegin.c -o ${.TARGET}
+ @${COMPILE.c} ${ELFDIR}/crtbegin.c -o ${.TARGET}.o
+ @${LD} -x -r -o ${.TARGET} ${.TARGET}.o
+ @rm -f ${.TARGET}.o
+
+crtbeginS.o: crtbeginS.c
+ @echo ${COMPILE.c} ${PICFLAG} -DPIC ${ELFDIR}/crtbeginS.c -o ${.TARGET}
+ @${COMPILE.c} ${PICFLAG} -DPIC ${ELFDIR}/crtbeginS.c -o ${.TARGET}.o
+ @${LD} -x -r -o ${.TARGET} ${.TARGET}.o
+ @rm -f ${.TARGET}.o
+
+crtend.o: crtend.c
+ @echo ${COMPILE.c} ${ELFDIR}/crtend.c -o ${.TARGET}
+ @${COMPILE.c} ${ELFDIR}/crtend.c -o ${.TARGET}.o
+ @${LD} -x -r -o ${.TARGET} ${.TARGET}.o
+ @rm -f ${.TARGET}.o
+
+crtendS.o: crtendS.c
+ @echo ${COMPILE.c} ${PICFLAG} -DPIC ${ELFDIR}/crtendS.c -o ${.TARGET}
+ @${COMPILE.c} ${PICFLAG} -DPIC ${ELFDIR}/crtendS.c -o ${.TARGET}.o
+ @${LD} -x -r -o ${.TARGET} ${.TARGET}.o
+ @rm -f ${.TARGET}.o
+
+realinstall:
+ ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 ${OBJS} \
+ ${DESTDIR}/usr/lib
+
+afterdepend:: .depend
+ @(TMP=/tmp/_depend$$$$; \
+ sed -e 's/^\([^\.]*\).o[ ]*:/\1.o g\1.o:/' \
+ < .depend > $$TMP; \
+ mv $$TMP .depend)
+
+.include <bsd.prog.mk>
diff --git a/lib/csu/hppa64/crt0.c b/lib/csu/hppa64/crt0.c
new file mode 100644
index 00000000000..8da30536853
--- /dev/null
+++ b/lib/csu/hppa64/crt0.c
@@ -0,0 +1,138 @@
+/* $OpenBSD: crt0.c,v 1.1 2005/04/01 10:56:43 mickey Exp $ */
+
+/*
+ * Copyright (c) 2001 Michael Shalayeff
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+int global __asm ("$global$") = 0;
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$OpenBSD: crt0.c,v 1.1 2005/04/01 10:56:43 mickey Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/param.h>
+#include <sys/syscall.h>
+#include <sys/fcntl.h>
+#include <sys/exec.h>
+#include <stdlib.h>
+#include <paths.h>
+
+typedef char Obj_Entry;
+
+/*
+ * Lots of the chunks of this file cobbled together from pieces of
+ * other OpenBSD crt files, including the common code.
+ */
+
+char **environ;
+
+extern void __init(void);
+extern void __fini(void);
+
+#ifdef MCRT0
+extern void monstartup(u_long, u_long);
+extern void _mcleanup(void);
+extern unsigned char etext, eprol;
+#endif /* MCRT0 */
+
+void __start(char **, void (*)(void), const Obj_Entry *);
+static char *__strrchr(const char *p, char ch);
+
+char *__progname = "";
+char __progname_storage[NAME_MAX+1];
+
+void __start(char **sp, void (*cleanup)(void), const Obj_Entry *obj);
+
+__asm(
+ ".import $global$, data\n\t"
+ ".import ___start, code\n\t"
+ ".text\n\t"
+ ".align 4\n\t"
+ ".export _start, entry\n\t"
+ ".export __start, entry\n\t"
+ ".type _start,@function\n\t"
+ ".type __start,@function\n\t"
+ ".label _start\n\t"
+ ".label __start\n\t"
+ ".proc\n\t"
+ ".callinfo frame=0, calls\n\t"
+ ".entry\n\t"
+ "ldil L%$global$, %r27\n\t"
+ ".call\n\t"
+ "b ___start\n\t"
+ "ldo R%$global$(%r27), %r27\n\t"
+ ".exit\n\t"
+ ".procend\n\t");
+
+void
+___start(sp, cleanup, obj)
+ char **sp;
+ void (*cleanup)(void); /* from shared loader */
+ const Obj_Entry *obj; /* from shared loader */
+{
+ struct ps_strings *arginfo = (struct ps_strings *)sp;
+ char **argv, *namep;
+ char *s;
+
+ argv = arginfo->ps_argvstr;
+ environ = arginfo->ps_envstr;
+ if ((namep = argv[0]) != NULL) { /* NULL ptr if argc = 0 */
+ if ((__progname = __strrchr(namep, '/')) == NULL)
+ __progname = namep;
+ else
+ __progname++;
+ for (s = __progname_storage; *__progname &&
+ s < &__progname_storage[sizeof __progname_storage - 1]; )
+ *s++ = *__progname++;
+ *s = '\0';
+ __progname = __progname_storage;
+ }
+
+#ifdef MCRT0
+ atexit(_mcleanup);
+ monstartup((u_long)&eprol, (u_long)&etext);
+#endif
+
+ __init();
+
+ exit(main(arginfo->ps_nargvstr, argv, environ));
+}
+
+static char *
+__strrchr(const char *p, char ch)
+{
+ char *save;
+
+ for (save = NULL;; ++p) {
+ if (*p == ch)
+ save = (char *)p;
+ if (!*p)
+ return(save);
+ }
+}
+
+#ifdef MCRT0
+__asm (".export eprol, entry\n\t.label eprol");
+#endif
diff --git a/lib/csu/hppa64/md_init.h b/lib/csu/hppa64/md_init.h
new file mode 100644
index 00000000000..14385571d37
--- /dev/null
+++ b/lib/csu/hppa64/md_init.h
@@ -0,0 +1,53 @@
+/* $OpenBSD: md_init.h,v 1.1 2005/04/01 10:56:43 mickey Exp $ */
+
+/*
+ * Copyright (c) 2003 Dale Rahn. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#define MD_SECT_CALL_FUNC(section, func) \
+ __asm (".section "#section",\"ax\",@progbits \n" \
+ " bl " #func ",%r2 \n" \
+ " std %r19,-80(%r30) \n" \
+ " ldd -80(%r30),%r19 \n" \
+ " .previous")
+
+#define MD_SECTION_PROLOGUE(sect, entry_pt) \
+ __asm ( \
+ " .section "#sect",\"ax\",@progbits \n" \
+ " .EXPORT "#entry_pt",ENTRY,PRIV_LEV=3,ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RTNVAL=NO \n" \
+ " .align 4 \n" \
+ #entry_pt" \n" \
+ " std %r2, -20(%r30) \n" \
+ " ldo 64(%r30),%r30 \n" \
+ " /* fall thru */ \n" \
+ " .previous")
+
+
+#define MD_SECTION_EPILOGUE(sect) \
+ __asm ( \
+ " .section "#sect",\"ax\",@progbits \n" \
+ " ldd -84(%r30),%r2 \n" \
+ " bv %r0(%r2) \n" \
+ " ldo -64(%r30),%r30 \n" \
+ " .previous")