From 8cbc63f7dd1d74a04c2ad662efc8762dceff044e Mon Sep 17 00:00:00 2001 From: lemon Date: Sat, 18 Apr 2026 19:47:44 +0200 Subject: driver: -z option --- src/a_main.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/a_main.c b/src/a_main.c index 1cf9e37..f9c2021 100644 --- a/src/a_main.c +++ b/src/a_main.c @@ -59,6 +59,15 @@ fileext(const char *path) enum inft { IFTauto, IFTc, IFTasm, IFTobj, IFTar, IFTdll }; +static bool +isinteger(const char *s) +{ + do + if (!in_range(*s, '0', '9')) return 0; + while (*++s); + return 1; +} + static enum inft ftdetect(const char *s) { @@ -67,7 +76,7 @@ ftdetect(const char *s) if (!strcmp(ext, "o")) return IFTobj; if (!strcmp(ext, "a")) return IFTar; if (!strcmp(ext, "s")) return IFTasm; - if (!strcmp(ext, "so")) return IFTdll; + if (!strcmp(ext, "so") || isinteger(ext)) return IFTdll; warn(NULL, "assuming %'s is C source file", s); return IFTc; } @@ -252,6 +261,11 @@ optparse(char **args) vpush(&task.linkargs, larg); } } + } else if (!memcmp(arg, "z", 2)) { + const char *kw = *++args; + if (!kw) fatal(NULL, "missing argument to `-z`"); + vpush(&task.linkargs, "-z"); + vpush(&task.linkargs, kw); } else if (!strcmp(arg, "v") || !strcmp(arg, "-verbose")) { task.verbose = 1; } else if (!strcmp(arg, "c")) { -- cgit v1.2.3