Prevent possible undefined behaviour computing the size of the scache by usingunsigned integers instead of signed integers.
* cgen-scache.c (scache_option_handler): Prevent possible undefined behaviour computing the size of the scache by using unsigned integers instead of signed integers.
This commit is contained in:
parent
31d913c7e4
commit
13754e4c3d
2 changed files with 19 additions and 11 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-02-04 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* cgen-scache.c (scache_option_handler): Prevent possible
|
||||
undefined behaviour computing the size of the scache by using
|
||||
unsigned integers instead of signed integers.
|
||||
|
||||
2016-01-17 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* sim-fpu.c: Minor comment fixes throughout.
|
||||
|
|
|
@ -121,24 +121,26 @@ scache_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
|
|||
{
|
||||
if (arg != NULL)
|
||||
{
|
||||
int n = strtol (arg, NULL, 0);
|
||||
unsigned int n = (unsigned int) strtoul (arg, NULL, 0);
|
||||
if (n < MIN_SCACHE_SIZE)
|
||||
{
|
||||
sim_io_eprintf (sd, "invalid scache size `%d', must be at least 4", n);
|
||||
sim_io_eprintf (sd, "invalid scache size `%u', must be at least %u",
|
||||
n, MIN_SCACHE_SIZE);
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
/* Ensure it's a multiple of 2. */
|
||||
if ((n & (n - 1)) != 0)
|
||||
{
|
||||
sim_io_eprintf (sd, "scache size `%d' not a multiple of 2\n", n);
|
||||
{
|
||||
/* round up to nearest multiple of 2 */
|
||||
int i;
|
||||
for (i = 1; i < n; i <<= 1)
|
||||
unsigned int i;
|
||||
sim_io_eprintf (sd, "scache size `%u' not a multiple of 2\n", n);
|
||||
/* Round up to nearest multiple of 2. */
|
||||
for (i = 1; i && i < n; i <<= 1)
|
||||
continue;
|
||||
if (i)
|
||||
{
|
||||
n = i;
|
||||
sim_io_eprintf (sd, "rounding scache size up to %u\n", n);
|
||||
}
|
||||
sim_io_eprintf (sd, "rounding scache size up to %d\n", n);
|
||||
}
|
||||
if (cpu == NULL)
|
||||
STATE_SCACHE_SIZE (sd) = n;
|
||||
|
|
Loading…
Reference in a new issue