[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f99f135ffd1345d29f545938cdaa7973@AcuMS.aculab.com>
Date: Sun, 20 Mar 2022 18:22:35 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Ammar Faizi' <ammarfaizi2@...weeb.org>, Willy Tarreau <w@....eu>
CC: "Paul E. McKenney" <paulmck@...nel.org>,
Alviro Iskandar Setiawan <alviro.iskandar@...weeb.org>,
Nugraha <richiisei@...il.com>,
"Linux Kernel Mailing List" <linux-kernel@...r.kernel.org>,
GNU/Weeb Mailing List <gwml@...r.gnuweeb.org>,
"x86@...nel.org" <x86@...nel.org>,
"llvm@...ts.linux.dev" <llvm@...ts.linux.dev>
Subject: RE: [RFC PATCH v1 3/6] tools/nolibc: i386: Implement syscall with 6
arguments
From: Ammar Faizi
> Sent: 20 March 2022 15:04
> On 3/20/22 8:10 PM, David Laight wrote:
> > From: Ammar Faizi
> >> Sent: 20 March 2022 09:38
> >>
> >> In i386, the 6th argument of syscall goes in %ebp. However, both Clang
> >> and GCC cannot use %ebp in the clobber list and in the "r" constraint
> >> without using -fomit-frame-pointer. To make it always available for any
> >> kind of compilation, the below workaround is implemented.
> >>
> >> For clang (the Assembly statement can't clobber %ebp):
> >> 1) Save the %ebp value to the redzone area -4(%esp).
> >
> > i386 doesn't have a redzone.
> > If you get a signal it will trash -4(%sp)
>
> OK, I missed that one. Thanks for reviewing this.
>
...
> >
> > One possibility might be to do:
> > push arg6
> > push %ebp
> > mov %ebp, 4(%sp)
>
> Did you mean `mov 4(%esp), %ebp`?
>
> > int 0x80
> > pop %ebp
> > add %esp,4
>
> I think your solution is better than the xchg approach (with the 3rd line
> fixed). Will take this in for the next version.
It has to be said that although I've been writing x86 asm
for 40 years (and others for longer) I can never actually
remember the exact syntax or order of the operands!
Probably because it is randomly different between assemblers.
You want the 'memory read' instruction: 8b /r.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Powered by blists - more mailing lists