feat: debut implémentation de sysenter / sysexit et test depuis shell.c
This commit is contained in:
parent
4ce5c7333c
commit
e87aedb02e
|
@ -30,3 +30,4 @@ int logo();
|
||||||
int detectpci();
|
int detectpci();
|
||||||
int mem();
|
int mem();
|
||||||
int testmem();
|
int testmem();
|
||||||
|
int testsyscall();
|
||||||
|
|
|
@ -1,5 +1,79 @@
|
||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
/* COS2000 - Compatible Operating System - LGPL v3 - Hordé Nicolas */
|
/* COS2000 - Compatible Operating System - LGPL v3 - Hordé Nicolas */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
|
#define sysexit \
|
||||||
|
asm volatile ("sysexit"::"c");
|
||||||
|
|
||||||
|
|
||||||
|
static inline long syscall(long syscall) {
|
||||||
|
long ret;
|
||||||
|
asm volatile (
|
||||||
|
"mov %%esp,%%ecx;\
|
||||||
|
mov $1f,%%edx;\
|
||||||
|
sysenter;\
|
||||||
|
1:" : "=a" (ret) : "a" (syscall): "ecx","edx","memory");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long syscall1(long syscall, long arg1) {
|
||||||
|
long ret;
|
||||||
|
asm volatile (
|
||||||
|
"mov %%esp,%%ecx;\
|
||||||
|
mov $1f,%%edx;\
|
||||||
|
sysenter;\
|
||||||
|
1:" : "=a" (ret) : "a" (syscall), "b" (arg1) : "ecx","edx","memory");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long syscall2(long syscall, long arg1, long arg2) {
|
||||||
|
long ret;
|
||||||
|
asm volatile (
|
||||||
|
"mov %%esp,%%ecx;\
|
||||||
|
mov $1f,%%edx;\
|
||||||
|
sysenter;\
|
||||||
|
1:" : "=a" (ret) : "a" (syscall), "b" (arg1), "S" (arg2) : "ecx","edx","memory");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long syscall3(long syscall, long arg1, long arg2, long arg3) {
|
||||||
|
long ret;
|
||||||
|
asm volatile (
|
||||||
|
"mov %%esp,%%ecx;\
|
||||||
|
mov $1f,%%edx;\
|
||||||
|
sysenter;\
|
||||||
|
1:" : "=a" (ret) : "a" (syscall), "b" (arg1), "S" (arg2), "D" (arg3) : "ecx","edx","memory");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*static inline long syscall4(long syscall, long arg1, long arg2, long arg3, long arg4) {
|
||||||
|
long ret;
|
||||||
|
asm volatile ("mov %%esp,%%ecx;
|
||||||
|
"mov $1f,%%edx;
|
||||||
|
"sysenter;
|
||||||
|
1:" : "=a" (ret) : "a" (syscall), "b" (arg1), "c" (arg2),
|
||||||
|
"d" (arg3), "S" (arg4) : “memory”);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long syscall5(long syscall, long arg1, long arg2, long arg3, long arg4, long arg5) {
|
||||||
|
long ret;
|
||||||
|
asm volatile ("mov %%esp,%%ecx;
|
||||||
|
"mov $1f,%%edx;
|
||||||
|
"sysenter;
|
||||||
|
1:" : "=a" (ret) : "a" (syscall), "b" (arg1), "c" (arg2),
|
||||||
|
"d" (arg3), "S" (arg4), "D" (arg5) : “memory”);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long syscall6(long syscall, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6) {
|
||||||
|
long ret;
|
||||||
|
asm volatile ("mov %%esp,%%ecx;
|
||||||
|
"mov $1f,%%edx;
|
||||||
|
"sysenter;
|
||||||
|
1:" : "=a" (ret) : "a" (syscall), "b" (arg1), "c" (arg2),
|
||||||
|
"d" (arg3), "S" (arg4), "D", (arg5), "d" (arg6) : “memory”);
|
||||||
|
return ret;
|
||||||
|
}*/
|
||||||
void initsyscall(void);
|
void initsyscall(void);
|
||||||
void sysenter_handler(void);
|
void sysenter_handler(void);
|
||||||
|
|
12
lib/shell.c
12
lib/shell.c
|
@ -18,6 +18,7 @@
|
||||||
#include "3D/sphere.c"
|
#include "3D/sphere.c"
|
||||||
#include "3D/man.c"
|
#include "3D/man.c"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "syscall.h"
|
||||||
|
|
||||||
static command commands[] = {
|
static command commands[] = {
|
||||||
{"reboot" , "", &rebootnow},
|
{"reboot" , "", &rebootnow},
|
||||||
|
@ -42,7 +43,7 @@ static command commands[] = {
|
||||||
{"detectpci" , "", &detectpci},
|
{"detectpci" , "", &detectpci},
|
||||||
{"mem" , "", &mem},
|
{"mem" , "", &mem},
|
||||||
{"testmem" , "", &testmem},
|
{"testmem" , "", &testmem},
|
||||||
|
{"testsyscall" , "", &testsyscall},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
|
@ -82,6 +83,15 @@ int test(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Test l'usage de syscall */
|
||||||
|
int testsyscall()
|
||||||
|
{
|
||||||
|
print("*** avant appel");
|
||||||
|
syscall2(0x0, 0x1980, 0x2505);
|
||||||
|
print("*** apres appel");
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
/* Test la memoire */
|
/* Test la memoire */
|
||||||
int testmem()
|
int testmem()
|
||||||
|
|
Loading…
Reference in New Issue