diff options
author | Alan Modra <amodra@gmail.com> | 2024-10-24 17:48:34 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2024-10-24 17:58:00 +1030 |
commit | 8b5a212495371fbc9bea7f4ce6d632df3763723b (patch) | |
tree | e9a8e6187b092318233df563a7a81840c9f76cb0 | |
parent | 4598f83eac08e5828ec0fe0dc03f7b9d76825a58 (diff) | |
download | gdb-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.c | 25 |
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; } |