| ... | ... | @@ -3971,8 +3971,18 @@ fn prelinkInner(elf: *Elf) !void { |
| 3971 | 3971 | const ElfN = ct_class.ElfN(); |
| 3972 | 3972 | const flags: ElfN.Addr = if (elf.options.z_now) std.elf.DF_BIND_NOW else 0; |
| 3973 | 3973 | const flags_1: ElfN.Addr = if (elf.options.z_now) std.elf.DF_1_NOW else 0; |
| 3974 | const rpath: String(.dynstr) = rpath: { |
| 3975 | var buf: std.ArrayList(u8) = .empty; |
| 3976 | defer buf.deinit(gpa); |
| 3977 | for (elf.options.rpath_list, 0..) |path, i| { |
| 3978 | if (i > 0) try buf.append(gpa, ':'); |
| 3979 | try buf.appendSlice(gpa, path); |
| 3980 | } |
| 3981 | break :rpath try elf.string(.dynstr, buf.items); |
| 3982 | }; |
| 3974 | 3983 | const needed_len = elf.needed.count(); |
| 3975 | 3984 | const dynamic_len = needed_len + @intFromBool(elf.options.soname != null) + |
| 3985 | @intFromBool(rpath != .empty) + |
| 3976 | 3986 | @intFromBool(flags != 0) + @intFromBool(flags_1 != 0) + |
| 3977 | 3987 | @as(usize, @intFromBool(elf.shndx.init_array != .UNDEF)) * 2 + |
| 3978 | 3988 | @as(usize, @intFromBool(elf.shndx.fini_array != .UNDEF)) * 2 + |
| ... | ... | @@ -3996,6 +4006,10 @@ fn prelinkInner(elf: *Elf) !void { |
| 3996 | 4006 | dynamic_entries[dynamic_index] = .{ std.elf.DT_SONAME, @intFromEnum(try elf.string(.dynstr, soname)) }; |
| 3997 | 4007 | dynamic_index += 1; |
| 3998 | 4008 | } |
| 4009 | if (rpath != .empty) { |
| 4010 | dynamic_entries[dynamic_index] = .{ std.elf.DT_RUNPATH, @intFromEnum(rpath) }; |
| 4011 | dynamic_index += 1; |
| 4012 | } |
| 3999 | 4013 | if (flags != 0) { |
| 4000 | 4014 | dynamic_entries[dynamic_index] = .{ std.elf.DT_FLAGS, flags }; |
| 4001 | 4015 | dynamic_index += 1; |