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 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define __VPX_MEM_C__ 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_mem.h" 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <stdio.h> 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <stdlib.h> 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <string.h> 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "include/vpx_mem_intrnl.h" 19d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#include "vpx/vpx_integer.h" 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_TRACKER 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef VPX_NO_GLOBALS 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic unsigned long g_alloc_count = 0; 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_global_handling.h" 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define g_alloc_count vpxglobalm(vpxmem,g_alloc_count) 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_MANAGER 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# include "heapmm.h" 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# include "hmm_intrnl.h" 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define SHIFT_HMM_ADDR_ALIGN_UNIT 5 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define TOTAL_MEMORY_TO_ALLOCATE 20971520 /* 20 * 1024 * 1024 */ 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define MM_DYNAMIC_MEMORY 1 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# if MM_DYNAMIC_MEMORY 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic unsigned char *g_p_mng_memory_raw = NULL; 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic unsigned char *g_p_mng_memory = NULL; 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# else 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic unsigned char g_p_mng_memory[TOTAL_MEMORY_TO_ALLOCATE]; 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# endif 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic size_t g_mm_memory_size = TOTAL_MEMORY_TO_ALLOCATE; 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic hmm_descriptor hmm_d; 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic int g_mng_memory_allocated = 0; 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic int vpx_mm_create_heap_memory(); 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic void *vpx_mm_realloc(void *memblk, size_t size); 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*CONFIG_MEM_MANAGER*/ 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if USE_GLOBAL_FUNCTION_POINTERS 556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct GLOBAL_FUNC_POINTERS { 566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_malloc_func g_malloc; 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_calloc_func g_calloc; 586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_realloc_func g_realloc; 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_free_func g_free; 606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_memcpy_func g_memcpy; 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_memset_func g_memset; 626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_memmove_func g_memmove; 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} *g_func = NULL; 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MALLOC_L g_func->g_malloc 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_REALLOC_L g_func->g_realloc 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_FREE_L g_func->g_free 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MEMCPY_L g_func->g_memcpy 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MEMSET_L g_func->g_memset 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MEMMOVE_L g_func->g_memmove 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MALLOC_L malloc 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_REALLOC_L realloc 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_FREE_L free 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MEMCPY_L memcpy 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MEMSET_L memset 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# define VPX_MEMMOVE_L memmove 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /* USE_GLOBAL_FUNCTION_POINTERS */ 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgunsigned int vpx_mem_get_version() { 816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int ver = ((unsigned int)(unsigned char)VPX_MEM_VERSION_CHIEF << 24 | 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (unsigned int)(unsigned char)VPX_MEM_VERSION_MAJOR << 16 | 836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (unsigned int)(unsigned char)VPX_MEM_VERSION_MINOR << 8 | 846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (unsigned int)(unsigned char)VPX_MEM_VERSION_PATCH); 856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return ver; 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint vpx_mem_set_heap_size(size_t size) { 896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int ret = -1; 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_MANAGER 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if MM_DYNAMIC_MEMORY 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!g_mng_memory_allocated && size) { 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_mm_memory_size = size; 966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret = 0; 976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else 986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret = -3; 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret = -2; 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)size; 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return ret; 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_memalign(size_t align, size_t size) { 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *addr, 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * x = NULL; 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_MANAGER 1156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int number_aau; 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (vpx_mm_create_heap_memory() < 0) { 1186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("[vpx][mm] ERROR vpx_memalign() Couldn't create memory for Heap.\n");) 1196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org number_aau = ((size + align - 1 + ADDRESS_STORAGE_SIZE) >> 1226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SHIFT_HMM_ADDR_ALIGN_UNIT) + 1; 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org addr = hmm_alloc(&hmm_d, number_aau); 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 1266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org addr = VPX_MALLOC_L(size + align - 1 + ADDRESS_STORAGE_SIZE); 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*CONFIG_MEM_MANAGER*/ 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (addr) { 1306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = align_addr((unsigned char *)addr + ADDRESS_STORAGE_SIZE, (int)align); 1316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* save the actual malloc address */ 1326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ((size_t *)x)[-1] = (size_t)addr; 1336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return x; 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_malloc(size_t size) { 1396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return vpx_memalign(DEFAULT_ALIGNMENT, size); 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_calloc(size_t num, size_t size) { 1436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *x; 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = vpx_memalign(DEFAULT_ALIGNMENT, num * size); 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (x) 1486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_MEMSET_L(x, 0, num * size); 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return x; 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_realloc(void *memblk, size_t size) { 1546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *addr, 1556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * new_addr = NULL; 1566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int align = DEFAULT_ALIGNMENT; 1576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* 1596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org The realloc() function changes the size of the object pointed to by 1606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ptr to the size specified by size, and returns a pointer to the 1616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org possibly moved block. The contents are unchanged up to the lesser 1626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org of the new and old sizes. If ptr is null, realloc() behaves like 1636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org malloc() for the specified size. If size is zero (0) and ptr is 1646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org not a null pointer, the object pointed to is freed. 1656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!memblk) 1676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org new_addr = vpx_malloc(size); 1686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else if (!size) 1696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_free(memblk); 1706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else { 1716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org addr = (void *)(((size_t *)memblk)[-1]); 1726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org memblk = NULL; 173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_MANAGER 1756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org new_addr = vpx_mm_realloc(addr, size + align + ADDRESS_STORAGE_SIZE); 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 1776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org new_addr = VPX_REALLOC_L(addr, size + align + ADDRESS_STORAGE_SIZE); 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (new_addr) { 1816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org addr = new_addr; 1826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org new_addr = (void *)(((size_t) 1836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ((unsigned char *)new_addr + ADDRESS_STORAGE_SIZE) + (align - 1)) & 1846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (size_t) - align); 1856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* save the actual malloc address */ 1866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ((size_t *)new_addr)[-1] = (size_t)addr; 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 1886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return new_addr; 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid vpx_free(void *memblk) { 1946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (memblk) { 1956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *addr = (void *)(((size_t *)memblk)[-1]); 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_MANAGER 1976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org hmm_free(&hmm_d, addr); 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 1996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_FREE_L(addr); 200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 2016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_TRACKER 2056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *xvpx_memalign(size_t align, size_t size, char *file, int line) { 206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 2076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned char *x_bounds; 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *x; 211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (g_alloc_count == 0) { 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 2146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int i_rv = vpx_memory_tracker_init(BOUNDS_CHECK_PAD_SIZE, BOUNDS_CHECK_VALUE); 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 2166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int i_rv = vpx_memory_tracker_init(0, 0); 217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (i_rv < 0) { 2206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("ERROR xvpx_malloc MEM_TRACK_USAGE error vpx_memory_tracker_init().\n");) 221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 2226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 2256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org { 2266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int i; 2276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int tempme = BOUNDS_CHECK_VALUE; 2286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x_bounds = vpx_memalign(align, size + (BOUNDS_CHECK_PAD_SIZE * 2)); 2306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (x_bounds) { 2326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /*we're aligning the address twice here but to keep things 2336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org consistent we want to have the padding come before the stored 2346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org address so no matter what free function gets called we will 2356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org attempt to free the correct address*/ 2366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x_bounds = (unsigned char *)(((size_t *)x_bounds)[-1]); 2376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = align_addr(x_bounds + BOUNDS_CHECK_PAD_SIZE + ADDRESS_STORAGE_SIZE, 2386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (int)align); 2396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* save the actual malloc address */ 2406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ((size_t *)x)[-1] = (size_t)x_bounds; 2416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org for (i = 0; i < BOUNDS_CHECK_PAD_SIZE; i += sizeof(unsigned int)) { 2436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_MEMCPY_L(x_bounds + i, &tempme, sizeof(unsigned int)); 2446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_MEMCPY_L((unsigned char *)x + size + i, 2456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org &tempme, sizeof(unsigned int)); 2466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 2476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else 2486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = NULL; 2496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 2516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = vpx_memalign(align, size); 252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*TRY_BOUNDS_CHECK*/ 253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_alloc_count++; 255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_add((size_t)x, (unsigned int)size, file, line, 1); 257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return x; 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *xvpx_malloc(size_t size, char *file, int line) { 2626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return xvpx_memalign(DEFAULT_ALIGNMENT, size, file, line); 263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *xvpx_calloc(size_t num, size_t size, char *file, int line) { 2666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *x = xvpx_memalign(DEFAULT_ALIGNMENT, num * size, file, line); 267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (x) 2696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_MEMSET_L(x, 0, num * size); 270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return x; 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *xvpx_realloc(void *memblk, size_t size, char *file, int line) { 2756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct mem_block *p = NULL; 2766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int orig_size = 0, 2776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org orig_line = 0; 2786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *orig_file = NULL; 279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 2816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned char *x_bounds = memblk ? 2826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (unsigned char *)(((size_t *)memblk)[-1]) : 2836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org NULL; 284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *x; 287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (g_alloc_count == 0) { 289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!vpx_memory_tracker_init(BOUNDS_CHECK_PAD_SIZE, BOUNDS_CHECK_VALUE)) 292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 2936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!vpx_memory_tracker_init(0, 0)) 294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 2966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("ERROR xvpx_malloc MEM_TRACK_USAGE error vpx_memory_tracker_init().\n");) 297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 2986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 2996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if ((p = vpx_memory_tracker_find((size_t)memblk))) { 3016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org orig_size = p->size; 3026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org orig_file = p->file; 3036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org orig_line = p->line; 3046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 306474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK_ON_FREE 3076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_check_integrity(file, line); 308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* have to do this regardless of success, because 3116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * the memory that does get realloc'd may change 3126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * the bounds values of this block 3136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_remove((size_t)memblk); 315474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 3176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org { 3186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int i; 3196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int tempme = BOUNDS_CHECK_VALUE; 3206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x_bounds = vpx_realloc(memblk, size + (BOUNDS_CHECK_PAD_SIZE * 2)); 3226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (x_bounds) { 3246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x_bounds = (unsigned char *)(((size_t *)x_bounds)[-1]); 3256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = align_addr(x_bounds + BOUNDS_CHECK_PAD_SIZE + ADDRESS_STORAGE_SIZE, 3266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (int)DEFAULT_ALIGNMENT); 3276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* save the actual malloc address */ 3286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ((size_t *)x)[-1] = (size_t)x_bounds; 3296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org for (i = 0; i < BOUNDS_CHECK_PAD_SIZE; i += sizeof(unsigned int)) { 3316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_MEMCPY_L(x_bounds + i, &tempme, sizeof(unsigned int)); 3326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org VPX_MEMCPY_L((unsigned char *)x + size + i, 3336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org &tempme, sizeof(unsigned int)); 3346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 3356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else 3366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = NULL; 3376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 338474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 3396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org x = vpx_realloc(memblk, size); 340474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*TRY_BOUNDS_CHECK*/ 341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!memblk) ++g_alloc_count; 343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (x) 3456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_add((size_t)x, (unsigned int)size, file, line, 1); 3466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else 3476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_add((size_t)memblk, orig_size, orig_file, orig_line, 1); 348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return x; 350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid xvpx_free(void *p_address, char *file, int line) { 353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 3546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned char *p_bounds_address = (unsigned char *)p_address; 3556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /*p_bounds_address -= BOUNDS_CHECK_PAD_SIZE;*/ 356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if !TRY_BOUNDS_CHECK_ON_FREE 3596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)file; 3606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)line; 361474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 362474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (p_address) { 364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK_ON_FREE 3656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_check_integrity(file, line); 366474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* if the addr isn't found in the list, assume it was allocated via 3696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * vpx_ calls not xvpx_, therefore it does not contain any padding 3706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (vpx_memory_tracker_remove((size_t)p_address) == -2) { 3726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org p_bounds_address = p_address; 3736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(fprintf(stderr, "[vpx_mem][xvpx_free] addr: %p not found in" 3746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org " list; freed from file:%s" 3756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org " line:%d\n", p_address, file, line)); 3766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else 3776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org --g_alloc_count; 378474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 379474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if TRY_BOUNDS_CHECK 3806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_free(p_bounds_address); 381474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 3826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_free(p_address); 383474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 384474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 3856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!g_alloc_count) 3866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memory_tracker_destroy(); 3876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 388474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 389474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 390474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*CONFIG_MEM_TRACKER*/ 391474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 392474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_CHECKS 393474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(VXWORKS) 394474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <task_lib.h> /*for task_delay()*/ 395474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* This function is only used to get a stack trace of the player 396474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgobject so we can se where we are having a problem. */ 3976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstatic int get_my_tt(int task) { 3986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org tt(task); 399474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 401474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 402474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstatic void vx_sleep(int msec) { 4046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int ticks_to_sleep = 0; 405474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (msec) { 4076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int msec_per_tick = 1000 / sys_clk_rate_get(); 408474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (msec < msec_per_tick) 4106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ticks_to_sleep++; 4116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else 4126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ticks_to_sleep = msec / msec_per_tick; 4136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 414474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org task_delay(ticks_to_sleep); 416474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 417474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 418474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 419474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_memcpy(void *dest, const void *source, size_t length) { 421474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_CHECKS 422474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (((int)dest < 0x4000) || ((int)source < 0x4000)) { 4246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("WARNING: vpx_memcpy dest:0x%x source:0x%x len:%d\n", (int)dest, (int)source, length);) 425474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 426474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(VXWORKS) 4276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sp(get_my_tt, task_id_self(), 0, 0, 0, 0, 0, 0, 0, 0); 428474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vx_sleep(10000); 430474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 4316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 432474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 433474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 434474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return VPX_MEMCPY_L(dest, source, length); 436474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 437474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_memset(void *dest, int val, size_t length) { 439474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_CHECKS 440474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if ((int)dest < 0x4000) { 4426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("WARNING: vpx_memset dest:0x%x val:%d len:%d\n", (int)dest, val, length);) 443474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 444474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(VXWORKS) 4456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sp(get_my_tt, task_id_self(), 0, 0, 0, 0, 0, 0, 0, 0); 446474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vx_sleep(10000); 448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 4496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 451474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 452474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return VPX_MEMSET_L(dest, val, length); 454474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 456d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH 457d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.orgvoid *vpx_memset16(void *dest, int val, size_t length) { 458d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#if CONFIG_MEM_CHECKS 459d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org if ((int)dest < 0x4000) { 460d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org _P(printf("WARNING: vpx_memset dest:0x%x val:%d len:%d\n", 461d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org (int)dest, val, length);) 462d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 463d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#if defined(VXWORKS) 464d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org sp(get_my_tt, task_id_self(), 0, 0, 0, 0, 0, 0, 0, 0); 465d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 466d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org vx_sleep(10000); 467d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#endif 468d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org } 469d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#endif 470d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org int i; 471d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org void *orig = dest; 472d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org uint16_t *dest16 = dest; 473d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org for (i = 0; i < length; i++) 474d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org *dest16++ = val; 475d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org return orig; 476d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org} 477d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org#endif // CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH 478d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 4796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid *vpx_memmove(void *dest, const void *src, size_t count) { 480474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_CHECKS 481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (((int)dest < 0x4000) || ((int)src < 0x4000)) { 4836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("WARNING: vpx_memmove dest:0x%x src:0x%x count:%d\n", (int)dest, (int)src, count);) 484474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 485474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(VXWORKS) 4866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sp(get_my_tt, task_id_self(), 0, 0, 0, 0, 0, 0, 0, 0); 487474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vx_sleep(10000); 489474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 4906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 492474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 493474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return VPX_MEMMOVE_L(dest, src, count); 495474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 496474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_MANAGER 498474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 4996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstatic int vpx_mm_create_heap_memory() { 5006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int i_rv = 0; 501474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!g_mng_memory_allocated) { 503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if MM_DYNAMIC_MEMORY 5046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_p_mng_memory_raw = 5056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (unsigned char *)malloc(g_mm_memory_size + HMM_ADDR_ALIGN_UNIT); 5066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (g_p_mng_memory_raw) { 5086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_p_mng_memory = (unsigned char *)((((unsigned int)g_p_mng_memory_raw) + 5096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org HMM_ADDR_ALIGN_UNIT - 1) & 5106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org -(int)HMM_ADDR_ALIGN_UNIT); 5116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("[vpx][mm] total memory size:%d g_p_mng_memory_raw:0x%x g_p_mng_memory:0x%x\n" 5136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_mm_memory_size + HMM_ADDR_ALIGN_UNIT 5146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, (unsigned int)g_p_mng_memory_raw 5156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, (unsigned int)g_p_mng_memory);) 5166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else { 5176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("[vpx][mm] Couldn't allocate memory:%d for vpx memory manager.\n" 5186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_mm_memory_size);) 5196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org i_rv = -1; 5216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 522474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (g_p_mng_memory) 524474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 5256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org { 5266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int chunk_size = 0; 527474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_mng_memory_allocated = 1; 529474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org hmm_init(&hmm_d); 531474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org chunk_size = g_mm_memory_size >> SHIFT_HMM_ADDR_ALIGN_UNIT; 533474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org chunk_size -= DUMMY_END_BLOCK_BAUS; 535474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("[vpx][mm] memory size:%d for vpx memory manager. g_p_mng_memory:0x%x chunk_size:%d\n" 5376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_mm_memory_size 5386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, (unsigned int)g_p_mng_memory 5396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, chunk_size);) 540474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org hmm_new_chunk(&hmm_d, (void *)g_p_mng_memory, chunk_size); 5426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 543474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 544474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if MM_DYNAMIC_MEMORY 5456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org else { 5466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("[vpx][mm] Couldn't allocate memory:%d for vpx memory manager.\n" 5476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_mm_memory_size);) 548474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org i_rv = -1; 5506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 551474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 552474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 5536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 554474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return i_rv; 556474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 557474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstatic void *vpx_mm_realloc(void *memblk, size_t size) { 5596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *p_ret = NULL; 560474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (vpx_mm_create_heap_memory() < 0) { 5626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org _P(printf("[vpx][mm] ERROR vpx_mm_realloc() Couldn't create memory for Heap.\n");) 5636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else { 5646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int i_rv = 0; 5656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int old_num_aaus; 5666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int new_num_aaus; 5676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org old_num_aaus = hmm_true_size(memblk); 5696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org new_num_aaus = (size >> SHIFT_HMM_ADDR_ALIGN_UNIT) + 1; 5706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (old_num_aaus == new_num_aaus) { 5726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org p_ret = memblk; 5736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else { 5746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org i_rv = hmm_resize(&hmm_d, memblk, new_num_aaus); 5756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (i_rv == 0) { 5776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org p_ret = memblk; 5786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } else { 5796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* Error. Try to malloc and then copy data. */ 5806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *p_from_malloc; 581474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 582474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org new_num_aaus = (size >> SHIFT_HMM_ADDR_ALIGN_UNIT) + 1; 5836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org p_from_malloc = hmm_alloc(&hmm_d, new_num_aaus); 584474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (p_from_malloc) { 5866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org vpx_memcpy(p_from_malloc, memblk, size); 5876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org hmm_free(&hmm_d, memblk); 5886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org p_ret = p_from_malloc; 590474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 5916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 592474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 5936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 594474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return p_ret; 596474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 597474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*CONFIG_MEM_MANAGER*/ 598474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 599474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if USE_GLOBAL_FUNCTION_POINTERS 600474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# if CONFIG_MEM_TRACKER 601474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern int vpx_memory_tracker_set_functions(g_malloc_func g_malloc_l 6026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_calloc_func g_calloc_l 6036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_realloc_func g_realloc_l 6046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_free_func g_free_l 6056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memcpy_func g_memcpy_l 6066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memset_func g_memset_l 6076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memmove_func g_memmove_l); 608474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org# endif 609474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /*USE_GLOBAL_FUNCTION_POINTERS*/ 610474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgint vpx_mem_set_functions(g_malloc_func g_malloc_l 6116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_calloc_func g_calloc_l 6126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_realloc_func g_realloc_l 6136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_free_func g_free_l 6146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memcpy_func g_memcpy_l 6156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memset_func g_memset_l 6166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memmove_func g_memmove_l) { 617474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if USE_GLOBAL_FUNCTION_POINTERS 618474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 6196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* If use global functions is turned on then the 6206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org application must set the global functions before 6216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org it does anything else or vpx_mem will have 6226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unpredictable results. */ 6236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!g_func) { 6246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func = (struct GLOBAL_FUNC_POINTERS *) 6256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_malloc_l(sizeof(struct GLOBAL_FUNC_POINTERS)); 626474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 6276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (!g_func) { 6286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return -1; 629474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 6306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 631474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 632474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MEM_TRACKER 6336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org { 6346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int rv = 0; 6356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org rv = vpx_memory_tracker_set_functions(g_malloc_l 6366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_calloc_l 6376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_realloc_l 6386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_free_l 6396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memcpy_l 6406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memset_l 6416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org, g_memmove_l); 6426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (rv < 0) { 6446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return rv; 645474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 6466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 647474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 648474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 6496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_malloc = g_malloc_l; 6506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_calloc = g_calloc_l; 6516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_realloc = g_realloc_l; 6526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_free = g_free_l; 6536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_memcpy = g_memcpy_l; 6546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_memset = g_memset_l; 6556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func->g_memmove = g_memmove_l; 656474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 6576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 658474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 6596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_malloc_l; 6606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_calloc_l; 6616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_realloc_l; 6626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_free_l; 6636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_memcpy_l; 6646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_memset_l; 6656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (void)g_memmove_l; 6666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return -1; 667474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 668474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 669474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 6706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint vpx_mem_unset_functions() { 671474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if USE_GLOBAL_FUNCTION_POINTERS 672474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 6736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if (g_func) { 6746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_free_func temp_free = g_func->g_free; 6756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org temp_free(g_func); 6766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org g_func = NULL; 6776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } 678474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 679474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 6806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 681474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 682