Date: Tue, 9 Aug 2005 15:31:09 +0200 From: alexander <arundel@h3c.de> To: freebsd-hackers@freebsd.org Subject: Re: Using sysarch specific syscalls in assembly? Message-ID: <20050809133109.GA15300@skatecity> In-Reply-To: <20050809101409.Y73394@fledge.watson.org> References: <20050808202039.C988B43D48@mx1.FreeBSD.org> <20050809101409.Y73394@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050809133109.GA15300>