mirror_ubuntu-kernels/tools/include/nolibc
Zhangjin Wu 1733675515 tools/nolibc: add new crt.h with _start_c
As the environ and _auxv support added for nolibc, the assembly _start
function becomes more and more complex and therefore makes the porting
of nolibc to new architectures harder and harder.

To simplify portability, this C version of _start_c() is added to do
most of the assembly start operations in C, which reduces the complexity
a lot and will eventually simplify the porting of nolibc to the new
architectures.

The new _start_c() only requires a stack pointer argument, it will find
argc, argv, envp/environ and _auxv for us, and then call main(),
finally, it exit() with main's return status. With this new _start_c(),
the future new architectures only require to add very few assembly
instructions.

As suggested by Thomas, users may use a different signature of main
(e.g. void main(void)), a _nolibc_main alias is added for main to
silence the warning about potential conflicting types.

As suggested by Willy, the code is carefully polished for both smaller
size and better readability with local variables and the right types.

Suggested-by: Willy Tarreau <w@1wt.eu>
Link: https://lore.kernel.org/lkml/20230715095729.GC24086@1wt.eu/
Suggested-by: Thomas Weißschuh <linux@weissschuh.net>
Link: https://lore.kernel.org/lkml/90fdd255-32f4-4caf-90ff-06456b53dac3@t-8ch.de/
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
2023-08-23 04:40:22 +02:00
..
.gitignore tools/nolibc: Add gitignore to avoid git complaints about sysroot 2023-03-20 08:45:21 -07:00
arch-aarch64.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch-arm.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch-i386.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch-loongarch.h tools/nolibc: fix up startup failures for -O0 under gcc < 11.1.0 2023-08-23 04:40:22 +02:00
arch-mips.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch-riscv.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch-s390.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch-x86_64.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
arch.h tools/nolibc: fix typo pint -> point 2023-06-09 11:46:08 -07:00
compiler.h tools/nolibc: fix segfaults on compilers without attribute no_stack_protector 2023-06-09 11:46:08 -07:00
crt.h tools/nolibc: add new crt.h with _start_c 2023-08-23 04:40:22 +02:00
ctype.h tools/nolibc: fix missing includes causing build issues at -O0 2023-01-09 09:36:05 -08:00
errno.h tools/nolibc: make errno a weak symbol instead of a static one 2023-01-10 13:33:55 -08:00
Makefile tools/nolibc: add new crt.h with _start_c 2023-08-23 04:40:22 +02:00
nolibc.h tools/nolibc: add missing my_syscall6() for mips 2023-08-23 04:38:02 +02:00
signal.h tools/nolibc: fix missing includes causing build issues at -O0 2023-01-09 09:36:05 -08:00
stackprotector.h tools/nolibc: fix segfaults on compilers without attribute no_stack_protector 2023-06-09 11:46:08 -07:00
std.h tools/nolibc: add stdint.h 2023-03-20 08:45:21 -07:00
stdint.h selftests/nolibc: not include limits.h for nolibc 2023-06-09 11:46:09 -07:00
stdio.h tools/nolibc: implement fd-based FILE streams 2023-06-09 11:33:05 -07:00
stdlib.h tools/nolibc: completely remove optional environ support 2023-08-23 04:40:22 +02:00
string.h tools/nolibc: use standard __asm__ statements 2023-06-09 11:46:07 -07:00
sys.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
time.h tools/nolibc: fix missing includes causing build issues at -O0 2023-01-09 09:36:05 -08:00
types.h tools/nolibc: remove the old sys_stat support 2023-08-23 04:40:22 +02:00
unistd.h tools/nolibc: unistd.h: reorder the syscall macros 2023-08-06 12:27:53 +02:00