b43-asm: Add an option to print the code sizes after assembling.
authorMichael Buesch <mb@bu3sch.de>
Sun, 18 May 2008 22:32:46 +0000 (00:32 +0200)
committerMichael Buesch <mb@bu3sch.de>
Sun, 18 May 2008 22:32:46 +0000 (00:32 +0200)
Signed-off-by: Michael Buesch <mb@bu3sch.de>
assembler/args.c
assembler/args.h
assembler/initvals.c
assembler/main.c

index ffb90f4aed9e25f54063591b436de32839669548..cf49460619c73537c9869b7793850d94795e1836 100644 (file)
@@ -23,6 +23,7 @@
 
 
 int _debug;
+bool arg_print_sizes;
 
 #define ARG_MATCH              0
 #define ARG_NOMATCH            1
@@ -96,6 +97,7 @@ static void usage(int argc, char **argv)
        fprintf(stderr, "  -h|--help           Print this help\n");
        fprintf(stderr, "  -d|--debug          Print verbose debugging info\n");
        fprintf(stderr, "                      Repeat for more verbose debugging\n");
+       fprintf(stderr, "  -s|--psize          Print the size of the code after assembling\n");
 }
 
 int parse_args(int argc, char **argv)
@@ -114,6 +116,8 @@ int parse_args(int argc, char **argv)
                        return 1;
                } else if ((res = cmp_arg(argv, &i, "--debug", "-d", 0)) == ARG_MATCH) {
                        _debug++;
+               } else if ((res = cmp_arg(argv, &i, "--psize", "-s", 0)) == ARG_MATCH) {
+                       arg_print_sizes = 1;
                } else {
                        fprintf(stderr, "Unrecognized argument: %s\n", argv[i]);
                        goto out_usage;
index 8bebeac4784811750c27555d3bf31c23b5261d64..15fcb51eaa27ea69576fb305d74011137305d6c1 100644 (file)
@@ -1,11 +1,15 @@
 #ifndef BCM43xx_ASM_ARGS_H_
 #define BCM43xx_ASM_ARGS_H_
 
+#include "util.h"
+
+
 int parse_args(int argc, char **argv);
 int open_input_file(void);
 void close_input_file(void);
 
 extern int _debug;
+extern bool arg_print_sizes;
 
 #define IS_DEBUG               (_debug > 0)
 #define IS_VERBOSE_DEBUG       (_debug > 1)
index eb2634d20a213bd18efcb2f477b9712a6f95e137..eb39d73fd11ecb39cc983ccaeb7ffd5b32efd601 100644 (file)
@@ -276,6 +276,7 @@ static void emit_ival_section(struct ivals_context *ctx)
        struct initval_raw raw;
        struct fw_header hdr;
        unsigned int size;
+       unsigned int filesize = 0;
 
        memset(&hdr, 0, sizeof(hdr));
        hdr.type = FW_TYPE_IV;
@@ -284,7 +285,7 @@ static void emit_ival_section(struct ivals_context *ctx)
 
        fn_len = strlen(outfile_name) + 512;
        fn = xmalloc(fn_len);
-       snprintf(fn, fn_len, "%s.%s.initval", outfile_name, ctx->sect->name);
+       snprintf(fn, fn_len, "%s.%s.initvals", outfile_name, ctx->sect->name);
        fd = fopen(fn, "w+");
        if (!fd) {
                fprintf(stderr, "Could not open initval output file \"%s\"\n", fn);
@@ -311,7 +312,14 @@ static void emit_ival_section(struct ivals_context *ctx)
                        fprintf(stderr, "Could not write initvals outfile\n");
                        exit(1);
                }
+               filesize += size;
        }
+
+       if (arg_print_sizes) {
+               printf("%s:  %d values (%u bytes)\n",
+                      fn, ctx->ivals_count, filesize);
+       }
+
        fclose(fd);
        free(fn);
 }
index 3562a048ca0d19b58beaaed36f0482ff23926d44..255cabc88c74b6966d0c0a4262e374d2048cdf14 100644 (file)
@@ -1125,6 +1125,12 @@ static void emit_code(struct assembler_context *ctx)
                        break;
                }
        }
+
+       if (arg_print_sizes) {
+               printf("%s:  text = %u instructions (%u bytes)\n",
+                      fn, insn_count, insn_count * sizeof(uint64_t));
+       }
+
        fclose(fd);
        free(fn);
 }