Unwind info bug fixes from David Mosberger.
authorJim Wilson <wilson@tuliptree.org>
Tue, 9 May 2000 01:54:37 +0000 (01:54 +0000)
committerJim Wilson <wilson@tuliptree.org>
Tue, 9 May 2000 01:54:37 +0000 (01:54 +0000)
* config/tc-ia64.c (output_P7_format, case mem_stack_f): Output fixed
frame size in units of 16 bytes, as required per SW Conventions manual.
(output_unw_records): Output info-block header as a dword to get
byte-order right.

gas/ChangeLog
gas/config/tc-ia64.c

index 9e2c5197953a1a1e3a7e7f66e4bd6a9319965bfc..fbaadc00154fad38ef26c0707998cbb0e09eb322 100644 (file)
@@ -1,3 +1,10 @@
+2000-05-08  David Mosberger  <davidm@hpl.hp.com>
+
+       * config/tc-ia64.c (output_P7_format, case mem_stack_f): Output fixed
+       frame size in units of 16 bytes, as required per SW Conventions manual.
+       (output_unw_records): Output info-block header as a dword to get
+       byte-order right.
+
 2000-05-08  Alan Modra  <alan@linuxcare.com.au>
 
        * as.h: #include "file", not <file> on files from ../include.
index 9607ef84d39e4899fc0c41fe0e92b66c4161fa5b..e109d546a4f50fce0be0616c4bdb4d42892228f7 100644 (file)
@@ -1010,8 +1010,8 @@ output_P7_format (f, rtype, w1, w2)
   switch (rtype)
     {
       case mem_stack_f:
-        r = 0;
-       count += output_leb128 (bytes + count, w2, 0);
+       r = 0;
+       count += output_leb128 (bytes + count, w2 >> 4, 0);
        break;
       case mem_stack_v:
         r = 1;
@@ -2213,11 +2213,10 @@ output_unw_records (list, ptr)
   /* Clear the padding area and personality.  */
   memset (mem + 8 + size, 0 , extra + 8);
   /* Initialize the header area.  */
-  md_number_to_chars (mem, 1, 2);      /* version number. */
-  md_number_to_chars (mem + 2, 0x03, 2);  /* Set E and U handler bits.  */    
-
-  /* Length in double words.  */
-  md_number_to_chars (mem + 4, (size + extra) / 8, 4);
+  md_number_to_chars (mem, (  ((bfd_vma) 1 << 48)     /* version */
+                           | ((bfd_vma) 3 << 32)     /* U & E handler flags */
+                           | ((size + extra) / 8)),  /* length (dwords) */
+                     8);
 
   process_unw_records (list, output_vbyte_mem);