On Sat, Sep 13 15:42, Kevin Wolf wrote: > + kernel2: Syscall get_tick_count > Index: trunk/src/kernel2/src/syscall.c > =================================================================== > --- trunk.orig/src/kernel2/src/syscall.c > +++ trunk/src/kernel2/src/syscall.c > @@ -79,6 +79,7 @@ void syscall_init() > syscall_add_interrupt_handler, 1); > > syscall_register(SYSCALL_PUTSN, (void*) &syscall_putsn, 2); > + syscall_register(SYSCALL_GET_TICK_COUNT, syscall_get_tick_count, 0); Hier sollten wir uns vielleicht mal einigen ob wir nun ein & hinschreiben wollen oder nicht. ;-) > } > > /** > Index: trunk/src/kernel2/src/arch/i386/syscall.c > =================================================================== > --- trunk.orig/src/kernel2/src/arch/i386/syscall.c > +++ trunk/src/kernel2/src/arch/i386/syscall.c > @@ -88,23 +88,27 @@ void syscall_arch(machine_state_t* isf) > syscall_fastrpc_ret(); > > } else { > - dword result; > + uint32_t eax, edx; > dword stack_backup; > > // Die Syscallhandler werden mit dem Userspace-Stack aufgerufen, damit > // keine Parameter kopiert werden muessen. > asm("pusha;" > // Den original-Stackpointer retten > - "movl %%esp, %2;" > + "movl %%esp, %3;" > // Stack wechseln > - "movl %1, %%esp;" > - "call *%3;" > - "movl %%eax, %0;" > "movl %2, %%esp;" > + "call *%4;" > + "movl %%eax, %0;" > + "movl %%edx, %1;" > + "movl %3, %%esp;" > "popa;" > - : "=m" (result) : "r" (stack), "m" (stack_backup), "r" (handler)); > + : "=m" (eax), "=m" (edx) : "r" (stack), "m" (stack_backup), "r" (handler)); > > - isf->eax = result; > + isf->eax = eax; > + if (handler == syscall_get_tick_count) { > + isf->edx = edx; > + } > } > } Das ist ja mal nicht wirklich schön, aber daran bin ich wohl selbst schuld... Immer schön rein damit. ;-) -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgpSFPrrj4vnt.pgp
Description: PGP signature