about summary refs log tree commit diff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/crt_arch.h9
-rw-r--r--arch/i386/crt_arch.h13
-rw-r--r--arch/microblaze/crt_arch.h11
-rw-r--r--arch/mips/crt_arch.h21
-rw-r--r--arch/powerpc/crt_arch.h12
-rw-r--r--arch/x86_64/crt_arch.h9
6 files changed, 75 insertions, 0 deletions
diff --git a/arch/arm/crt_arch.h b/arch/arm/crt_arch.h
new file mode 100644
index 00000000..979fb081
--- /dev/null
+++ b/arch/arm/crt_arch.h
@@ -0,0 +1,9 @@
+__asm__("\
+.global _start \n\
+_start: \n\
+	mov fp, #0 \n\
+	mov lr, #0 \n\
+	mov a1, sp \n\
+	and sp, sp, #-16 \n\
+	bl __cstart \n\
+");
diff --git a/arch/i386/crt_arch.h b/arch/i386/crt_arch.h
new file mode 100644
index 00000000..ae694f99
--- /dev/null
+++ b/arch/i386/crt_arch.h
@@ -0,0 +1,13 @@
+__asm__("\
+.text \n\
+.global _start \n\
+_start: \n\
+	xor %ebp,%ebp \n\
+	mov %esp,%eax \n\
+	and $-16,%esp \n\
+	push %eax \n\
+	push %eax \n\
+	push %eax \n\
+	push %eax \n\
+	call __cstart \n\
+");
diff --git a/arch/microblaze/crt_arch.h b/arch/microblaze/crt_arch.h
new file mode 100644
index 00000000..8917c695
--- /dev/null
+++ b/arch/microblaze/crt_arch.h
@@ -0,0 +1,11 @@
+__asm__("\
+.global _start \n\
+.align  2 \n\
+_start: \n\
+	add r19, r0, r0 \n\
+	ori r5, r1, 0 \n\
+	andi r1, r1, -8 \n\
+	addik r1, r1, -8 \n\
+	bri __cstart \n\
+	nop \n\
+");
diff --git a/arch/mips/crt_arch.h b/arch/mips/crt_arch.h
new file mode 100644
index 00000000..d4ae52d1
--- /dev/null
+++ b/arch/mips/crt_arch.h
@@ -0,0 +1,21 @@
+__asm__("\n\
+.set push\n\
+.set noreorder\n\
+.global __start\n\
+.global _start\n\
+.type   __start, @function\n\
+.type   _start, @function\n\
+__start:\n\
+_start:\n\
+	bal 1f \n\
+	move $fp, $0 \n\
+2:	.gpword 2b \n\
+1:	lw $gp, 0($ra) \n\
+	subu $gp, $ra, $gp \n\
+	move $4, $sp \n\
+	subu $sp, $sp, 16 \n\
+	and $sp, $sp, -8 \n\
+	lw $25, %call16(__cstart)($gp) \n\
+	jalr $25 \n\
+	nop \n\
+.set pop");
diff --git a/arch/powerpc/crt_arch.h b/arch/powerpc/crt_arch.h
new file mode 100644
index 00000000..8cc53d98
--- /dev/null
+++ b/arch/powerpc/crt_arch.h
@@ -0,0 +1,12 @@
+__asm__("\
+.global _start \n\
+.type   _start, %function \n\
+_start: \n\
+	mr 3, 1 \n\
+	clrrwi 1, 1, 4 \n\
+	li 0, 0 \n\
+	stwu 1, -16(1) \n\
+	mtlr 0 \n\
+	stw 0, 0(1) \n\
+	bl __cstart \n\
+");        
diff --git a/arch/x86_64/crt_arch.h b/arch/x86_64/crt_arch.h
new file mode 100644
index 00000000..db692950
--- /dev/null
+++ b/arch/x86_64/crt_arch.h
@@ -0,0 +1,9 @@
+__asm__("\
+.text \n\
+.global _start \n\
+_start: \n\
+	xor %rbp,%rbp \n\
+	mov %rsp,%rdi \n\
+	andq $-16,%rsp \n\
+	call __cstart \n\
+");