This commit is contained in:
@@ -15,7 +15,7 @@ static uint32_t cookieptr(void)
|
|||||||
|
|
||||||
int getcookie(uint32_t cookie, uint32_t *p_value)
|
int getcookie(uint32_t cookie, uint32_t *p_value)
|
||||||
{
|
{
|
||||||
uint32_t *cookiejar = (long *) Supexec(cookieptr);
|
uint32_t *cookiejar = (uint32_t *) Supexec(cookieptr);
|
||||||
|
|
||||||
if (!cookiejar) return 0;
|
if (!cookiejar) return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <osbind.h>
|
#include <osbind.h>
|
||||||
|
|
||||||
|
//#include "cookie.h"
|
||||||
|
|
||||||
#define XHDIMAGIC 0x27011992L
|
#define XHDIMAGIC 0x27011992L
|
||||||
|
|
||||||
typedef uint32_t (*cookie_fun)(uint16_t opcode,...);
|
typedef uint32_t (*cookie_fun)(uint16_t opcode,...);
|
||||||
@@ -21,39 +23,39 @@ static cookie_fun old_vector = NULL;
|
|||||||
|
|
||||||
static cookie_fun get_fun_ptr(void)
|
static cookie_fun get_fun_ptr(void)
|
||||||
{
|
{
|
||||||
static cookie_fun XHDI = NULL;
|
static cookie_fun xhdi = NULL;
|
||||||
static int have_it = 0;
|
static int have_it = 0;
|
||||||
|
|
||||||
if (!have_it)
|
if (!have_it)
|
||||||
{
|
{
|
||||||
uint32_t *magic_test;
|
uint32_t *magic_test;
|
||||||
|
|
||||||
getcookie ('XHDI', (uint32_t *) &XHDI);
|
getcookie ('XHDI', (uint32_t *) &xhdi);
|
||||||
have_it = 1;
|
have_it = 1;
|
||||||
|
|
||||||
/* check magic */
|
/* check magic */
|
||||||
|
|
||||||
magic_test = (uint32_t *)XHDI;
|
magic_test = (uint32_t *) xhdi;
|
||||||
if (magic_test && (magic_test[-1] != XHDIMAGIC))
|
if (magic_test && (magic_test[-1] != XHDIMAGIC))
|
||||||
XHDI = NULL;
|
xhdi = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return XHDI;
|
return xhdi;
|
||||||
}
|
}
|
||||||
|
|
||||||
__extension__ cookie_fun bas_sd_vector(cookie_fun old_vector)
|
cookie_fun bas_sd_vector(cookie_fun old_vector)
|
||||||
{
|
{
|
||||||
register long retvalue __asm__("d0");
|
register long retvalue __asm__("d0");
|
||||||
|
|
||||||
__asm__ __volatile(
|
__asm__ __volatile(
|
||||||
"move.l %1,-(sp)\n\t"
|
"move.l %[retvalue],-(sp)\n\t"
|
||||||
"trap #0\n\t"
|
"trap #0\n\t"
|
||||||
"addq.l #4,sp\n\t"
|
"addq.l #4,sp\n\t"
|
||||||
: "=r"(retvalue)
|
: [retvalue]"=r"(retvalue)
|
||||||
: "g"(old_vector)
|
: "g"(old_vector)
|
||||||
:
|
:
|
||||||
);
|
);
|
||||||
retvalue;
|
return retvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
|||||||
Reference in New Issue
Block a user