tekhex object file output fixes

writevalue didn't handle 64-bit values, dropping the high 32 bits,
and also wrote any value in the range [0,15] as 0.

	* tekhex.c (first_phase): Handle *ABS* symbols.
	(writevalue): Rewrite.
This commit is contained in:
Alan Modra 2024-10-24 17:48:34 +10:30
parent 4598f83eac
commit 8b5a212495

View File

@ -395,7 +395,7 @@ first_phase (bfd *abfd, int type, char *src, char * src_end)
if (!n)
return false;
memcpy (n, sym, len + 1);
section = bfd_make_section (abfd, n);
section = bfd_make_section_old_way (abfd, n);
if (section == NULL)
return false;
}
@ -719,24 +719,13 @@ writevalue (char **dst, bfd_vma value)
int len;
int shift;
for (len = 8, shift = 28; shift; shift -= 4, len--)
{
if ((value >> shift) & 0xf)
{
*p++ = len + '0';
while (len)
{
*p++ = digs[(value >> shift) & 0xf];
shift -= 4;
len--;
}
*dst = p;
return;
for (len = BFD_ARCH_SIZE / 4, shift = len * 4 - 4; len > 1; shift -= 4, len--)
if ((value >> shift) & 0xf)
break;
}
}
*p++ = '1';
*p++ = '0';
*p++ = digs[len & 0xf];
for (; len; shift -= 4, len--)
*p++ = digs[(value >> shift) & 0xf];
*dst = p;
}