All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: 'Ammar Faizi' <ammarfaizi2@gnuweeb.org>, Willy Tarreau <w@1wt.eu>
Cc: "Paul E. McKenney" <paulmck@kernel.org>,
	Alviro Iskandar Setiawan <alviro.iskandar@gnuweeb.org>,
	Nugraha <richiisei@gmail.com>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	GNU/Weeb Mailing List <gwml@vger.gnuweeb.org>,
	"x86@kernel.org" <x86@kernel.org>,
	"llvm@lists.linux.dev" <llvm@lists.linux.dev>
Subject: RE: [RFC PATCH v1 3/6] tools/nolibc: i386: Implement syscall with 6 arguments
Date: Sun, 20 Mar 2022 13:10:33 +0000	[thread overview]
Message-ID: <2e335ac54db44f1d8496583d97f9dab0@AcuMS.aculab.com> (raw)
In-Reply-To: <20220320093750.159991-4-ammarfaizi2@gnuweeb.org>

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)

>   2) Load the 6-th argument from memory to %ebp.
>   3) Subtract the %esp by 4.
>   4) Do the syscall (int $0x80).
>   5) Pop %ebp.
> 
> For GCC, fortunately it has a #pragma that can force a specific function
> to be compiled with -fomit-frame-pointer, so it can always use "r"(var)
> where `var` is a variable bound to %ebp.

How is that going to work for an inlined functon?

And using xchg is slow - it is always locked.

One possibility might be to do:
	push arg6
	push %ebp
	mov  %ebp, 4(%sp)
	int  0x80
	pop  %ebp
	add  %esp,4

Although I'm not sure you really want to allocate 4k pages
for every malloc() call.

Probably better to write a mini 'libc' that uses sbrk()
and a best fit scan of a linear free list.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


  parent reply	other threads:[~2022-03-20 13:10 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-20  9:37 [RFC PATCH v1 0/6] Add dynamic memory allocator support for nolibc Ammar Faizi
2022-03-20  9:37 ` [RFC PATCH v1 1/6] tools/nolibc: x86-64: Update System V ABI document link Ammar Faizi
2022-03-20  9:37 ` [RFC PATCH v1 2/6] tools/nolibc: Make the entry point not weak for clang Ammar Faizi
2022-03-20 19:16   ` Willy Tarreau
2022-03-21 11:38     ` Ammar Faizi
2022-03-21 17:27       ` Nick Desaulniers
2022-03-20  9:37 ` [RFC PATCH v1 3/6] tools/nolibc: i386: Implement syscall with 6 arguments Ammar Faizi
2022-03-20 10:33   ` Alviro Iskandar Setiawan
2022-03-20 10:42     ` Alviro Iskandar Setiawan
2022-03-20 15:09       ` Ammar Faizi
2022-03-20 13:10   ` David Laight [this message]
2022-03-20 14:01     ` Willy Tarreau
2022-03-20 15:04     ` Ammar Faizi
2022-03-20 18:22       ` David Laight
2022-03-20  9:37 ` [RFC PATCH v1 4/6] tools/nolibc/sys: Implement `mmap()` and `munmap()` Ammar Faizi
2022-03-20  9:37 ` [RFC PATCH v1 5/6] tools/nolibc/stdlib: Implement `malloc()`, `calloc()`, `realloc()` and `free()` Ammar Faizi
2022-03-20 15:50   ` Alviro Iskandar Setiawan
2022-03-20 16:10     ` Ammar Faizi
2022-03-20 16:16   ` Willy Tarreau
2022-03-20 16:36     ` Ammar Faizi
2022-03-20 16:46       ` Willy Tarreau
2022-03-20  9:37 ` [RFC PATCH v1 6/6] tools/include/string: Implement `strdup()` and `strndup()` Ammar Faizi
2022-03-20 15:55   ` Alviro Iskandar Setiawan
2022-03-20 16:10     ` Ammar Faizi
2022-03-21  7:53   ` Willy Tarreau
2022-03-21  8:16     ` Alviro Iskandar Setiawan
2022-03-21  8:51       ` Willy Tarreau
2022-03-21 11:36     ` Ammar Faizi
2022-03-21 11:43       ` Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2e335ac54db44f1d8496583d97f9dab0@AcuMS.aculab.com \
    --to=david.laight@aculab.com \
    --cc=alviro.iskandar@gnuweeb.org \
    --cc=ammarfaizi2@gnuweeb.org \
    --cc=gwml@vger.gnuweeb.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=paulmck@kernel.org \
    --cc=richiisei@gmail.com \
    --cc=w@1wt.eu \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.