summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibC/CMakeLists.txt
AgeCommit message (Collapse)Author
2021-09-16LibC: Implement CODESET for langinfoTim Schumacher
2021-09-15Meta: Switch to a SuperBuild that splits host and target buildsAndrew Kaster
Replace the old logic where we would start with a host build, and swap all the CMake compiler and target variables underneath it to trick CMake into building for Serenity after we configured and built the Lagom code generators. The SuperBuild creates two ExternalProjects, one for Lagom and one for Serenity. The Serenity project depends on the install stage for the Lagom build. The SuperBuild also generates a CMakeToolchain file for the Serenity build to use that replaces the old toolchain file that was only used for Ports. To ensure that code generators are rebuilt when core libraries such as AK and LibCore are modified, developers will need to direct their manual `ninja` invocations to the SuperBuild's binary directory instead of the Serenity binary directory. This commit includes warning coalescing and option style cleanup for the affected CMakeLists in the Kernel, top level, and runtime support libraries. A large part of the cleanup is replacing USE_CLANG_TOOLCHAIN with the proper CMAKE_CXX_COMPILER_ID variable, which will no longer be confused by a host clang compiler.
2021-08-28CMake: Let `Meta/serenity.sh run aarch64` make it past cmakeNico Weber
This adds just enough scaffolding to make cmake succeed. The build falls over immediately.
2021-08-14LibC: Add stubs for several functions in xattr.hKenneth Myhra
The following functions are stubbed out: - getxattr - lgetxattr - fgetxattr - setxattr - lsetxattr - fsetxattr - listxattr - llistxattr - flistxattr
2021-08-14LibC: Add stub for res_queryKenneth Myhra
2021-08-14LibC: Add stub for fnmatch and a set of defined valuesKenneth Myhra
This adds a stub for fnmatch and the following defined values: - FNM_PATHNAME - FNM_NOESCAPE - FNM_PERIOD - FNM_FILE_NAME - FNM_LEADING_DIR - FNM_CASEFOLD - FNM_EXTMATCH
2021-08-12LibC+DynamicLoader: Prevent GCC from removing null checksDaniel Bertalan
GCC implements `fputc`, `fputs` and `fwrite` as builtin functions, whose `FILE*` argument is implicitly marked `__attribute__((nonnull))`. This causes our `VERIFY(stream)` statements to be removed. This does not happen with Clang, as they do not use the `nonnull` attribute in this way.
2021-08-12LibC: Add stub forwarders to LibRegex C APIJean-Baptiste Boric
The POSIX C regex functions are expected to live in the C standard library, but Serenity split off its regex library into LibRegex. Make a compromise by implementing stub forwarders for the C regex library that load libregex.so and call the real implementation. This is needed for ports that expect these C functions to be available inside the standard C library without introducing a strong coupling between LibC and LibDl or LibRegex. The non-standard Serenity C++ regex API still lives inside LibRegex as before.
2021-08-08Meta: Add Clang support to the CMake build scriptsDaniel Bertalan
2021-07-20LibC: Implement flock(2) using fcntl's F_SETLKPeter Elliott
While flock is not a posix interface, it exists on linux and all BSDs as far as I am aware.
2021-07-14LibC: Use our implementation of `crti.o` and `crtn.o`Daniel Bertalan
We have had these for quite a while, but we didn't compile them, and used GCC's version instead. Clang does not come with these, so we have to provide our own implementation. Our implementation follows what `musl` and `FreeBSD` do, so this should work fine, even if documentation can hardly be found for them.
2021-07-10Kernel+Userland: Make the stack alignment comply with the System V ABIGunnar Beutner
The System V ABI for both x86 and x86_64 requires that the stack pointer is 16-byte aligned on entry. Previously we did not align the stack pointer properly. As far as "main" was concerned the stack alignment was correct even without this patch due to how the C++ _start function and the kernel interacted, i.e. the kernel misaligned the stack as far as the ABI was concerned but that misalignment (read: it was properly aligned for a regular function call - but misaligned in terms of what the ABI dictates) was actually expected by our _start function.
2021-07-09LibC: Make sure crt0 and crt0_shared are built before LibCGunnar Beutner
We need these two object files in order for ld to work. Fixes #4538.
2021-05-30LibC: Add stubs for wctype and iswctypeTim Schumacher
2021-05-27Userland: Port UBSAN implementation to userspaceAndrew Kaster
Take Kernel/UBSanitizer.cpp and make a copy in LibSanitizer. We can use LibSanitizer to hold other sanitizers as people implement them :^). To enable UBSAN for LibC, DynamicLoader, and other low level system libraries, LibUBSanitizer is built as a serenity_libc, and has a static version for LibCStatic to use. The approach is the same as that taken in Note that this means now UBSAN is enabled for code generators, Lagom, Kernel, and Userspace with -DENABLE_UNDEFINED_SANTIZER=ON. In userspace however, UBSAN is not deadly (yet). Co-authored-by: ForLoveOfCats <ForLoveOfCats@vivaldi.net>
2021-05-19LibC: Add functions for the new statvfs syscallsJustin
This commit adds the statvfs() and fstatvfs() functions into LibC.
2021-05-14LibC: Move mman.h to sys/mman.hJean-Baptiste Boric
POSIX mandates that it is placed there.
2021-05-09LibC: Add definitions/stubs for IPv6 functionalityGunnar Beutner
This lets us build some of the ports without patching out any of their IPv6 stuff.
2021-05-01LibC: Implement support for getspnam() and friendsGunnar Beutner
2021-04-30LibC: Implement openpty(), forkpty() and login_tty()Gunnar Beutner
These are used by OpenSSH.
2021-04-29Tests: Unify LibC tests to single location.Brian Gianforcaro
In a1720eed2a8e744f2cd6d99adae4dff1fbab309e I added this new test, but missed that there were already some "unit tests" for LibC over in Userland/Tests/LibC. So lets unify these two locations.
2021-04-21LibC: Setup a unit test harness for LibC, add ctime_r / asctime_r tests.Brian Gianforcaro
LibC is no different than any other code, it should be unit tested where appropriate / possible.
2021-04-20LibC+LibPthread: Implement function forwarding for libpthreadGunnar Beutner
GCC will insert various calls to pthread functions when compiling C++ code with static initializers, even when the user doesn't link their program against libpthread explicitly. This is used to make static initializers thread-safe, e.g. when building a library that does not itself use thread functionality and thus does not link against libpthread - but is intended to be used with other code that does use libpthread explicitly. This makes these symbols available in libc.
2021-04-18LibC+LibELF: Implement support for the dl_iterate_phdr helperGunnar Beutner
This helper is used by libgcc_s to figure out where the .eh_frame sections are located for all loaded shared objects.
2021-04-16Toolchain+LibC: Don't link LibC against crt0Gunnar Beutner
Instead GCC should be used to automatically link against crt0 and crt0_shared depending on the type of object file that is being built. Unfortunately this requires a rebuild of the toolchain as well as everything that has been built with the old GCC.
2021-04-14LibPthread: Implement semaphore functionsGunnar Beutner
2021-03-21LibC: Add x86_64 RegistersHendiadyoin1
2021-03-19CMake: Make libc.a self-containedItamar
Previously, libc.a contained undefined symbols from ssp and libsystem, which caused static compilation to fail. We now generate libc.a with a custom CMake rule that combines all object files from libc, ssp and libsystem to form libc.a Closes #5758.
2021-03-09LibC: Add imaxdiv and lldivMițca Dumitru
2021-03-01LibC: Implement fenv.hMițca Dumitru
2021-02-25LibC: Add x86_64 implementation of setjmp() and longjmp()Andreas Kling
2021-02-24LibC+DynamicLoader: Move "transactional memory" GCC stubs to LibCAndreas Kling
Instead of having a special case in the dynamic loader where we ignore TM-related GCC symbols, just stub them out in LibC like we already do for various other things we don't support.
2021-02-15Meta: Make it possible to (somewhat) build the system inside SerenityAnotherTest
This removes some hard references to the toolchain, some unnecessary uses of an external install command, and disables a -Werror flag (for the time being) - only if run inside serenity. With this, we can build and link the kernel :^)
2021-02-15LibC+LibPthread: Implement pthread_atfork()AnotherTest
This required a bit of rearchitecture, as pthread_atfork() required a mutex, and duplicating a mutex impl for it was silly. As such, this patch moves some standalone bits of pthread into LibC and uses those to implement atfork(). It should be noted that for programs that don't use atfork(), this mechanism only costs two atomic loads (as opposed to the normal mutex lock+unlock) :^)
2021-02-15LibC: Stub out semaphore.hAnotherTest
2021-02-05Userland: Add LibSystem and funnel all syscalls through itAndreas Kling
This achieves two things: - Programs can now intentionally perform arbitrary syscalls by calling syscall(). This allows us to work on things like syscall fuzzing. - It restricts the ability of userspace to make syscalls to a single 4KB page of code. In order to call the kernel directly, an attacker must now locate this page and call through it.
2021-01-12Libraries: Move to Userland/Libraries/Andreas Kling