1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#ifndef VPX_MEM_INCLUDE_VPX_MEM_INTRNL_H_
138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VPX_MEM_INCLUDE_VPX_MEM_INTRNL_H_
14d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org#include "./vpx_config.h"
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef CONFIG_MEM_MANAGER
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# if defined(VXWORKS)
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#  define CONFIG_MEM_MANAGER  1 /*include heap manager functionality,*/
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*default: enabled on vxworks*/
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# else
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#  define CONFIG_MEM_MANAGER  0 /*include heap manager functionality*/
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# endif
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*CONFIG_MEM_MANAGER*/
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef CONFIG_MEM_TRACKER
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define CONFIG_MEM_TRACKER     1 /*include xvpx_* calls in the lib*/
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef CONFIG_MEM_CHECKS
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define CONFIG_MEM_CHECKS      0 /*include some basic safety checks in
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvpx_memcpy, _memset, and _memmove*/
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef USE_GLOBAL_FUNCTION_POINTERS
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define USE_GLOBAL_FUNCTION_POINTERS   0  /*use function pointers instead of compiled functions.*/
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_TRACKER
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# include "vpx_mem_tracker.h"
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# if VPX_MEM_TRACKER_VERSION_CHIEF != 2 || VPX_MEM_TRACKER_VERSION_MAJOR != 5
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#  error "vpx_mem requires memory tracker version 2.5 to track memory usage"
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# endif
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define ADDRESS_STORAGE_SIZE      sizeof(size_t)
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef DEFAULT_ALIGNMENT
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# if defined(VXWORKS)
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#  define DEFAULT_ALIGNMENT        32        /*default addr alignment to use in
506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgcalls to vpx_* functions other
516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgthan vpx_memalign*/
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# else
53f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org#  define DEFAULT_ALIGNMENT        (2 * sizeof(void*))  /* NOLINT */
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# endif
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_TRACKER
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define TRY_BOUNDS_CHECK         1        /*when set to 1 pads each allocation,
596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgintegrity can be checked using
606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvpx_memory_tracker_check_integrity
616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgor on free by defining*/
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*TRY_BOUNDS_CHECK_ON_FREE*/
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define TRY_BOUNDS_CHECK         0
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*CONFIG_MEM_TRACKER*/
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define TRY_BOUNDS_CHECK_ON_FREE 0          /*checks mem integrity on every
696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgfree, very expensive*/
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define BOUNDS_CHECK_VALUE       0xdeadbeef /*value stored before/after ea.
716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgmem addr for bounds checking*/
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define BOUNDS_CHECK_PAD_SIZE    32         /*size of the padding before and
736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgafter ea allocation to be filled
746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgwith BOUNDS_CHECK_VALUE.
756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgthis should be a multiple of 4*/
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define BOUNDS_CHECK_VALUE       0
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define BOUNDS_CHECK_PAD_SIZE    0
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*TRY_BOUNDS_CHECK*/
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef REMOVE_PRINTFS
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define REMOVE_PRINTFS 0
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Should probably use a vpx_mem logger function. */
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if REMOVE_PRINTFS
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define _P(x)
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define _P(x) x
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*returns an addr aligned to the byte boundary specified by align*/
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define align_addr(addr,align) (void*)(((size_t)(addr) + ((align) - 1)) & (size_t)-(align))
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
958b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif  // VPX_MEM_INCLUDE_VPX_MEM_INTRNL_H_
96