ability to target any glibc version

This commit is contained in:
Andrew Kelley
2019-07-07 17:06:09 -04:00
parent 3b97940fb3
commit 7ccf7807b3
14 changed files with 691 additions and 53 deletions

View File

@@ -9,9 +9,13 @@ static Buf saved_stage1_path = BUF_INIT;
static Buf saved_lib_dir = BUF_INIT;
static Buf saved_special_dir = BUF_INIT;
static Buf saved_std_dir = BUF_INIT;
static Buf saved_dynamic_linker_path = BUF_INIT;
static bool searched_for_dyn_linker = false;
static Buf saved_libc_path = BUF_INIT;
static bool searched_for_libc = false;
Buf *get_stage1_cache_path(void) {
if (saved_stage1_path.list.length != 0) {
return &saved_stage1_path;
@@ -36,6 +40,28 @@ static void detect_dynamic_linker(Buf *lib_path) {
#endif
}
const Buf *get_self_libc_path(void) {
for (;;) {
if (saved_libc_path.list.length != 0) {
return &saved_libc_path;
}
if (searched_for_libc)
return nullptr;
ZigList<Buf *> lib_paths = {};
Error err;
if ((err = os_self_exe_shared_libs(lib_paths)))
return nullptr;
for (size_t i = 0; i < lib_paths.length; i += 1) {
Buf *lib_path = lib_paths.at(i);
if (buf_ends_with_str(lib_path, "libc.so.6")) {
buf_init_from_buf(&saved_libc_path, lib_path);
return &saved_libc_path;
}
}
searched_for_libc = true;
}
}
Buf *get_self_dynamic_linker_path(void) {
for (;;) {
if (saved_dynamic_linker_path.list.length != 0) {