forked from ziglang/zig
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request ziglang#15101 from motiejus/glibc_compat
glibc: add backwards compatibility for some symbols
- Loading branch information
Showing
7 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
glibc headers are slightly patched for backwards compatibility. This is not | ||
good, because it requires to maintain our patchset whlist upgrading glibc. | ||
|
||
Until universal headers are real and this file can be removed, these commits | ||
need to be cherry-picked in the future glibc header upgrades: | ||
|
||
- 39083c31a550ed80f369f60d35791e98904b8096 | ||
- a89813ef282c092a9caf699731c7faaf485acabe |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
const std = @import("std"); | ||
|
||
pub fn build(b: *std.Build) void { | ||
const test_step = b.step("test", "Test"); | ||
b.default_step = test_step; | ||
|
||
inline for (.{ "aarch64-linux-gnu.2.27", "aarch64-linux-gnu.2.34" }) |t| { | ||
const exe = b.addExecutable(.{ | ||
.name = t, | ||
.root_source_file = .{ .path = "main.c" }, | ||
.target = std.zig.CrossTarget.parse( | ||
.{ .arch_os_abi = t }, | ||
) catch unreachable, | ||
}); | ||
exe.linkLibC(); | ||
test_step.dependOn(&exe.step); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#define _FILE_OFFSET_BITS 64 | ||
#include <unistd.h> | ||
#include <fcntl.h> | ||
#include <stdio.h> | ||
#include <resolv.h> | ||
|
||
int main() { | ||
/* in glibc 2.28+ and _FILE_OFFSET_BITS=64 fcntl is #define'd to fcntl64 | ||
* Thus headers say `fcntl64` exists, but libc.so.6 (the old one) | ||
* disagrees, resulting in a linking error unless headers are made | ||
* backwards-compatible. | ||
* | ||
* Glibc 2.28+: | ||
* FUNC GLOBAL DEFAULT UND fcntl64@GLIBC_2.28 (3): | ||
* | ||
* Glibc 2.27 or older: | ||
* FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 | ||
*/ | ||
printf("address to fcntl: %p\n", fcntl); | ||
|
||
/* The following functions became symbols of their own right with glibc | ||
* 2.34+. Before 2.34 resolv.h would #define res_search __res_search; and | ||
* __res_search is a valid symbol since the beginning of time. | ||
* | ||
* On glibc 2.34+ these symbols are linked this way: | ||
* FUNC GLOBAL DEFAULT UND res_search@GLIBC_2.34 (2) | ||
* | ||
* Pre-glibc 2.34: | ||
* FUNC GLOBAL DEFAULT UND __res_search@GLIBC_2.2.5 (4) | ||
*/ | ||
printf("address to res_search: %p\n", res_search); | ||
printf("address to res_nsearch: %p\n", res_nsearch); | ||
printf("address to res_query: %p\n", res_query); | ||
printf("address to res_nquery: %p\n", res_nquery); | ||
printf("address to res_querydomain: %p\n", res_querydomain); | ||
printf("address to res_nquerydomain: %p\n", res_nquerydomain); | ||
} |