Date: Tue, 9 Aug 2005 11:03:04 -0400 From: John Baldwin <jhb@FreeBSD.org> To: freebsd-hackers@freebsd.org Subject: Re: Using sysarch specific syscalls in assembly? Message-ID: <200508091103.04881.jhb@FreeBSD.org> In-Reply-To: <20050809133109.GA15300@skatecity> References: <20050808202039.C988B43D48@mx1.FreeBSD.org> <20050809101409.Y73394@fledge.watson.org> <20050809133109.GA15300@skatecity>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 09 August 2005 09:31 am, alexander wrote: > 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 Just change this to: push byte ioperm_args ; this might be wrong, you need ; to be pushing a 32-bit pointer ; to the ioperm_args structure, not ; a byte push dword I386_SET_IOPERM call sysarch addl $8,%esp ret To use the sysarch() function in libc. -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508091103.04881.jhb>