* [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option
@ 2025-12-26 14:31 Oleg Nesterov
2025-12-26 14:32 ` [PATCH 2/2] sparse/semind: robustify parse_cmdline_add() Oleg Nesterov
2025-12-27 15:58 ` [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option Alexey Gladkov
0 siblings, 2 replies; 4+ messages in thread
From: Oleg Nesterov @ 2025-12-26 14:31 UTC (permalink / raw)
To: Chris Li, Luc Van Oostenryck; +Cc: Alexey Gladkov, linux-sparse
parse_cmdline_add() sets dissect_show_all_symbols = 1 unconditionally
and currently it is not possible to clear this option.
We could simply remove this line; users could use
"semind add --param=dissect-show-all-symbols," but this would break
existing setups.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
options.c | 2 ++
semind.c | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/options.c b/options.c
index 0f207e80..dbe0349f 100644
--- a/options.c
+++ b/options.c
@@ -976,6 +976,8 @@ static char **handle_param(char *arg, char **next)
if (!strcmp(value, "dissect-show-all-symbols"))
dissect_show_all_symbols = 1;
+ else if (!strcmp(value, "dissect-show-compiled"))
+ dissect_show_all_symbols = 0;
return next;
}
diff --git a/semind.c b/semind.c
index ad8003ba..fa084e04 100644
--- a/semind.c
+++ b/semind.c
@@ -322,14 +322,14 @@ done:
show_usage();
}
- // enforce tabstop
+ // enforce defaults
tabstop = 1;
+ dissect_show_all_symbols = 1;
// step back since sparse_initialize will ignore argv[0].
optind--;
sparse_initialize(argc - optind, argv + optind, &semind_filelist);
- dissect_show_all_symbols = 1;
}
static void parse_cmdline_rm(int argc, char **argv)
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] sparse/semind: robustify parse_cmdline_add()
2025-12-26 14:31 [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option Oleg Nesterov
@ 2025-12-26 14:32 ` Oleg Nesterov
2025-12-27 15:58 ` Alexey Gladkov
2025-12-27 15:58 ` [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option Alexey Gladkov
1 sibling, 1 reply; 4+ messages in thread
From: Oleg Nesterov @ 2025-12-26 14:32 UTC (permalink / raw)
To: Chris Li, Luc Van Oostenryck; +Cc: Alexey Gladkov, linux-sparse
"semind add -ftabstop=8 ..." works as expected, but (for example)
"semind add --param=dissect-show-all-symbols ..." doesn't, this
arg is not passed to sparse_initialize().
Because in the latter case getopt_long() increments optind when it
sees --param=dissect-show-all-symbols. I have no idea if getopt_long()
is correct or not, but lets change parse_cmdline_add() so that it doesn't
depend on getopt_long()'s behaviour.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
semind.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/semind.c b/semind.c
index fa084e04..e9708444 100644
--- a/semind.c
+++ b/semind.c
@@ -298,7 +298,7 @@ static void parse_cmdline_add(int argc, char **argv)
{ "help", no_argument, NULL, 'h' },
{ NULL }
};
- int c;
+ int parsed = optind, c;
opterr = 0;
@@ -315,6 +315,7 @@ static void parse_cmdline_add(int argc, char **argv)
case '?':
goto done;
}
+ parsed = optind;
}
done:
if (optind == argc) {
@@ -327,9 +328,8 @@ done:
dissect_show_all_symbols = 1;
// step back since sparse_initialize will ignore argv[0].
- optind--;
-
- sparse_initialize(argc - optind, argv + optind, &semind_filelist);
+ parsed--;
+ sparse_initialize(argc - parsed, argv + parsed, &semind_filelist);
}
static void parse_cmdline_rm(int argc, char **argv)
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] sparse/semind: robustify parse_cmdline_add()
2025-12-26 14:32 ` [PATCH 2/2] sparse/semind: robustify parse_cmdline_add() Oleg Nesterov
@ 2025-12-27 15:58 ` Alexey Gladkov
0 siblings, 0 replies; 4+ messages in thread
From: Alexey Gladkov @ 2025-12-27 15:58 UTC (permalink / raw)
To: Oleg Nesterov; +Cc: Chris Li, Luc Van Oostenryck, linux-sparse
On Fri, Dec 26, 2025 at 03:32:24PM +0100, Oleg Nesterov wrote:
> "semind add -ftabstop=8 ..." works as expected, but (for example)
> "semind add --param=dissect-show-all-symbols ..." doesn't, this
> arg is not passed to sparse_initialize().
>
> Because in the latter case getopt_long() increments optind when it
> sees --param=dissect-show-all-symbols. I have no idea if getopt_long()
> is correct or not, but lets change parse_cmdline_add() so that it doesn't
> depend on getopt_long()'s behaviour.
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Hm. This behavior seems very strange to me. I couldn't find an explanation
for it in getopt_long(3) man page. But I tried this sample with glibc and
musl, and the behavior was the same and does not depend on POSIXLY_CORRECT
#include <stdio.h>
#include <getopt.h>
int main(int argc, char **argv)
{
char c;
opterr = 0;
while ((c = getopt_long(argc, argv, "", NULL, NULL)) != -1) {
if (c != '?')
printf("unexpected known option: %c\n", c);
break;
}
printf("optind=%d\n", optind);
return 0;
}
Here are the results from both libc:
for o in --f "--f f" -f -ff "-f f"; do printf '%s\t' "args='$o'"; ./z-musl $o; done
args='--f' optind=1
args='--f f' optind=1
args='-f' optind=2
args='-ff' optind=1
args='-f f' optind=2
So it seems that this is common behavior for different libc's.
Thank you so much for finding this and fixing it!
Acked-by: Alexey Gladkov <legion@kernel.org>
> ---
> semind.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/semind.c b/semind.c
> index fa084e04..e9708444 100644
> --- a/semind.c
> +++ b/semind.c
> @@ -298,7 +298,7 @@ static void parse_cmdline_add(int argc, char **argv)
> { "help", no_argument, NULL, 'h' },
> { NULL }
> };
> - int c;
> + int parsed = optind, c;
>
> opterr = 0;
>
> @@ -315,6 +315,7 @@ static void parse_cmdline_add(int argc, char **argv)
> case '?':
> goto done;
> }
> + parsed = optind;
> }
> done:
> if (optind == argc) {
> @@ -327,9 +328,8 @@ done:
> dissect_show_all_symbols = 1;
>
> // step back since sparse_initialize will ignore argv[0].
> - optind--;
> -
> - sparse_initialize(argc - optind, argv + optind, &semind_filelist);
> + parsed--;
> + sparse_initialize(argc - parsed, argv + parsed, &semind_filelist);
> }
>
> static void parse_cmdline_rm(int argc, char **argv)
> --
> 2.52.0
>
>
--
Rgrds, legion
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option
2025-12-26 14:31 [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option Oleg Nesterov
2025-12-26 14:32 ` [PATCH 2/2] sparse/semind: robustify parse_cmdline_add() Oleg Nesterov
@ 2025-12-27 15:58 ` Alexey Gladkov
1 sibling, 0 replies; 4+ messages in thread
From: Alexey Gladkov @ 2025-12-27 15:58 UTC (permalink / raw)
To: Oleg Nesterov; +Cc: Chris Li, Luc Van Oostenryck, linux-sparse
On Fri, Dec 26, 2025 at 03:31:56PM +0100, Oleg Nesterov wrote:
> parse_cmdline_add() sets dissect_show_all_symbols = 1 unconditionally
> and currently it is not possible to clear this option.
>
> We could simply remove this line; users could use
> "semind add --param=dissect-show-all-symbols," but this would break
> existing setups.
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Alexey Gladkov <legion@kernel.org>
> ---
> options.c | 2 ++
> semind.c | 4 ++--
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/options.c b/options.c
> index 0f207e80..dbe0349f 100644
> --- a/options.c
> +++ b/options.c
> @@ -976,6 +976,8 @@ static char **handle_param(char *arg, char **next)
>
> if (!strcmp(value, "dissect-show-all-symbols"))
> dissect_show_all_symbols = 1;
> + else if (!strcmp(value, "dissect-show-compiled"))
> + dissect_show_all_symbols = 0;
>
> return next;
> }
> diff --git a/semind.c b/semind.c
> index ad8003ba..fa084e04 100644
> --- a/semind.c
> +++ b/semind.c
> @@ -322,14 +322,14 @@ done:
> show_usage();
> }
>
> - // enforce tabstop
> + // enforce defaults
> tabstop = 1;
> + dissect_show_all_symbols = 1;
>
> // step back since sparse_initialize will ignore argv[0].
> optind--;
>
> sparse_initialize(argc - optind, argv + optind, &semind_filelist);
> - dissect_show_all_symbols = 1;
> }
>
> static void parse_cmdline_rm(int argc, char **argv)
> --
> 2.52.0
>
>
--
Rgrds, legion
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-12-27 15:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-26 14:31 [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option Oleg Nesterov
2025-12-26 14:32 ` [PATCH 2/2] sparse/semind: robustify parse_cmdline_add() Oleg Nesterov
2025-12-27 15:58 ` Alexey Gladkov
2025-12-27 15:58 ` [PATCH 1/2] sparse/semind: add the new --param=dissect-show-compiled option Alexey Gladkov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.