include ld symbols when generating glibc dummy objects

closes #4748
This commit is contained in:
Andrew Kelley 2020-03-20 12:59:37 -04:00
parent 541e763010
commit 245dc9d930
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
3 changed files with 160 additions and 13 deletions

View File

@ -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

View File

@ -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

View File

@ -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| {