#ifndef WH_USER_H_2fef98fb_ #define WH_USER_H_2fef98fb_ #include extern int nomemacc; extern void panic(const char *, int, const char *, ...) __attribute__((__format__(__printf__,3,4),__noreturn__)); #define panic(...) (panic)(__FILE__, __LINE__, __VA_ARGS__) typedef struct val8 VAL8; typedef struct val16 VAL16; typedef struct val32 VAL32; typedef struct val64 VAL64; /* * An 8-bit value, with definedness. */ struct val8 { uint8_t v; uint8_t d; } ; #define MAKE8(val,def) ((VAL8){.v=(val),.d=(def)}) #define UNDEF8() MAKE8(0,0) #define DEF8(v) MAKE8((v),~(uint8_t)0) /* * A 16-bit value, with definedness. */ struct val16 { uint16_t v; uint16_t d; } ; #define MAKE16(val,def) ((VAL16){.v=(val),.d=(def)}) #define UNDEF16() MAKE16(0,0) #define DEF16(v) MAKE16((v),~(uint16_t)0) /* * A 32-bit value, with definedness. */ struct val32 { uint32_t v; uint32_t d; } ; #define MAKE32(val,def) ((VAL32){.v=(val),.d=(def)}) #define UNDEF32() MAKE32(0,0) #define DEF32(v) MAKE32((v),~(uint32_t)0) /* * A 64-bit value, with definedness. */ struct val64 { uint64_t v; uint64_t d; } ; #define MAKE64(val,def) ((VAL64){.v=(val),.d=(def)}) #define UNDEF64() MAKE64(0,0) #define DEF64(v) MAKE64((v),~(uint64_t)0) extern VAL64 mem_get_8(uint32_t); extern uint64_t mem_get_8_def(uint32_t, uint64_t, const char *); extern void mem_set_8(uint32_t, VAL64); extern VAL32 mem_get_4(uint32_t); extern uint32_t mem_get_4_def(uint32_t, uint32_t, const char *); extern uint32_t mem_exe_4(uint32_t); extern void mem_set_4(uint32_t, VAL32); extern VAL16 mem_get_2(uint32_t); extern uint16_t mem_get_2_def(uint32_t, uint16_t, const char *); extern void mem_set_2(uint32_t, VAL16); extern VAL8 mem_get_1(uint32_t); extern uint8_t mem_get_1_def(uint32_t, uint8_t, const char *); extern void mem_set_1(uint32_t, VAL8); extern int print_undefined(FILE *, int, uint64_t, uint64_t); #endif