mirror of
https://github.com/ziglang/zig.git
synced 2025-12-26 08:03:08 +00:00
link: Recognize -z origin|noexecstack|now|relro linker args.
This commit is contained in:
parent
594271f8db
commit
eb5e4ac495
@ -708,6 +708,10 @@ pub const InitOptions = struct {
|
||||
disable_c_depfile: bool = false,
|
||||
linker_z_nodelete: bool = false,
|
||||
linker_z_defs: bool = false,
|
||||
linker_z_origin: bool = false,
|
||||
linker_z_noexecstack: bool = false,
|
||||
linker_z_now: bool = false,
|
||||
linker_z_relro: bool = false,
|
||||
linker_tsaware: bool = false,
|
||||
linker_nxcompat: bool = false,
|
||||
linker_dynamicbase: bool = false,
|
||||
@ -1382,6 +1386,10 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation {
|
||||
.bind_global_refs_locally = options.linker_bind_global_refs_locally orelse false,
|
||||
.z_nodelete = options.linker_z_nodelete,
|
||||
.z_defs = options.linker_z_defs,
|
||||
.z_origin = options.linker_z_origin,
|
||||
.z_noexecstack = options.linker_z_noexecstack,
|
||||
.z_now = options.linker_z_now,
|
||||
.z_relro = options.linker_z_relro,
|
||||
.tsaware = options.linker_tsaware,
|
||||
.nxcompat = options.linker_nxcompat,
|
||||
.dynamicbase = options.linker_dynamicbase,
|
||||
|
||||
@ -73,6 +73,10 @@ pub const Options = struct {
|
||||
rdynamic: bool,
|
||||
z_nodelete: bool,
|
||||
z_defs: bool,
|
||||
z_origin: bool,
|
||||
z_noexecstack: bool,
|
||||
z_now: bool,
|
||||
z_relro: bool,
|
||||
tsaware: bool,
|
||||
nxcompat: bool,
|
||||
dynamicbase: bool,
|
||||
|
||||
@ -1345,6 +1345,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
|
||||
man.hash.add(self.base.options.skip_linker_dependencies);
|
||||
man.hash.add(self.base.options.z_nodelete);
|
||||
man.hash.add(self.base.options.z_defs);
|
||||
man.hash.add(self.base.options.z_origin);
|
||||
man.hash.add(self.base.options.z_noexecstack);
|
||||
man.hash.add(self.base.options.z_now);
|
||||
man.hash.add(self.base.options.z_relro);
|
||||
if (self.base.options.link_libc) {
|
||||
man.hash.add(self.base.options.libc_installation != null);
|
||||
if (self.base.options.libc_installation) |libc_installation| {
|
||||
@ -1482,6 +1486,22 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
|
||||
try argv.append("-z");
|
||||
try argv.append("defs");
|
||||
}
|
||||
if (self.base.options.z_origin) {
|
||||
try argv.append("-z");
|
||||
try argv.append("origin");
|
||||
}
|
||||
if (self.base.options.z_noexecstack) {
|
||||
try argv.append("-z");
|
||||
try argv.append("noexecstack");
|
||||
}
|
||||
if (self.base.options.z_now) {
|
||||
try argv.append("-z");
|
||||
try argv.append("now");
|
||||
}
|
||||
if (self.base.options.z_relro) {
|
||||
try argv.append("-z");
|
||||
try argv.append("relro");
|
||||
}
|
||||
|
||||
if (getLDMOption(target)) |ldm| {
|
||||
// Any target ELF will use the freebsd osabi if suffixed with "_fbsd".
|
||||
|
||||
16
src/main.zig
16
src/main.zig
@ -589,6 +589,10 @@ fn buildOutputType(
|
||||
var linker_bind_global_refs_locally: ?bool = null;
|
||||
var linker_z_nodelete = false;
|
||||
var linker_z_defs = false;
|
||||
var linker_z_origin = false;
|
||||
var linker_z_noexecstack = false;
|
||||
var linker_z_now = false;
|
||||
var linker_z_relro = false;
|
||||
var linker_tsaware = false;
|
||||
var linker_nxcompat = false;
|
||||
var linker_dynamicbase = false;
|
||||
@ -1393,6 +1397,14 @@ fn buildOutputType(
|
||||
linker_z_nodelete = true;
|
||||
} else if (mem.eql(u8, z_arg, "defs")) {
|
||||
linker_z_defs = true;
|
||||
} else if (mem.eql(u8, z_arg, "origin")) {
|
||||
linker_z_origin = true;
|
||||
} else if (mem.eql(u8, z_arg, "noexecstack")) {
|
||||
linker_z_noexecstack = true;
|
||||
} else if (mem.eql(u8, z_arg, "now")) {
|
||||
linker_z_now = true;
|
||||
} else if (mem.eql(u8, z_arg, "relro")) {
|
||||
linker_z_relro = true;
|
||||
} else {
|
||||
warn("unsupported linker arg: -z {s}", .{z_arg});
|
||||
}
|
||||
@ -2077,6 +2089,10 @@ fn buildOutputType(
|
||||
.linker_bind_global_refs_locally = linker_bind_global_refs_locally,
|
||||
.linker_z_nodelete = linker_z_nodelete,
|
||||
.linker_z_defs = linker_z_defs,
|
||||
.linker_z_origin = linker_z_origin,
|
||||
.linker_z_noexecstack = linker_z_noexecstack,
|
||||
.linker_z_now = linker_z_now,
|
||||
.linker_z_relro = linker_z_relro,
|
||||
.linker_tsaware = linker_tsaware,
|
||||
.linker_nxcompat = linker_nxcompat,
|
||||
.linker_dynamicbase = linker_dynamicbase,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user