2001-03-05 18:41:42

by Camm Maguire

[permalink] [raw]
Subject: Fault Address from sigcontext for the various archs


Greetings! I'm trying to assist in porting gcl to the various Linux
archs, and the code as is needs the fault address from struct
sigcontext. i386 and m68k work, with solutions shown below. What
about the other archs? Where can I find the fault address around this
struct?

Thanks!

=============================================================================
i386
=============================================================================
#define GET_FAULT_ADDR(sig,code,sv,a) \
((void *)(((struct sigcontext_struct *)(&code))->cr2))
=============================================================================
m68k
=============================================================================
#define GET_FAULT_ADDR(sig,code,sv,a) \
({ \
struct sigcontext *scp = (struct sigcontext *)(sv);\
int format = (scp->sc_formatvec >> 12) & 0xf;\
unsigned long *framedata = (unsigned long *)(scp + 1);\
unsigned long ea;\
if (format == 0xa || format == 0xb)\
/* 68020/030 */\
ea = framedata[2];\
else if (format == 7)\
/* 68040 */\
ea = framedata[3];\
else if (format == 4) {\
/* 68060 */\
ea = framedata[0];\
if (framedata[1] & 0x08000000)\
/* correct addr on misaligned access */\
ea = (ea+4095)&(~4095);\
}\
ea;\
})
=============================================================================

--
Camm Maguire [email protected]
==========================================================================
"The earth is but one country, and mankind its citizens." -- Baha'u'llah