initial version of mips (o32) port, based on work by Richard Pennington (rdp)

basically, this version of the code was obtained by starting with
rdp's work from his ellcc source tree, adapting it to musl's build
system and coding style, auditing the bits headers for discrepencies
with kernel definitions or glibc/LSB ABI or large file issues, fixing
up incompatibility with the old binutils from aboriginal linux, and
adding some new special cases to deal with the oddities of sigaction
and pipe syscall interfaces on mips.

at present, minimal test programs work, but some interfaces are broken
or missing. threaded programs probably will not link.
This commit is contained in:
Rich Felker 2012-07-11 04:22:13 -04:00
commit 6315004f61
38 changed files with 2196 additions and 0 deletions

25
crt/mips/crt1.s Normal file
View file

@ -0,0 +1,25 @@
.set noreorder
.weak _init
.weak _fini
.global __start
.global _start
__start:
_start:
subu $fp, $fp, $fp # Zero the frame pointer.
lui $gp, %hi(_gp)
addi $gp, %lo(_gp)
#la $gp, _gp
lw $4, %call16(main)($gp) # Get main() ...
lw $5, ($sp) # Get argc...
addu $6, $sp, 4 # and argv ...
lw $7, %call16(_init)($gp) # and _init() ...
addi $sp, $sp, -4*6 # Leave space for arguments 0..3, arg4, and arg5.
lw $12, %call16(_fini)($gp) # and _fini() ...
sw $12, 4*4($sp) # Save arg4.
sw $0, 4*5($sp) # ldso_fini == NULL
lw $25, %call16(__libc_start_main)($gp)
jalr $25 # Let's go!
nop
b . # Never gets here.
nop

15
crt/mips/crti.s Normal file
View file

@ -0,0 +1,15 @@
.set noreorder
.section .init
.global _init
_init:
subu $sp,$sp,32
sw $gp,24($sp)
sw $ra,28($sp)
.section .fini
.global _fini
_fini:
subu $sp,$sp,32
sw $gp,24($sp)
sw $ra,28($sp)

13
crt/mips/crtn.s Normal file
View file

@ -0,0 +1,13 @@
.set noreorder
.section .init
lw $gp,24($sp)
lw $ra,28($sp)
j $ra
addu $sp,$sp,32
.section .fini
lw $gp,24($sp)
lw $ra,28($sp)
j $ra
addu $sp,$sp,32