54 lines · 1.2 KB · C
RawDownload
// 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[] = {	{ "checksum",		"Generate per-function checksums",			cmd_klp_checksum, },	{ "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;}