//uspace/trunk/libc/arch/mips32/_link.ld.in |
---|
17,12 → 17,13 |
*(.rodata*); |
} :text |
.data ALIGN(0x4000) : SUBALIGN(0x4000) { |
.data : { |
*(.data); |
*(.data.rel*); |
} :data |
.got : { |
_gp = .; |
*(.data.rel*); |
*(.got); |
} :data |
.sbss : { |
*(.scommon); |
//uspace/trunk/libc/arch/mips32/include/psthread.h |
---|
31,7 → 31,10 |
#include <types.h> |
#define SP_DELTA (8) |
/* +16 is just for sure that the called function |
* have space to store it's arguments |
*/ |
#define SP_DELTA (8+16) |
typedef struct { |
uint32_t sp; |
//uspace/trunk/libc/arch/mips32/Makefile.inc |
---|
31,10 → 31,9 |
TARGET = mipsel-linux-gnu |
TOOLCHAIN_DIR = /usr/local/mipsel/bin |
CFLAGS += -mips3 -mno-abicalls |
CFLAGS += -mips3 |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/psthread.S |
LFLAGS += -N |
//uspace/trunk/libc/arch/mips32/src/entry.s |
---|
27,11 → 27,10 |
# |
.text |
.org 0 |
.section .init, "ax" |
.globl __start |
.global __start |
.set noreorder |
.option pic2 |
## User-space task entry point |
# |
38,16 → 37,28 |
# |
.ent __start |
__start: |
lui $28, _gp |
.frame $sp, 32, $31 |
.cpload $25 |
# Mips o32 may store its arguments on stack, make space, |
# Mips o32 may store its arguments on stack, make space (16 bytes), |
# so that it could work with -O0 |
addiu $sp, -16 |
# Make space additional 16 bytes for the stack frame |
addiu $sp, -32 |
.cprestore 16 # Allow PIC code |
jal __main |
nop |
jal main |
nop |
jal __exit |
nop |
.end __start |
# Alignment of output section data to 0x4000 |
.section .data |
.align 14 |
//uspace/trunk/libc/arch/mips32/src/thread_entry.s |
---|
30,7 → 30,7 |
.set noat |
.set noreorder |
.set nomacro |
.option pic2 |
.globl __thread_entry |
39,7 → 39,8 |
# |
.ent __thread_entry |
__thread_entry: |
lui $28, _gp |
.frame $sp, 32, $31 |
.cpload $25 |
# |
# v0 contains address of uarg. |
46,9 → 47,10 |
# |
add $4, $2, 0 |
# Mips o32 may store its arguments on stack, make space |
addiu $sp, -16 |
addiu $sp, -32 |
.cprestore 16 |
j __thread_main |
jal __thread_main |
nop |
# |
//uspace/trunk/libc/arch/mips32/src/psthread.S |
---|
30,7 → 30,6 |
.set noat |
.set noreorder |
.set nomacro |
#include <arch/asm/regname.h> |
83,6 → 82,10 |
context_restore: |
CONTEXT_LOAD $a0 |
# Just for the jump into first function, but one instruction |
# should not bother us |
move $t9, $ra |
# context_restore returns 0 |
j $ra |
xor $v0, $v0 |