2 Copyright © 2011, The AROS Development Team. All rights reserved.
5 Desc: Create a seglist for ROM code.
8 #define AROS_LIBREQ(base,ver) /* We test for versions manually */
10 #include <aros/debug.h>
11 #include <proto/exec.h>
15 ULONG Size
; /* Length of segment in # of bytes */
16 BPTR Next
; /* Next segment (always 0 for this) */
17 struct FullJumpVec Code
; /* Code to jump to the offset */
18 } __attribute__((packed
));
20 /*****************************************************************************
23 #include <proto/arossupport.h>
28 APTR function
, struct ExecBase
*SysBase
)
33 Create a SegList, which contains a call to 'function'
36 function - Function to call when the SegList is executed
39 BPTR to the SegList that was allocated. This SegList can
40 be freed by DOS/UnloadSeg. If not enough memory,
41 BNULL will be returned.
51 dos.library/UnloadSeg()
55 *****************************************************************************/
57 struct phony_segment
*segtmp
;
59 segtmp
= AllocMem(sizeof(*segtmp
), MEMF_ANY
);
63 segtmp
->Size
= sizeof(*segtmp
);
64 segtmp
->Next
= (BPTR
)0;
65 __AROS_SET_FULLJMP(&segtmp
->Code
, function
);
67 if (SysBase
->LibNode
.lib_Version
>= 36)
68 CacheClearE(&segtmp
->Code
, sizeof(struct FullJumpVec
), CACRF_ClearI
| CACRF_ClearD
);
70 D(bug("[CreateSegList] Created jump segment 0x%p, code 0x%p, target 0x%p\n", MKBADDR(&segtmp
->Next
), &segtmp
->Code
, function
));
72 return MKBADDR(&segtmp
->Next
);