summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2024-03-13 21:33:14 +0000
committermidipix <writeonce@midipix.org>2024-03-13 21:34:36 +0000
commitb48cb77c5fe44e3392ecb9f4335c6a9b7401c89d (patch)
treebaa2e81b290a5c3ba91eb693b1ebd0950ccc809a
parent198205f4097928184ed5bfa288bb4dfbba1e2b5f (diff)
downloadslibtool-b48cb77c5fe44e3392ecb9f4335c6a9b7401c89d.tar.bz2
slibtool-b48cb77c5fe44e3392ecb9f4335c6a9b7401c89d.tar.xz
link mode: properly interpret -static when output is an executable program.
-rw-r--r--include/slibtool/slibtool.h3
-rw-r--r--src/driver/slbt_driver_ctx.c2
-rw-r--r--src/logic/linkcmd/slbt_linkcmd_executable.c3
3 files changed, 7 insertions, 1 deletions
diff --git a/include/slibtool/slibtool.h b/include/slibtool/slibtool.h
index bf0bf32..bb1fc84 100644
--- a/include/slibtool/slibtool.h
+++ b/include/slibtool/slibtool.h
@@ -78,6 +78,9 @@ extern "C" {
#define SLBT_DRIVER_MODE_AR_CHECK SLBT_DRIVER_XFLAG(0x020000)
#define SLBT_DRIVER_MODE_AR_MERGE SLBT_DRIVER_XFLAG(0x040000)
+#define SLBT_DRIVER_PREFER_SHARED SLBT_DRIVER_XFLAG(0x100000)
+#define SLBT_DRIVER_PREFER_STATIC SLBT_DRIVER_XFLAG(0x200000)
+
#define SLBT_DRIVER_DLOPEN_SELF SLBT_DRIVER_XFLAG(0x10000000)
#define SLBT_DRIVER_DLOPEN_FORCE SLBT_DRIVER_XFLAG(0x20000000)
#define SLBT_DRIVER_DLPREOPEN_SELF SLBT_DRIVER_XFLAG(0x40000000)
diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c
index 6737815..9479e54 100644
--- a/src/driver/slbt_driver_ctx.c
+++ b/src/driver/slbt_driver_ctx.c
@@ -788,10 +788,12 @@ int slbt_lib_get_driver_ctx(
case TAG_SHARED:
cmdshared = entry;
+ cctx.drvflags |= SLBT_DRIVER_PREFER_SHARED;
break;
case TAG_STATIC:
cmdstatic = entry;
+ cctx.drvflags |= SLBT_DRIVER_PREFER_STATIC;
break;
case TAG_WEAK:
diff --git a/src/logic/linkcmd/slbt_linkcmd_executable.c b/src/logic/linkcmd/slbt_linkcmd_executable.c
index 76c0b1d..a1f8b1c 100644
--- a/src/logic/linkcmd/slbt_linkcmd_executable.c
+++ b/src/logic/linkcmd/slbt_linkcmd_executable.c
@@ -100,7 +100,8 @@ slbt_hidden int slbt_exec_link_create_executable(
fdcwd = slbt_driver_fdcwd(dctx);
/* fpic */
- fpic = (dctx->cctx->drvflags & SLBT_DRIVER_SHARED);
+ fpic = (dctx->cctx->drvflags & SLBT_DRIVER_SHARED);
+ fpic &= !(dctx->cctx->drvflags & SLBT_DRIVER_PREFER_STATIC);
/* input argument adjustment */
for (parg=ectx->cargv; *parg; parg++)