This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
ia64 gas patch for unwind info bugs
- To: binutils at sourceware dot cygnus dot com
- Subject: ia64 gas patch for unwind info bugs
- From: Jim Wilson <wilson at cygnus dot com>
- Date: Mon, 08 May 2000 18:56:40 -0700
I've checked in this patch from David Mosberger. It fixes two bugs in the
ia64 unwind info support that he found. This requires a corresponding patch
to the gcc exception handling unwind support.
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.
Index: tc-ia64.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-ia64.c,v
retrieving revision 1.2
diff -p -r1.2 tc-ia64.c
*** tc-ia64.c 2000/04/23 02:53:35 1.2
--- tc-ia64.c 2000/05/09 01:46:01
*************** output_P7_format (f, rtype, w1, w2)
*** 1010,1017 ****
switch (rtype)
{
case mem_stack_f:
! r = 0;
! count += output_leb128 (bytes + count, w2, 0);
break;
case mem_stack_v:
r = 1;
--- 1010,1017 ----
switch (rtype)
{
case mem_stack_f:
! r = 0;
! count += output_leb128 (bytes + count, w2 >> 4, 0);
break;
case mem_stack_v:
r = 1;
*************** output_unw_records (list, ptr)
*** 2213,2223 ****
/* 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);
process_unw_records (list, output_vbyte_mem);
--- 2213,2222 ----
/* Clear the padding area and personality. */
memset (mem + 8 + size, 0 , extra + 8);
/* Initialize the header area. */
! 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);