aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2024-10-24 17:48:34 +1030
committerAlan Modra <amodra@gmail.com>2024-10-24 17:58:00 +1030
commit8b5a212495371fbc9bea7f4ce6d632df3763723b (patch)
treee9a8e6187b092318233df563a7a81840c9f76cb0
parent4598f83eac08e5828ec0fe0dc03f7b9d76825a58 (diff)
downloadgdb-8b5a212495371fbc9bea7f4ce6d632df3763723b.zip
gdb-8b5a212495371fbc9bea7f4ce6d632df3763723b.tar.gz
gdb-8b5a212495371fbc9bea7f4ce6d632df3763723b.tar.bz2
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.
-rw-r--r--bfd/tekhex.c25
1 files 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;
}