summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2014-12-27 20:33:48 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2014-12-27 20:33:48 +0000
commit4d613cd5d3f0f8447e2aa9ad5fb0617ba67e87a2 (patch)
tree71483444a424752c9f076d35f1e82d2f7ff20327 /lib
parentb28fd51889c4ed773cfc0fce3e8bb71785cabe33 (diff)
Static PIE for mips64. Still something not quite right as a full make build
fails. ok kurt@
Diffstat (limited to 'lib')
-rw-r--r--lib/csu/mips64/md_init.h45
1 files changed, 44 insertions, 1 deletions
diff --git a/lib/csu/mips64/md_init.h b/lib/csu/mips64/md_init.h
index 2bc75ae7914..291654966a4 100644
--- a/lib/csu/mips64/md_init.h
+++ b/lib/csu/mips64/md_init.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: md_init.h,v 1.7 2014/12/23 16:27:18 deraadt Exp $ */
+/* $OpenBSD: md_init.h,v 1.8 2014/12/27 20:33:47 kettenis Exp $ */
/*-
* Copyright (c) 2001 Ross Harvey
@@ -105,6 +105,49 @@
" .end __start \n" \
" .previous")
+#define MD_RCRT0_START \
+ __asm( \
+ ".text \n" \
+ " .align 3 \n" \
+ " .globl __start \n" \
+ " .ent __start \n" \
+ " .type __start, @function \n" \
+ "__start: \n" \
+ " dsubu $sp, $sp, 160 \n" \
+ " .cpsetup $t9, 144, __start \n" \
+ " dla $s1, 1f \n" \
+ " bgezal $zero, 1f \n" \
+ "1: \n" \
+ " dsubu $s0, $ra, $s1 \n" \
+ " daddu $a0, $sp, 160 \n" \
+ " daddu $a1, $sp, 0 \n" \
+ " dla $t9, _dl_boot_bind \n" \
+ " daddu $t9, $s0 \n" \
+ " jalr $t9 \n" \
+ " daddu $sp, $sp, 160 \n" \
+ " move $a0, $sp \n" \
+ " dsrl $a1, $sp, 4 \n" /* align stack on a */ \
+ " dsll $sp, $a1, 4 \n" /* 16 byte boundary */ \
+ " move $a1, $zero \n" \
+ " dla $t9, ___start \n" \
+ " jr $t9 \n" \
+ " .end __start \n" \
+ " .globl _dl_exit \n" \
+ " .ent _dl_exit \n" \
+ " .type _dl_exit, @function \n" \
+ "_dl_exit: \n" \
+ " li $v0, 1 \n" \
+ " syscall \n" \
+ " j $ra \n" \
+ " .end _dl_exit \n" \
+ " .globl _dl_printf \n" \
+ " .ent _dl_printf \n" \
+ " .type _dl_printf, @function \n" \
+ "_dl_printf: \n" \
+ " j $ra \n" \
+ " .end _dl_printf \n" \
+ " .previous")
+
struct kframe {
long kargc;
char *kargv[1]; /* size depends on kargc */