Hi all,
I am writing a kernel module to redirect common system calls to my custom
syscalls using "sysent" array. It is working fine for 64bit syscalls.
Now, I am going to write the same for 32bit syscalls.
My problem is I can't redirect/trace 32bit sys calls in my module.
Is there any way to do this?
I tried the following but it didn't worked. (mkdir sys call example)
[i]#ifdef _SYSCALL32_IMPL
old_call=(int (*)())sysent32[SYS_mkdir].sy_call;
old_call_c=(int64_t (*)())sysent32[SYS_mkdir].sy_callc;
endif[/i]
[b]My actual __init() looks like:-[/b]
int
_init() {
register int ret;
ret=mod_install(&modlinkage);
/* Save the old syscall function pointer: */
old_call=(int (*)())sysent[SYS_mkdir].sy_call;
old_call_c=(int64_t (*)())sysent[SYS_mkdir].sy_callc;
#ifdef _SYSCALL32_IMPL
old_call=(int (*)())sysent32[SYS_mkdir].sy_call;
old_call_c=(int64_t (*)())sysent32[SYS_mkdir].sy_callc;
#endif
/* Show in the new one: */
sysent[SYS_mkdir].sy_call=(int (*)())new_mkdir;
sysent[SYS_mkdir].sy_callc=(int64_t (*)())new_mkdir;
#ifdef _SYSCALL32_IMPL
sysent32[SYS_mkdir].sy_call=(int (*)())new_mkdir;
sysent32[SYS_mkdir].sy_callc=(int64_t (*)())new_mkdir;
#endif
cmn_err(CE_CONT, "mydrv _init successful. rc=%d\n", ret);
cmn_err(CE_NOTE, "old_mkdir_call=0x%p, old_mkdir_call_c=0x%p,
new_mkdir_call=0x%p, new_mkdir_call_c=0x%p\n", old_call, old_call_c,
sysent[SYS_mkdir].sy_call, sysent[SYS_mkdir].sy_callc);
return ret;
}
Thanks in advance...
--
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code