From 8b5a212495371fbc9bea7f4ce6d632df3763723b Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 24 Oct 2024 17:48:34 +1030 Subject: 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. --- bfd/tekhex.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/bfd/tekhex.c b/bfd/tekhex.c index 96022c5..16e8e18 100644 --- a/bfd/tekhex.c +++ b/bfd/tekhex.c @@ -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; } -- cgit v1.1