Date: Wed, 10 Aug 2005 15:09:28 +0200 From: alexander <arundel@h3c.de> To: freebsd-hackers@freebsd.org Subject: Re: Using sysarch specific syscalls in assembly? Message-ID: <20050810130928.GA2027@skatecity> In-Reply-To: <20050809192530.GA19230@skatecity> References: <20050809133109.GA15300@skatecity> <20050809154541.C057243D45@mx1.FreeBSD.org> <20050809192530.GA19230@skatecity>
next in thread | previous in thread | raw e-mail | index | archive | help
I tried to write a little C app that uses sysarch and i386_set_ioperm to gain access to certain ports and after a bit of testing I'm pretty sure that there is a bug or better a timing issue with the sysarch syscall or the i386_set_ioperm procedure. Please have a look at the following code: //CODE START #include <machine/sysarch.h> int main (void) { unsigned int port = 0x378; unsigned char val = 'A'; int number = 4; static inline void outb (unsigned short int port, unsigned char val) { __asm__ volatile ("outb %0,%1\n"::"a" (val), "d" (port) ); } struct i386_ioperm_args { unsigned int start; unsigned int length; int enable; }; struct i386_ioperm_args *args; struct i386_ioperm_args arg; args = &arg; args->start = 0x378; args->length = 1; args->enable = 1; if(sysarch(number,args) == 0) { /* int i; for(i=0; i < 100; i++) { printf("DELAY\n"); } */ outb(0x378,0xF); exit(0); } else { printf("Error during syscall"); exit(1); } } //eof //CODE END On my PC this code will cause a core dump (Bus error: 10). If I however add a delay (the code that's commented out) the app will end without any errors. It seems FBSD needs some time to set the I/O permissions for an app. Can somebody test this code on his computer? Maybe this is a bug in RELENG_6. I'm running: FreeBSD 6.0-BETA1 #0: Mon Jul 18 03:00:45 CEST 2005 Thx a bunch.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050810130928.GA2027>