[taking in Segher as gcc expert] On 16.10.2008 14:53, Myles Watson wrote: > On Wed, Oct 15, 2008 at 5:44 PM, Carl-Daniel Hailfinger wrote: > >> On 16.10.2008 01:13, Peter Stuge wrote: >> >>> ron minnich wrote: >>> >>>> Myles, try setting -mregparm=0 and see if life is better. >>>> >>>> >>> Good find. >>> >>> >> __attribute__((stdcall)) will do this for you. >> > It doesn't work for me. I tried it in various places, but it doesn't change > the way the parameters are handled. > > void __attribute__ ((stdcall)) callbiosint(void) > __attribute__ ((stdcall)) void callbiosint(void) > void callbiosint(void) __attribute__ ((stdcall)) > > biosint: INT# 0x18 > biosint: eax 0x2e ebx 0x10000 ecx 0xfe4 edx 0xcf11c > biosint: ebp 0xc0000000 esp 0xd0000 edi 0x1a esi 0x0 > biosint: ip 0x1022 cs 0xf flags 0x2067 > BIOSINT: Unsupport int #0x18 >
What about __attribute__((regparm(0))) ? The gcc documentation is not clear on this, but a call made this way should take all of its arguments from the stack. Segher: How do regparm(0) and stdcall differ for i386? Regards, Carl-Daniel -- http://www.hailfinger.org/ -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

