aboutsummaryrefslogtreecommitdiff
path: root/src/libs
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-05-13 00:20:23 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-05-17 04:41:24 +0200
commite52ffe673875db6c3007be8632849b8c65a41462 (patch)
tree70309525a1123938b7b2aec69d551b361d75bee6 /src/libs
parent9e48e919e7f2bd29ae3bd664646c28d9baf6d0fd (diff)
downloadzig-e52ffe673875db6c3007be8632849b8c65a41462.tar.gz
zig-e52ffe673875db6c3007be8632849b8c65a41462.zip
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.
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/glibc.zig11
1 files changed, 7 insertions, 4 deletions
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],
});
}
}