diff leo-obj/tool/basics.c @ 130:87b82398a08b

leo-obj project subtree started, tiobjd tool moved into it
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 06 Apr 2014 22:14:39 +0000
parents ticoff/basics.c@590396e27e96
children ed533d469838
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/leo-obj/tool/basics.c	Sun Apr 06 22:14:39 2014 +0000
@@ -0,0 +1,74 @@
+/*
+ * This C module implements some "basic" dump commands
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include "filestruct.h"
+#include "intstruct.h"
+#include "globals.h"
+
+extern unsigned get_u16(), get_u32();
+
+dump_filehdr_info()
+{
+	time_t timestamp;
+	struct tm *timedec;
+
+	timestamp = get_u32(filehdr_struct->f_timdat);
+	timedec = gmtime(&timestamp);
+	printf("timestamp: %d-%02d-%02dT%02d:%02d:%02dZ\n",
+		timedec->tm_year + 1900, timedec->tm_mon + 1, timedec->tm_mday,
+		timedec->tm_hour, timedec->tm_min, timedec->tm_sec);
+	printf("file flags: 0x%x\n", get_u16(filehdr_struct->f_flags));
+	printf("%u sections, %u symtab entries\n", nsections, nsymtab);
+	return(0);
+}
+
+dump_sechdr()
+{
+	unsigned n;
+	struct internal_scnhdr *inf;
+
+	for (n = 0; n < nsections; n++) {
+		inf = sections + n;
+		printf("#%d: %s size=%u, flags=0x%x\n", n, inf->name,
+			inf->size, inf->flags);
+		printf("\t%u reloc, %u line entries\n",
+			inf->nreloc, inf->nlineent);
+	}
+	return(0);
+}
+
+cmd_sechdr()
+{
+	get_int_section_table();
+	dump_sechdr();
+	exit(0);
+}
+
+cmd_symtab()
+{
+	get_int_section_table();
+	get_int_symbol_table();
+	dump_symtab();
+	exit(0);
+}
+
+cmd_basics()
+{
+	printf("%s:\n", objfilename);
+	dump_filehdr_info();
+	putchar('\n');
+	get_int_section_table();
+	printf("Sections:\n\n");
+	dump_sechdr();
+	putchar('\n');
+	get_int_symbol_table();
+	printf("Symbol table:\n\n");
+	dump_symtab();
+	putchar('\n');
+	exit(0);
+}