mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-11 16:17:24 +08:00
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:
parent
09eb789b6d
commit
3deb00ce32
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user