authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2021-06-24 10:44:16+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-09-04 12:18:38+03:00
logeb5e4ac495356dd0dae680ca316e18b848c9efa3
treed4d9baab92fae3185fac1bc59f622f681314d1da
parent594271f8dba0143280990ac2e01dd68a791c05b0

link: Recognize -z origin|noexecstack|now|relro linker args.


4 files changed, 48 insertions(+), 0 deletions(-)

src/Compilation.zig+8
......@@ -708,6 +708,10 @@ pub const InitOptions = struct {
708708 disable_c_depfile: bool = false,
709709 linker_z_nodelete: bool = false,
710710 linker_z_defs: bool = false,
711 linker_z_origin: bool = false,
712 linker_z_noexecstack: bool = false,
713 linker_z_now: bool = false,
714 linker_z_relro: bool = false,
711715 linker_tsaware: bool = false,
712716 linker_nxcompat: bool = false,
713717 linker_dynamicbase: bool = false,
......@@ -1382,6 +1386,10 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation {
13821386 .bind_global_refs_locally = options.linker_bind_global_refs_locally orelse false,
13831387 .z_nodelete = options.linker_z_nodelete,
13841388 .z_defs = options.linker_z_defs,
1389 .z_origin = options.linker_z_origin,
1390 .z_noexecstack = options.linker_z_noexecstack,
1391 .z_now = options.linker_z_now,
1392 .z_relro = options.linker_z_relro,
13851393 .tsaware = options.linker_tsaware,
13861394 .nxcompat = options.linker_nxcompat,
13871395 .dynamicbase = options.linker_dynamicbase,
src/link.zig+4
......@@ -73,6 +73,10 @@ pub const Options = struct {
7373 rdynamic: bool,
7474 z_nodelete: bool,
7575 z_defs: bool,
76 z_origin: bool,
77 z_noexecstack: bool,
78 z_now: bool,
79 z_relro: bool,
7680 tsaware: bool,
7781 nxcompat: bool,
7882 dynamicbase: bool,
src/link/Elf.zig+20
......@@ -1345,6 +1345,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
13451345 man.hash.add(self.base.options.skip_linker_dependencies);
13461346 man.hash.add(self.base.options.z_nodelete);
13471347 man.hash.add(self.base.options.z_defs);
1348 man.hash.add(self.base.options.z_origin);
1349 man.hash.add(self.base.options.z_noexecstack);
1350 man.hash.add(self.base.options.z_now);
1351 man.hash.add(self.base.options.z_relro);
13481352 if (self.base.options.link_libc) {
13491353 man.hash.add(self.base.options.libc_installation != null);
13501354 if (self.base.options.libc_installation) |libc_installation| {
......@@ -1482,6 +1486,22 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
14821486 try argv.append("-z");
14831487 try argv.append("defs");
14841488 }
1489 if (self.base.options.z_origin) {
1490 try argv.append("-z");
1491 try argv.append("origin");
1492 }
1493 if (self.base.options.z_noexecstack) {
1494 try argv.append("-z");
1495 try argv.append("noexecstack");
1496 }
1497 if (self.base.options.z_now) {
1498 try argv.append("-z");
1499 try argv.append("now");
1500 }
1501 if (self.base.options.z_relro) {
1502 try argv.append("-z");
1503 try argv.append("relro");
1504 }
14851505
14861506 if (getLDMOption(target)) |ldm| {
14871507 // Any target ELF will use the freebsd osabi if suffixed with "_fbsd".
src/main.zig+16
......@@ -589,6 +589,10 @@ fn buildOutputType(
589589 var linker_bind_global_refs_locally: ?bool = null;
590590 var linker_z_nodelete = false;
591591 var linker_z_defs = false;
592 var linker_z_origin = false;
593 var linker_z_noexecstack = false;
594 var linker_z_now = false;
595 var linker_z_relro = false;
592596 var linker_tsaware = false;
593597 var linker_nxcompat = false;
594598 var linker_dynamicbase = false;
......@@ -1393,6 +1397,14 @@ fn buildOutputType(
13931397 linker_z_nodelete = true;
13941398 } else if (mem.eql(u8, z_arg, "defs")) {
13951399 linker_z_defs = true;
1400 } else if (mem.eql(u8, z_arg, "origin")) {
1401 linker_z_origin = true;
1402 } else if (mem.eql(u8, z_arg, "noexecstack")) {
1403 linker_z_noexecstack = true;
1404 } else if (mem.eql(u8, z_arg, "now")) {
1405 linker_z_now = true;
1406 } else if (mem.eql(u8, z_arg, "relro")) {
1407 linker_z_relro = true;
13961408 } else {
13971409 warn("unsupported linker arg: -z {s}", .{z_arg});
13981410 }
......@@ -2077,6 +2089,10 @@ fn buildOutputType(
20772089 .linker_bind_global_refs_locally = linker_bind_global_refs_locally,
20782090 .linker_z_nodelete = linker_z_nodelete,
20792091 .linker_z_defs = linker_z_defs,
2092 .linker_z_origin = linker_z_origin,
2093 .linker_z_noexecstack = linker_z_noexecstack,
2094 .linker_z_now = linker_z_now,
2095 .linker_z_relro = linker_z_relro,
20802096 .linker_tsaware = linker_tsaware,
20812097 .linker_nxcompat = linker_nxcompat,
20822098 .linker_dynamicbase = linker_dynamicbase,