diff options
| author | Alexandros Naskos <alex_naskos@hotmail.com> | 2020-03-02 00:55:19 +0200 |
|---|---|---|
| committer | Alexandros Naskos <alex_naskos@hotmail.com> | 2020-03-02 00:55:19 +0200 |
| commit | b838122cc0bfef2d986c6addc688a35318777034 (patch) | |
| tree | 2ed5ef3aab4f9fa1f7f0bac2ad28690c3966ddcc /src/glibc.cpp | |
| parent | 78e4daaa03613da5d1398f7c3bcbfda24086b051 (diff) | |
| parent | 00be934569d25e3b041091ff63a4cf6c456d1403 (diff) | |
| download | zig-b838122cc0bfef2d986c6addc688a35318777034.tar.gz zig-b838122cc0bfef2d986c6addc688a35318777034.zip | |
Merge branch 'master' of https://github.com/ziglang/zig into tuple_concat
Diffstat (limited to 'src/glibc.cpp')
| -rw-r--r-- | src/glibc.cpp | 63 |
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); } |
