Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1292 → Rev 1293

/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