authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-12-10 12:56:05-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-12-10 12:56:05-05:00
log3ef8460d0646dbf0e762cbd7e0728fc2026d2001
tree77d1dc25c3a2ed9629a136897b2dc08af2fd7c44
parent80882bda59427077c141791178b5680fc346eea0

fix load dynamic library API when linking libc


1 files changed, 3 insertions(+), 3 deletions(-)

lib/std/dynamic_library.zig+3-3
...@@ -142,7 +142,7 @@ pub const LinuxDynLib = struct {...@@ -142,7 +142,7 @@ pub const LinuxDynLib = struct {
142 self.* = undefined;142 self.* = undefined;
143 }143 }
144144
145 pub fn lookup(self: *LinuxDynLib, comptime T: type, name: []const u8) ?T {145 pub fn lookup(self: *LinuxDynLib, comptime T: type, name: [:0]const u8) ?T {
146 if (self.elf_lib.lookup("", name)) |symbol| {146 if (self.elf_lib.lookup("", name)) |symbol| {
147 return @intToPtr(T, symbol);147 return @intToPtr(T, symbol);
148 } else {148 } else {
...@@ -292,7 +292,7 @@ pub const WindowsDynLib = struct {...@@ -292,7 +292,7 @@ pub const WindowsDynLib = struct {
292 self.* = undefined;292 self.* = undefined;
293 }293 }
294294
295 pub fn lookup(self: *DlDynlib, comptime T: type, name: [:0]const u8) ?T {295 pub fn lookup(self: *WindowsDynLib, comptime T: type, name: [:0]const u8) ?T {
296 if (windows.kernel32.GetProcAddress(self.dll, name.ptr)) |addr| {296 if (windows.kernel32.GetProcAddress(self.dll, name.ptr)) |addr| {
297 return @ptrCast(T, addr);297 return @ptrCast(T, addr);
298 } else {298 } else {
...@@ -324,7 +324,7 @@ pub const DlDynlib = struct {...@@ -324,7 +324,7 @@ pub const DlDynlib = struct {
324 self.* = undefined;324 self.* = undefined;
325 }325 }
326326
327 pub fn lookup(self: *DlDynlib, comptime T: type, name: [*:0]const u8) ?T {327 pub fn lookup(self: *DlDynlib, comptime T: type, name: [:0]const u8) ?T {
328 // dlsym (and other dl-functions) secretly take shadow parameter - return address on stack328 // dlsym (and other dl-functions) secretly take shadow parameter - return address on stack
329 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66826329 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66826
330 if (@call(.{ .modifier = .never_tail }, system.dlsym, .{ self.handle, name.ptr })) |symbol| {330 if (@call(.{ .modifier = .never_tail }, system.dlsym, .{ self.handle, name.ptr })) |symbol| {