Rebecca Cran b4e2cf092a BaseTools: Source/C/Common: Fix doc block locations and convert to Doxygen
Move the documentation blocks from between the parameter list and function
body to above the function.

Convert all the documentation blocks to Doxygen format.

Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
2023-03-24 14:52:14 +00:00

164 lines
4.5 KiB
C

/** @file
Header file for memory allocation tracking functions.
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _MYALLOC_H_
#define _MYALLOC_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Common/BaseTypes.h>
//
// Default operation is to use the memory allocation tracking functions.
// To over-ride add "#define USE_MYALLOC 0" to your program header and/or
// source files as needed. Or, just do not include this header file in
// your project.
//
#ifndef USE_MYALLOC
#define USE_MYALLOC 1
#endif
#if USE_MYALLOC
//
// Replace C library allocation routines with MyAlloc routines.
//
#define malloc(size) MyAlloc ((size), __FILE__, __LINE__)
#define calloc(count, size) MyAlloc ((count) * (size), __FILE__, __LINE__)
#define realloc(ptr, size) MyRealloc ((ptr), (size), __FILE__, __LINE__)
#define free(ptr) MyFree ((ptr), __FILE__, __LINE__)
#define alloc_check(final) MyCheck ((final), __FILE__, __LINE__)
//
// Structure for checking/tracking memory allocations.
//
typedef struct MyAllocStruct {
UINTN Cksum;
struct MyAllocStruct *Next;
UINTN Line;
UINTN Size;
UINT8 *File;
UINT8 *Buffer;
} MY_ALLOC_STRUCT;
//
// Cksum := (UINTN)This + (UINTN)Next + Line + Size + (UINTN)File +
// (UINTN)Buffer;
//
// Next := Pointer to next allocation structure in the list.
//
// Line := __LINE__
//
// Size := Size of allocation request.
//
// File := Pointer to __FILE__ string stored immediately following
// MY_ALLOC_STRUCT in memory.
//
// Buffer := Pointer to UINT32 aligned storage immediately following
// the NULL terminated __FILE__ string. This is UINT32
// aligned because the underflow signature is 32-bits and
// this will place the first caller address on a 64-bit
// boundary.
//
//
// Signatures used to check for buffer overflow/underflow conditions.
//
#define MYALLOC_HEAD_MAGIK 0xBADFACED
#define MYALLOC_TAIL_MAGIK 0xDEADBEEF
/**
Check for corruptions in the allocated memory chain. If a corruption
is detection program operation stops w/ an exit(1) call.
@param Final When FALSE, MyCheck() returns if the allocated memory chain
has not been corrupted. When TRUE, MyCheck() returns if there
are no un-freed allocations. If there are un-freed allocations,
they are displayed and exit(1) is called.
@param File Set to __FILE__ by macro expansion.
@param Line Set to __LINE__ by macro expansion.
**/
VOID
MyCheck (
BOOLEAN Final,
UINT8 File[],
UINTN Line
)
;
/**
Allocate a new link in the allocation chain along with enough storage
for the File[] string, requested Size and alignment overhead. If
memory cannot be allocated or the allocation chain has been corrupted,
exit(1) will be called.
@param Size Number of bytes (UINT8) requested by the called.
Size cannot be zero.
@param File Set to __FILE__ by macro expansion.
@param Line Set to __LINE__ by macro expansion.
@return Pointer to the caller's buffer.
**/
VOID *
MyAlloc (
UINTN Size,
UINT8 File[],
UINTN Line
)
;
/**
This does a MyAlloc(), memcpy() and MyFree(). There is no optimization
for shrinking or expanding buffers. An invalid parameter will cause
MyRealloc() to fail with a call to exit(1).
@param Ptr Pointer to the caller's buffer to be re-allocated.
Ptr cannot be NULL.
@param Size Size of new buffer. Size cannot be zero.
@param File Set to __FILE__ by macro expansion.
@param Line Set to __LINE__ by macro expansion.
@return Pointer to new caller's buffer.
**/
VOID *
MyRealloc (
VOID *Ptr,
UINTN Size,
UINT8 File[],
UINTN Line
)
;
/**
Release a previously allocated buffer. Invalid parameters will cause
MyFree() to fail with an exit(1) call.
@param Ptr Pointer to the caller's buffer to be freed.
A NULL pointer will be ignored.
@param File Set to __FILE__ by macro expansion.
@param Line Set to __LINE__ by macro expansion.
**/
VOID
MyFree (
VOID *Ptr,
UINT8 File[],
UINTN Line
)
;
#else /* USE_MYALLOC */
//
// Nothing to do when USE_MYALLOC is zero.
//
#define alloc_check(final)
#endif /* USE_MYALLOC */
#endif /* _MYALLOC_H_ */
/* eof - MyAlloc.h */