| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- #include <subcmd/parse-options.h>
- #include <string.h>
- #include <stdlib.h>
- #include <objtool/builtin.h>
- #include <objtool/objtool.h>
- #include <objtool/klp.h>
- struct subcmd {
- const char *name;
- const char *description;
- int (*fn)(int, const char **);
- };
- static struct subcmd subcmds[] = {
- { "diff", "Generate binary diff of two object files", cmd_klp_diff, },
- { "post-link", "Finalize klp symbols/relocs after module linking", cmd_klp_post_link, },
- };
- static void cmd_klp_usage(void)
- {
- fprintf(stderr, "usage: objtool klp <subcommand> [<options>]\n\n");
- fprintf(stderr, "Subcommands:\n");
- for (int i = 0; i < ARRAY_SIZE(subcmds); i++) {
- struct subcmd *cmd = &subcmds[i];
- fprintf(stderr, " %s\t%s\n", cmd->name, cmd->description);
- }
- exit(1);
- }
- int cmd_klp(int argc, const char **argv)
- {
- argc--;
- argv++;
- if (!argc)
- cmd_klp_usage();
- if (argc) {
- for (int i = 0; i < ARRAY_SIZE(subcmds); i++) {
- struct subcmd *cmd = &subcmds[i];
- if (!strcmp(cmd->name, argv[0]))
- return cmd->fn(argc, argv);
- }
- }
- cmd_klp_usage();
- return 0;
- }
|