From 245dc9d930a4f11a7ce719d3b9aa272a6a1127ff Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 20 Mar 2020 12:59:37 -0400 Subject: [PATCH] include ld symbols when generating glibc dummy objects closes #4748 --- lib/libc/glibc/abi.txt | 135 +++++++++++++++++++++++++++++++++++++++++ lib/libc/glibc/fns.txt | 9 +++ tools/update_glibc.zig | 29 +++++---- 3 files changed, 160 insertions(+), 13 deletions(-) diff --git a/lib/libc/glibc/abi.txt b/lib/libc/glibc/abi.txt index 089b9c077e..4d8d6f5255 100644 --- a/lib/libc/glibc/abi.txt +++ b/lib/libc/glibc/abi.txt @@ -193,6 +193,7 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 + 29 29 @@ -514,6 +515,7 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 29 29 +29 29 @@ -697,6 +699,7 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 29 29 + 29 29 29 @@ -819,6 +822,7 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 29 29 +29 29 29 @@ -904,6 +908,9 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 29 29 +29 + + 29 29 29 @@ -1004,6 +1011,7 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 29 29 +29 29 29 @@ -1033,6 +1041,7 @@ aarch64-linux-gnu aarch64_be-linux-gnu 29 29 29 +29 29 29 @@ -3920,6 +3929,7 @@ s390x-linux-gnu 5 + 27 27 @@ -4241,6 +4251,7 @@ s390x-linux-gnu 5 5 5 +5 11 27 @@ -4424,6 +4435,7 @@ s390x-linux-gnu 19 19 5 + 5 5 28 @@ -4543,6 +4555,7 @@ s390x-linux-gnu 27 16 + 5 5 15 @@ -4631,6 +4644,9 @@ s390x-linux-gnu 16 5 5 + + +12 5 5 5 @@ -4731,6 +4747,7 @@ s390x-linux-gnu 5 5 5 +5 5 5 @@ -4756,6 +4773,7 @@ s390x-linux-gnu 5 5 5 +5 31 5 24 5 12 16 24 5 12 16 @@ -7645,6 +7663,7 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf + 27 @@ -7968,6 +7987,7 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf 16 16 16 +16 27 @@ -8151,6 +8171,7 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf 19 19 16 + 16 16 28 @@ -8273,6 +8294,7 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf 16 16 16 +16 16 16 @@ -8358,6 +8380,9 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf 16 16 16 +16 + + 16 16 16 @@ -8458,6 +8483,7 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf 16 16 16 +16 16 16 @@ -8484,6 +8510,7 @@ arm-linux-gnueabi armeb-linux-gnueabi arm-linux-gnueabihf armeb-linux-gnueabihf 16 16 16 +16 24 16 24 16 16 @@ -11374,6 +11401,7 @@ sparc-linux-gnu sparcel-linux-gnu 0 + 27 27 @@ -11693,6 +11721,7 @@ sparc-linux-gnu sparcel-linux-gnu 0 0 1 +1 0 0 3 11 @@ -11878,6 +11907,7 @@ sparc-linux-gnu sparcel-linux-gnu 19 19 0 + 0 1 28 @@ -11997,6 +12027,7 @@ sparc-linux-gnu sparcel-linux-gnu 33 16 + 5 0 15 @@ -12085,6 +12116,9 @@ sparc-linux-gnu sparcel-linux-gnu 16 0 0 +12 + + 1 1 1 @@ -12183,6 +12217,7 @@ sparc-linux-gnu sparcel-linux-gnu 1 1 1 +1 0 0 @@ -12207,6 +12242,7 @@ sparc-linux-gnu sparcel-linux-gnu 0 0 0 +0 5 0 0 @@ -15101,6 +15137,7 @@ sparcv9-linux-gnu 5 5 + 27 27 @@ -15422,6 +15459,7 @@ sparcv9-linux-gnu 5 5 5 +5 11 27 @@ -15605,6 +15643,7 @@ sparcv9-linux-gnu 19 19 5 + 5 5 28 @@ -15724,6 +15763,7 @@ sparcv9-linux-gnu 27 16 + 5 5 15 @@ -15812,6 +15852,9 @@ sparcv9-linux-gnu 16 5 5 +12 + + 5 5 5 @@ -15912,6 +15955,7 @@ sparcv9-linux-gnu 5 5 5 +5 5 5 @@ -15938,6 +15982,7 @@ sparcv9-linux-gnu 5 5 5 +5 24 28 5 12 16 24 28 5 12 16 5 14 @@ -18828,6 +18873,7 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 0 + 27 27 @@ -19147,6 +19193,7 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 0 0 5 +5 0 0 11 @@ -19332,6 +19379,7 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 19 19 0 + 0 5 28 @@ -19450,6 +19498,7 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 27 27 +16 16 5 0 @@ -19539,6 +19588,9 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 16 0 0 +12 + + 5 5 5 @@ -19637,6 +19689,7 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 5 5 5 +5 0 0 0 @@ -19661,6 +19714,7 @@ mips64el-linux-gnuabi64 mips64-linux-gnuabi64 0 0 0 +0 5 0 0 @@ -22555,6 +22609,7 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 0 + 27 27 @@ -22874,6 +22929,7 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 0 0 5 +5 0 0 11 @@ -23059,6 +23115,7 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 19 19 0 + 0 5 28 @@ -23177,6 +23234,7 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 27 27 +16 16 5 0 @@ -23266,6 +23324,9 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 16 0 0 +12 + + 5 5 5 @@ -23364,6 +23425,7 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 5 5 5 +5 0 0 0 @@ -23388,6 +23450,7 @@ mips64el-linux-gnuabin32 mips64-linux-gnuabin32 0 0 0 +0 5 0 0 @@ -26282,6 +26345,7 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 0 + 27 27 @@ -26601,6 +26665,7 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 0 0 5 +5 0 0 11 @@ -26786,6 +26851,7 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 19 19 0 + 0 5 28 @@ -26904,6 +26970,7 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 27 +16 16 5 0 @@ -26993,6 +27060,9 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 16 0 0 +12 + + 5 5 5 @@ -27091,6 +27161,7 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 5 5 5 +5 0 0 0 @@ -27115,6 +27186,7 @@ mipsel-linux-gnueabihf mips-linux-gnueabihf 0 0 0 +0 5 0 0 @@ -30009,6 +30081,7 @@ mipsel-linux-gnueabi mips-linux-gnueabi 0 + 27 27 @@ -30328,6 +30401,7 @@ mipsel-linux-gnueabi mips-linux-gnueabi 0 0 5 +5 0 0 11 @@ -30513,6 +30587,7 @@ mipsel-linux-gnueabi mips-linux-gnueabi 19 19 0 + 0 5 28 @@ -30631,6 +30706,7 @@ mipsel-linux-gnueabi mips-linux-gnueabi 27 +16 16 5 0 @@ -30720,6 +30796,9 @@ mipsel-linux-gnueabi mips-linux-gnueabi 16 0 0 +12 + + 5 5 5 @@ -30818,6 +30897,7 @@ mipsel-linux-gnueabi mips-linux-gnueabi 5 5 5 +5 0 0 0 @@ -30842,6 +30922,7 @@ mipsel-linux-gnueabi mips-linux-gnueabi 0 0 0 +0 5 0 0 @@ -33734,6 +33815,7 @@ x86_64-linux-gnu + 27 @@ -34057,6 +34139,7 @@ x86_64-linux-gnu 10 10 10 +10 11 27 36 @@ -34240,6 +34323,7 @@ x86_64-linux-gnu 19 19 10 + 10 10 28 @@ -34359,6 +34443,7 @@ x86_64-linux-gnu 27 16 + 10 10 15 @@ -34447,6 +34532,9 @@ x86_64-linux-gnu 16 10 10 +12 + + 10 10 10 @@ -34547,6 +34635,7 @@ x86_64-linux-gnu 10 10 10 +10 10 10 @@ -34573,6 +34662,7 @@ x86_64-linux-gnu 10 10 10 +10 24 10 12 16 24 10 12 16 10 14 @@ -37461,6 +37551,7 @@ x86_64-linux-gnux32 + 28 @@ -37784,6 +37875,7 @@ x86_64-linux-gnux32 28 28 28 +28 28 36 @@ -37967,6 +38059,7 @@ x86_64-linux-gnux32 28 28 28 + 28 28 28 @@ -38086,6 +38179,7 @@ x86_64-linux-gnux32 28 28 + 28 28 28 @@ -38174,6 +38268,9 @@ x86_64-linux-gnux32 28 28 28 +28 + + 28 28 28 @@ -38274,6 +38371,7 @@ x86_64-linux-gnux32 28 28 28 +28 28 28 @@ -38303,6 +38401,7 @@ x86_64-linux-gnux32 28 28 28 +28 28 28 @@ -41190,6 +41289,7 @@ i386-linux-gnu 0 +12 27 36 27 @@ -41509,6 +41609,7 @@ i386-linux-gnu 0 0 1 +1 0 0 3 11 @@ -41694,6 +41795,7 @@ i386-linux-gnu 19 19 0 + 0 1 28 @@ -41813,6 +41915,7 @@ i386-linux-gnu 27 16 + 5 0 15 @@ -41901,6 +42004,9 @@ i386-linux-gnu 16 0 0 +12 + + 1 1 1 @@ -41999,6 +42105,7 @@ i386-linux-gnu 1 1 1 +1 0 0 @@ -42023,6 +42130,7 @@ i386-linux-gnu 0 0 0 +0 5 0 0 @@ -44915,6 +45023,7 @@ powerpc64le-linux-gnu + 29 @@ -45238,6 +45347,7 @@ powerpc64le-linux-gnu 29 29 29 +29 29 36 @@ -45421,6 +45531,7 @@ powerpc64le-linux-gnu 29 29 29 +33 29 29 29 @@ -45540,6 +45651,7 @@ powerpc64le-linux-gnu 29 29 + 29 29 29 @@ -45628,6 +45740,9 @@ powerpc64le-linux-gnu 29 29 29 +29 +32 + 29 29 29 @@ -45728,6 +45843,7 @@ powerpc64le-linux-gnu 29 29 29 +29 29 29 @@ -45757,6 +45873,7 @@ powerpc64le-linux-gnu 29 29 29 +29 29 29 @@ -48642,6 +48759,7 @@ powerpc64-linux-gnu + 27 @@ -48965,6 +49083,7 @@ powerpc64-linux-gnu 12 12 12 +12 27 @@ -49148,6 +49267,7 @@ powerpc64-linux-gnu 19 19 12 +33 12 12 28 @@ -49267,6 +49387,7 @@ powerpc64-linux-gnu 27 16 + 12 12 15 @@ -49355,6 +49476,9 @@ powerpc64-linux-gnu 16 12 12 +12 +32 + 12 12 12 @@ -49455,6 +49579,7 @@ powerpc64-linux-gnu 12 12 12 +12 12 12 @@ -49480,6 +49605,7 @@ powerpc64-linux-gnu 12 12 12 +12 12 15 24 12 16 24 12 16 @@ -52369,6 +52495,7 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf + 27 @@ -52690,6 +52817,7 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf 0 0 1 +1 0 0 3 11 @@ -52875,6 +53003,7 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf 19 19 0 +33 0 1 28 @@ -52994,6 +53123,7 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf 27 13 16 + 5 0 15 @@ -53082,6 +53212,9 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf 16 0 0 +12 +32 + 1 1 1 @@ -53180,6 +53313,7 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf 1 1 1 +1 0 0 @@ -53204,6 +53338,7 @@ powerpc-linux-gnueabi powerpc-linux-gnueabihf 0 0 0 +0 5 0 0 diff --git a/lib/libc/glibc/fns.txt b/lib/libc/glibc/fns.txt index 32dc37ce17..4e2e126b0e 100644 --- a/lib/libc/glibc/fns.txt +++ b/lib/libc/glibc/fns.txt @@ -192,6 +192,7 @@ _Qp_uitoq c _Qp_uxtoq c _Qp_xtoq c ___brk_addr c +___tls_get_addr ld __acos_finite m __acosf128_finite m __acosf_finite m @@ -511,6 +512,7 @@ __libc_memalign c __libc_pvalloc c __libc_realloc c __libc_sa_len c +__libc_stack_end ld __libc_start_main c __libc_valloc c __libpthread_version_placeholder pthread @@ -696,6 +698,7 @@ __open_2 c __openat64_2 c __openat_2 c __overflow c +__parse_hwcap_and_convert_at_platform ld __pipe c __poll c __poll_chk c @@ -815,6 +818,7 @@ __sqrtf_finite m __sqrtl_finite m __sqrtsf2 c __stack_chk_fail c +__stack_chk_guard ld __statfs c __stpcpy c __stpcpy_chk c @@ -903,6 +907,9 @@ __sysctl c __syslog_chk c __sysv_signal c __timezone c +__tls_get_addr ld +__tls_get_addr_opt ld +__tls_get_offset ld __toascii_l c __tolower_l c __toupper_l c @@ -999,6 +1006,7 @@ __ynf128_finite m __ynf_finite m __ynl_finite m _authenticate c +_dl_mcount ld _dl_mcount_wrapper c _dl_mcount_wrapper_check c _environ c @@ -1024,6 +1032,7 @@ _pthread_cleanup_pop pthread _pthread_cleanup_pop_restore pthread _pthread_cleanup_push pthread _pthread_cleanup_push_defer pthread +_r_debug ld _res c _res_hconf c _rpc_dtablesize c diff --git a/tools/update_glibc.zig b/tools/update_glibc.zig index 84522aabe4..4a5b1751a2 100644 --- a/tools/update_glibc.zig +++ b/tools/update_glibc.zig @@ -20,6 +20,7 @@ const lib_names = [_][]const u8{ "m", "pthread", "rt", + "ld", }; // fpu/nofpu are hardcoded elsewhere, based on .gnueabi/.gnueabihf with an exception for .arm @@ -154,22 +155,24 @@ pub fn main() !void { const fn_set = &target_funcs_gop.kv.value.list; for (lib_names) |lib_name, lib_name_index| { - const basename = try fmt.allocPrint(allocator, "lib{}.abilist", .{lib_name}); + const lib_prefix = if (std.mem.eql(u8, lib_name, "ld")) "" else "lib"; + const basename = try fmt.allocPrint(allocator, "{}{}.abilist", .{ lib_prefix, lib_name }); const abi_list_filename = blk: { - if (abi_list.targets[0].abi == .gnuabi64 and std.mem.eql(u8, lib_name, "c")) { + const is_c = std.mem.eql(u8, lib_name, "c"); + const is_m = std.mem.eql(u8, lib_name, "m"); + const is_ld = std.mem.eql(u8, lib_name, "ld"); + if (abi_list.targets[0].abi == .gnuabi64 and (is_c or is_ld)) { break :blk try fs.path.join(allocator, &[_][]const u8{ prefix, abi_list.path, "n64", basename }); - } else if (abi_list.targets[0].abi == .gnuabin32 and std.mem.eql(u8, lib_name, "c")) { + } else if (abi_list.targets[0].abi == .gnuabin32 and (is_c or is_ld)) { break :blk try fs.path.join(allocator, &[_][]const u8{ prefix, abi_list.path, "n32", basename }); } else if (abi_list.targets[0].arch != .arm and abi_list.targets[0].abi == .gnueabihf and - (std.mem.eql(u8, lib_name, "c") or - (std.mem.eql(u8, lib_name, "m") and abi_list.targets[0].arch == .powerpc))) + (is_c or (is_m and abi_list.targets[0].arch == .powerpc))) { break :blk try fs.path.join(allocator, &[_][]const u8{ prefix, abi_list.path, "fpu", basename }); } else if (abi_list.targets[0].arch != .arm and abi_list.targets[0].abi == .gnueabi and - (std.mem.eql(u8, lib_name, "c") or - (std.mem.eql(u8, lib_name, "m") and abi_list.targets[0].arch == .powerpc))) + (is_c or (is_m and abi_list.targets[0].arch == .powerpc))) { break :blk try fs.path.join(allocator, &[_][]const u8{ prefix, abi_list.path, "nofpu", basename }); } else if (abi_list.targets[0].arch == .arm) { @@ -234,8 +237,8 @@ pub fn main() !void { const vers_txt_path = try fs.path.join(allocator, &[_][]const u8{ glibc_out_dir, "vers.txt" }); const vers_txt_file = try fs.cwd().createFile(vers_txt_path, .{}); defer vers_txt_file.close(); - var buffered = std.io.BufferedOutStream(fs.File.WriteError).init(&vers_txt_file.outStream().stream); - const vers_txt = &buffered.stream; + var buffered = std.io.bufferedOutStream(vers_txt_file.outStream()); + const vers_txt = buffered.outStream(); for (global_ver_list) |name, i| { _ = global_ver_set.put(name, i) catch unreachable; try vers_txt.print("{}\n", .{name}); @@ -246,8 +249,8 @@ pub fn main() !void { const fns_txt_path = try fs.path.join(allocator, &[_][]const u8{ glibc_out_dir, "fns.txt" }); const fns_txt_file = try fs.cwd().createFile(fns_txt_path, .{}); defer fns_txt_file.close(); - var buffered = std.io.BufferedOutStream(fs.File.WriteError).init(&fns_txt_file.outStream().stream); - const fns_txt = &buffered.stream; + var buffered = std.io.bufferedOutStream(fns_txt_file.outStream()); + const fns_txt = buffered.outStream(); for (global_fn_list) |name, i| { const kv = global_fn_set.get(name).?; kv.value.index = i; @@ -277,8 +280,8 @@ pub fn main() !void { const abilist_txt_path = try fs.path.join(allocator, &[_][]const u8{ glibc_out_dir, "abi.txt" }); const abilist_txt_file = try fs.cwd().createFile(abilist_txt_path, .{}); defer abilist_txt_file.close(); - var buffered = std.io.BufferedOutStream(fs.File.WriteError).init(&abilist_txt_file.outStream().stream); - const abilist_txt = &buffered.stream; + var buffered = std.io.bufferedOutStream(abilist_txt_file.outStream()); + const abilist_txt = buffered.outStream(); // first iterate over the abi lists for (abi_lists) |*abi_list, abi_index| {