-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add support for targeting glibc 2.39 #20207
Conversation
Wow, so glad they updated the copyright year on all 1500 files to 2024... Github is having problems with inline code reviews on this enormous change, so I'll make my comments here. In I randomly sampled the rest of the diff, and the only thing I noticed was that libcrypt has been fully deprecated, so there are several changes in here that remove the So, LGTM! |
no kidding 🙄 Thanks for the review! |
Instead Zig passes it based on the target.
This is a patch to glibc features.h which makes _DYNAMIC_STACK_SIZE_SOURCE undefined unless the version is >= 2.34. This feature was introduced with glibc 2.34 and without this patch, code built against these headers but then run on an older glibc will end up making a call to sysconf() that returns -1 for the value of SIGSTKSZ and MINSIGSTKSZ.
- `fcntl` was renamed to `fcntl64` in glibc 2.28 (see #9485) - `res_{,n}{search,query,querydomain}` became "their own" symbols since glibc 2.34: they were prefixed with `__` before. This PR makes it possible to use `fcntl` with glibc 2.27 or older and the `res_*` functions with glibc 2.33 or older. These patches will become redundant with universal-headers and can be dropped. But we have to do with what we have now.
This is necessary to build glib.
following suit from b40943e, add a version guard in addition to the ISOC2X check.
Here's the glibc commit that adds reallocarray to glibc: https://sourceware.org/git/?p=glibc.git;a=commit;h=2e0bbbfbf95fc9e22692e93658a6fbdd2d4554da The reallocarray symbol is declared in both stdlib.h and malloc.h. Fix #17607
So only expose these in generic-glibc/string.h if Zig is building a v2.38 (or later) glibc stub. Announcement of 2.38 that notes strlcpy and strlcat: https://lists.gnu.org/archive/html/info-gnu/2023-07/msg00010.html
generated from ziglang/glibc-abi-tool commit fc5d0a7046b76795e4219f8f168e118ec29fbc53 which now contains glibc 2.39
README file stays intact.
- `fcntl` was renamed to `fcntl64` in glibc 2.28 (see #9485) - `res_{,n}{search,query,querydomain}` became "their own" symbols since glibc 2.34: they were prefixed with `__` before. This PR makes it possible to use `fcntl` with glibc 2.27 or older and the `res_*` functions with glibc 2.33 or older. These patches will become redundant with universal-headers and can be dropped. But we have to do with what we have now.
I could have just included the file from upstream glibc, but it was too silly so I just inlined it. This patch could be dropped in a future glibc update if desired. If omitted it will cause easily solvable C compilation failures building glibc nonshared.
instead of importing every header file under the sun, I copied a couple inline functions into these files to make them work.
I don't know where glibc thinks uintptr_t is coming from, but here it is.
This is the only place in all of glibc that this macro is referenced. What is it doing? Only preventing fstatat.c from knowing the type definition of `__time64_t`, apparently. Fixes compilation of fstatat.c on 32-bit x86.
These are tripping on 32-bit x86 but are intended to prevent glibc itself from being built with a bad configuration. Zig is only using this file to create libc_nonshared.a, so it's not relevant.
The scope of libc_nonshared.a was greatly changed in glibc 2.33 and 2.34, but only the change from 2.34 was reflected so far. Glibc 2.33 finally switched to versioned symbols for stat functions, meaning that libc_nonshared.a no longer contains them since 2.33. Relevant files were therefore reverted to 2.32 versions and renamed accordingly. This commit also removes errno.c, which was probably added to libc_nonshared.a based on a wrong assumption that glibc/include/errno.h requires glibc/csu/errno.c. In reality errno.h should refer to __libc_errno (not to be confused with the public __errno_location), which should be imported from libc.so. The inclusion of errno.c resulted in wrong compile options as well; this commit fixes them as well.
The fstat,lstat,stat,mknod stubs used to build older (before v2.33) glibc versions depend on the weak_hidden_alias macro. It was removed from the glibc libc-symbols header, so patch it back in for the older builds.
closes #20106
cc @rootbeer and @motiejus for review (if you're interested)