190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* 2f71323e297a928af368937089d3ed71239786f86Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4f71323e297a928af368937089d3ed71239786f86Andreas Huber * Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber * that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber * tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber * in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber * be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef __VPX_MEM_INTRNL_H__ 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __VPX_MEM_INTRNL_H__ 14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "./vpx_config.h" 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef CONFIG_MEM_MANAGER 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if defined(VXWORKS) 18538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define CONFIG_MEM_MANAGER 1 /*include heap manager functionality,*/ 19538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*default: enabled on vxworks*/ 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# else 21538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define CONFIG_MEM_MANAGER 0 /*include heap manager functionality*/ 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# endif 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*CONFIG_MEM_MANAGER*/ 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef CONFIG_MEM_TRACKER 26538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define CONFIG_MEM_TRACKER 1 /*include xvpx_* calls in the lib*/ 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef CONFIG_MEM_CHECKS 30538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define CONFIG_MEM_CHECKS 0 /*include some basic safety checks in 31538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervpx_memcpy, _memset, and _memmove*/ 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef USE_GLOBAL_FUNCTION_POINTERS 35538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define USE_GLOBAL_FUNCTION_POINTERS 0 /*use function pointers instead of compiled functions.*/ 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_MEM_TRACKER 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# include "vpx_mem_tracker.h" 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if VPX_MEM_TRACKER_VERSION_CHIEF != 2 || VPX_MEM_TRACKER_VERSION_MAJOR != 5 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# error "vpx_mem requires memory tracker version 2.5 to track memory usage" 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# endif 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ADDRESS_STORAGE_SIZE sizeof(size_t) 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef DEFAULT_ALIGNMENT 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# if defined(VXWORKS) 49538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define DEFAULT_ALIGNMENT 32 /*default addr alignment to use in 50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangcalls to vpx_* functions other 51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangthan vpx_memalign*/ 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# else 531184aebb761cbeac9124c37189a80a1a58f04b6bhkuang# define DEFAULT_ALIGNMENT (2 * sizeof(void*)) /* NOLINT */ 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# endif 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_MEM_TRACKER 58538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define TRY_BOUNDS_CHECK 1 /*when set to 1 pads each allocation, 59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangintegrity can be checked using 60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvpx_memory_tracker_check_integrity 61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangor on free by defining*/ 62538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*TRY_BOUNDS_CHECK_ON_FREE*/ 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define TRY_BOUNDS_CHECK 0 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*CONFIG_MEM_TRACKER*/ 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if TRY_BOUNDS_CHECK 68538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define TRY_BOUNDS_CHECK_ON_FREE 0 /*checks mem integrity on every 69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfree, very expensive*/ 70538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define BOUNDS_CHECK_VALUE 0xdeadbeef /*value stored before/after ea. 71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangmem addr for bounds checking*/ 72538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber# define BOUNDS_CHECK_PAD_SIZE 32 /*size of the padding before and 73ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangafter ea allocation to be filled 74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangwith BOUNDS_CHECK_VALUE. 75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangthis should be a multiple of 4*/ 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define BOUNDS_CHECK_VALUE 0 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define BOUNDS_CHECK_PAD_SIZE 0 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*TRY_BOUNDS_CHECK*/ 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef REMOVE_PRINTFS 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define REMOVE_PRINTFS 0 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* Should probably use a vpx_mem logger function. */ 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if REMOVE_PRINTFS 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define _P(x) 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# define _P(x) x 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*returns an addr aligned to the byte boundary specified by align*/ 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define align_addr(addr,align) (void*)(((size_t)(addr) + ((align) - 1)) & (size_t)-(align)) 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif /*__VPX_MEM_INTRNL_H__*/ 96