Commit 560043dadf
Changed files (2)
lib/std/dynamic_library.zig
@@ -59,24 +59,12 @@ const RDebug = extern struct {
r_ldbase: usize,
};
-// TODO: This should be weak (#1917)
-extern var _DYNAMIC: [128]elf.Dyn;
-
-comptime {
- if (std.Target.current.os.tag == .linux) {
- asm (
- \\ .weak _DYNAMIC
- \\ .hidden _DYNAMIC
- );
- }
-}
-
pub fn linkmap_iterator(phdrs: []elf.Phdr) !LinkMap.Iterator {
- if (@ptrToInt(&_DYNAMIC[0]) == 0) {
+ const _DYNAMIC = @extern([*]elf.Dyn, .{ .name = "_DYNAMIC", .linkage = .Weak }) orelse {
// No PT_DYNAMIC means this is either a statically-linked program or a
- // badly corrupted one
+ // badly corrupted dynamically-linked one.
return LinkMap.Iterator{ .current = null };
- }
+ };
const link_map_ptr = init: {
var i: usize = 0;
lib/std/process.zig
@@ -686,6 +686,8 @@ pub fn getBaseAddress() usize {
if (base != 0) {
return base;
}
+ // XXX: Wrong for PIE executables, it should look at the difference
+ // between _DYNAMIC and the PT_DYNAMIC phdr instead.
const phdr = os.system.getauxval(std.elf.AT_PHDR);
return phdr - @sizeOf(std.elf.Ehdr);
},