target/cortex: fix -Wconversion warnings in dynamic tdesc generation
This commit is contained in:
parent
d16b0f8b47
commit
8f4a8ab593
|
@ -243,7 +243,11 @@ static_assert(ARRAY_SIZE(cortex_a_spr_types) == ARRAY_SIZE(cortex_a_spr_names),
|
||||||
// Returns the amount of characters written to the buffer.
|
// Returns the amount of characters written to the buffer.
|
||||||
static size_t create_tdesc_cortex_a(char *buffer, size_t max_len)
|
static size_t create_tdesc_cortex_a(char *buffer, size_t max_len)
|
||||||
{
|
{
|
||||||
size_t total = 0;
|
// Minor hack: technically snprintf returns an int for possibility of error, but in this case
|
||||||
|
// these functions are given static input that should not be able to fail -- and if it does,
|
||||||
|
// then there's nothing we can do about it, so we'll repatedly cast this variable to a size_t
|
||||||
|
// when calculating printsz (see below).
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
// We can't just repeatedly pass max_len to snprintf, because we keep changing the start
|
// We can't just repeatedly pass max_len to snprintf, because we keep changing the start
|
||||||
// of buffer (effectively changing its size), so we have to repeatedly compute the size
|
// of buffer (effectively changing its size), so we have to repeatedly compute the size
|
||||||
|
@ -271,9 +275,9 @@ static size_t create_tdesc_cortex_a(char *buffer, size_t max_len)
|
||||||
for (uint8_t i = 0; i <= 12; ++i) {
|
for (uint8_t i = 0; i <= 12; ++i) {
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "<reg name=\"r%d\" bitsize=\"32\"/>", i);
|
total += snprintf(buffer + total, printsz, "<reg name=\"r%u\" bitsize=\"32\"/>", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The special purpose registers are a slightly more complicated.
|
// The special purpose registers are a slightly more complicated.
|
||||||
|
@ -285,7 +289,7 @@ static size_t create_tdesc_cortex_a(char *buffer, size_t max_len)
|
||||||
gdb_reg_type_e type = cortex_a_spr_types[i];
|
gdb_reg_type_e type = cortex_a_spr_types[i];
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "<reg name=\"%s\" bitsize=\"32\"%s/>",
|
total += snprintf(buffer + total, printsz, "<reg name=\"%s\" bitsize=\"32\"%s/>",
|
||||||
cortex_a_spr_names[i],
|
cortex_a_spr_names[i],
|
||||||
|
@ -294,7 +298,7 @@ static size_t create_tdesc_cortex_a(char *buffer, size_t max_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
// Now onto the floating point registers.
|
// Now onto the floating point registers.
|
||||||
// The first register is unique; the rest all follow the same format.
|
// The first register is unique; the rest all follow the same format.
|
||||||
|
@ -307,20 +311,24 @@ static size_t create_tdesc_cortex_a(char *buffer, size_t max_len)
|
||||||
// Now onto the simple ones.
|
// Now onto the simple ones.
|
||||||
for (uint8_t i = 0; i <= 15; ++i) {
|
for (uint8_t i = 0; i <= 15; ++i) {
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz,
|
total += snprintf(buffer + total, printsz,
|
||||||
"<reg name=\"d%d\" bitsize=\"64\" type=\"float\"/>",
|
"<reg name=\"d%u\" bitsize=\"64\" type=\"float\"/>",
|
||||||
i
|
i
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "</feature></target>");
|
total += snprintf(buffer + total, printsz, "</feature></target>");
|
||||||
|
|
||||||
return total;
|
// Minor hack: technically snprintf returns an int for possibility of error, but in this case
|
||||||
|
// these functions are given static input that should not ever be able to fail -- and if it
|
||||||
|
// does, then there's nothing we can do about it, so we'll just discard the signedness
|
||||||
|
// of total when we return it.
|
||||||
|
return (size_t) total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -265,7 +265,11 @@ static_assert(ARRAY_SIZE(cortex_m_spr_bitsizes) == ARRAY_SIZE(cortex_m_spr_names
|
||||||
*/
|
*/
|
||||||
static size_t create_tdesc_cortex_m(char *buffer, size_t max_len)
|
static size_t create_tdesc_cortex_m(char *buffer, size_t max_len)
|
||||||
{
|
{
|
||||||
size_t total = 0;
|
// Minor hack: technically snprintf returns an int for possibility of error, but in this case
|
||||||
|
// these functions are given static input that should not be able to fail -- and if it does,
|
||||||
|
// then there's nothing we can do about it, so we'll repatedly cast this variable to a size_t
|
||||||
|
// when calculating printsz (see below).
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
// We can't just repeatedly pass max_len to snprintf, because we keep changing the start
|
// We can't just repeatedly pass max_len to snprintf, because we keep changing the start
|
||||||
// of buffer (effectively changing its size), so we have to repeatedly compute the size
|
// of buffer (effectively changing its size), so we have to repeatedly compute the size
|
||||||
|
@ -292,9 +296,9 @@ static size_t create_tdesc_cortex_m(char *buffer, size_t max_len)
|
||||||
for (uint8_t i = 0; i <= 12; ++i) {
|
for (uint8_t i = 0; i <= 12; ++i) {
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "<reg name=\"r%d\" bitsize=\"32\"/>", i);
|
total += snprintf(buffer + total, printsz, "<reg name=\"r%u\" bitsize=\"32\"/>", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now for sp, lr, pc, xpsr, msp, psp, primask, basepri, faultmask, and control.
|
// Now for sp, lr, pc, xpsr, msp, psp, primask, basepri, faultmask, and control.
|
||||||
|
@ -304,12 +308,12 @@ static size_t create_tdesc_cortex_m(char *buffer, size_t max_len)
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(cortex_m_spr_names); ++i) {
|
for (size_t i = 0; i < ARRAY_SIZE(cortex_m_spr_names); ++i) {
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
gdb_reg_type_e type = cortex_m_spr_types[i];
|
gdb_reg_type_e type = cortex_m_spr_types[i];
|
||||||
gdb_reg_save_restore_e save_restore = cortex_m_spr_save_restores[i];
|
gdb_reg_save_restore_e save_restore = cortex_m_spr_save_restores[i];
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "<reg name=\"%s\" bitsize=\"%d\"%s%s/>",
|
total += snprintf(buffer + total, printsz, "<reg name=\"%s\" bitsize=\"%u\"%s%s/>",
|
||||||
cortex_m_spr_names[i],
|
cortex_m_spr_names[i],
|
||||||
cortex_m_spr_bitsizes[i],
|
cortex_m_spr_bitsizes[i],
|
||||||
gdb_reg_save_restore_strings[save_restore],
|
gdb_reg_save_restore_strings[save_restore],
|
||||||
|
@ -318,11 +322,15 @@ static size_t create_tdesc_cortex_m(char *buffer, size_t max_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "</feature></target>");
|
total += snprintf(buffer + total, printsz, "</feature></target>");
|
||||||
|
|
||||||
return total;
|
// Minor hack: technically snprintf returns an int for possibility of error, but in this case
|
||||||
|
// these functions are given static input that should not ever be able to fail -- and if it
|
||||||
|
// does, then there's nothing we can do about it, so we'll just discard the signedness
|
||||||
|
// of total when we return it.
|
||||||
|
return (size_t) total;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates the target description XML string for a Cortex-MF. Like snprintf(), this function
|
// Creates the target description XML string for a Cortex-MF. Like snprintf(), this function
|
||||||
|
@ -387,9 +395,18 @@ static size_t create_tdesc_cortex_m(char *buffer, size_t max_len)
|
||||||
*/
|
*/
|
||||||
static size_t create_tdesc_cortex_mf(char *buffer, size_t max_len)
|
static size_t create_tdesc_cortex_mf(char *buffer, size_t max_len)
|
||||||
{
|
{
|
||||||
|
// Minor hack: technically snprintf returns an int for possibility of error, but in this case
|
||||||
|
// these functions are given static input that should not be able to fail -- and if it does,
|
||||||
|
// then there's not really anything we can do about it, so we repatedly cast this variable
|
||||||
|
// to a size_t when calculating printsz (see below). Likewise, create_tdesc_cortex_m()
|
||||||
|
// has static inputs and shouldn't ever return a value large enough for casting it to a
|
||||||
|
// signed int to change its value, and if it does, then again there's something wrong that
|
||||||
|
// we can't really do anything about.
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
// The first part of the target description for the Cortex-MF is identical to the Cortex-M
|
// The first part of the target description for the Cortex-MF is identical to the Cortex-M
|
||||||
// target description.
|
// target description.
|
||||||
size_t total = create_tdesc_cortex_m(buffer, max_len);
|
total = (int) create_tdesc_cortex_m(buffer, max_len);
|
||||||
|
|
||||||
// We can't just repeatedly pass max_len to snprintf, because we keep changing the start
|
// We can't just repeatedly pass max_len to snprintf, because we keep changing the start
|
||||||
// of buffer (effectively changing its size), so we have to repeatedly compute the size
|
// of buffer (effectively changing its size), so we have to repeatedly compute the size
|
||||||
|
@ -403,7 +420,7 @@ static size_t create_tdesc_cortex_mf(char *buffer, size_t max_len)
|
||||||
// Minor hack: subtract the target closing tag, since we have a bit more to add.
|
// Minor hack: subtract the target closing tag, since we have a bit more to add.
|
||||||
total -= strlen("</target>");
|
total -= strlen("</target>");
|
||||||
|
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -416,17 +433,21 @@ static size_t create_tdesc_cortex_mf(char *buffer, size_t max_len)
|
||||||
for (uint8_t i = 0; i <= 15; ++i) {
|
for (uint8_t i = 0; i <= 15; ++i) {
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "<reg name=\"d%u\" bitsize=\"64\" type=\"float\"/>", i);
|
total += snprintf(buffer + total, printsz, "<reg name=\"d%u\" bitsize=\"64\" type=\"float\"/>", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_len != 0)
|
if (max_len != 0)
|
||||||
printsz = max_len - total;
|
printsz = max_len - (size_t) total;
|
||||||
|
|
||||||
total += snprintf(buffer + total, printsz, "</feature></target>");
|
total += snprintf(buffer + total, printsz, "</feature></target>");
|
||||||
|
|
||||||
return total;
|
// Minor hack: technically snprintf returns an int for possibility of error, but in this case
|
||||||
|
// these functions are given static input that should not ever be able to fail -- and if it
|
||||||
|
// does, then there's nothing we can do about it, so we'll just discard the signedness
|
||||||
|
// of total when we return it.
|
||||||
|
return (size_t) total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue