microblaze port

based on initial work by rdp, with heavy modifications. some features
including threads are untested because qemu app-level emulation seems
to be broken and I do not have a proper system image for testing.
This commit is contained in:
Rich Felker 2012-09-29 01:05:31 -04:00
commit 8c0a3d9e5c
45 changed files with 2213 additions and 0 deletions

View file

@ -0,0 +1,13 @@
.global __syscall
.type __syscall,@function
__syscall:
addi r12, r5, 0 # Save the system call number
add r5, r6, r0 # Shift the arguments, arg1
add r6, r7, r0 # arg2
add r7, r8, r0 # arg3
add r8, r9, r0 # arg4
add r9, r10, r0 # arg5
lwi r10, r1, 28 # Get arg6.
brki r14, 0x8 # syscall
rtsd r15, 8
nop

View file

@ -0,0 +1,5 @@
.global dlsym
.type dlsym,@function
dlsym:
brid __dlsym
add r7, r15, r0

View file

@ -0,0 +1,27 @@
# FIXME: clearing argv entries
.global _start
_start:
add r19, r0, r0
lw r5, r0, r1
addi r6, r1, 4
mfs r7, rpc
addi r7, r7, _GLOBAL_OFFSET_TABLE_+8
addi r7, r7, _DYNAMIC@GOTOFF
brlid r15, __reloc_self
nop
lwi r5, r1, 0
brlid r15, __dynlink
addi r6, r1, 4
lwi r4, r1, 0
1: lwi r5, r1, 4
addi r5, r5, 1
bnei r5, 1f
addi r4, r4, -1
addi r1, r1, 4
bri 1b
1: swi r4, r1, 0
add r5, r0, r0
bra r3

View file

@ -0,0 +1,29 @@
.global _longjmp
.global longjmp
.type _longjmp,@function
.type longjmp,@function
_longjmp:
longjmp:
addi r3, r6, 0
bnei r3, 1f
addi r3, r3, 1
1: lwi r1, r5, 0
lwi r15, r5, 4
lwi r2, r5, 8
lwi r13, r5, 12
lwi r18, r5, 16
lwi r19, r5, 20
lwi r20, r5, 24
lwi r21, r5, 28
lwi r22, r5, 32
lwi r23, r5, 36
lwi r24, r5, 40
lwi r25, r5, 44
lwi r26, r5, 48
lwi r27, r5, 52
lwi r28, r5, 56
lwi r29, r5, 60
lwi r30, r5, 64
lwi r31, r5, 68
rtsd r15, 8
nop

View file

@ -0,0 +1,29 @@
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
__setjmp:
_setjmp:
setjmp:
swi r1, r5, 0
swi r15, r5, 4
swi r2, r5, 8
swi r13, r5, 12
swi r18, r5, 16
swi r19, r5, 20
swi r20, r5, 24
swi r21, r5, 28
swi r22, r5, 32
swi r23, r5, 36
swi r24, r5, 30
swi r25, r5, 44
swi r26, r5, 48
swi r27, r5, 52
swi r28, r5, 56
swi r29, r5, 60
swi r30, r5, 64
swi r31, r5, 68
rtsd r15, 8
ori r3, r0, 0

View file

@ -0,0 +1,11 @@
.global __restore
.type __restore,@function
__restore:
ori r12, r0, 119
brki r14, 0x8
.global __restore_rt
.type __restore_rt,@function
__restore_rt:
ori r12, r0, 173
brki r14, 0x8

View file

@ -0,0 +1,9 @@
.global sigsetjmp
.type sigsetjmp,@function
sigsetjmp:
lwi r11, r5, 72
beqi r11, setjmp
addi r7, r5, 76
add r6, r0, r0
brid sigprocmask
ori r5, r0, 2

View file

@ -0,0 +1,5 @@
.global __set_thread_area
.type __set_thread_area,@function
__set_thread_area:
rtsd r15, 8
ori r21, r5, 0

View file

@ -0,0 +1,8 @@
.global __unmapself
.type __unmapself,@function
__unmapself:
ori r12, r0, 91
brki r14, 0x8
ori r12, r0, 1
brki r14, 0x8
nop

View file

@ -0,0 +1,33 @@
.global __clone
.weak clone
.type __clone,@function
.type clone,@function
# r5, r6, r7, r8, r9, r10, stack
# fn, st, fl, ar, pt, tl, ct
# fl, st, pt, tl, ctx
__clone:
clone:
andi r6, r6, -16
addi r6, r6, -16
swi r5, r6, 0
swi r8, r6, 4
ori r5, r7, 0
ori r7, r9, 0
ori r8, r10, 0
lwi r9, r1, 28
ori r12, r0, 120
brki r14, 8
beqi r3, 1f
rtsd r15, 8
nop
1: lwi r3, r1, 0
lwi r5, r1, 4
brald r15, r3
nop
ori r12, r0, 1
brki r14, 8

View file

@ -0,0 +1,19 @@
.global __syscall_cp_asm
.type __syscall_cp_asm,@function
__syscall_cp_asm:
.global __cp_begin
__cp_begin:
lwi r5, r5, 0
bnei r5, __cancel
addi r12, r6, 0
add r5, r7, r0
add r6, r8, r0
add r7, r9, r0
add r8, r10, r0
lwi r9, r1, 28
lwi r10, r1, 32
brki r14, 0x8
.global __cp_end
__cp_end:
rtsd r15, 8
nop