summaryrefslogtreecommitdiff
path: root/crt
diff options
context:
space:
mode:
Diffstat (limited to 'crt')
-rw-r--r--crt/microblaze/crt1.s16
-rw-r--r--crt/microblaze/crti.s13
-rw-r--r--crt/microblaze/crtn.s9
3 files changed, 38 insertions, 0 deletions
diff --git a/crt/microblaze/crt1.s b/crt/microblaze/crt1.s
new file mode 100644
index 00000000..33090bba
--- /dev/null
+++ b/crt/microblaze/crt1.s
@@ -0,0 +1,16 @@
+.weak _init
+.weak _fini
+.global _start
+.align 2
+_start:
+ add r19, r0, r0 # Zero the frame pointer.
+ ori r5, r0, main # Get main() ...
+ lw r6, r0, r1 # Get argc...
+ addi r7, r1, 4 # ... and argv ...
+ ori r8, r0, _init # and _init() ...
+ ori r9, r0, _fini # and _fini() ...
+ add r10, r0, r0 # ldso_fini == NULL
+ andi r1, r1, -8 # align stack
+ addik r1, r1, -4*6 # Leave space for the args.
+ bri __libc_start_main # Let's go!
+ nop # Never gets here.
diff --git a/crt/microblaze/crti.s b/crt/microblaze/crti.s
new file mode 100644
index 00000000..ed1c2fa4
--- /dev/null
+++ b/crt/microblaze/crti.s
@@ -0,0 +1,13 @@
+.section .init
+.global _init
+.align 2
+_init:
+ addi r1, r1, -32
+ swi r15, r1, 0
+
+.section .fini
+.global _fini
+.align 2
+_fini:
+ addi r1, r1, -32
+ swi r15, r1, 0
diff --git a/crt/microblaze/crtn.s b/crt/microblaze/crtn.s
new file mode 100644
index 00000000..1e02c984
--- /dev/null
+++ b/crt/microblaze/crtn.s
@@ -0,0 +1,9 @@
+.section .init
+ lwi r15, r1, 0
+ rtsd r15, 8
+ addi r1, r1, 32
+
+.section .fini
+ lwi r15, r1, 0
+ rtsd r15, 8
+ addi r1, r1, 32