vms.h (MD_FALLBACK_FRAME_STATE_FOR): Handle register frame procedures.

* config/alpha/vms.h (MD_FALLBACK_FRAME_STATE_FOR): Handle
	register frame procedures. Optimize retrieving context.

From-SVN: r49732
This commit is contained in:
Douglas B Rupp 2002-02-13 10:19:27 -05:00 committed by Richard Kenner
parent 09eb789b6d
commit 3deb00ce32
2 changed files with 19 additions and 11 deletions

View File

@ -1,5 +1,8 @@
2002-02-13 Douglas B Rupp <rupp@gnat.com>
* config/alpha/vms.h (MD_FALLBACK_FRAME_STATE_FOR): Handle
register frame procedures. Optimize retrieving context.
* config/alpha/t-vms (MULTILIB_OPTIONS): Define.
(MULTILIB_DIRNAME, LIBGCC, INSTALL_LIBGCC): Likewise.
* config/alpha/vms.h (ASM_FILE_START): Write .arch directive.

View File

@ -391,22 +391,14 @@ do { \
#define LINK_EH_SPEC "vms-dwarf2eh.o%s "
#ifdef IN_LIBGCC2
#include <libicb.h>
#include <pdscdef.h>
#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \
do { \
unsigned long handle; \
PDSCDEF *pv; \
INVO_CONTEXT_BLK invo; \
PDSCDEF *pv = *((PDSCDEF **) (CONTEXT)->reg [29]); \
\
memset (&invo, 0, sizeof (INVO_CONTEXT_BLK)); \
\
invo.libicb$q_ireg [29] = *((long long *) (CONTEXT)->reg [29]); \
invo.libicb$q_ireg [30] = (long long) (CONTEXT)->cfa; \
handle = LIB$GET_INVO_HANDLE (&invo); \
LIB$GET_INVO_CONTEXT (handle, &invo); \
pv = (PDSCDEF *) invo.libicb$ph_procedure_descriptor; \
if (pv && ((long) pv & 0x7) == 0) /* low bits 0 means address */ \
pv = *(PDSCDEF **) pv; \
\
if (pv && ((pv->pdsc$w_flags & 0xf) == PDSC$K_KIND_FP_STACK)) \
{ \
@ -432,6 +424,19 @@ do { \
\
goto SUCCESS; \
} \
else if (pv && ((pv->pdsc$w_flags & 0xf) == PDSC$K_KIND_FP_REGISTER)) \
{ \
(FS)->cfa_offset = pv->pdsc$l_size; \
(FS)->cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30; \
(FS)->retaddr_column = 26; \
(FS)->cfa_how = CFA_REG_OFFSET; \
(FS)->regs.reg[26].loc.reg = pv->pdsc$b_save_ra; \
(FS)->regs.reg[26].how = REG_SAVED_REG; \
(FS)->regs.reg[29].loc.reg = pv->pdsc$b_save_fp; \
(FS)->regs.reg[29].how = REG_SAVED_REG; \
\
goto SUCCESS; \
} \
} while (0)
#endif