]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
tekhex object file output fixes
authorAlan Modra <amodra@gmail.com>
Thu, 24 Oct 2024 07:18:34 +0000 (17:48 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 24 Oct 2024 07:28:00 +0000 (17:58 +1030)
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

index 96022c585ab252c05891a6686f91eb7bcfcb2edf..16e8e1855726614a5f9adfe43cd97e40e4c75961 100644 (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;
 }