Using sysarch specific syscalls in assembly?

alexander arundel at
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

	push byte ioperm_args
	push dword I386_SET_IOPERM
	mov eax,SYSARCH
	Call _syscall
	lea esp,[esp+8]

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