diff --git a/bfd/tekhex.c b/bfd/tekhex.c
index 96022c585ab..46f40b19817 100644
--- a/bfd/tekhex.c
+++ b/bfd/tekhex.c
@@ -719,11 +719,11 @@ writevalue (char **dst, bfd_vma value)
   int len;
   int shift;
 
-  for (len = 8, shift = 28; shift; shift -= 4, len--)
+  for (len = 16, shift = 60; shift; shift -= 4, len--)
     {
       if ((value >> shift) & 0xf)
 	{
-	  *p++ = len + '0';
+	  *p++ = digs[len & 0xf];
 	  while (len)
 	    {
 	      *p++ = digs[(value >> shift) & 0xf];
