aboutsummaryrefslogtreecommitdiff
path: root/src/glibc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibc.cpp')
-rw-r--r--src/glibc.cpp63
1 files changed, 13 insertions, 50 deletions
diff --git a/src/glibc.cpp b/src/glibc.cpp
index 849aac6c77..da5c1d5290 100644
--- a/src/glibc.cpp
+++ b/src/glibc.cpp
@@ -55,7 +55,7 @@ Error glibc_load_metadata(ZigGLibCAbi **out_result, Buf *zig_lib_dir, bool verbo
Optional<Slice<uint8_t>> opt_component = SplitIterator_next(&it);
if (!opt_component.is_some) break;
Buf *ver_buf = buf_create_from_slice(opt_component.value);
- ZigGLibCVersion *this_ver = glibc_abi->all_versions.add_one();
+ Stage2SemVer *this_ver = glibc_abi->all_versions.add_one();
if ((err = target_parse_glibc_version(this_ver, buf_ptr(ver_buf)))) {
if (verbose) {
fprintf(stderr, "Unable to parse glibc version '%s': %s\n", buf_ptr(ver_buf), err_str(err));
@@ -186,9 +186,9 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con
cache_buf(cache_hash, compiler_id);
cache_int(cache_hash, target->arch);
cache_int(cache_hash, target->abi);
- cache_int(cache_hash, target->glibc_version->major);
- cache_int(cache_hash, target->glibc_version->minor);
- cache_int(cache_hash, target->glibc_version->patch);
+ cache_int(cache_hash, target->glibc_or_darwin_version->major);
+ cache_int(cache_hash, target->glibc_or_darwin_version->minor);
+ cache_int(cache_hash, target->glibc_or_darwin_version->patch);
Buf digest = BUF_INIT;
buf_resize(&digest, 0);
@@ -224,10 +224,10 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con
uint8_t target_ver_index = 0;
for (;target_ver_index < glibc_abi->all_versions.length; target_ver_index += 1) {
- const ZigGLibCVersion *this_ver = &glibc_abi->all_versions.at(target_ver_index);
- if (this_ver->major == target->glibc_version->major &&
- this_ver->minor == target->glibc_version->minor &&
- this_ver->patch == target->glibc_version->patch)
+ const Stage2SemVer *this_ver = &glibc_abi->all_versions.at(target_ver_index);
+ if (this_ver->major == target->glibc_or_darwin_version->major &&
+ this_ver->minor == target->glibc_or_darwin_version->minor &&
+ this_ver->patch == target->glibc_or_darwin_version->patch)
{
break;
}
@@ -235,9 +235,9 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con
if (target_ver_index == glibc_abi->all_versions.length) {
if (verbose) {
fprintf(stderr, "Unrecognized glibc version: %d.%d.%d\n",
- target->glibc_version->major,
- target->glibc_version->minor,
- target->glibc_version->patch);
+ target->glibc_or_darwin_version->major,
+ target->glibc_or_darwin_version->minor,
+ target->glibc_or_darwin_version->patch);
}
return ErrorUnknownABI;
}
@@ -246,7 +246,7 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con
Buf *map_contents = buf_alloc();
for (uint8_t ver_i = 0; ver_i < glibc_abi->all_versions.length; ver_i += 1) {
- const ZigGLibCVersion *ver = &glibc_abi->all_versions.at(ver_i);
+ const Stage2SemVer *ver = &glibc_abi->all_versions.at(ver_i);
if (ver->patch == 0) {
buf_appendf(map_contents, "GLIBC_%d.%d { };\n", ver->major, ver->minor);
} else {
@@ -294,7 +294,7 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con
uint8_t ver_index = ver_list->versions[ver_i];
Buf *stub_name;
- const ZigGLibCVersion *ver = &glibc_abi->all_versions.at(ver_index);
+ const Stage2SemVer *ver = &glibc_abi->all_versions.at(ver_index);
const char *sym_name = buf_ptr(libc_fn->name);
if (ver->patch == 0) {
stub_name = buf_sprintf("%s_%d_%d", sym_name, ver->major, ver->minor);
@@ -362,43 +362,6 @@ bool eql_glibc_target(const ZigTarget *a, const ZigTarget *b) {
a->abi == b->abi;
}
-#ifdef ZIG_OS_LINUX
-#include <unistd.h>
-Error glibc_detect_native_version(ZigGLibCVersion *glibc_ver) {
- Buf *self_libc_path = get_self_libc_path();
- if (self_libc_path == nullptr) {
- // TODO There is still more we could do to detect the native glibc version. For example,
- // we could look at the ELF file of `/usr/bin/env`, find `libc.so.6`, and then `readlink`
- // to find out the glibc version. This is relevant for the static zig builds distributed
- // on the download page, since the above detection based on zig's own dynamic linking
- // will not work.
-
- return ErrorUnknownABI;
- }
- Buf *link_name = buf_alloc();
- buf_resize(link_name, 4096);
- ssize_t amt = readlink(buf_ptr(self_libc_path), buf_ptr(link_name), buf_len(link_name));
- if (amt == -1) {
- return ErrorUnknownABI;
- }
- buf_resize(link_name, amt);
- if (!buf_starts_with_str(link_name, "libc-") || !buf_ends_with_str(link_name, ".so")) {
- return ErrorUnknownABI;
- }
- // example: "libc-2.3.4.so"
- // example: "libc-2.27.so"
- buf_resize(link_name, buf_len(link_name) - 3); // chop off ".so"
- glibc_ver->major = 2;
- glibc_ver->minor = 0;
- glibc_ver->patch = 0;
- return target_parse_glibc_version(glibc_ver, buf_ptr(link_name) + 5);
-}
-#else
-Error glibc_detect_native_version(ZigGLibCVersion *glibc_ver) {
- return ErrorUnknownABI;
-}
-#endif
-
size_t glibc_lib_count(void) {
return array_length(glibc_libs);
}