linux/tools/include/nolibc
Ryan Roberts 4893c22eb2 tools/nolibc/stdio: add setvbuf() to set buffering mode
Add a minimal implementation of setvbuf(), which error checks the mode
argument (as required by spec) and returns. Since nolibc never buffers
output, nothing needs to be done.

The kselftest framework recently added a call to setvbuf(). As a result,
any tests that use the kselftest framework and nolibc cause a compiler
error due to missing function. This provides an urgent fix for the
problem which is preventing arm64 testing on linux-next.

Example:

clang --target=aarch64-linux-gnu -fintegrated-as
-Werror=unknown-warning-option -Werror=ignored-optimization-argument
-Werror=option-ignored -Werror=unused-command-line-argument
--target=aarch64-linux-gnu -fintegrated-as
-fno-asynchronous-unwind-tables -fno-ident -s -Os -nostdlib \
-include ../../../../include/nolibc/nolibc.h -I../..\
-static -ffreestanding -Wall za-fork.c
build/kselftest/arm64/fp/za-fork-asm.o
-o build/kselftest/arm64/fp/za-fork
In file included from <built-in>:1:
In file included from ./../../../../include/nolibc/nolibc.h:97:
In file included from ./../../../../include/nolibc/arch.h:25:
./../../../../include/nolibc/arch-aarch64.h:178:35: warning: unknown
attribute 'optimize' ignored [-Wunknown-attributes]
void __attribute__((weak,noreturn,optimize("omit-frame-pointer")))
__no_stack_protector _start(void)
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from za-fork.c:12:
../../kselftest.h:123:2: error: call to undeclared function 'setvbuf';
ISO C99 and later do not support implicit function declarations
[-Wimplicit-function-declaration]
        setvbuf(stdout, NULL, _IOLBF, 0);
        ^
../../kselftest.h:123:24: error: use of undeclared identifier '_IOLBF'
        setvbuf(stdout, NULL, _IOLBF, 0);
                              ^
1 warning and 2 errors generated.

Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Link: https://lore.kernel.org/linux-kselftest/CA+G9fYus3Z8r2cg3zLv8uH8MRrzLFVWdnor02SNr=rCz+_WGVg@mail.gmail.com/
Reviewed-by: Mark Brown <broonie@kernel.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: aarch64: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-arm.h tools/nolibc: arm: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-i386.h tools/nolibc: i386: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-loongarch.h tools/nolibc: loongarch: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-mips.h tools/nolibc: mips: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-riscv.h tools/nolibc: riscv: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-s390.h tools/nolibc: s390: shrink _start with _start_c 2023-08-23 04:40:22 +02:00
arch-x86_64.h tools/nolibc: x86_64: shrink _start with _start_c 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: crt.h: initialize stack protector 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: stackprotector.h: add empty __stack_chk_init for !_NOLIBC_STACKPROTECTOR 2023-08-23 04:40:22 +02: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/stdio: add setvbuf() to set buffering mode 2023-08-23 04:40:22 +02: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