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