Home
       objdump.c - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       objdump.c (1245B)
       ---
            1 #include <errno.h>
            2 #include <stdarg.h>
            3 #include <stdio.h>
            4 #include <stdlib.h>
            5 #include <string.h>
            6 
            7 #include <scc/arg.h>
            8 #include <scc/mach.h>
            9 
           10 char *argv0;
           11 static char *filename;
           12 static int status;
           13 
           14 static void
           15 error(char *fmt, ...)
           16 {
           17         va_list va;
           18 
           19         va_start(va, fmt);
           20         fprintf(stderr, "objdump: %s: ", filename);
           21         vfprintf(stderr, fmt, va);
           22         putc('\n', stderr);
           23         va_end(va);
           24 
           25         status = EXIT_FAILURE;
           26 }
           27 
           28 /*
           29  * TODO: Dummy implementation used only in the assembler tests
           30  */
           31 static void
           32 dump(char *fname)
           33 {
           34         int c, n;
           35         FILE *fp;
           36 
           37         filename = fname;
           38         if ((fp = fopen(fname, "rb")) == NULL) {
           39                 error("%s", strerror(errno));
           40                 return;
           41         }
           42 
           43         puts("data:");
           44         for (n = 1; (c = getc(fp)) != EOF; n++)
           45                 printf("%02X%c", c, (n%16 == 0) ? '\n' : ' ');
           46         if (n%16 != 0)
           47                 putchar('\n');
           48 
           49         if (ferror(fp))
           50                 error("%s", strerror(errno));
           51 
           52         fclose(fp);
           53 }
           54 
           55 static void
           56 usage(void)
           57 {
           58         fputs("usage: objdump file ...\n", stderr);
           59         exit(1);
           60 }
           61 
           62 int
           63 main(int argc, char *argv[])
           64 {
           65         ARGBEGIN {
           66         default:
           67                 usage();
           68         } ARGEND
           69 
           70         if (argc == 0)
           71                 dump("a.out");
           72         else while (*argv) {
           73                 dump(*argv++);
           74         }
           75 
           76         if (fclose(stdout) == EOF) {
           77                 fprintf(stderr,
           78                         "objdump: writing output: %s\n",
           79                         strerror(errno));
           80                 return EXIT_FAILURE;
           81         }
           82 
           83         return status;
           84 }