authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-17 15:46:53-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-17 15:46:53-05:00
loge26f063b22893f50dd7eb02a01585f4d52849ede
tree73ec54c84face97b521288f9499801643c326463
parent2f9c5c0644dd516ec0d96f33333a35e6b4deea91

support the concept of a target not having a dynamic linker


5 files changed, 23 insertions(+), 3 deletions(-)

lib/std/target.zig+17-2
......@@ -1227,6 +1227,7 @@ pub const Target = union(enum) {
12271227 ) error{
12281228 OutOfMemory,
12291229 UnknownDynamicLinkerPath,
1230 TargetHasNoDynamicLinker,
12301231 }![:0]u8 {
12311232 const a = allocator;
12321233 if (self.isAndroid()) {
......@@ -1300,6 +1301,10 @@ pub const Target = union(enum) {
13001301 .riscv32 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv32-ilp32.so.1"),
13011302 .riscv64 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv64-lp64.so.1"),
13021303
1304 .wasm32,
1305 .wasm64,
1306 => return error.TargetHasNoDynamicLinker,
1307
13031308 .arc,
13041309 .avr,
13051310 .bpfel,
......@@ -1324,12 +1329,22 @@ pub const Target = union(enum) {
13241329 .kalimba,
13251330 .shave,
13261331 .lanai,
1327 .wasm32,
1328 .wasm64,
13291332 .renderscript32,
13301333 .renderscript64,
13311334 => return error.UnknownDynamicLinkerPath,
13321335 },
1336
1337 .freestanding,
1338 .ios,
1339 .tvos,
1340 .watchos,
1341 .macosx,
1342 .uefi,
1343 .windows,
1344 .emscripten,
1345 .other,
1346 => return error.TargetHasNoDynamicLinker,
1347
13331348 else => return error.UnknownDynamicLinkerPath,
13341349 }
13351350 }
src-self-hosted/stage2.zig+2
......@@ -110,6 +110,7 @@ const Error = extern enum {
110110 UnsupportedArchitecture,
111111 WindowsSdkNotFound,
112112 UnknownDynamicLinkerPath,
113 TargetHasNoDynamicLinker,
113114};
114115
115116const FILE = std.c.FILE;
......@@ -1101,6 +1102,7 @@ export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr:
11011102 ) catch |err| switch (err) {
11021103 error.OutOfMemory => return .OutOfMemory,
11031104 error.UnknownDynamicLinkerPath => return .UnknownDynamicLinkerPath,
1105 error.TargetHasNoDynamicLinker => return .TargetHasNoDynamicLinker,
11041106 };
11051107 out_ptr.* = result.ptr;
11061108 out_len.* = result.len;
src/codegen.cpp+1
......@@ -8969,6 +8969,7 @@ static void detect_dynamic_linker(CodeGen *g) {
89698969 char *dynamic_linker_ptr;
89708970 size_t dynamic_linker_len;
89718971 if ((err = stage2_detect_dynamic_linker(g->zig_target, &dynamic_linker_ptr, &dynamic_linker_len))) {
8972 if (err == ErrorTargetHasNoDynamicLinker) return;
89728973 fprintf(stderr, "Unable to detect dynamic linker: %s\n", err_str(err));
89738974 exit(1);
89748975 }
src/error.cpp+2-1
......@@ -80,7 +80,8 @@ const char *err_str(Error err) {
8080 case ErrorLibCKernel32LibNotFound: return "kernel32 library not found";
8181 case ErrorUnsupportedArchitecture: return "unsupported architecture";
8282 case ErrorWindowsSdkNotFound: return "Windows SDK not found";
83 case ErrorUnknownDynamicLinkerPath: return "Windows SDK not found";
83 case ErrorUnknownDynamicLinkerPath: return "unknown dynamic linker path";
84 case ErrorTargetHasNoDynamicLinker: return "target has no dynamic linker";
8485 }
8586 return "(invalid error)";
8687}
src/stage2.h+1
......@@ -103,6 +103,7 @@ enum Error {
103103 ErrorUnsupportedArchitecture,
104104 ErrorWindowsSdkNotFound,
105105 ErrorUnknownDynamicLinkerPath,
106 ErrorTargetHasNoDynamicLinker,
106107};
107108
108109// ABI warning