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