diff options
author | Alan Modra <amodra@gmail.com> | 2023-04-03 12:35:53 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-04-03 23:14:41 +0930 |
commit | 5cdf86d363747a5e0b67165d32ab512ff50d83d2 (patch) | |
tree | d42e0c35b6a153b119b6a62b7dc3e2b1ac951118 /opcodes | |
parent | 29caf11836611478a1fb32283b07e6777dfa5c28 (diff) | |
download | binutils-5cdf86d363747a5e0b67165d32ab512ff50d83d2.zip binutils-5cdf86d363747a5e0b67165d32ab512ff50d83d2.tar.gz binutils-5cdf86d363747a5e0b67165d32ab512ff50d83d2.tar.bz2 |
asan: csky floatformat_to_double uninitialised value
* csky-dis.c (csky_print_operand <OPRND_TYPE_FCONSTANT>): Don't
access ibytes after read_memory_func error. Change type of
ibytes to avoid casts.
Diffstat (limited to 'opcodes')
-rw-r--r-- | opcodes/csky-dis.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/opcodes/csky-dis.c b/opcodes/csky-dis.c index fc7d595..1deea04 100644 --- a/opcodes/csky-dis.c +++ b/opcodes/csky-dis.c @@ -519,7 +519,7 @@ csky_output_operand (char *str, struct operand const *oprnd, case OPRND_TYPE_FCONSTANT: { int shift = oprnd->shift; - char ibytes[8]; + bfd_byte ibytes[8]; int status; bfd_vma addr; int nbytes; @@ -538,19 +538,13 @@ csky_output_operand (char *str, struct operand const *oprnd, else nbytes = 4; - status = dis_info.info->read_memory_func (addr, (bfd_byte *)ibytes, + status = dis_info.info->read_memory_func (addr, ibytes, nbytes, dis_info.info); if (status != 0) /* Address out of bounds. -> lrw rx, [pc, 0ffset]. */ sprintf (buf, "[pc, %d]\t// from address pool at %x", (int)value, (unsigned int)addr); - else - { - dis_info.value = addr; - value = csky_chars_to_number ((unsigned char *)ibytes, 4); - } - - if (oprnd->type == OPRND_TYPE_FCONSTANT) + else if (oprnd->type == OPRND_TYPE_FCONSTANT) { double f; @@ -569,8 +563,10 @@ csky_output_operand (char *str, struct operand const *oprnd, } else { + dis_info.value = addr; dis_info.need_output_symbol = 1; - sprintf (buf, "0x%x", (unsigned int)value); + value = csky_chars_to_number (ibytes, 4); + sprintf (buf, "0x%x", (unsigned int) value); } strcat (str, buf); |