Hi, use of 'long' in vms-unwind.h for registers isn't correct as 'long' should be a 32 bit type on vms. Let replace it with unw_reg, now defined as unsigned __int64.
Manually tested on ia64-hp-openvms. Committed on trunk. Tristan. libgcc/ 2012-03-16 Tristan Gingold <ging...@adacore.com> * config/ia64/vms-unwind.h: Remove ulong (and replace it by unw_reg where used). Define unw_reg with __int64. Index: libgcc/config/ia64/vms-unwind.h =================================================================== --- libgcc/config/ia64/vms-unwind.h (revision 185454) +++ libgcc/config/ia64/vms-unwind.h (working copy) @@ -49,9 +49,8 @@ extern int LIB$I64_GET_CURR_INVO_CONTEXT (INVO_CONTEXT_BLK *); extern int LIB$I64_GET_PREV_INVO_CONTEXT (INVO_CONTEXT_BLK *); -typedef unsigned long ulong; typedef unsigned int uint; -typedef unsigned long uw_reg; +typedef unsigned __int64 uw_reg; typedef uw_reg * uw_loc; typedef char fp_reg[16]; @@ -179,8 +178,8 @@ if (eh_debug) printf ("User frame, " - "chfmech @ 0x%lx, chfsig64 @ 0x%lx, intstk @ 0x%lx\n", - (ulong)chfmech, (ulong)chfsig64, (ulong)intstk); + "chfmech @ 0x%p, chfsig64 @ 0x%p, intstk @ 0x%p\n", + chfmech, chfsig64, intstk); /* Step 2 : ------------------------------------------------------------------------ @@ -239,10 +238,10 @@ trick already) and how this would be handled. Blind alpha tentative below for experimentation purposes in malfunctioning cases. */ { - ulong q_bsp = (ulong) intstk->intstk$q_bsp; - ulong q_bspstore = (ulong) intstk->intstk$q_bspstore; - ulong q_bspbase = (ulong) intstk->intstk$q_bspbase; - ulong ih_bspbase = (ulong) icb->libicb$ih_bspbase; + uw_reg q_bsp = (uw_reg) intstk->intstk$q_bsp; + uw_reg q_bspstore = (uw_reg) intstk->intstk$q_bspstore; + uw_reg q_bspbase = (uw_reg) intstk->intstk$q_bspbase; + uw_reg ih_bspbase = (uw_reg) icb->libicb$ih_bspbase; if (eh_debug) printf ("q_bspstore = 0x%lx, q_bsp = 0x%lx, q_bspbase = 0x%lx\n" @@ -254,8 +253,8 @@ nothing resulted in proper behavior. */ if (q_bspstore < q_bsp && ih_bspbase && try_bs_copy) { - ulong dirty_size = q_bsp - q_bspstore; - ulong q_rnat = (ulong) intstk->intstk$q_rnat; + uw_reg dirty_size = q_bsp - q_bspstore; + uw_reg q_rnat = (uw_reg) intstk->intstk$q_rnat; if (eh_debug) printf ("Attempting an alternate backing store copy ...\n");