From c7b4be04c93ce1dcb557170d99f613c03d9ff0bd Mon Sep 17 00:00:00 2001 From: Mark Brown Date: Tue, 26 Oct 2010 14:22:28 -0700 Subject: [PATCH] --- yaml --- r: 217516 b: refs/heads/master c: 2473238eac95ba6dd2c4ba19cc36aaf01465076b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/firmware/ihex2fw.c | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 1a2da12fb3dd..70d3bc9750dc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b6777c40c79168d938c30b5b7471fbd64bca109c +refs/heads/master: 2473238eac95ba6dd2c4ba19cc36aaf01465076b diff --git a/trunk/firmware/ihex2fw.c b/trunk/firmware/ihex2fw.c index 5a03ba8c8364..ba0cf0b601bb 100644 --- a/trunk/firmware/ihex2fw.c +++ b/trunk/firmware/ihex2fw.c @@ -55,6 +55,7 @@ static int output_records(int outfd); static int sort_records = 0; static int wide_records = 0; +static int include_jump = 0; static int usage(void) { @@ -63,6 +64,7 @@ static int usage(void) fprintf(stderr, "usage: ihex2fw [] \n"); fprintf(stderr, " -w: wide records (16-bit length)\n"); fprintf(stderr, " -s: sort records by address\n"); + fprintf(stderr, " -j: include records for CS:IP/EIP address\n"); return 1; } @@ -73,7 +75,7 @@ int main(int argc, char **argv) uint8_t *data; int opt; - while ((opt = getopt(argc, argv, "ws")) != -1) { + while ((opt = getopt(argc, argv, "wsj")) != -1) { switch (opt) { case 'w': wide_records = 1; @@ -81,7 +83,9 @@ int main(int argc, char **argv) case 's': sort_records = 1; break; - default: + case 'j': + include_jump = 1; + break; return usage(); } } @@ -128,6 +132,7 @@ static int process_ihex(uint8_t *data, ssize_t size) { struct ihex_binrec *record; uint32_t offset = 0; + uint32_t data32; uint8_t type, crc = 0, crcbyte = 0; int i, j; int line = 1; @@ -223,8 +228,14 @@ static int process_ihex(uint8_t *data, ssize_t size) return -EINVAL; } + memcpy(&data32, &record->data[0], sizeof(data32)); + data32 = htonl(data32); + memcpy(&record->data[0], &data32, sizeof(data32)); + /* These records contain the CS/IP or EIP where execution - * starts. Don't really know what to do with them. */ + * starts. If requested output this as a record. */ + if (include_jump) + file_record(record); goto next_record; default: