1*b2ed49a5SDavid van Moolenbroek #ifndef _MAGIC_STRUCTS_H 2*b2ed49a5SDavid van Moolenbroek #define _MAGIC_STRUCTS_H 3*b2ed49a5SDavid van Moolenbroek 4*b2ed49a5SDavid van Moolenbroek #include <magic_def.h> 5*b2ed49a5SDavid van Moolenbroek #include <magic_common.h> 6*b2ed49a5SDavid van Moolenbroek #include <stddef.h> 7*b2ed49a5SDavid van Moolenbroek #include <common/ut/uthash.h> 8*b2ed49a5SDavid van Moolenbroek 9*b2ed49a5SDavid van Moolenbroek /* Magic state type struct. */ 10*b2ed49a5SDavid van Moolenbroek struct _magic_type { 11*b2ed49a5SDavid van Moolenbroek _magic_id_t id; 12*b2ed49a5SDavid van Moolenbroek const char *name; 13*b2ed49a5SDavid van Moolenbroek const char **names; 14*b2ed49a5SDavid van Moolenbroek unsigned num_names; 15*b2ed49a5SDavid van Moolenbroek const char *type_str; 16*b2ed49a5SDavid van Moolenbroek unsigned size; 17*b2ed49a5SDavid van Moolenbroek unsigned num_child_types; 18*b2ed49a5SDavid van Moolenbroek struct _magic_type **contained_types; 19*b2ed49a5SDavid van Moolenbroek struct _magic_type **compatible_types; 20*b2ed49a5SDavid van Moolenbroek const char **member_names; 21*b2ed49a5SDavid van Moolenbroek unsigned *member_offsets; 22*b2ed49a5SDavid van Moolenbroek void *value_set; 23*b2ed49a5SDavid van Moolenbroek unsigned type_id; 24*b2ed49a5SDavid van Moolenbroek int flags; 25*b2ed49a5SDavid van Moolenbroek unsigned bit_width; 26*b2ed49a5SDavid van Moolenbroek const void *ext; 27*b2ed49a5SDavid van Moolenbroek }; 28*b2ed49a5SDavid van Moolenbroek 29*b2ed49a5SDavid van Moolenbroek /* Magic state entry struct. */ 30*b2ed49a5SDavid van Moolenbroek struct _magic_sentry { 31*b2ed49a5SDavid van Moolenbroek _magic_id_t id; 32*b2ed49a5SDavid van Moolenbroek const char *name; 33*b2ed49a5SDavid van Moolenbroek struct _magic_type *type; 34*b2ed49a5SDavid van Moolenbroek int flags; 35*b2ed49a5SDavid van Moolenbroek void *address; 36*b2ed49a5SDavid van Moolenbroek void *shadow_address; 37*b2ed49a5SDavid van Moolenbroek }; 38*b2ed49a5SDavid van Moolenbroek 39*b2ed49a5SDavid van Moolenbroek /* Magic state entry list struct. */ 40*b2ed49a5SDavid van Moolenbroek struct _magic_sentry_list { 41*b2ed49a5SDavid van Moolenbroek struct _magic_sentry *sentry; 42*b2ed49a5SDavid van Moolenbroek struct _magic_sentry_list *next; 43*b2ed49a5SDavid van Moolenbroek }; 44*b2ed49a5SDavid van Moolenbroek 45*b2ed49a5SDavid van Moolenbroek /* Magic state entry hash struct. */ 46*b2ed49a5SDavid van Moolenbroek #define MAGIC_SENTRY_NAME_MAX_KEY_LEN 512 47*b2ed49a5SDavid van Moolenbroek struct _magic_sentry_hash { 48*b2ed49a5SDavid van Moolenbroek struct _magic_sentry_list *sentry_list; 49*b2ed49a5SDavid van Moolenbroek char key[MAGIC_SENTRY_NAME_MAX_KEY_LEN]; 50*b2ed49a5SDavid van Moolenbroek UT_hash_handle hh; 51*b2ed49a5SDavid van Moolenbroek }; 52*b2ed49a5SDavid van Moolenbroek 53*b2ed49a5SDavid van Moolenbroek /* Magic state function struct. */ 54*b2ed49a5SDavid van Moolenbroek struct _magic_function { 55*b2ed49a5SDavid van Moolenbroek _magic_id_t id; 56*b2ed49a5SDavid van Moolenbroek const char *name; 57*b2ed49a5SDavid van Moolenbroek struct _magic_type *type; 58*b2ed49a5SDavid van Moolenbroek int flags; 59*b2ed49a5SDavid van Moolenbroek void *address; 60*b2ed49a5SDavid van Moolenbroek }; 61*b2ed49a5SDavid van Moolenbroek 62*b2ed49a5SDavid van Moolenbroek /* Magic state function hash struct. */ 63*b2ed49a5SDavid van Moolenbroek struct _magic_function_hash { 64*b2ed49a5SDavid van Moolenbroek struct _magic_function *function; 65*b2ed49a5SDavid van Moolenbroek void *key; 66*b2ed49a5SDavid van Moolenbroek UT_hash_handle hh; 67*b2ed49a5SDavid van Moolenbroek }; 68*b2ed49a5SDavid van Moolenbroek 69*b2ed49a5SDavid van Moolenbroek /* Magic dynamic function struct. */ 70*b2ed49a5SDavid van Moolenbroek struct _magic_dfunction { 71*b2ed49a5SDavid van Moolenbroek unsigned long magic_number; 72*b2ed49a5SDavid van Moolenbroek const char *parent_name; 73*b2ed49a5SDavid van Moolenbroek struct _magic_function function; 74*b2ed49a5SDavid van Moolenbroek struct _magic_dfunction *prev; 75*b2ed49a5SDavid van Moolenbroek struct _magic_dfunction *next; 76*b2ed49a5SDavid van Moolenbroek }; 77*b2ed49a5SDavid van Moolenbroek 78*b2ed49a5SDavid van Moolenbroek /* Magic dynamic state index struct. */ 79*b2ed49a5SDavid van Moolenbroek struct _magic_dsindex { 80*b2ed49a5SDavid van Moolenbroek struct _magic_type *type; 81*b2ed49a5SDavid van Moolenbroek const char *name; 82*b2ed49a5SDavid van Moolenbroek const char *parent_name; 83*b2ed49a5SDavid van Moolenbroek int flags; 84*b2ed49a5SDavid van Moolenbroek }; 85*b2ed49a5SDavid van Moolenbroek 86*b2ed49a5SDavid van Moolenbroek /* Magic dynamic state entry struct. */ 87*b2ed49a5SDavid van Moolenbroek #define MAGIC_DSENTRY_ALLOW_PREV 0 88*b2ed49a5SDavid van Moolenbroek /* 89*b2ed49a5SDavid van Moolenbroek * The name of an externally allocated dsentry will be: 90*b2ed49a5SDavid van Moolenbroek * strlen("MAGIC_EXT_ALLOC_NAME") + strlen("MAGIC_ALLOC_NAME_SEP") + 91*b2ed49a5SDavid van Moolenbroek * strlen(0xffffffff) + strlen("MAGIC_ALLOC_NAME_SUFFIX") + 1 = 92*b2ed49a5SDavid van Moolenbroek * 4 + 1 + 10 + 1 + 1 = 17 93*b2ed49a5SDavid van Moolenbroek */ 94*b2ed49a5SDavid van Moolenbroek #define MAGIC_DSENTRY_EXT_NAME_BUFF_SIZE 17 95*b2ed49a5SDavid van Moolenbroek 96*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry { 97*b2ed49a5SDavid van Moolenbroek unsigned long magic_number; 98*b2ed49a5SDavid van Moolenbroek const char *parent_name; 99*b2ed49a5SDavid van Moolenbroek char name_ext_buff[MAGIC_DSENTRY_EXT_NAME_BUFF_SIZE]; 100*b2ed49a5SDavid van Moolenbroek struct _magic_sentry sentry; 101*b2ed49a5SDavid van Moolenbroek struct _magic_type type; 102*b2ed49a5SDavid van Moolenbroek struct _magic_type *type_array[1]; 103*b2ed49a5SDavid van Moolenbroek #if MAGIC_DSENTRY_ALLOW_PREV 104*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *prev; 105*b2ed49a5SDavid van Moolenbroek #endif 106*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *next; 107*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *next_mpool; 108*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *next_mblock; 109*b2ed49a5SDavid van Moolenbroek /* 110*b2ed49a5SDavid van Moolenbroek * The following 2 fields are only set if the dsentry 111*b2ed49a5SDavid van Moolenbroek * is part of a super object. 112*b2ed49a5SDavid van Moolenbroek * See llvm/shared/magic/libst/include/heap.h for more details. 113*b2ed49a5SDavid van Moolenbroek */ 114*b2ed49a5SDavid van Moolenbroek #ifndef __MINIX 115*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *next_sobject; 116*b2ed49a5SDavid van Moolenbroek void *sobject_base_addr; 117*b2ed49a5SDavid van Moolenbroek #endif 118*b2ed49a5SDavid van Moolenbroek void *ext; 119*b2ed49a5SDavid van Moolenbroek unsigned long magic_state; 120*b2ed49a5SDavid van Moolenbroek union __alloc_flags { 121*b2ed49a5SDavid van Moolenbroek struct { 122*b2ed49a5SDavid van Moolenbroek int flags; 123*b2ed49a5SDavid van Moolenbroek int prot; 124*b2ed49a5SDavid van Moolenbroek } mmap_call; 125*b2ed49a5SDavid van Moolenbroek #define mmap_flags mmap_call.flags 126*b2ed49a5SDavid van Moolenbroek #define mmap_prot mmap_call.prot 127*b2ed49a5SDavid van Moolenbroek struct { 128*b2ed49a5SDavid van Moolenbroek int flags; 129*b2ed49a5SDavid van Moolenbroek int shmid; 130*b2ed49a5SDavid van Moolenbroek } shmat_call; 131*b2ed49a5SDavid van Moolenbroek #define shmat_flags shmat_call.flags 132*b2ed49a5SDavid van Moolenbroek #define shmat_shmid shmat_call.shmid 133*b2ed49a5SDavid van Moolenbroek } alloc_flags; 134*b2ed49a5SDavid van Moolenbroek #define alloc_mmap_flags alloc_flags.mmap_call.flags 135*b2ed49a5SDavid van Moolenbroek #define alloc_mmap_prot alloc_flags.mmap_call.prot 136*b2ed49a5SDavid van Moolenbroek #define alloc_shmat_flags alloc_flags.shmat_call.flags 137*b2ed49a5SDavid van Moolenbroek #define alloc_shmat_shmid alloc_flags.shmat_call.shmid 138*b2ed49a5SDavid van Moolenbroek _magic_id_t site_id; /* Identifier of the call at a callsite. */ 139*b2ed49a5SDavid van Moolenbroek }; 140*b2ed49a5SDavid van Moolenbroek 141*b2ed49a5SDavid van Moolenbroek /* Magic out-of-band dynamic state entry struct. */ 142*b2ed49a5SDavid van Moolenbroek #define MAGIC_MAX_OBDSENTRIES 32 143*b2ed49a5SDavid van Moolenbroek #define MAGIC_MAX_OBDSENTRY_NAME_LEN 32 144*b2ed49a5SDavid van Moolenbroek #define MAGIC_MAX_OBDSENTRY_PARENT_NAME_LEN 32 145*b2ed49a5SDavid van Moolenbroek struct _magic_obdsentry { 146*b2ed49a5SDavid van Moolenbroek char name[MAGIC_MAX_OBDSENTRY_NAME_LEN]; 147*b2ed49a5SDavid van Moolenbroek char parent_name[MAGIC_MAX_OBDSENTRY_PARENT_NAME_LEN]; 148*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry dsentry; 149*b2ed49a5SDavid van Moolenbroek }; 150*b2ed49a5SDavid van Moolenbroek EXTERN struct _magic_obdsentry _magic_obdsentries[MAGIC_MAX_OBDSENTRIES]; 151*b2ed49a5SDavid van Moolenbroek 152*b2ed49a5SDavid van Moolenbroek /* Magic memory pool state struct. */ 153*b2ed49a5SDavid van Moolenbroek #define MAGIC_MAX_MEMPOOLS 1024 154*b2ed49a5SDavid van Moolenbroek #define MAGIC_MAX_MEMPOOL_NAME_LEN 32 155*b2ed49a5SDavid van Moolenbroek #define MAGIC_MEMPOOL_NAME_PREFIX "_magic_mempool_" 156*b2ed49a5SDavid van Moolenbroek EXTERN const char *const MAGIC_MEMPOOL_NAME_UNKNOWN; 157*b2ed49a5SDavid van Moolenbroek EXTERN const char *const MAGIC_MEMPOOL_NAME_DETACHED; 158*b2ed49a5SDavid van Moolenbroek 159*b2ed49a5SDavid van Moolenbroek struct _magic_mpdesc { 160*b2ed49a5SDavid van Moolenbroek int is_alive; 161*b2ed49a5SDavid van Moolenbroek char name[MAGIC_MAX_MEMPOOL_NAME_LEN]; 162*b2ed49a5SDavid van Moolenbroek /* pointer to the pool object */ 163*b2ed49a5SDavid van Moolenbroek void *addr; 164*b2ed49a5SDavid van Moolenbroek #if MAGIC_MEM_USAGE_OUTPUT_CTL 165*b2ed49a5SDavid van Moolenbroek unsigned long dtype_id; 166*b2ed49a5SDavid van Moolenbroek #endif 167*b2ed49a5SDavid van Moolenbroek }; 168*b2ed49a5SDavid van Moolenbroek EXTERN struct _magic_mpdesc _magic_mpdescs[MAGIC_MAX_MEMPOOLS]; 169*b2ed49a5SDavid van Moolenbroek 170*b2ed49a5SDavid van Moolenbroek /* Magic state element. */ 171*b2ed49a5SDavid van Moolenbroek struct _magic_selement_s { 172*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry dsentry_buff; 173*b2ed49a5SDavid van Moolenbroek struct _magic_sentry *sentry; 174*b2ed49a5SDavid van Moolenbroek const struct _magic_type *parent_type; 175*b2ed49a5SDavid van Moolenbroek void *parent_address; 176*b2ed49a5SDavid van Moolenbroek int child_num; 177*b2ed49a5SDavid van Moolenbroek const struct _magic_type *type; 178*b2ed49a5SDavid van Moolenbroek void *address; 179*b2ed49a5SDavid van Moolenbroek int depth; 180*b2ed49a5SDavid van Moolenbroek int num; 181*b2ed49a5SDavid van Moolenbroek void *cb_args; 182*b2ed49a5SDavid van Moolenbroek }; 183*b2ed49a5SDavid van Moolenbroek typedef struct _magic_selement_s _magic_selement_t; 184*b2ed49a5SDavid van Moolenbroek 185*b2ed49a5SDavid van Moolenbroek /* Magic external library descriptor. */ 186*b2ed49a5SDavid van Moolenbroek struct _magic_libdesc { 187*b2ed49a5SDavid van Moolenbroek const char *name; 188*b2ed49a5SDavid van Moolenbroek void *text_range[2]; 189*b2ed49a5SDavid van Moolenbroek void *data_range[2]; 190*b2ed49a5SDavid van Moolenbroek void *alloc_address; 191*b2ed49a5SDavid van Moolenbroek size_t alloc_size; 192*b2ed49a5SDavid van Moolenbroek }; 193*b2ed49a5SDavid van Moolenbroek 194*b2ed49a5SDavid van Moolenbroek /* Magic SO library descriptor. */ 195*b2ed49a5SDavid van Moolenbroek struct _magic_sodesc { 196*b2ed49a5SDavid van Moolenbroek struct _magic_libdesc lib; 197*b2ed49a5SDavid van Moolenbroek struct _magic_sodesc *prev; 198*b2ed49a5SDavid van Moolenbroek struct _magic_sodesc *next; 199*b2ed49a5SDavid van Moolenbroek }; 200*b2ed49a5SDavid van Moolenbroek 201*b2ed49a5SDavid van Moolenbroek /* Magic DSO library descriptor. */ 202*b2ed49a5SDavid van Moolenbroek struct _magic_dsodesc { 203*b2ed49a5SDavid van Moolenbroek struct _magic_libdesc lib; 204*b2ed49a5SDavid van Moolenbroek void *handle; 205*b2ed49a5SDavid van Moolenbroek int ref_count; 206*b2ed49a5SDavid van Moolenbroek struct _magic_dsodesc *prev; 207*b2ed49a5SDavid van Moolenbroek struct _magic_dsodesc *next; 208*b2ed49a5SDavid van Moolenbroek }; 209*b2ed49a5SDavid van Moolenbroek 210*b2ed49a5SDavid van Moolenbroek /* The following constant is specific to MINIX3; on other platforms, this 211*b2ed49a5SDavid van Moolenbroek * functionality is unused altogether. On MINIX3, the libc malloc code uses 212*b2ed49a5SDavid van Moolenbroek * mmap to create page directories. Since malloc state is discarded upon state 213*b2ed49a5SDavid van Moolenbroek * transfer, we must not instrument its mmap calls in the regular way. On the 214*b2ed49a5SDavid van Moolenbroek * other hand, since mmap'ed regions are transferred to new instances, we end 215*b2ed49a5SDavid van Moolenbroek * up with a memory leak if we do not unmap those mmap'ed regions. Therefore, 216*b2ed49a5SDavid van Moolenbroek * we specifically track the mmap/munmap calls made from the malloc code, and 217*b2ed49a5SDavid van Moolenbroek * explicitly unmap its regions during state transfer. The following constant 218*b2ed49a5SDavid van Moolenbroek * defines how many ranges can be mmap'ed at once. The malloc code uses only 219*b2ed49a5SDavid van Moolenbroek * one page directory, but it may enlarge it by first allocating a new area 220*b2ed49a5SDavid van Moolenbroek * and then unmapping the old one. Therefore, we need two entries. 221*b2ed49a5SDavid van Moolenbroek */ 222*b2ed49a5SDavid van Moolenbroek #ifdef __MINIX 223*b2ed49a5SDavid van Moolenbroek #define MAGIC_UNMAP_MEM_ENTRIES 2 224*b2ed49a5SDavid van Moolenbroek #endif 225*b2ed49a5SDavid van Moolenbroek 226*b2ed49a5SDavid van Moolenbroek /* Magic vars. */ 227*b2ed49a5SDavid van Moolenbroek struct _magic_vars_t { 228*b2ed49a5SDavid van Moolenbroek 229*b2ed49a5SDavid van Moolenbroek /* Magic Address Space Randomization (ASRPass) */ 230*b2ed49a5SDavid van Moolenbroek int asr_seed; 231*b2ed49a5SDavid van Moolenbroek int asr_heap_map_do_permutate; 232*b2ed49a5SDavid van Moolenbroek int asr_heap_max_offset; 233*b2ed49a5SDavid van Moolenbroek int asr_heap_max_padding; 234*b2ed49a5SDavid van Moolenbroek int asr_map_max_offset_pages; 235*b2ed49a5SDavid van Moolenbroek int asr_map_max_padding_pages; 236*b2ed49a5SDavid van Moolenbroek 237*b2ed49a5SDavid van Moolenbroek /* Runtime flags. */ 238*b2ed49a5SDavid van Moolenbroek int no_mem_inst; 239*b2ed49a5SDavid van Moolenbroek 240*b2ed49a5SDavid van Moolenbroek /* Magic type array. */ 241*b2ed49a5SDavid van Moolenbroek struct _magic_type *types; 242*b2ed49a5SDavid van Moolenbroek int types_num; 243*b2ed49a5SDavid van Moolenbroek _magic_id_t types_next_id; 244*b2ed49a5SDavid van Moolenbroek 245*b2ed49a5SDavid van Moolenbroek /* Magic function array. */ 246*b2ed49a5SDavid van Moolenbroek struct _magic_function *functions; 247*b2ed49a5SDavid van Moolenbroek int functions_num; 248*b2ed49a5SDavid van Moolenbroek _magic_id_t functions_next_id; 249*b2ed49a5SDavid van Moolenbroek 250*b2ed49a5SDavid van Moolenbroek /* Magic state entry array. */ 251*b2ed49a5SDavid van Moolenbroek struct _magic_sentry *sentries; 252*b2ed49a5SDavid van Moolenbroek int sentries_num; 253*b2ed49a5SDavid van Moolenbroek int sentries_str_num; 254*b2ed49a5SDavid van Moolenbroek _magic_id_t sentries_next_id; 255*b2ed49a5SDavid van Moolenbroek 256*b2ed49a5SDavid van Moolenbroek /* Magic dynamic state index array. */ 257*b2ed49a5SDavid van Moolenbroek struct _magic_dsindex *dsindexes; 258*b2ed49a5SDavid van Moolenbroek int dsindexes_num; 259*b2ed49a5SDavid van Moolenbroek 260*b2ed49a5SDavid van Moolenbroek /* Magic dynamic state entry list. */ 261*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *first_dsentry; 262*b2ed49a5SDavid van Moolenbroek unsigned long num_dead_dsentries; 263*b2ed49a5SDavid van Moolenbroek unsigned long size_dead_dsentries; 264*b2ed49a5SDavid van Moolenbroek 265*b2ed49a5SDavid van Moolenbroek /* Magic memory pool dynamic state entry list. */ 266*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *first_mempool_dsentry; 267*b2ed49a5SDavid van Moolenbroek 268*b2ed49a5SDavid van Moolenbroek /* Magic dynamic function list. */ 269*b2ed49a5SDavid van Moolenbroek struct _magic_dfunction *first_dfunction; 270*b2ed49a5SDavid van Moolenbroek struct _magic_dfunction *last_dfunction; 271*b2ed49a5SDavid van Moolenbroek int dfunctions_num; 272*b2ed49a5SDavid van Moolenbroek 273*b2ed49a5SDavid van Moolenbroek /* Magic SO library descriptor list. */ 274*b2ed49a5SDavid van Moolenbroek struct _magic_sodesc *first_sodesc; 275*b2ed49a5SDavid van Moolenbroek struct _magic_sodesc *last_sodesc; 276*b2ed49a5SDavid van Moolenbroek int sodescs_num; 277*b2ed49a5SDavid van Moolenbroek 278*b2ed49a5SDavid van Moolenbroek /* Magic DSO library descriptor list. */ 279*b2ed49a5SDavid van Moolenbroek struct _magic_dsodesc *first_dsodesc; 280*b2ed49a5SDavid van Moolenbroek struct _magic_dsodesc *last_dsodesc; 281*b2ed49a5SDavid van Moolenbroek int dsodescs_num; 282*b2ed49a5SDavid van Moolenbroek 283*b2ed49a5SDavid van Moolenbroek /* Magic stack-related variables. */ 284*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *first_stack_dsentry; 285*b2ed49a5SDavid van Moolenbroek struct _magic_dsentry *last_stack_dsentry; 286*b2ed49a5SDavid van Moolenbroek 287*b2ed49a5SDavid van Moolenbroek /* Magic memory ranges */ 288*b2ed49a5SDavid van Moolenbroek void *null_range[2]; 289*b2ed49a5SDavid van Moolenbroek void *data_range[2]; 290*b2ed49a5SDavid van Moolenbroek void *heap_range[2]; 291*b2ed49a5SDavid van Moolenbroek void *map_range[2]; 292*b2ed49a5SDavid van Moolenbroek void *shm_range[2]; 293*b2ed49a5SDavid van Moolenbroek void *stack_range[2]; 294*b2ed49a5SDavid van Moolenbroek void *text_range[2]; 295*b2ed49a5SDavid van Moolenbroek 296*b2ed49a5SDavid van Moolenbroek void *sentry_range[2]; 297*b2ed49a5SDavid van Moolenbroek void *function_range[2]; 298*b2ed49a5SDavid van Moolenbroek void *dfunction_range[2]; 299*b2ed49a5SDavid van Moolenbroek 300*b2ed49a5SDavid van Moolenbroek void *heap_start; 301*b2ed49a5SDavid van Moolenbroek void *heap_end; 302*b2ed49a5SDavid van Moolenbroek int update_dsentry_ranges; 303*b2ed49a5SDavid van Moolenbroek int update_dfunction_ranges; 304*b2ed49a5SDavid van Moolenbroek 305*b2ed49a5SDavid van Moolenbroek #ifdef __MINIX 306*b2ed49a5SDavid van Moolenbroek /* Memory to unmap after state transfer (MINIX3 only) */ 307*b2ed49a5SDavid van Moolenbroek struct { 308*b2ed49a5SDavid van Moolenbroek void *start; 309*b2ed49a5SDavid van Moolenbroek size_t length; 310*b2ed49a5SDavid van Moolenbroek } unmap_mem[MAGIC_UNMAP_MEM_ENTRIES]; 311*b2ed49a5SDavid van Moolenbroek #endif 312*b2ed49a5SDavid van Moolenbroek 313*b2ed49a5SDavid van Moolenbroek /* Range lookup index */ 314*b2ed49a5SDavid van Moolenbroek void *sentry_rl_buff; 315*b2ed49a5SDavid van Moolenbroek size_t sentry_rl_buff_offset; 316*b2ed49a5SDavid van Moolenbroek size_t sentry_rl_buff_size; 317*b2ed49a5SDavid van Moolenbroek void *sentry_rl_index; 318*b2ed49a5SDavid van Moolenbroek 319*b2ed49a5SDavid van Moolenbroek /* Sentry hash */ 320*b2ed49a5SDavid van Moolenbroek void *sentry_hash_buff; 321*b2ed49a5SDavid van Moolenbroek size_t sentry_hash_buff_offset; 322*b2ed49a5SDavid van Moolenbroek size_t sentry_hash_buff_size; 323*b2ed49a5SDavid van Moolenbroek void *sentry_hash_head; 324*b2ed49a5SDavid van Moolenbroek 325*b2ed49a5SDavid van Moolenbroek /* Function hash */ 326*b2ed49a5SDavid van Moolenbroek void *function_hash_buff; 327*b2ed49a5SDavid van Moolenbroek size_t function_hash_buff_offset; 328*b2ed49a5SDavid van Moolenbroek size_t function_hash_buff_size; 329*b2ed49a5SDavid van Moolenbroek void *function_hash_head; 330*b2ed49a5SDavid van Moolenbroek 331*b2ed49a5SDavid van Moolenbroek /* 332*b2ed49a5SDavid van Moolenbroek * Don't call malloc() in magic_malloc_positioned(). 333*b2ed49a5SDavid van Moolenbroek * Used in ST after RAW COPY. 334*b2ed49a5SDavid van Moolenbroek */ 335*b2ed49a5SDavid van Moolenbroek int fake_malloc; 336*b2ed49a5SDavid van Moolenbroek }; 337*b2ed49a5SDavid van Moolenbroek 338*b2ed49a5SDavid van Moolenbroek 339*b2ed49a5SDavid van Moolenbroek #endif /* _MAGIC_STRUCTS_H */ 340