authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-12 22:44:03+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-12 23:01:05+02:00
log7b376b1c54d79d9869ca85a992819df04a0786e9
treea3496bdf9cdc1a261f3762975e8a31af55925f13
parent7e530c13b3ef9b61417a610c00fc1d37c11ff7ed
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

glibc: Emit some fill data for stub symbols, thus giving each a unique address.

This prevents LLVM from...cleverly...merging all of the global variable stub symbols that we emit under certain circumstances. This was observed in practice when using zig-bootstrap for arm-linux-gnueabi(hf).

1 files changed, 10 insertions(+), 6 deletions(-)

src/glibc.zig+10-6
...@@ -938,7 +938,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -938,7 +938,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
938 // .globl _Exit_2_2_5938 // .globl _Exit_2_2_5
939 // .type _Exit_2_2_5, %function;939 // .type _Exit_2_2_5, %function;
940 // .symver _Exit_2_2_5, _Exit@@GLIBC_2.2.5940 // .symver _Exit_2_2_5, _Exit@@GLIBC_2.2.5
941 // _Exit_2_2_5:941 // _Exit_2_2_5: .long 0
942 const ver_index = versions_buffer[ver_buf_i];942 const ver_index = versions_buffer[ver_buf_i];
943 const ver = metadata.all_versions[ver_index];943 const ver = metadata.all_versions[ver_index];
944944
...@@ -960,7 +960,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -960,7 +960,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
960 \\.globl {s}960 \\.globl {s}
961 \\.type {s}, %function;961 \\.type {s}, %function;
962 \\.symver {s}, {s}{s}GLIBC_{d}.{d}962 \\.symver {s}, {s}{s}GLIBC_{d}.{d}
963 \\{s}:963 \\{s}: {s} 0
964 \\964 \\
965 , .{965 , .{
966 sym_plus_ver,966 sym_plus_ver,
...@@ -971,6 +971,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -971,6 +971,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
971 ver.major,971 ver.major,
972 ver.minor,972 ver.minor,
973 sym_plus_ver,973 sym_plus_ver,
974 wordDirective(target),
974 });975 });
975 } else {976 } else {
976 const sym_plus_ver = if (want_default)977 const sym_plus_ver = if (want_default)
...@@ -985,7 +986,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -985,7 +986,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
985 \\.globl {s}986 \\.globl {s}
986 \\.type {s}, %function;987 \\.type {s}, %function;
987 \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d}988 \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d}
988 \\{s}:989 \\{s}: {s} 0
989 \\990 \\
990 , .{991 , .{
991 sym_plus_ver,992 sym_plus_ver,
...@@ -997,6 +998,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -997,6 +998,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
997 ver.minor,998 ver.minor,
998 ver.patch,999 ver.patch,
999 sym_plus_ver,1000 sym_plus_ver,
1001 wordDirective(target),
1000 });1002 });
1001 }1003 }
1002 }1004 }
...@@ -1103,7 +1105,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -1103,7 +1105,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
1103 // .type environ_2_2_5, %object;1105 // .type environ_2_2_5, %object;
1104 // .size environ_2_2_5, 4;1106 // .size environ_2_2_5, 4;
1105 // .symver environ_2_2_5, environ@@GLIBC_2.2.51107 // .symver environ_2_2_5, environ@@GLIBC_2.2.5
1106 // environ_2_2_5:1108 // environ_2_2_5: .fill 4, 1, 0
1107 const ver_index = versions_buffer[ver_buf_i];1109 const ver_index = versions_buffer[ver_buf_i];
1108 const ver = metadata.all_versions[ver_index];1110 const ver = metadata.all_versions[ver_index];
11091111
...@@ -1126,7 +1128,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -1126,7 +1128,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
1126 \\.type {s}, %object;1128 \\.type {s}, %object;
1127 \\.size {s}, {d};1129 \\.size {s}, {d};
1128 \\.symver {s}, {s}{s}GLIBC_{d}.{d}1130 \\.symver {s}, {s}{s}GLIBC_{d}.{d}
1129 \\{s}:1131 \\{s}: .fill {d}, 1, 0
1130 \\1132 \\
1131 , .{1133 , .{
1132 sym_plus_ver,1134 sym_plus_ver,
...@@ -1139,6 +1141,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -1139,6 +1141,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
1139 ver.major,1141 ver.major,
1140 ver.minor,1142 ver.minor,
1141 sym_plus_ver,1143 sym_plus_ver,
1144 size,
1142 });1145 });
1143 } else {1146 } else {
1144 const sym_plus_ver = if (want_default)1147 const sym_plus_ver = if (want_default)
...@@ -1154,7 +1157,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -1154,7 +1157,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
1154 \\.type {s}, %object;1157 \\.type {s}, %object;
1155 \\.size {s}, {d};1158 \\.size {s}, {d};
1156 \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d}1159 \\.symver {s}, {s}{s}GLIBC_{d}.{d}.{d}
1157 \\{s}:1160 \\{s}: .fill {d}, 1, 0
1158 \\1161 \\
1159 , .{1162 , .{
1160 sym_plus_ver,1163 sym_plus_ver,
...@@ -1168,6 +1171,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi...@@ -1168,6 +1171,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
1168 ver.minor,1171 ver.minor,
1169 ver.patch,1172 ver.patch,
1170 sym_plus_ver,1173 sym_plus_ver,
1174 size,
1171 });1175 });
1172 }1176 }
1173 }1177 }