Using sysarch specific syscalls in assembly?
alexander
arundel at h3c.de
Tue Aug 9 13:31:43 GMT 2005
On Tue Aug 9 05, Robert Watson wrote:
>
> In general, it is much preferable that applications link against libc to
> get the system call stubs than that they directly invoke system calls.
> That way, if compatibility interfaces are introduced, etc, the application
> will continue to function. For example, there was at one point a
> migration away from explicit system calls to set certain kernel
> parameters, such as hostname and domainname, towards using sysctl, with
> the system calls being marked obsolete. The C library still provides a
> sethostname() interface, which is actually a wrapper in user space around
> sysctl(). So invoking the C function provided by libc for a system call
> will generally be preferred, even if the originating code is assembly.
>
> Robert N M Watson
Thx. I'll try that.
Unfortunately I'm experiencing some problems right now. From time to time
I'm getting a
'Bus error: 10 (core dumped)'
This however appears randomly. One time I run the app everything works fine,the
next time it core dumps. Are there any errors in my code?
%define SYSARCH 165 ; syscall sysarch(2)
%define I386_SET_IOPERM 4 ; i386_set_ioperm(2) number
ioperm_args dd 378h
dd 3
dd 1
OpenIO:
push byte ioperm_args
push dword I386_SET_IOPERM
mov eax,SYSARCH
Call _syscall
lea esp,[esp+8]
ret
I'm really confused by the fact that it works sometimes and sometimes it
doesn't. I loaded the app into ddd and found more oddities. When I set a
breakpoint before the first in/out and then hit continue everything works
allright. However when I set a breakpoint after the first in/out the app
core dumps with a bus error.
Any ideas? Maybe a timing issue?
I added a i386_get_ioperm(2) call just to check if the permsissions are being
handled correctly. i386_get_ioperm(2) tells me everything is allright. Port
range and enable argument are set according to my specs in ioperm_args.
More information about the freebsd-hackers
mailing list