diff options
author | Bradey Honsinger <bradeyh@gmail.com> | 2010-03-15 08:43:41 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-03-16 10:11:40 +0100 |
commit | f85ad1e52a499bc98ae9d559157e8adbe8a5ad1f (patch) | |
tree | edbc78edfafb01e2ea30ebf8ace6ddd176fadfe4 | |
parent | a540033a71eb0b10bb8de85963781ec1b9c06cf1 (diff) | |
download | openocd_libswd-f85ad1e52a499bc98ae9d559157e8adbe8a5ad1f.tar.gz openocd_libswd-f85ad1e52a499bc98ae9d559157e8adbe8a5ad1f.tar.bz2 openocd_libswd-f85ad1e52a499bc98ae9d559157e8adbe8a5ad1f.tar.xz openocd_libswd-f85ad1e52a499bc98ae9d559157e8adbe8a5ad1f.zip |
image loading: fix problem with offsets > 0x80000000
Fixes bug that prevented users from specifying a base address of
0x80000000 or higher in image commands (flash write_image, etm image,
xscale trace_image).
image.base_address is an offset from the start address contained in
the image file (if there is one), or from 0 (for binary files). As a
signed 32-bit int, it couldn't be greater than 0x7fffffff, which is a
problem when trying to write a binary file to flash above that
address. Changing it to a 64-bit long long keeps it as a signed
offset, but allows it to cover the entire 32-bit address space.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
-rw-r--r-- | src/flash/nor/tcl.c | 2 | ||||
-rw-r--r-- | src/target/etm.c | 2 | ||||
-rw-r--r-- | src/target/image.h | 2 | ||||
-rw-r--r-- | src/target/xscale.c | 2 |
4 files changed, 4 insertions, 4 deletions
diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c index a40230b9..38cb6558 100644 --- a/src/flash/nor/tcl.c +++ b/src/flash/nor/tcl.c @@ -434,7 +434,7 @@ COMMAND_HANDLER(handle_flash_write_image_command) if (CMD_ARGC >= 2) { image.base_address_set = 1; - COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], image.base_address); + COMMAND_PARSE_NUMBER(llong, CMD_ARGV[1], image.base_address); } else { diff --git a/src/target/etm.c b/src/target/etm.c index 10ab72aa..67dac06f 100644 --- a/src/target/etm.c +++ b/src/target/etm.c @@ -1761,7 +1761,7 @@ COMMAND_HANDLER(handle_etm_image_command) if (CMD_ARGC >= 2) { etm_ctx->image->base_address_set = 1; - COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], etm_ctx->image->base_address); + COMMAND_PARSE_NUMBER(llong, CMD_ARGV[1], etm_ctx->image->base_address); } else { diff --git a/src/target/image.h b/src/target/image.h index e963b3c1..b096031b 100644 --- a/src/target/image.h +++ b/src/target/image.h @@ -62,7 +62,7 @@ struct image int num_sections; /* number of sections contained in the image */ struct imageection *sections; /* array of sections */ int base_address_set; /* whether the image has a base address set (for relocation purposes) */ - int base_address; /* base address, if one is set */ + long long base_address; /* base address, if one is set */ int start_address_set; /* whether the image has a start address (entry point) associated */ uint32_t start_address; /* start address, if one is set */ }; diff --git a/src/target/xscale.c b/src/target/xscale.c index 50c95950..dd4a7ee6 100644 --- a/src/target/xscale.c +++ b/src/target/xscale.c @@ -3419,7 +3419,7 @@ COMMAND_HANDLER(xscale_handle_trace_image_command) if (CMD_ARGC >= 2) { xscale->trace.image->base_address_set = 1; - COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], xscale->trace.image->base_address); + COMMAND_PARSE_NUMBER(llong, CMD_ARGV[1], xscale->trace.image->base_address); } else { |