From 7eec7ba1adc0c740f1cdfb5636bfa2e82b7380ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sat, 22 Jun 2024 07:17:58 +0200 Subject: [PATCH] compiler: Accept and ignore `--(enable,disable)-auto-image-base` linker options. Closes #19613. --- src/main.zig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main.zig b/src/main.zig index af26e7159b50..142300d3145d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2458,6 +2458,20 @@ fn buildOutputType( stack_size = parseStackSize(linker_args_it.nextOrFatal()); } else if (mem.eql(u8, arg, "--image-base")) { image_base = parseImageBase(linker_args_it.nextOrFatal()); + } else if (mem.eql(u8, arg, "--enable-auto-image-base") or + mem.eql(u8, arg, "--disable-auto-image-base")) + { + // `--enable-auto-image-base` is a flag that binutils added in ~2000 for MinGW. + // It does a hash of the file and uses that as part of the image base value. + // Presumably the idea was to avoid DLLs needing to be relocated when loaded. + // This is practically irrelevant today as all PEs produced since Windows Vista + // have ASLR enabled by default anyway, and Windows 10+ has Mandatory ASLR which + // doesn't even care what the PE file wants and relocates it anyway. + // + // Unfortunately, Libtool hardcodes usage of this archaic flag when targeting + // MinGW, so to make `zig cc` for that use case work, accept and ignore the + // flag, and warn the user that it has no effect. + warn("auto-image-base options are unimplemented and ignored", .{}); } else if (mem.eql(u8, arg, "-T") or mem.eql(u8, arg, "--script")) { linker_script = linker_args_it.nextOrFatal(); } else if (mem.eql(u8, arg, "--eh-frame-hdr")) {