@@ -16,19 +16,30 @@ SYSCALL_TABLE
1616static const void * syscall_table [SYS_COUNT ] = {SYSCALL_TABLE };
1717#undef _
1818
19- /* Weak, generic dispatcher */
20- int syscall (int num , void * a1 , void * a2 , void * a3 )
19+ /* Core syscall execution via direct table lookup.
20+ * Called by trap handlers to invoke syscall implementations without
21+ * triggering privilege transitions. User space must not call this directly.
22+ */
23+ int do_syscall (int num , void * a1 , void * a2 , void * a3 )
2124{
2225 if (unlikely (num <= 0 || num >= SYS_COUNT ))
2326 return - ENOSYS ;
2427
25- /* safety check for valid function pointer */
2628 if (unlikely (!syscall_table [num ]))
2729 return - ENOSYS ;
2830
2931 return ((int (* )(void * , void * , void * )) syscall_table [num ])(a1 , a2 , a3 );
3032}
3133
34+ /* Generic user-space syscall interface.
35+ * This weak symbol allows architecture-specific implementations to override
36+ * with trap-based entry mechanisms.
37+ */
38+ __attribute__((weak )) int syscall (int num , void * a1 , void * a2 , void * a3 )
39+ {
40+ return do_syscall (num , a1 , a2 , a3 );
41+ }
42+
3243static char * _env [1 ] = {0 };
3344char * * environ = _env ;
3445int errno = 0 ;
@@ -239,7 +250,7 @@ static int _tadd(void *task, int stack_size)
239250 return mo_task_spawn (task , stack_size );
240251}
241252
242- int sys_task_add (void * task , int stack_size )
253+ int sys_tadd (void * task , int stack_size )
243254{
244255 return syscall (SYS_tadd , task , (void * ) stack_size , 0 );
245256}
@@ -252,7 +263,7 @@ static int _tcancel(int id)
252263 return mo_task_cancel (id );
253264}
254265
255- int sys_task_cancel (int id )
266+ int sys_tcancel (int id )
256267{
257268 return syscall (SYS_tcancel , (void * ) id , 0 , 0 );
258269}
@@ -263,7 +274,7 @@ static int _tyield(void)
263274 return 0 ;
264275}
265276
266- int sys_task_yield (void )
277+ int sys_tyield (void )
267278{
268279 return syscall (SYS_tyield , 0 , 0 , 0 );
269280}
@@ -277,7 +288,7 @@ static int _tdelay(int ticks)
277288 return 0 ;
278289}
279290
280- int sys_task_delay (int ticks )
291+ int sys_tdelay (int ticks )
281292{
282293 return syscall (SYS_tdelay , (void * ) ticks , 0 , 0 );
283294}
@@ -290,7 +301,7 @@ static int _tsuspend(int id)
290301 return mo_task_suspend (id );
291302}
292303
293- int sys_task_suspend (int id )
304+ int sys_tsuspend (int id )
294305{
295306 return syscall (SYS_tsuspend , (void * ) id , 0 , 0 );
296307}
@@ -303,7 +314,7 @@ static int _tresume(int id)
303314 return mo_task_resume (id );
304315}
305316
306- int sys_task_resume (int id )
317+ int sys_tresume (int id )
307318{
308319 return syscall (SYS_tresume , (void * ) id , 0 , 0 );
309320}
@@ -316,7 +327,7 @@ static int _tpriority(int id, int priority)
316327 return mo_task_priority (id , priority );
317328}
318329
319- int sys_task_priority (int id , int priority )
330+ int sys_tpriority (int id , int priority )
320331{
321332 return syscall (SYS_tpriority , (void * ) id , (void * ) priority , 0 );
322333}
@@ -326,7 +337,7 @@ static int _tid(void)
326337 return mo_task_id ();
327338}
328339
329- int sys_task_id (void )
340+ int sys_tid (void )
330341{
331342 return syscall (SYS_tid , 0 , 0 , 0 );
332343}
@@ -337,7 +348,7 @@ static int _twfi(void)
337348 return 0 ;
338349}
339350
340- int sys_task_wfi (void )
351+ int sys_twfi (void )
341352{
342353 return syscall (SYS_twfi , 0 , 0 , 0 );
343354}
@@ -347,7 +358,7 @@ static int _tcount(void)
347358 return mo_task_count ();
348359}
349360
350- int sys_task_count (void )
361+ int sys_tcount (void )
351362{
352363 return syscall (SYS_tcount , 0 , 0 , 0 );
353364}
0 commit comments