From e47cd7d15cee80e0a78fb7a4ec0d53e117d37379 Mon Sep 17 00:00:00 2001 From: midipix Date: Tue, 5 Mar 2024 01:11:15 +0000 Subject: driver: finalized -dlopen, including the 'self' and 'force' special arguments. --- src/driver/slbt_driver_ctx.c | 6 ++++-- src/driver/slbt_split_argv.c | 11 +++++++---- src/skin/slbt_skin_default.c | 6 ++++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c index 0e4ebda..8f4f2dc 100644 --- a/src/driver/slbt_driver_ctx.c +++ b/src/driver/slbt_driver_ctx.c @@ -722,8 +722,6 @@ int slbt_lib_get_driver_ctx( break; case TAG_DLOPEN: - break; - case TAG_DLPREOPEN: ndlopen++; break; @@ -1011,6 +1009,10 @@ int slbt_lib_get_driver_ctx( for (entry=meta->entries; entry->fopt || entry->arg; entry++) { if (entry->fopt) { switch (entry->tag) { + case TAG_DLOPEN: + ctx->cctx.drvflags |= SLBT_DRIVER_DLOPEN_FORCE; + break; + case TAG_DLPREOPEN: if (!strcmp(entry->arg,"self")) { ctx->cctx.drvflags |= SLBT_DRIVER_DLPREOPEN_SELF; diff --git a/src/driver/slbt_split_argv.c b/src/driver/slbt_split_argv.c index df0db37..894ed9d 100644 --- a/src/driver/slbt_split_argv.c +++ b/src/driver/slbt_split_argv.c @@ -472,10 +472,6 @@ slbt_hidden int slbt_split_argv( *targv++ = argv[i++]; *targv++ = argv[i]; - } else if (!(strcmp("dlopen",&argv[i][1]))) { - *targv++ = argv[i++]; - *targv++ = argv[i]; - } else if (!(strcmp("weak",&argv[i][1]))) { *targv++ = argv[i++]; *targv++ = argv[i]; @@ -502,6 +498,13 @@ slbt_hidden int slbt_split_argv( *targv++ = argv[i++]; *targv++ = argv[i]; + } else if (!(strcmp("dlopen",&argv[i][1]))) { + if (!argv[i+1]) + return -1; + + *targv++ = argv[i++]; + *targv++ = argv[i]; + } else if (!(strcmp("dlpreopen",&argv[i][1]))) { if (!argv[i+1]) return -1; diff --git a/src/skin/slbt_skin_default.c b/src/skin/slbt_skin_default.c index d258def..c982908 100644 --- a/src/skin/slbt_skin_default.c +++ b/src/skin/slbt_skin_default.c @@ -202,8 +202,10 @@ const slbt_hidden struct argv_option slbt_default_options[] = { {"dlopen", 0,TAG_DLOPEN,ARGV_OPTARG_REQUIRED, ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE, 0,"", - "add the directory containing %s to the library path " - "[currently a no-op]"}, + "create and link into the dynamic library, dynamic module, " + "or executable program a minimal, backward-compatible dlsyms " + "vtable. On modern systems, this has the same effect as " + "``-dlpreopen force``."}, {"dlpreopen", 0,TAG_DLPREOPEN,ARGV_OPTARG_REQUIRED, ARGV_OPTION_HYBRID_ONLY|ARGV_OPTION_HYBRID_SPACE, -- cgit v1.2.3