Home | History | Annotate | Download | only in bin2asm
      1 /*
      2  * Convert a data file into a .S file suitable for assembly.
      3  * This reads from stdin and writes to stdout and takes a single
      4  * argument for the name of the symbol in the assembly file.
      5  */
      6 
      7 #include <stdio.h>
      8 
      9 int main(int argc, char *argv[]) {
     10     unsigned char buf[4096];
     11     size_t amt;
     12     size_t i;
     13     int col = 0;
     14     char *name;
     15 
     16     if (argc != 2) {
     17         fprintf(stderr, "usage: %s NAME < DAT_FILE > ASM_FILE\n", argv[0]);
     18         for (i=0; i<argc; i++) {
     19             fprintf(stderr, " '%s'", argv[i]);
     20         }
     21         fprintf(stderr, "\n");
     22         return 1;
     23     }
     24 
     25     name = argv[1];
     26 
     27     printf("\
     28 #ifdef __APPLE_CC__\n\
     29 /*\n\
     30  * The mid-2007 version of gcc that ships with Macs requires a\n\
     31  * comma on the .section line, but the rest of the world thinks\n\
     32  * that's a syntax error. It also wants globals to be explicitly\n\
     33  * prefixed with \"_\" as opposed to modern gccs that do the\n\
     34  * prefixing for you.\n\
     35  */\n\
     36 .globl _%s\n\
     37 	.section .rodata,\n\
     38 	.align 8\n\
     39 _%s:\n\
     40 #else\n\
     41 .globl %s\n\
     42 	.section .rodata\n\
     43 	.align 8\n\
     44 %s:\n\
     45 #endif\n\
     46 ", name, name, name, name);
     47 
     48     while (! feof(stdin)) {
     49         amt = fread(buf, 1, sizeof(buf), stdin);
     50         for (i = 0; i < amt; i++) {
     51             if (col == 0) {
     52                 printf(".byte ");
     53             }
     54             printf("0x%02x", buf[i]);
     55             col++;
     56             if (col == 16) {
     57                 printf("\n");
     58                 col = 0;
     59             } else if (col % 4 == 0) {
     60                 printf(", ");
     61             } else {
     62                 printf(",");
     63             }
     64         }
     65     }
     66 
     67     if (col != 0) {
     68         printf("\n");
     69     }
     70 
     71     return 0;
     72 }
     73