forked from len0rd/rockbox
buflib: Add malloc-backed buflib
This is intended for improving the effectiveness of tools like ASAN when debugging memory errors in the sim. It's not meant to be a serious allocator for hosted targets. Enable it by changing the buflib backend in config.h. Change-Id: I0cf23cefa47ee35dede7b49e0e5b72dac60e8d3e
This commit is contained in:
parent
f2f198663e
commit
92565e9246
5 changed files with 309 additions and 0 deletions
53
firmware/include/buflib_malloc.h
Normal file
53
firmware/include/buflib_malloc.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2023 Aidan MacDonald
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#ifndef _BUFLIB_MALLOC_H_
|
||||
#define _BUFLIB_MALLOC_H_
|
||||
|
||||
#ifndef _BUFLIB_H_
|
||||
# error "include buflib.h instead"
|
||||
#endif
|
||||
|
||||
struct buflib_malloc_handle
|
||||
{
|
||||
void *data;
|
||||
void *user;
|
||||
size_t size;
|
||||
unsigned int pin_count;
|
||||
struct buflib_callbacks *ops;
|
||||
};
|
||||
|
||||
struct buflib_context
|
||||
{
|
||||
struct buflib_malloc_handle *allocs;
|
||||
size_t num_allocs;
|
||||
|
||||
void *buf;
|
||||
size_t bufsize;
|
||||
};
|
||||
|
||||
#ifndef BUFLIB_DEBUG_GET_DATA
|
||||
static inline void *buflib_get_data(struct buflib_context *ctx, int handle)
|
||||
{
|
||||
return ctx->allocs[handle - 1].user;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _BUFLIB_MALLOC_H_ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue