From 9070607c03f8cb652b84ba1c96c653232091df10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Thu, 8 May 2025 15:50:34 +0200 Subject: [PATCH] glibc: Fix stub libraries containing unwanted symbols. Closes #8096. --- src/glibc.zig | 82 ++++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 47 deletions(-) diff --git a/src/glibc.zig b/src/glibc.zig index 9079f8d617..363d11bbfd 100644 --- a/src/glibc.zig +++ b/src/glibc.zig @@ -864,8 +864,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye // Example: // .balign 4 // .globl _Exit_2_2_5 - // .type _Exit_2_2_5, %function; - // .symver _Exit_2_2_5, _Exit@@GLIBC_2.2.5 + // .type _Exit_2_2_5, %function + // .symver _Exit_2_2_5, _Exit@@GLIBC_2.2.5, remove // _Exit_2_2_5: .long 0 const ver_index = versions_buffer[ver_buf_i]; const ver = metadata.all_versions[ver_index]; @@ -876,19 +876,16 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye const want_default = chosen_def_ver_index != 255 and ver_index == chosen_def_ver_index; const at_sign_str: []const u8 = if (want_default) "@@" else "@"; if (ver.patch == 0) { - const sym_plus_ver = if (want_default) - sym_name - else - try std.fmt.allocPrint( - arena, - "{s}_GLIBC_{d}_{d}", - .{ sym_name, ver.major, ver.minor }, - ); + const sym_plus_ver = try std.fmt.allocPrint( + arena, + "{s}_{d}_{d}", + .{ sym_name, ver.major, ver.minor }, + ); try stubs_asm.writer().print( \\.balign {d} \\.globl {s} - \\.type {s}, %function; - \\.symver {s}, {s}{s}GLIBC_{d}.{d} + \\.type {s}, %function + \\.symver {s}, {s}{s}GLIBC_{d}.{d}, remove \\{s}: {s} 0 \\ , .{ @@ -904,19 +901,16 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye wordDirective(target), }); } else { - const sym_plus_ver = if (want_default) - sym_name - else - try std.fmt.allocPrint( - arena, - "{s}_GLIBC_{d}_{d}_{d}", - .{ sym_name, ver.major, ver.minor, ver.patch }, - ); + const sym_plus_ver = try std.fmt.allocPrint( + arena, + "{s}_{d}_{d}_{d}", + .{ sym_name, ver.major, ver.minor, ver.patch }, + ); try stubs_asm.writer().print( \\.balign {d} \\.globl {s} - \\.type {s}, %function; - \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d} + \\.type {s}, %function + \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d}, remove \\{s}: {s} 0 \\ , .{ @@ -1041,9 +1035,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye // Example: // .balign 4 // .globl environ_2_2_5 - // .type environ_2_2_5, %object; - // .size environ_2_2_5, 4; - // .symver environ_2_2_5, environ@@GLIBC_2.2.5 + // .type environ_2_2_5, %object + // .size environ_2_2_5, 4 + // .symver environ_2_2_5, environ@@GLIBC_2.2.5, remove // environ_2_2_5: .fill 4, 1, 0 const ver_index = versions_buffer[ver_buf_i]; const ver = metadata.all_versions[ver_index]; @@ -1054,20 +1048,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye const want_default = chosen_def_ver_index != 255 and ver_index == chosen_def_ver_index; const at_sign_str: []const u8 = if (want_default) "@@" else "@"; if (ver.patch == 0) { - const sym_plus_ver = if (want_default) - sym_name - else - try std.fmt.allocPrint( - arena, - "{s}_GLIBC_{d}_{d}", - .{ sym_name, ver.major, ver.minor }, - ); + const sym_plus_ver = try std.fmt.allocPrint( + arena, + "{s}_{d}_{d}", + .{ sym_name, ver.major, ver.minor }, + ); try stubs_asm.writer().print( \\.balign {d} \\.globl {s} - \\.type {s}, %object; - \\.size {s}, {d}; - \\.symver {s}, {s}{s}GLIBC_{d}.{d} + \\.type {s}, %object + \\.size {s}, {d} + \\.symver {s}, {s}{s}GLIBC_{d}.{d}, remove \\{s}: .fill {d}, 1, 0 \\ , .{ @@ -1085,20 +1076,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye size, }); } else { - const sym_plus_ver = if (want_default) - sym_name - else - try std.fmt.allocPrint( - arena, - "{s}_GLIBC_{d}_{d}_{d}", - .{ sym_name, ver.major, ver.minor, ver.patch }, - ); + const sym_plus_ver = try std.fmt.allocPrint( + arena, + "{s}_{d}_{d}_{d}", + .{ sym_name, ver.major, ver.minor, ver.patch }, + ); try stubs_asm.writer().print( \\.balign {d} \\.globl {s} - \\.type {s}, %object; - \\.size {s}, {d}; - \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d} + \\.type {s}, %object + \\.size {s}, {d} + \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d}, remove \\{s}: .fill {d}, 1, 0 \\ , .{