view leo-obj/tool/main.c @ 155:15743b40e03a

tiobjd ctypes: print more useful hex byte offsets for struct fields
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Fri, 02 May 2014 23:41:44 +0000
parents 25d3ead621f8
children 069b79b36228
line wrap: on
line source

/*
 * tiobjd main() function and command dispatch
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "globals.h"

extern int cmd_basics();
extern int cmd_ctypes();
extern int cmd_disasm();
extern int cmd_ln();
extern int cmd_nm();
extern int cmd_profile();
extern int cmd_rawrel();
extern int cmd_reloc();
extern int cmd_sechdr();
extern int cmd_symtab();
extern int dump_filehdr_info();

static struct cmdtab {
	char	*cmd;
	int	(*func)();
} cmdtab[] = {
	{"basics", cmd_basics},
	{"ctypes", cmd_ctypes},
	{"disasm", cmd_disasm},
	{"dumpsym", cmd_symtab},	/* backward compat */
	{"hdr", dump_filehdr_info},
	{"ln", cmd_ln},
	{"nm", cmd_nm},
	{"profile", cmd_profile},
	{"rawrel", cmd_rawrel},
	{"reloc", cmd_reloc},
	{"sechdr", cmd_sechdr},
	{"symtab", cmd_symtab},
	{0, 0}
};

main(argc, argv)
	char **argv;
{
	struct cmdtab *tp;

	if (argc < 3) {
		fprintf(stderr, "usage: %s <objfile> <op> [args]\n", argv[0]);
		exit(1);
	}
	objfilename = argv[1];
	mmap_objfile();
	initial_parse_hdr();
	for (tp = cmdtab; tp->cmd; tp++)
		if (!strcmp(tp->cmd, argv[2]))
			break;
	if (!tp->func) {
		fprintf(stderr, "\"%s\": unknown or unimplemented command\n",
			argv[2]);
		exit(1);
	}
	return tp->func(argc - 2, argv + 2);
}