/kernel/trunk/generic/include/syscall/copy.h |
---|
37,13 → 37,13 |
/** Label within memcpy_to_uspace() that contains return -1. */ |
extern char memcpy_to_uspace_failover_address; |
extern int copy_from_uspace(void *dst, void *uspace_src, size_t size); |
extern int copy_to_uspace(void *dst_uspace, void *src, size_t size); |
extern int copy_from_uspace(void *dst, const void *uspace_src, size_t size); |
extern int copy_to_uspace(void *dst_uspace, const void *src, size_t size); |
/* |
* This interface must be implemented by each architecture. |
*/ |
extern int memcpy_from_uspace(void *dst, void *uspace_src, size_t size); |
extern int memcpy_to_uspace(void *uspace_dst, void *src, size_t size); |
extern int memcpy_from_uspace(void *dst, const void *uspace_src, size_t size); |
extern int memcpy_to_uspace(void *uspace_dst, const void *src, size_t size); |
#endif |
/kernel/trunk/generic/src/syscall/copy.c |
---|
54,7 → 54,7 |
* |
* @return 0 on success or error code from @ref errno.h. |
*/ |
int copy_from_uspace(void *dst, void *uspace_src, size_t size) |
int copy_from_uspace(void *dst, const void *uspace_src, size_t size) |
{ |
ipl_t ipl; |
int rc; |
95,7 → 95,7 |
* |
* @return 0 on success or error code from @ref errno.h. |
*/ |
int copy_to_uspace(void *uspace_dst, void *src, size_t size) |
int copy_to_uspace(void *uspace_dst, const void *src, size_t size) |
{ |
ipl_t ipl; |
int rc; |
/kernel/trunk/generic/src/syscall/syscall.c |
---|
43,6 → 43,7 |
#include <ipc/sysipc.h> |
#include <synch/futex.h> |
#include <ddi/ddi.h> |
#include <syscall/copy.h> |
static __native sys_io(int fd, const void * buf, size_t count) { |
49,6 → 50,7 |
// TODO: buf sanity checks and a lot of other stuff ... |
size_t i; |
char str[10]; |
for (i = 0; i < count; i++) |
putchar(((char *) buf)[i]); |
/kernel/trunk/generic/src/ipc/sysipc.c |
---|
308,8 → 308,10 |
call = ipc_call_alloc(0); |
rc = copy_from_uspace(&call->data.args, &data->args, sizeof(call->data.args)); |
if (rc != 0) |
if (rc != 0) { |
ipc_call_free(call); |
return (__native) rc; |
} |
if (!(res=request_preprocess(call))) |
ipc_call(phone, call); |
else |
/kernel/trunk/arch/mips32/include/exception.h |
---|
95,7 → 95,7 |
static inline void istate_set_retaddr(istate_t *istate, __address retaddr) |
{ |
/* TODO */ |
istate->epc = retaddr; |
} |
extern void exception(istate_t *istate); |
/kernel/trunk/arch/mips32/src/asm.S |
---|
66,13 → 66,40 |
memcpy: |
memcpy_from_uspace: |
memcpy_to_uspace: |
j _memcpy |
nop |
srl $t1,$a2,0x2 |
beqz $t1,1f |
move $t0,$zero |
move $a3,$zero |
2: |
addu $v0,$a1,$a3 |
lw $v1,0($v0) |
addiu $t0,$t0,1 |
addu $v0,$a0,$a3 |
sw $v1,0($v0) |
bne $t0,$t1,2b |
addiu $a3,$a3,4 |
1: |
andi $a2,$a2,0x3 |
beqz $a2,3f |
move $a3,$zero |
sll $v0,$t0,0x2 |
addu $t1,$a0,$v0 |
addu $t0,$v0,$a1 |
4: |
addu $v0,$t0,$a3 |
lbu $a0,0($v0) |
addu $v1,$t1,$a3 |
addiu $a3,$a3,1 |
bne $a3,$a2,4b |
sb $a0,0($v1) |
3: |
jr $ra |
move $v0,$a1 |
memcpy_from_uspace_failover_address: |
memcpy_to_uspace_failover_address: |
j memcpy_from_uspace_failover_address |
nop |
jr $ra |
move $v0, $zero |
/kernel/trunk/arch/mips32/src/start.S |
---|
284,9 → 284,8 |
sw $sp,EOFFSET_SP($k0) |
add $sp, $k0, 0 |
jal tlb_refill /* tlb_refill(register_space) */ |
add $a0, $sp, 0 |
jal tlb_refill /* tlb_refill(register_space) */ |
nop |
REGISTERS_LOAD $sp |