13e457fe3SDavid van Moolenbroek #ifndef _MAGIC_COMMON_H 23e457fe3SDavid van Moolenbroek #define _MAGIC_COMMON_H 33e457fe3SDavid van Moolenbroek 43e457fe3SDavid van Moolenbroek /* Magic constants. */ 53e457fe3SDavid van Moolenbroek #define MAGIC_PREFIX magic_ 63e457fe3SDavid van Moolenbroek #define MAGIC_PREFIX_STR "magic_" 73e457fe3SDavid van Moolenbroek #define MAGIC_ASR_PREFIX magic_asr_ 83e457fe3SDavid van Moolenbroek #define MAGIC_ASR_PREFIX_STR "magic_asr_" 9b7725c85SDavid van Moolenbroek #define MAGIC_NESTED_PREFIX_STR "nested_" 103e457fe3SDavid van Moolenbroek #define MAGIC_EVAL_FUNC_PREFIX "me_" 113e457fe3SDavid van Moolenbroek #define MAGIC_ANON_MEMBER_PREFIX "magic.anon" 123e457fe3SDavid van Moolenbroek #define MAGIC_STRINGREF_HAS_MAGIC_HIDDEN_PREFIX(S) \ 133e457fe3SDavid van Moolenbroek ((S).startswith(MAGIC_HIDDEN_ARRAY_PREFIX) \ 143e457fe3SDavid van Moolenbroek || (S).startswith(MAGIC_HIDDEN_STR_PREFIX)) 153e457fe3SDavid van Moolenbroek 163e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR _____magic_instr_void_ptr 173e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR_NAME "_____magic_instr_void_ptr" 183e457fe3SDavid van Moolenbroek #define MAGIC_VOID_ARRAY _____magic_instr_void_arr 193e457fe3SDavid van Moolenbroek #define MAGIC_VOID_ARRAY_NAME "_____magic_instr_void_arr" 203e457fe3SDavid van Moolenbroek 213e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR_TYPE _magic_void_ptr_type_ptr 223e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR_TYPE_ID 1 233e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR_INT_CAST_TYPE _magic_void_ptr_int_cast_type_ptr 243e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR_INT_CAST_TYPE_ID 2 253e457fe3SDavid van Moolenbroek #define MAGIC_VOID_ARRAY_TYPE _magic_void_array_type_ptr 263e457fe3SDavid van Moolenbroek #define MAGIC_VOID_ARRAY_TYPE_ID 3 273e457fe3SDavid van Moolenbroek #define MAGIC_PTRINT_TYPE _magic_ptrint_type_ptr 283e457fe3SDavid van Moolenbroek #define MAGIC_PTRINT_TYPE_ID 4 293e457fe3SDavid van Moolenbroek #define MAGIC_PTRINT_ARRAY_TYPE _magic_ptrint_array_type_ptr 303e457fe3SDavid van Moolenbroek #define MAGIC_PTRINT_ARRAY_TYPE_ID 5 313e457fe3SDavid van Moolenbroek #define MAGIC_VOID_TYPE (MAGIC_VOID_PTR_TYPE->contained_types[0]) 323e457fe3SDavid van Moolenbroek 333e457fe3SDavid van Moolenbroek #ifdef __MINIX 343e457fe3SDavid van Moolenbroek #define GLOBAL_VARS_IN_SECTION 1 353e457fe3SDavid van Moolenbroek #else 363e457fe3SDavid van Moolenbroek #define GLOBAL_VARS_IN_SECTION 0 373e457fe3SDavid van Moolenbroek #endif 383e457fe3SDavid van Moolenbroek #define GLOBAL_VARS_SECTION_PREFIX ".gvars" 393e457fe3SDavid van Moolenbroek #define GLOBAL_VARS_SECTION_DATA GLOBAL_VARS_SECTION_PREFIX 403e457fe3SDavid van Moolenbroek #define GLOBAL_VARS_SECTION_RO (GLOBAL_VARS_SECTION_PREFIX "_ro") 413e457fe3SDavid van Moolenbroek 423e457fe3SDavid van Moolenbroek #define MAGIC_LLVM_METADATA_SECTION "llvm.metadata" 433e457fe3SDavid van Moolenbroek #define MAGIC_DEFAULT_EXT_LIB_SECTION_REGEX "^.lib.*" 443e457fe3SDavid van Moolenbroek #define MAGIC_STATIC_FUNCTIONS_SECTION "magic_functions" 453e457fe3SDavid van Moolenbroek 463e457fe3SDavid van Moolenbroek #define MAGIC_STATIC_VARS_SECTION_PREFIX "magic_data" 473e457fe3SDavid van Moolenbroek #define MAGIC_STATIC_VARS_SECTION_DATA MAGIC_STATIC_VARS_SECTION_PREFIX 483e457fe3SDavid van Moolenbroek #define MAGIC_STATIC_VARS_SECTION_RO (MAGIC_STATIC_VARS_SECTION_PREFIX "_ro") 493e457fe3SDavid van Moolenbroek 503e457fe3SDavid van Moolenbroek #define MAGIC_SHADOW_VARS_SECTION_PREFIX "magic_shadow_data" 513e457fe3SDavid van Moolenbroek #define MAGIC_SHADOW_VARS_SECTION_DATA MAGIC_SHADOW_VARS_SECTION_PREFIX 523e457fe3SDavid van Moolenbroek #define MAGIC_SHADOW_VARS_SECTION_RO (MAGIC_SHADOW_VARS_SECTION_PREFIX "_ro") 533e457fe3SDavid van Moolenbroek 543e457fe3SDavid van Moolenbroek #define UNBL_SECTION_PREFIX "unblockify" 553e457fe3SDavid van Moolenbroek #define MAGIC_SHADOW_VAR_PREFIX ".magic_shadow_" 563e457fe3SDavid van Moolenbroek #define MAGIC_HIDDEN_ARRAY_PREFIX ".arr.magic" 573e457fe3SDavid van Moolenbroek #define MAGIC_HIDDEN_STR_PREFIX ".str.magic" 583e457fe3SDavid van Moolenbroek 599b9bea92SDavid van Moolenbroek #define MAGIC_MALLOC_VARS_SECTION_PREFIX "magic_malloc_data" 609b9bea92SDavid van Moolenbroek 613e457fe3SDavid van Moolenbroek /* Magic configuration. */ 623e457fe3SDavid van Moolenbroek #ifndef MAGIC_OUTPUT_CTL 633e457fe3SDavid van Moolenbroek #define MAGIC_OUTPUT_CTL 0 643e457fe3SDavid van Moolenbroek #endif 653e457fe3SDavid van Moolenbroek /* 0=disabled, 1=force no debug output, 2=force no output (for perf. testing).*/ 663e457fe3SDavid van Moolenbroek #define MAGIC_CHECK_LEVEL 1 673e457fe3SDavid van Moolenbroek /* 2=extra checks, 1=standard checks, 0=no checks (for perf. testing). */ 68*bdb56518SDavid van Moolenbroek #define MAGIC_FLATTEN_FUNCTION_ARGS 0 /* XXX was 1 but header was not included, seems to break on variadic functions */ 693e457fe3SDavid van Moolenbroek #define MAGIC_CHECK_INVARIANTS 1 703e457fe3SDavid van Moolenbroek #define MAGIC_SHRINK_TYPE_STR 1 713e457fe3SDavid van Moolenbroek #define MAGIC_MAX_NAME_LEN 64 723e457fe3SDavid van Moolenbroek #define MAGIC_MAX_TYPE_STR_LEN 256 733e457fe3SDavid van Moolenbroek #define MAGIC_MAX_RECURSIVE_TYPES 1024 743e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_STR_PRINT_MAX 5000 753e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_STR_PRINT_MAX_LEVEL 10 763e457fe3SDavid van Moolenbroek #define MAGIC_MAX_DEAD_DSENTRIES 10 773e457fe3SDavid van Moolenbroek #define MAGIC_MAX_DEAD_DSENTRIES_SIZE (1024 * 4 * 10) 783e457fe3SDavid van Moolenbroek #define MAGIC_NAMED_ALLOC_USE_DBG_INFO 0 793e457fe3SDavid van Moolenbroek /* 1=for more verbose dsentry naming. */ 803e457fe3SDavid van Moolenbroek #define MAGIC_FORCE_ALLOC_EXT_NAMES 0 813e457fe3SDavid van Moolenbroek /* 1=to force external names for allocations made inside library functions. */ 823e457fe3SDavid van Moolenbroek #define MAGIC_ABORT_ON_UNSUPPORTED_LOCAL_EXTERNAL_TYPE 0 833e457fe3SDavid van Moolenbroek /* 0=to resort to void* type when a local external type is not supported. */ 843e457fe3SDavid van Moolenbroek #ifndef MAGIC_MEM_USAGE_OUTPUT_CTL 853e457fe3SDavid van Moolenbroek #define MAGIC_MEM_USAGE_OUTPUT_CTL 0 863e457fe3SDavid van Moolenbroek #endif 873e457fe3SDavid van Moolenbroek /* 0=disabled, 1=use call site info 2=use stacktrace */ 883e457fe3SDavid van Moolenbroek 893e457fe3SDavid van Moolenbroek #define MAGIC_INSTRUMENT_MEM_FUNCS_ASR_ONLY 0 903e457fe3SDavid van Moolenbroek #define MAGIC_INSTRUMENT_MEM_CUSTOM_WRAPPERS 1 913e457fe3SDavid van Moolenbroek #define MAGIC_INSTRUMENT_MEM_FUNCS 1 923e457fe3SDavid van Moolenbroek #define MAGIC_INSTRUMENT_STACK 1 933e457fe3SDavid van Moolenbroek #define MAGIC_FORCE_RAW_UNIONS 0 943e457fe3SDavid van Moolenbroek #define MAGIC_FORCE_RAW_BITFIELDS 0 953e457fe3SDavid van Moolenbroek #define MAGIC_FORCE_DYN_MEM_ZERO_INIT 0 963e457fe3SDavid van Moolenbroek /* 1=for accurate dsentry analysis. */ 973e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_DYN_LIBS 1 983e457fe3SDavid van Moolenbroek #define MAGIC_USE_DYN_MEM_WRAPPERS 1 993e457fe3SDavid van Moolenbroek #define MAGIC_USE_DYN_DL_WRAPPERS 1 1003e457fe3SDavid van Moolenbroek #define MAGIC_ALLOW_DYN_MEM_WRAPPER_NESTING 1 1013e457fe3SDavid van Moolenbroek 1023e457fe3SDavid van Moolenbroek /* qprof-related settings */ 1033e457fe3SDavid van Moolenbroek #ifdef __MINIX 1043e457fe3SDavid van Moolenbroek #define MAGIC_USE_QPROF_INSTRUMENTATION 0 1053e457fe3SDavid van Moolenbroek #else 1063e457fe3SDavid van Moolenbroek #define MAGIC_USE_QPROF_INSTRUMENTATION 1 1073e457fe3SDavid van Moolenbroek #endif 1083e457fe3SDavid van Moolenbroek #define MAGIC_DEEPEST_LL_LOOP_HOOK magic_deepest_ll_loop 1093e457fe3SDavid van Moolenbroek #define MAGIC_DEEPEST_LL_LIB_HOOK magic_deepest_ll_lib 1103e457fe3SDavid van Moolenbroek #define MAGIC_DEEPEST_LL_LOOP_HOOK_NAME "magic_deepest_ll_loop" 1113e457fe3SDavid van Moolenbroek #define MAGIC_DEEPEST_LL_LIB_HOOK_NAME "magic_deepest_ll_lib" 1123e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_TASK_CLASSES magic_num_ll_task_classes 1133e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_EXT_TASK_CLASSES magic_num_ll_block_ext_task_classes 1143e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_INT_TASK_CLASSES magic_num_ll_block_int_task_classes 1153e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_EXT_LIBS magic_num_ll_block_ext_libs 1163e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_INT_LIBS magic_num_ll_block_int_libs 1173e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_TASK_CLASSES_NAME "magic_num_ll_task_classes" 1183e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_EXT_TASK_CLASSES_NAME "magic_num_ll_block_ext_task_classes" 1193e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_INT_TASK_CLASSES_NAME "magic_num_ll_block_int_task_classes" 1203e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_EXT_LIBS_NAME "magic_num_ll_block_ext_libs" 1213e457fe3SDavid van Moolenbroek #define MAGIC_NUM_LL_BLOCK_INT_LIBS_NAME "magic_num_ll_block_int_libs" 1223e457fe3SDavid van Moolenbroek 1233e457fe3SDavid van Moolenbroek #define MAGIC_THREAD_SAFE 1 1243e457fe3SDavid van Moolenbroek #define MAGIC_FORCE_LOCKS 0 1253e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_SENTRY 1 1263e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_DSENTRY 1 1273e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_FUNCTION 1 1283e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_DFUNCTION 1 1293e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_TYPE 1 1303e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_SENTRY_ALLOW_RANGE_INDEX 1 1313e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_SENTRY_ALLOW_NAME_HASH 1 1323e457fe3SDavid van Moolenbroek #define MAGIC_LOOKUP_FUNCTION_ALLOW_ADDR_HASH 1 1333e457fe3SDavid van Moolenbroek 1343e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_INT_CAST 1 1353e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_FUN_PTR_INT_CAST 1 1363e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_STR_PTR_INT_CAST 1 1373e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_VOID_PTR_INT_CAST 1 1383e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_OTH_PTR_INT_CAST 1 1393e457fe3SDavid van Moolenbroek 1403e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_BIT_CAST 1 1413e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_TRANSITIVE_BIT_CASTS 0 1423e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_FUN_PTR_BIT_CAST 1 1433e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_STR_PTR_BIT_CAST 1 1443e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_VOID_PTR_BIT_CAST 0 1453e457fe3SDavid van Moolenbroek #define MAGIC_INDEX_OTH_PTR_BIT_CAST 1 1463e457fe3SDavid van Moolenbroek 1473e457fe3SDavid van Moolenbroek #ifdef __MINIX 1483e457fe3SDavid van Moolenbroek #define MAGIC_SKIP_TOVOID_PTR_BIT_CAST 0 1493e457fe3SDavid van Moolenbroek #else 1503e457fe3SDavid van Moolenbroek #define MAGIC_SKIP_TOVOID_PTR_BIT_CAST 1 1513e457fe3SDavid van Moolenbroek #endif 1523e457fe3SDavid van Moolenbroek 1533e457fe3SDavid van Moolenbroek #define MAGIC_COMPACT_COMP_TYPES 0 1543e457fe3SDavid van Moolenbroek 1553e457fe3SDavid van Moolenbroek #define MAGIC_OFF_BY_N_PROTECTION_N 0 1563e457fe3SDavid van Moolenbroek 1573e457fe3SDavid van Moolenbroek #define MAGIC_VARSIZED_STRUCTS_SUPPORT 1 1583e457fe3SDavid van Moolenbroek 1593e457fe3SDavid van Moolenbroek #define MAGIC_ALLOW_DEAD_DSENTRIES_DEFAULT 0 1603e457fe3SDavid van Moolenbroek 1613e457fe3SDavid van Moolenbroek #define MAGIC_WALK_UNIONS_AS_VOID_ARRAYS_DEFAULT 1 1623e457fe3SDavid van Moolenbroek 1633e457fe3SDavid van Moolenbroek #define MAGIC_DEBUG_SELECT(D,ND) (MAGIC_OUTPUT_CTL>=1 ? (ND) : (D)) 1643e457fe3SDavid van Moolenbroek #define MAGIC_OUTPUT_SELECT(D,ND,NO) \ 1653e457fe3SDavid van Moolenbroek (MAGIC_OUTPUT_CTL>=2 ? (NO) : MAGIC_DEBUG_SELECT(D,ND)) 1663e457fe3SDavid van Moolenbroek #define MAGIC_DEBUG_SET(D) MAGIC_DEBUG_SELECT(D,0) 1673e457fe3SDavid van Moolenbroek 1683e457fe3SDavid van Moolenbroek #define MAGIC_ENABLED "_magic_enabled" 1693e457fe3SDavid van Moolenbroek 1703e457fe3SDavid van Moolenbroek #define MAGIC_ARRAY_NAME "_magic_sentries_array" 1713e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_ARRAY_NAME "_magic_types_array" 1723e457fe3SDavid van Moolenbroek #define MAGIC_FUNC_ARRAY_NAME "_magic_functions_array" 1733e457fe3SDavid van Moolenbroek #define MAGIC_DSINDEX_ARRAY_NAME "_magic_dsindexes_array" 1743e457fe3SDavid van Moolenbroek 1753e457fe3SDavid van Moolenbroek #define MAGIC_ROOT_VAR_NAME "_magic_vars_buff" 1763e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_ASR_SEED "asr_seed" 1773e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_ASR_HEAP_MAP_DO_PERMUTATE "asr_heap_map_do_permutate" 1783e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_ASR_HEAP_MAX_OFFSET "asr_heap_max_offset" 1793e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_ASR_HEAP_MAX_PADDING "asr_heap_max_padding" 1803e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_ASR_MAP_MAX_OFFSET_PAGES "asr_map_max_offset_pages" 1813e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_ASR_MAP_MAX_PADDING_PAGES "asr_map_max_padding_pages" 182c07c198bSDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_NO_MEM_INST "no_mem_inst" 1833e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_TYPES "types" 1843e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_TYPES_NUM "types_num" 1853e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_TYPES_NEXT_ID "types_next_id" 1863e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_FUNCTIONS "functions" 1873e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_FUNCTIONS_NUM "functions_num" 1883e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_FUNCTIONS_NEXT_ID "functions_next_id" 1893e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_SENTRIES "sentries" 1903e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_SENTRIES_NUM "sentries_num" 1913e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_SENTRIES_STR_NUM "sentries_str_num" 1923e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_SENTRIES_NEXT_ID "sentries_next_id" 1933e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_DSINDEXES "dsindexes" 1943e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_DSINDEXES_NUM "dsindexes_num" 1953e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELD_FIRST_DSENTRY "first_dsentry" 1963e457fe3SDavid van Moolenbroek #define MAGIC_RSTRUCT_FIELDS \ 1973e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_ASR_SEED, \ 1983e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_ASR_HEAP_MAP_DO_PERMUTATE, \ 1993e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_ASR_HEAP_MAX_OFFSET, \ 2003e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_ASR_HEAP_MAX_PADDING, \ 2013e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_ASR_MAP_MAX_OFFSET_PAGES, \ 2023e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_ASR_MAP_MAX_PADDING_PAGES, \ 203c07c198bSDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_NO_MEM_INST, \ 2043e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_TYPES, \ 2053e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_TYPES_NUM, \ 2063e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_TYPES_NEXT_ID, \ 2073e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_FUNCTIONS, \ 2083e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_FUNCTIONS_NUM, \ 2093e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_FUNCTIONS_NEXT_ID, \ 2103e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_SENTRIES, \ 2113e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_SENTRIES_NUM, \ 2123e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_SENTRIES_STR_NUM, \ 2133e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_SENTRIES_NEXT_ID, \ 2143e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_DSINDEXES, \ 2153e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_DSINDEXES_NUM, \ 2163e457fe3SDavid van Moolenbroek MAGIC_RSTRUCT_FIELD_FIRST_DSENTRY 2173e457fe3SDavid van Moolenbroek 2183e457fe3SDavid van Moolenbroek #define MAGIC_ENTRY_POINT "main" 2193e457fe3SDavid van Moolenbroek #define MAGIC_INIT_FUNC_NAME "magic_init" 2203e457fe3SDavid van Moolenbroek #define MAGIC_DATA_INIT_FUNC_NAME "magic_data_init" 2213e457fe3SDavid van Moolenbroek 2223e457fe3SDavid van Moolenbroek #define MAGIC_STACK_DSENTRIES_CREATE_FUNC_NAME "magic_stack_dsentries_create" 2233e457fe3SDavid van Moolenbroek #define MAGIC_STACK_DSENTRIES_DESTROY_FUNC_NAME "magic_stack_dsentries_destroy" 2243e457fe3SDavid van Moolenbroek 2253e457fe3SDavid van Moolenbroek #define MAGIC_GET_PAGE_SIZE_FUNC_NAME "magic_get_sys_pagesize" 2263e457fe3SDavid van Moolenbroek 2273e457fe3SDavid van Moolenbroek #define MAGIC_VOID_PTR_TYPE_PTR_NAME "_magic_void_ptr_type_ptr" 2283e457fe3SDavid van Moolenbroek 2293e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_NAME_SUFFIX "#" 2303e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_NAME_SEP "%" 2313e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_NONAME "%UNKNOWN" 2323e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_EXT_NAME "%EXT" 2333e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_EXT_PARENT_NAME "%EXT_PARENT" 2343e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_RET_ADDR_NAME "%RET_ADDR" 2353e457fe3SDavid van Moolenbroek #define MAGIC_ALLOC_INITIAL_STACK_NAME "%INITIAL_STACK_AREA" 2363e457fe3SDavid van Moolenbroek #define MAGIC_OBDSENTRY_DEFAULT_PARENT_NAME "%OUT_OF_BAND_PARENT" 2373e457fe3SDavid van Moolenbroek #define MAGIC_DSENTRY_DATA_SEGMENT_NAME "%LIB_DATA_SEGMENT" 2383e457fe3SDavid van Moolenbroek #define MAGIC_DSENTRY_ABS_NAME_SEP "~" 2393e457fe3SDavid van Moolenbroek #define MAGIC_SELEMENT_SEP "/" 2403e457fe3SDavid van Moolenbroek #define MAGIC_NAME_INVALID "%INVALID" 2413e457fe3SDavid van Moolenbroek 2423e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELD_ID "id" 2433e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELD_NAME "name" 2443e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELD_TYPE "type" 2453e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELD_FLAGS "flags" 2463e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELD_ADDRESS "address" 2473e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELD_SHADOW_ADDRESS "shadow_address" 2483e457fe3SDavid van Moolenbroek #define MAGIC_SSTRUCT_FIELDS \ 2493e457fe3SDavid van Moolenbroek MAGIC_SSTRUCT_FIELD_ID, \ 2503e457fe3SDavid van Moolenbroek MAGIC_SSTRUCT_FIELD_NAME, \ 2513e457fe3SDavid van Moolenbroek MAGIC_SSTRUCT_FIELD_TYPE, \ 2523e457fe3SDavid van Moolenbroek MAGIC_SSTRUCT_FIELD_FLAGS, \ 2533e457fe3SDavid van Moolenbroek MAGIC_SSTRUCT_FIELD_ADDRESS, \ 2543e457fe3SDavid van Moolenbroek MAGIC_SSTRUCT_FIELD_SHADOW_ADDRESS 2553e457fe3SDavid van Moolenbroek 2563e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_ID "id" 2573e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_NAME "name" 2583e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_NAMES "names" 2593e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_NUM_NAMES "num_names" 2603e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_TYPE_STR "type_str" 2613e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_SIZE "size" 2623e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_NUM_CHILD_TYPES "num_child_types" 2633e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_CONTAINED_TYPES "contained_types" 2643e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_COMPATIBLE_TYPES "compatible_types" 2653e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_MEMBER_NAMES "member_names" 2663e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_MEMBER_OFFSETS "member_offsets" 2673e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_VALUE_SET "value_set" 2683e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_TYPE_ID "type_id" 2693e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_FLAGS "flags" 2703e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELD_BIT_WIDTH "bit_width" 2713e457fe3SDavid van Moolenbroek #define MAGIC_TSTRUCT_FIELDS \ 2723e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_ID, \ 2733e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_NAME, \ 2743e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_NAMES, \ 2753e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_NUM_NAMES, \ 2763e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_TYPE_STR, \ 2773e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_SIZE, \ 2783e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_NUM_CHILD_TYPES, \ 2793e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_CONTAINED_TYPES, \ 2803e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_COMPATIBLE_TYPES, \ 2813e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_MEMBER_NAMES, \ 2823e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_MEMBER_OFFSETS, \ 2833e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_VALUE_SET, \ 2843e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_TYPE_ID, \ 2853e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_FLAGS, \ 2863e457fe3SDavid van Moolenbroek MAGIC_TSTRUCT_FIELD_BIT_WIDTH 2873e457fe3SDavid van Moolenbroek 2883e457fe3SDavid van Moolenbroek #define MAGIC_FSTRUCT_FIELD_ID "id" 2893e457fe3SDavid van Moolenbroek #define MAGIC_FSTRUCT_FIELD_NAME "name" 2903e457fe3SDavid van Moolenbroek #define MAGIC_FSTRUCT_FIELD_TYPE "type" 2913e457fe3SDavid van Moolenbroek #define MAGIC_FSTRUCT_FIELD_FLAGS "flags" 2923e457fe3SDavid van Moolenbroek #define MAGIC_FSTRUCT_FIELD_ADDRESS "address" 2933e457fe3SDavid van Moolenbroek #define MAGIC_FSTRUCT_FIELDS \ 2943e457fe3SDavid van Moolenbroek MAGIC_FSTRUCT_FIELD_ID, \ 2953e457fe3SDavid van Moolenbroek MAGIC_FSTRUCT_FIELD_NAME, \ 2963e457fe3SDavid van Moolenbroek MAGIC_FSTRUCT_FIELD_TYPE, \ 2973e457fe3SDavid van Moolenbroek MAGIC_FSTRUCT_FIELD_FLAGS, \ 2983e457fe3SDavid van Moolenbroek MAGIC_FSTRUCT_FIELD_ADDRESS 2993e457fe3SDavid van Moolenbroek 3003e457fe3SDavid van Moolenbroek #define MAGIC_DSTRUCT_FIELD_TYPE "type" 3013e457fe3SDavid van Moolenbroek #define MAGIC_DSTRUCT_FIELD_NAME "name" 3023e457fe3SDavid van Moolenbroek #define MAGIC_DSTRUCT_FIELD_PARENT_NAME "parent_name" 3033e457fe3SDavid van Moolenbroek #define MAGIC_DSTRUCT_FIELD_FLAGS "flags" 3043e457fe3SDavid van Moolenbroek #define MAGIC_DSTRUCT_FIELDS \ 3053e457fe3SDavid van Moolenbroek MAGIC_DSTRUCT_FIELD_TYPE, \ 3063e457fe3SDavid van Moolenbroek MAGIC_DSTRUCT_FIELD_NAME, \ 3073e457fe3SDavid van Moolenbroek MAGIC_DSTRUCT_FIELD_PARENT_NAME, \ 3083e457fe3SDavid van Moolenbroek MAGIC_DSTRUCT_FIELD_FLAGS 3093e457fe3SDavid van Moolenbroek 3103e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_ISUNION 0x01 3113e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_ISPADDED 0x02 3123e457fe3SDavid van Moolenbroek 3133e457fe3SDavid van Moolenbroek /* Type IDs. */ 3143e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_VOID 1 3153e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_FLOAT 2 3163e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_INTEGER 3 3173e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_FUNCTION 4 3183e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_ARRAY 5 3193e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_ENUM 6 3203e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_VECTOR 7 3213e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_UNION 8 3223e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_STRUCT 9 3233e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_POINTER 10 3243e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_OPAQUE 11 3253e457fe3SDavid van Moolenbroek 3263e457fe3SDavid van Moolenbroek /* Type flags. */ 3273e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_EXTERNAL 0x001 3283e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_IS_ROOT 0x002 3293e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_DYNAMIC 0x004 3303e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_INT_CAST 0x008 3313e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_STRICT_VALUE_SET 0x010 3323e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_VARSIZE 0x020 3333e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_UNSIGNED 0x040 3343e457fe3SDavid van Moolenbroek #define MAGIC_TYPE_NO_INNER_PTRS 0x080 3353e457fe3SDavid van Moolenbroek 3363e457fe3SDavid van Moolenbroek /* State flags for sentries and functions. */ 3373e457fe3SDavid van Moolenbroek #define MAGIC_STATE_DIRTY 0x00000001 3383e457fe3SDavid van Moolenbroek #define MAGIC_STATE_CONSTANT 0x00000002 3393e457fe3SDavid van Moolenbroek #define MAGIC_STATE_DYNAMIC 0x00000004 3403e457fe3SDavid van Moolenbroek #define MAGIC_STATE_DETACHED 0x00000008 3413e457fe3SDavid van Moolenbroek #define MAGIC_STATE_DATA 0x00000010 3423e457fe3SDavid van Moolenbroek #define MAGIC_STATE_HEAP 0x00000020 3433e457fe3SDavid van Moolenbroek #define MAGIC_STATE_MAP 0x00000040 3443e457fe3SDavid van Moolenbroek #define MAGIC_STATE_SHM 0x00000080 3453e457fe3SDavid van Moolenbroek #define MAGIC_STATE_STACK 0x00000100 3463e457fe3SDavid van Moolenbroek #define MAGIC_STATE_TEXT 0x00000200 3473e457fe3SDavid van Moolenbroek /* All libraries. */ 3483e457fe3SDavid van Moolenbroek #define MAGIC_STATE_LIB 0x00000400 3493e457fe3SDavid van Moolenbroek /* Dynamically linked libraries. */ 3503e457fe3SDavid van Moolenbroek #define MAGIC_STATE_LIB_SO 0x00000800 3513e457fe3SDavid van Moolenbroek /* Dynamically loaded libraries. */ 3523e457fe3SDavid van Moolenbroek #define MAGIC_STATE_LIB_DSO 0x00001000 3533e457fe3SDavid van Moolenbroek #define MAGIC_STATE_ADDR_NOT_TAKEN 0x00002000 3543e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXT 0x00004000 3553e457fe3SDavid van Moolenbroek #define MAGIC_STATE_OUT_OF_BAND 0x00008000 3563e457fe3SDavid van Moolenbroek #define MAGIC_STATE_STRING 0x00010000 3573e457fe3SDavid van Moolenbroek #define MAGIC_STATE_NAMED_STRING 0x00020000 3583e457fe3SDavid van Moolenbroek #define MAGIC_STATE_MODE_R 0x00040000 3593e457fe3SDavid van Moolenbroek #define MAGIC_STATE_MODE_W 0x00080000 3603e457fe3SDavid van Moolenbroek #define MAGIC_STATE_MODE_X 0x00100000 3613e457fe3SDavid van Moolenbroek #define MAGIC_STATE_THREAD_LOCAL 0x00200000 3623e457fe3SDavid van Moolenbroek #define MAGIC_STATE_MEMPOOL 0x00400000 3633e457fe3SDavid van Moolenbroek #define MAGIC_STATE_MEMBLOCK 0x00800000 3643e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTERNAL 0x01000000 3653e457fe3SDavid van Moolenbroek #define MAGIC_STATE_TYPE_SIZE_MISMATCH 0x02000000 3663e457fe3SDavid van Moolenbroek #define MAGIC_STATE_IMMUTABLE 0x04000000 3673e457fe3SDavid van Moolenbroek #define MAGIC_STATE_INIT 0x08000000 3683e457fe3SDavid van Moolenbroek #define MAGIC_STATE_DIRTY_PAGE 0x10000000 3693e457fe3SDavid van Moolenbroek /* Skip char* and void* entries in arrays */ 3703e457fe3SDavid van Moolenbroek #define MAGIC_STATE_SKIP_BYTE_INDICES 0x20000000 3713e457fe3SDavid van Moolenbroek 3723e457fe3SDavid van Moolenbroek #define MAGIC_STATE_ANNOTATION_MASK \ 3733e457fe3SDavid van Moolenbroek (MAGIC_STATE_MODE_R | MAGIC_STATE_MODE_W | MAGIC_STATE_MODE_X) 3743e457fe3SDavid van Moolenbroek 3753e457fe3SDavid van Moolenbroek #define MAGIC_ASR_FLAG_INIT 0x40000 3763e457fe3SDavid van Moolenbroek 3773e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_MASK 0xFF000000 3783e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_SHIFT 24 3793e457fe3SDavid van Moolenbroek 3803e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAG(E,F) (((E)->flags & (F)) != 0) 3813e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS(E,F) (((E)->flags & (F)) == (F)) 3823e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS_REGION(F) \ 3833e457fe3SDavid van Moolenbroek ((F) & (MAGIC_STATE_DATA | MAGIC_STATE_HEAP | MAGIC_STATE_MAP \ 3843e457fe3SDavid van Moolenbroek | MAGIC_STATE_SHM | MAGIC_STATE_STACK | MAGIC_STATE_TEXT)) 3853e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS_LIBSPEC(F) \ 3863e457fe3SDavid van Moolenbroek ((F) & (MAGIC_STATE_LIB | MAGIC_STATE_LIB_SO | MAGIC_STATE_LIB_DSO)) 3873e457fe3SDavid van Moolenbroek #define MAGIC_STATE_REGION(E) MAGIC_STATE_FLAGS_REGION((E)->flags) 3883e457fe3SDavid van Moolenbroek #define MAGIC_STATE_LIBSPEC(E) MAGIC_STATE_FLAGS_LIBSPEC((E)->flags) 3893e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS_REGION_C(F) \ 3903e457fe3SDavid van Moolenbroek (((F) & MAGIC_STATE_DATA) ? 'D' : ((F) & MAGIC_STATE_HEAP) ? 'H' \ 3913e457fe3SDavid van Moolenbroek : ((F) & MAGIC_STATE_SHM) ? 'X' : ((F) & MAGIC_STATE_MAP) ? 'M' \ 3923e457fe3SDavid van Moolenbroek : ((F) & MAGIC_STATE_STACK) ? 'S' : ((F) & MAGIC_STATE_TEXT) ? 'T' : '?') 3933e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS_LIBSPEC_C(F) \ 3943e457fe3SDavid van Moolenbroek (((F) & MAGIC_STATE_LIB) ? (((F) & MAGIC_STATE_LIB_SO) ? 'l' \ 3953e457fe3SDavid van Moolenbroek : ((F) & MAGIC_STATE_LIB_DSO) ? 'o' : 'L') : '0') 3963e457fe3SDavid van Moolenbroek #define MAGIC_STATE_REGION_C(E) MAGIC_STATE_FLAGS_REGION_C((E)->flags) 3973e457fe3SDavid van Moolenbroek #define MAGIC_STATE_LIBSPEC_C(E) MAGIC_STATE_FLAGS_LIBSPEC_C((E)->flags) 3983e457fe3SDavid van Moolenbroek 3993e457fe3SDavid van Moolenbroek #define MAGIC_STATE_IS_EXTF(F) (((F) & MAGIC_STATE_EXTF_MASK) == (F)) 4003e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS_TO_EXTF(F) \ 4013e457fe3SDavid van Moolenbroek (((F) & MAGIC_STATE_EXTF_MASK) >> MAGIC_STATE_EXTF_SHIFT) 4023e457fe3SDavid van Moolenbroek #define MAGIC_STATE_FLAGS_TO_NONEXTF(F) ((F) & (~MAGIC_STATE_EXTF_MASK)) 4033e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_TO_FLAGS(F) \ 4043e457fe3SDavid van Moolenbroek (((F) << MAGIC_STATE_EXTF_SHIFT) & MAGIC_STATE_EXTF_MASK) 4053e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_FLAG(E,F) (MAGIC_STATE_EXTF_GET(E,F) != 0) 4063e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_GET(E,F) \ 4073e457fe3SDavid van Moolenbroek ((MAGIC_STATE_FLAGS_TO_EXTF((E)->flags) & (F))) 4083e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_ADD(E,F) \ 4093e457fe3SDavid van Moolenbroek ((E)->flags |= MAGIC_STATE_EXTF_TO_FLAGS(F)) 4103e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_DEL(E,F) \ 4113e457fe3SDavid van Moolenbroek ((E)->flags &= ~MAGIC_STATE_EXTF_TO_FLAGS(F)) 4123e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_SET(E,F) \ 4133e457fe3SDavid van Moolenbroek do { \ 4143e457fe3SDavid van Moolenbroek MAGIC_STATE_EXTF_CLEAR(E); \ 4153e457fe3SDavid van Moolenbroek (E)->flags |= MAGIC_STATE_EXTF_TO_FLAGS(F); \ 4163e457fe3SDavid van Moolenbroek } while(0) 4173e457fe3SDavid van Moolenbroek #define MAGIC_STATE_EXTF_CLEAR(E) ((E)->flags &= ~MAGIC_STATE_EXTF_MASK) 4183e457fe3SDavid van Moolenbroek 4193e457fe3SDavid van Moolenbroek /* Annotations. */ 4203e457fe3SDavid van Moolenbroek #define MAGIC_CALL_ANNOTATION_VAR _magic_call_annotation_var 4213e457fe3SDavid van Moolenbroek #define MAGIC_CALL_ANNOTATION_VAR_NAME "_magic_call_annotation_var" 4223e457fe3SDavid van Moolenbroek #define MAGIC_CALL_ANNOTATE(C, VALUE) \ 4233e457fe3SDavid van Moolenbroek do { C; MAGIC_CALL_ANNOTATION_VAR = VALUE; } while(0) 4243e457fe3SDavid van Moolenbroek #define MAGIC_CALL_MEM_SKIP_INSTRUMENTATION 0x01 4253e457fe3SDavid van Moolenbroek 4263e457fe3SDavid van Moolenbroek #define MAGIC_VAR_ANNOTATION_PREFIX_NAME "_magic_var_annotation_" 4273e457fe3SDavid van Moolenbroek 4283e457fe3SDavid van Moolenbroek #define MAGIC_VAR_ANNOTATE(T,V,A) \ 4293e457fe3SDavid van Moolenbroek T V; \ 4303e457fe3SDavid van Moolenbroek volatile int _magic_var_annotation_ ## V = A 4313e457fe3SDavid van Moolenbroek #define MAGIC_VAR_INIT_ANNOTATE(T,V,I,A) \ 4323e457fe3SDavid van Moolenbroek T V = I; \ 4333e457fe3SDavid van Moolenbroek volatile int _magic_var_annotation_ ## V = A 4343e457fe3SDavid van Moolenbroek 4353e457fe3SDavid van Moolenbroek #define MAGIC_MEMCPY_FUNC_NAME "memcpy" 4363e457fe3SDavid van Moolenbroek #define MAGIC_MALLOC_FUNC_NAME "malloc" 4373e457fe3SDavid van Moolenbroek 4383e457fe3SDavid van Moolenbroek /* Magic memory pool management functions. */ 4393e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_BLOCK_ALLOC_TEMPLATE_FUNC_NAME \ 4403e457fe3SDavid van Moolenbroek "mempool_block_alloc_template" 4413e457fe3SDavid van Moolenbroek 4423e457fe3SDavid van Moolenbroek /* Wrapper functions. */ 4433e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_CREATE_FUNCS \ 4443e457fe3SDavid van Moolenbroek __X(magic_mempool_create_begin), __X(magic_mempool_create_end) 4453e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_DESTROY_FUNCS \ 4463e457fe3SDavid van Moolenbroek __X(magic_mempool_destroy_begin), __X(magic_mempool_destroy_end) 4473e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_MGMT_FUNCS \ 4483e457fe3SDavid van Moolenbroek __X(magic_mempool_mgmt_begin), __X(magic_mempool_mgmt_end) 4493e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_RESET_FUNCS \ 4503e457fe3SDavid van Moolenbroek __X(magic_mempool_reset_begin), __X(magic_mempool_mgmt_end) 4513e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_FUNCS \ 4523e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_CREATE_FUNCS, \ 4533e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_DESTROY_FUNCS, \ 4543e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_MGMT_FUNCS, \ 4553e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_RESET_FUNCS 4563e457fe3SDavid van Moolenbroek 4573e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_CREATE_FUNC_NAMES MAGIC_MEMPOOL_CREATE_FUNCS, "" 4583e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_DESTROY_FUNC_NAMES MAGIC_MEMPOOL_DESTROY_FUNCS, "" 4593e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_MGMT_FUNC_NAMES MAGIC_MEMPOOL_MGMT_FUNCS, "" 4603e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_RESET_FUNC_NAMES MAGIC_MEMPOOL_RESET_FUNCS, "" 4613e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_FUNC_NAMES MAGIC_MEMPOOL_FUNCS, "" 4623e457fe3SDavid van Moolenbroek 4633e457fe3SDavid van Moolenbroek /* Flags for inlining wrapper calls. */ 4643e457fe3SDavid van Moolenbroek #define MAGIC_PRE_HOOK_SIMPLE_CALL 0x0001 4653e457fe3SDavid van Moolenbroek #define MAGIC_PRE_HOOK_FORWARDING_CALL 0x0002 4663e457fe3SDavid van Moolenbroek #define MAGIC_POST_HOOK_SIMPLE_CALL 0x0004 4673e457fe3SDavid van Moolenbroek #define MAGIC_POST_HOOK_FORWARDING_CALL 0x0008 4683e457fe3SDavid van Moolenbroek #define MAGIC_PRE_HOOK_DEBUG 0x0010 4693e457fe3SDavid van Moolenbroek #define MAGIC_POST_HOOK_DEBUG 0x0020 4703e457fe3SDavid van Moolenbroek #define MAGIC_PRE_HOOK_FLAGS_MASK \ 4713e457fe3SDavid van Moolenbroek (MAGIC_PRE_HOOK_SIMPLE_CALL | MAGIC_PRE_HOOK_FORWARDING_CALL) 4723e457fe3SDavid van Moolenbroek #define MAGIC_POST_HOOK_FLAGS_MASK \ 4733e457fe3SDavid van Moolenbroek (MAGIC_POST_HOOK_SIMPLE_CALL | MAGIC_POST_HOOK_FORWARDING_CALL) 4743e457fe3SDavid van Moolenbroek #define MAGIC_HOOK_DEBUG_MASK \ 4753e457fe3SDavid van Moolenbroek (MAGIC_PRE_HOOK_DEBUG | MAGIC_POST_HOOK_DEBUG) 4763e457fe3SDavid van Moolenbroek 4773e457fe3SDavid van Moolenbroek #if (MAGIC_MEM_USAGE_OUTPUT_CTL == 1) 4783e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_CREATE_FUNC_FLAGS MAGIC_PRE_HOOK_SIMPLE_CALL | MAGIC_POST_HOOK_FORWARDING_CALL | MAGIC_PRE_HOOK_DEBUG 4793e457fe3SDavid van Moolenbroek #else 4803e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_CREATE_FUNC_FLAGS MAGIC_PRE_HOOK_SIMPLE_CALL | MAGIC_POST_HOOK_FORWARDING_CALL 4813e457fe3SDavid van Moolenbroek #endif 4823e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_DESTROY_FUNC_FLAGS \ 4833e457fe3SDavid van Moolenbroek MAGIC_PRE_HOOK_FORWARDING_CALL | MAGIC_POST_HOOK_SIMPLE_CALL 4843e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_MGMT_FUNC_FLAGS \ 4853e457fe3SDavid van Moolenbroek MAGIC_PRE_HOOK_FORWARDING_CALL | MAGIC_POST_HOOK_SIMPLE_CALL 4863e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_RESET_FUNC_FLAGS \ 4873e457fe3SDavid van Moolenbroek MAGIC_PRE_HOOK_FORWARDING_CALL | MAGIC_POST_HOOK_SIMPLE_CALL 4883e457fe3SDavid van Moolenbroek #define MAGIC_MEMPOOL_FUNC_FLAGS \ 4893e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_CREATE_FUNC_FLAGS, \ 4903e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_DESTROY_FUNC_FLAGS, \ 4913e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_MGMT_FUNC_FLAGS, \ 4923e457fe3SDavid van Moolenbroek MAGIC_MEMPOOL_RESET_FUNC_FLAGS 4933e457fe3SDavid van Moolenbroek 4943e457fe3SDavid van Moolenbroek #define MAGIC_CHECKPOINT_ENABLED "_magic_checkpoint_enabled" 4953e457fe3SDavid van Moolenbroek #define MAGIC_CHECKPOINT_FUNC_NAME "sef_receive_status" 4963e457fe3SDavid van Moolenbroek 4973e457fe3SDavid van Moolenbroek #define MAGIC_SHADOW_FUNC_PREFIX "llvm_shadow" 4983e457fe3SDavid van Moolenbroek 4993e457fe3SDavid van Moolenbroek #define MAGIC_LAZY_CHECKPOINT_ENABLED "_magic_lazy_checkpoint_enabled" 5003e457fe3SDavid van Moolenbroek #define MAGIC_LAZY_CHECKPOINT_CLEARDF_FUNC_NAME "sef_receive_status" 5013e457fe3SDavid van Moolenbroek 5023e457fe3SDavid van Moolenbroek #define MAGIC_LAZY_CHECKPOINT_SHADOW_TAG "llvm_shadow" 5033e457fe3SDavid van Moolenbroek 5043e457fe3SDavid van Moolenbroek /* Magic memory functions. */ 5053e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_FUNCS \ 5063e457fe3SDavid van Moolenbroek __X(malloc), __X(calloc), __X(realloc), \ 5073e457fe3SDavid van Moolenbroek __X(posix_memalign), __X(valloc), __X(memalign), \ 5083e457fe3SDavid van Moolenbroek __X(mmap), \ 5093e457fe3SDavid van Moolenbroek __X(brk), __X(sbrk), \ 5103e457fe3SDavid van Moolenbroek __X(shmat), \ 5113e457fe3SDavid van Moolenbroek __X(mmap64) 5123e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_FUNC_ALLOC_FLAGS \ 5133e457fe3SDavid van Moolenbroek MAGIC_STATE_HEAP, MAGIC_STATE_HEAP, MAGIC_STATE_HEAP, \ 5143e457fe3SDavid van Moolenbroek MAGIC_STATE_HEAP, MAGIC_STATE_HEAP, MAGIC_STATE_HEAP, \ 5153e457fe3SDavid van Moolenbroek MAGIC_STATE_MAP, \ 5163e457fe3SDavid van Moolenbroek MAGIC_STATE_HEAP, MAGIC_STATE_HEAP, \ 5173e457fe3SDavid van Moolenbroek MAGIC_STATE_SHM, \ 5183e457fe3SDavid van Moolenbroek MAGIC_STATE_MAP 5193e457fe3SDavid van Moolenbroek 5203e457fe3SDavid van Moolenbroek #ifdef __MINIX 5213e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_EXTRA_FUNCS , __X(vm_map_cacheblock) 5223e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_EXTRA_FUNC_ALLOC_FLAGS , MAGIC_STATE_MAP 5233e457fe3SDavid van Moolenbroek #else 5243e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_EXTRA_FUNCS 5253e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_EXTRA_FUNC_ALLOC_FLAGS 5263e457fe3SDavid van Moolenbroek #endif 5273e457fe3SDavid van Moolenbroek 5283e457fe3SDavid van Moolenbroek #define MAGIC_MEMD_FUNCS \ 5293e457fe3SDavid van Moolenbroek __X(free), __X(munmap), __X(shmdt) 5303e457fe3SDavid van Moolenbroek #define MAGIC_MEMD_FUNC_ALLOC_FLAGS \ 5313e457fe3SDavid van Moolenbroek 0, 0, 0 5323e457fe3SDavid van Moolenbroek 5333e457fe3SDavid van Moolenbroek #define MAGIC_MEM_FUNCS MAGIC_MEMA_FUNCS MAGIC_MEMA_EXTRA_FUNCS, MAGIC_MEMD_FUNCS 5343e457fe3SDavid van Moolenbroek #define MAGIC_MEM_UNS_FUNCS \ 5353e457fe3SDavid van Moolenbroek __X(mmap2), __X(remap_file_pages), __X(mremap) 5363e457fe3SDavid van Moolenbroek #define MAGIC_MEM_FUNC_ALLOC_FLAGS \ 5373e457fe3SDavid van Moolenbroek MAGIC_MEMA_FUNC_ALLOC_FLAGS MAGIC_MEMA_EXTRA_FUNC_ALLOC_FLAGS, MAGIC_MEMD_FUNC_ALLOC_FLAGS 5383e457fe3SDavid van Moolenbroek 539b7725c85SDavid van Moolenbroek #ifdef __MINIX 540b7725c85SDavid van Moolenbroek /* Nested allocation functions to hook. That is, functions that are being 541b7725c85SDavid van Moolenbroek * called as part of allocation functions - in particular, malloc - and need to 542b7725c85SDavid van Moolenbroek * be intercepted for tracking purposes - in particular, so that mmap'ed malloc 543b7725c85SDavid van Moolenbroek * page directories can be unmapped in order to avoid memory leaks. MINIX3 only. 544b7725c85SDavid van Moolenbroek */ 545b7725c85SDavid van Moolenbroek #define MAGIC_MEMN_FUNCS \ 546b7725c85SDavid van Moolenbroek __X(mmap), __X(munmap) 547b7725c85SDavid van Moolenbroek #else 548b7725c85SDavid van Moolenbroek #define MAGIC_MEMN_FUNCS "" 549b7725c85SDavid van Moolenbroek #endif 550b7725c85SDavid van Moolenbroek 5513e457fe3SDavid van Moolenbroek #define MAGIC_DL_FUNCS \ 5523e457fe3SDavid van Moolenbroek __X(dlopen), __X(dlclose) 5533e457fe3SDavid van Moolenbroek 5543e457fe3SDavid van Moolenbroek #define MAGIC_MEMA_FUNC_NAMES MAGIC_MEMA_FUNCS MAGIC_MEMA_EXTRA_FUNCS, "" 5553e457fe3SDavid van Moolenbroek #define MAGIC_MEMD_FUNC_NAMES MAGIC_MEMD_FUNCS, "" 556b7725c85SDavid van Moolenbroek #define MAGIC_MEMN_FUNC_NAMES MAGIC_MEMN_FUNCS, "" 5573e457fe3SDavid van Moolenbroek #define MAGIC_MEM_FUNC_NAMES MAGIC_MEM_FUNCS, "" 5583e457fe3SDavid van Moolenbroek #define MAGIC_DL_FUNC_NAMES MAGIC_DL_FUNCS, "" 5593e457fe3SDavid van Moolenbroek 5603e457fe3SDavid van Moolenbroek #if MAGIC_INSTRUMENT_MEM_FUNCS_ASR_ONLY 5613e457fe3SDavid van Moolenbroek #define MAGIC_MEM_PREFIX_STRS MAGIC_ASR_PREFIX_STR, MAGIC_PREFIX_STR, "" 5623e457fe3SDavid van Moolenbroek #else 5633e457fe3SDavid van Moolenbroek #define MAGIC_MEM_PREFIX_STRS MAGIC_PREFIX_STR, "" 5643e457fe3SDavid van Moolenbroek #endif 5653e457fe3SDavid van Moolenbroek 5663e457fe3SDavid van Moolenbroek #endif /* _MAGIC_COMMON_H */ 5673e457fe3SDavid van Moolenbroek 568