On Thu, Oct 7, 2021 at 7:27 PM Jens Axboe <axboe@xxxxxxxxx> wrote: > > On 10/7/21 12:31 AM, Ammar Faizi wrote: > > Create `src/nolibc.c` to substitute libc functions like `memset()`, > > `malloc()` and `free()`. Only build this file when we build liburing > > without libc. > > > > Wrap libc functions with `static inline` functions, defined in > > `src/lib.h`, currently we have: > > 1) `get_page_size` > > 2) `uring_memset` > > 3) `uring_malloc` > > 4) `uring_free` > > > > Add conditional preprocessor in `src/{syscall,lib}.h` to use arch > > dependent and nolibc functions when we build liburing without libc. > > > > Extra notes for tests: > > 1) Functions in `src/syscall.c` require libc to work. > > 2) Tests require functions in `src/syscall.c`. > > > > So we build `src/syscall.c` manually from test's Makefile. > > > > The Makefile in `src/` dir still builds `src/syscall.c` when we > > compile liburing with libc. > > Why are we jumping through hoops on the naming? You add a uring_memset() > that the lib is supposed to use, then that calls memset() with libc or > __uring_memset() if we're building without libc. Why not just have the > nolibc build provide memset() and avoids this churn? Not just in terms > of the immediate patch, that matters less. But longer term where > inevitably a memset() or similar will be added to the existing code > base. > Ah, good point. The syscall wrappers gave me this bad suggestion. I know we have a rationale to wrap syscalls because we need to eliminate `errno` being used in C files. But we don't actually need extra wrappers for `memset()`, `malloc()` and `free()`. I agree that we can just provide `memset()`, `malloc()` and `free()` for the nolibc build without having extra wrappers like that. I will address this and send the rest as a PATCHSET. -- Ammar Faizi