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>
This commit is contained in:
parent
a540033a71
commit
f85ad1e52a
|
@ -434,7 +434,7 @@ COMMAND_HANDLER(handle_flash_write_image_command)
|
||||||
if (CMD_ARGC >= 2)
|
if (CMD_ARGC >= 2)
|
||||||
{
|
{
|
||||||
image.base_address_set = 1;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1761,7 +1761,7 @@ COMMAND_HANDLER(handle_etm_image_command)
|
||||||
if (CMD_ARGC >= 2)
|
if (CMD_ARGC >= 2)
|
||||||
{
|
{
|
||||||
etm_ctx->image->base_address_set = 1;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,7 +62,7 @@ struct image
|
||||||
int num_sections; /* number of sections contained in the image */
|
int num_sections; /* number of sections contained in the image */
|
||||||
struct imageection *sections; /* array of sections */
|
struct imageection *sections; /* array of sections */
|
||||||
int base_address_set; /* whether the image has a base address set (for relocation purposes) */
|
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 */
|
int start_address_set; /* whether the image has a start address (entry point) associated */
|
||||||
uint32_t start_address; /* start address, if one is set */
|
uint32_t start_address; /* start address, if one is set */
|
||||||
};
|
};
|
||||||
|
|
|
@ -3419,7 +3419,7 @@ COMMAND_HANDLER(xscale_handle_trace_image_command)
|
||||||
if (CMD_ARGC >= 2)
|
if (CMD_ARGC >= 2)
|
||||||
{
|
{
|
||||||
xscale->trace.image->base_address_set = 1;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue