From e52ffe673875db6c3007be8632849b8c65a41462 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Tue, 13 May 2025 00:20:23 +0200 Subject: glibc: Fix a benign bug when selecting the size of an object symbol. This didn't cause any problems in practice, but doing it this way is technically more correct. --- src/libs/glibc.zig | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/libs') diff --git a/src/libs/glibc.zig b/src/libs/glibc.zig index 5d1c6f420b..bd698cc0b3 100644 --- a/src/libs/glibc.zig +++ b/src/libs/glibc.zig @@ -966,6 +966,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye const obj_inclusions_len = try inc_reader.readInt(u16, .little); + var sizes = try arena.alloc(u16, metadata.all_versions.len); + sym_i = 0; opt_symbol_name = null; versions_buffer = undefined; @@ -1003,6 +1005,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye if (ok_lib_and_target and ver_i <= target_ver_index) { versions_buffer[versions_len] = ver_i; versions_len += 1; + sizes[ver_i] = size; } if (last) break; } @@ -1066,14 +1069,14 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye sym_plus_ver, sym_plus_ver, sym_plus_ver, - size, + sizes[ver_index], sym_plus_ver, sym_name, at_sign_str, ver.major, ver.minor, sym_plus_ver, - size, + sizes[ver_index], }); } else { const sym_plus_ver = try std.fmt.allocPrint( @@ -1094,7 +1097,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye sym_plus_ver, sym_plus_ver, sym_plus_ver, - size, + sizes[ver_index], sym_plus_ver, sym_name, at_sign_str, @@ -1102,7 +1105,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye ver.minor, ver.patch, sym_plus_ver, - size, + sizes[ver_index], }); } } -- cgit v1.2.3