xref: /minix3/minix/llvm/include/magic_common.h (revision bdb565187c0f1a04513dd488df843317b27f86c8)
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