mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
184 lines
4.8 KiB
C
184 lines
4.8 KiB
C
/** @file
|
|
Provides services for symbols.
|
|
|
|
Copyright (c) 2018, Download-Fritz. All rights reserved.<BR>
|
|
This program and the accompanying materials are licensed and made available
|
|
under the terms and conditions of the BSD License which accompanies this
|
|
distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php.
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
**/
|
|
|
|
#include <Uefi.h>
|
|
|
|
#include <IndustryStandard/AppleMachoImage.h>
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/OcGuardLib.h>
|
|
#include <Library/OcMachoLib.h>
|
|
|
|
#include "OcMachoLibInternal.h"
|
|
|
|
BOOLEAN
|
|
MachoSymbolIsDefined (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST MACH_NLIST_ANY *Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
MachoSymbolIsDefined32 (&Symbol->Symbol32) :
|
|
MachoSymbolIsDefined64 (&Symbol->Symbol64);
|
|
}
|
|
|
|
BOOLEAN
|
|
MachoSymbolIsLocalDefined (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST MACH_NLIST_ANY *Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
MachoSymbolIsLocalDefined32 (Context, &Symbol->Symbol32) :
|
|
MachoSymbolIsLocalDefined64 (Context, &Symbol->Symbol64);
|
|
}
|
|
|
|
MACH_NLIST_ANY *
|
|
MachoGetLocalDefinedSymbolByName (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST CHAR8 *Name
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
(MACH_NLIST_ANY *)MachoGetLocalDefinedSymbolByName32 (Context, Name) :
|
|
(MACH_NLIST_ANY *)MachoGetLocalDefinedSymbolByName64 (Context, Name);
|
|
}
|
|
|
|
MACH_NLIST_ANY *
|
|
MachoGetSymbolByIndex (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN UINT32 Index
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
(MACH_NLIST_ANY *)MachoGetSymbolByIndex32 (Context, Index) :
|
|
(MACH_NLIST_ANY *)MachoGetSymbolByIndex64 (Context, Index);
|
|
}
|
|
|
|
CONST CHAR8 *
|
|
MachoGetSymbolName (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST MACH_NLIST_ANY *Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
MachoGetSymbolName32 (Context, &Symbol->Symbol32) :
|
|
MachoGetSymbolName64 (Context, &Symbol->Symbol64);
|
|
}
|
|
|
|
CONST CHAR8 *
|
|
MachoGetIndirectSymbolName (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST MACH_NLIST_ANY *Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
MachoGetIndirectSymbolName32 (Context, &Symbol->Symbol32) :
|
|
MachoGetIndirectSymbolName64 (Context, &Symbol->Symbol64);
|
|
}
|
|
|
|
BOOLEAN
|
|
MachoIsSymbolValueInRange (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST MACH_NLIST_ANY *Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
MachoIsSymbolValueInRange32 (Context, &Symbol->Symbol32) :
|
|
MachoIsSymbolValueInRange64 (Context, &Symbol->Symbol64);
|
|
}
|
|
|
|
BOOLEAN
|
|
MachoGetSymbolByExternRelocationOffset (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN UINT64 Address,
|
|
OUT MACH_NLIST_ANY **Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
if (Context->Is32Bit) {
|
|
ASSERT (Address < MAX_UINT32);
|
|
}
|
|
|
|
return Context->Is32Bit ?
|
|
MachoGetSymbolByExternRelocationOffset32 (Context, (UINT32)Address, (MACH_NLIST **)Symbol) :
|
|
MachoGetSymbolByExternRelocationOffset64 (Context, Address, (MACH_NLIST_64 **)Symbol);
|
|
}
|
|
|
|
BOOLEAN
|
|
MachoRelocateSymbol (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN UINT64 LinkAddress,
|
|
IN OUT MACH_NLIST_ANY *Symbol
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
if (Context->Is32Bit) {
|
|
ASSERT (LinkAddress < MAX_UINT32);
|
|
}
|
|
|
|
return Context->Is32Bit ?
|
|
MachoRelocateSymbol32 (Context, (UINT32)LinkAddress, &Symbol->Symbol32) :
|
|
MachoRelocateSymbol64 (Context, LinkAddress, &Symbol->Symbol64);
|
|
}
|
|
|
|
BOOLEAN
|
|
MachoSymbolGetFileOffset (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN CONST MACH_NLIST_ANY *Symbol,
|
|
OUT UINT32 *FileOffset,
|
|
OUT UINT32 *MaxSize OPTIONAL
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
|
|
return Context->Is32Bit ?
|
|
MachoSymbolGetFileOffset32 (Context, &Symbol->Symbol32, FileOffset, MaxSize) :
|
|
MachoSymbolGetFileOffset64 (Context, &Symbol->Symbol64, FileOffset, MaxSize);
|
|
}
|
|
|
|
BOOLEAN
|
|
MachoSymbolGetDirectFileOffset (
|
|
IN OUT OC_MACHO_CONTEXT *Context,
|
|
IN UINT64 Address,
|
|
OUT UINT32 *FileOffset,
|
|
OUT UINT32 *MaxSize OPTIONAL
|
|
)
|
|
{
|
|
ASSERT (Context != NULL);
|
|
if (Context->Is32Bit) {
|
|
ASSERT (Address < MAX_UINT32);
|
|
}
|
|
|
|
return Context->Is32Bit ?
|
|
InternalMachoSymbolGetDirectFileOffset32 (Context, (UINT32)Address, FileOffset, MaxSize) :
|
|
InternalMachoSymbolGetDirectFileOffset64 (Context, Address, FileOffset, MaxSize);
|
|
}
|