OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
PrelinkedKext.c File Reference
#include <Base.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/OcAppleKernelLib.h>
#include <Library/OcMachoLib.h>
#include <Library/OcStringLib.h>
#include <Library/OcXmlLib.h>
#include "PrelinkedInternal.h"

Go to the source code of this file.

Functions

STATIC PRELINKED_KEXTInternalCreatePrelinkedKext (IN OUT PRELINKED_CONTEXT *Prelinked OPTIONAL, IN XML_NODE *KextPlist, IN CONST CHAR8 *Identifier OPTIONAL, IN BOOLEAN Is32Bit)
 
STATIC VOID InternalScanCurrentPrelinkedKextLinkInfo (IN OUT PRELINKED_KEXT *Kext, IN PRELINKED_CONTEXT *Context)
 
STATIC EFI_STATUS InternalScanBuildLinkedSymbolTable (IN OUT PRELINKED_KEXT *Kext, IN PRELINKED_CONTEXT *Context)
 
STATIC EFI_STATUS InternalScanBuildLinkedVtables (IN OUT PRELINKED_KEXT *Kext, IN PRELINKED_CONTEXT *Context)
 
STATIC UINT32 InternalGetLinkBufferSize (IN OUT PRELINKED_KEXT *Kext)
 
STATIC EFI_STATUS InternalUpdateLinkBuffer (IN OUT PRELINKED_KEXT *Kext, IN OUT PRELINKED_CONTEXT *Context)
 
STATIC EFI_STATUS InternalInsertPrelinkedKextDependency (IN OUT PRELINKED_KEXT *Kext, IN OUT PRELINKED_CONTEXT *Context, IN UINT32 DependencyIndex, IN OUT PRELINKED_KEXT *DependencyKext)
 
PRELINKED_KEXTInternalNewPrelinkedKext (IN OC_MACHO_CONTEXT *Context, IN XML_NODE *KextPlist)
 
VOID InternalFreePrelinkedKext (IN PRELINKED_KEXT *Kext)
 
PRELINKED_KEXTInternalCachedPrelinkedKext (IN OUT PRELINKED_CONTEXT *Prelinked, IN CONST CHAR8 *Identifier)
 
EFI_STATUS InternalDropCachedPrelinkedKext (IN OUT PRELINKED_CONTEXT *Prelinked, IN CONST CHAR8 *Identifier)
 
PRELINKED_KEXTInternalCachedPrelinkedKernel (IN OUT PRELINKED_CONTEXT *Prelinked)
 
PRELINKED_KEXTInternalGetQuirkDependencyKext (IN CONST CHAR8 *DependencyId, IN OUT PRELINKED_CONTEXT *Context)
 
EFI_STATUS InternalScanPrelinkedKext (IN OUT PRELINKED_KEXT *Kext, IN OUT PRELINKED_CONTEXT *Context, IN BOOLEAN Dependency)
 
VOID InternalUnlockContextKexts (IN PRELINKED_CONTEXT *Context)
 
PRELINKED_KEXTInternalLinkPrelinkedKext (IN OUT PRELINKED_CONTEXT *Context, IN OUT OC_MACHO_CONTEXT *Executable, IN XML_NODE *PlistRoot, IN UINT64 LoadAddress, IN UINT64 KmodAddress, IN UINT64 FileOffset)
 

Detailed Description

Copyright (C) 2019, vit9696. All rights reserved.

All rights reserved.

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.

Definition in file PrelinkedKext.c.

Function Documentation

◆ InternalCachedPrelinkedKernel()

PRELINKED_KEXT * InternalCachedPrelinkedKernel ( IN OUT PRELINKED_CONTEXT * Prelinked)

Gets cached kernel PRELINKED_KEXT from PRELINKED_CONTEXT.

Definition at line 797 of file PrelinkedKext.c.

◆ InternalCachedPrelinkedKext()

PRELINKED_KEXT * InternalCachedPrelinkedKext ( IN OUT PRELINKED_CONTEXT * Prelinked,
IN CONST CHAR8 * Identifier )

Gets cached PRELINKED_KEXT from PRELINKED_CONTEXT.

Definition at line 700 of file PrelinkedKext.c.

◆ InternalCreatePrelinkedKext()

STATIC PRELINKED_KEXT * InternalCreatePrelinkedKext ( IN OUT PRELINKED_CONTEXT *Prelinked OPTIONAL,
IN XML_NODE * KextPlist,
IN CONST CHAR8 *Identifier OPTIONAL,
IN BOOLEAN Is32Bit )

Creates new uncached PRELINKED_KEXT from pool.

Parameters
[in]PrelinkedInitialises PRELINKED_KEXT from prelinked buffer.
[in]KextPlistPlist root node with Kext Information.
[in]IdentifierAbort on CFBundleIdentifier mismatch.
Returns
allocated PRELINKED_KEXT or NULL.

Definition at line 39 of file PrelinkedKext.c.

◆ InternalDropCachedPrelinkedKext()

EFI_STATUS InternalDropCachedPrelinkedKext ( IN OUT PRELINKED_CONTEXT * Prelinked,
IN CONST CHAR8 * Identifier )

Drops cached PRELINKED_KEXT from PRELINKED_CONTEXT.

Definition at line 751 of file PrelinkedKext.c.

◆ InternalFreePrelinkedKext()

VOID InternalFreePrelinkedKext ( IN PRELINKED_KEXT * Kext)

Frees PRELINKED_KEXT.

Definition at line 682 of file PrelinkedKext.c.

◆ InternalGetLinkBufferSize()

STATIC UINT32 InternalGetLinkBufferSize ( IN OUT PRELINKED_KEXT * Kext)

Definition at line 575 of file PrelinkedKext.c.

◆ InternalGetQuirkDependencyKext()

PRELINKED_KEXT * InternalGetQuirkDependencyKext ( IN CONST CHAR8 * DependencyId,
IN OUT PRELINKED_CONTEXT * Context )

Definition at line 946 of file PrelinkedKext.c.

◆ InternalInsertPrelinkedKextDependency()

STATIC EFI_STATUS InternalInsertPrelinkedKextDependency ( IN OUT PRELINKED_KEXT * Kext,
IN OUT PRELINKED_CONTEXT * Context,
IN UINT32 DependencyIndex,
IN OUT PRELINKED_KEXT * DependencyKext )

Definition at line 640 of file PrelinkedKext.c.

◆ InternalLinkPrelinkedKext()

PRELINKED_KEXT * InternalLinkPrelinkedKext ( IN OUT PRELINKED_CONTEXT * Context,
IN OUT OC_MACHO_CONTEXT * Executable,
IN XML_NODE * PlistRoot,
IN UINT64 LoadAddress,
IN UINT64 KmodAddress,
IN UINT64 FileOffset )

Link executable within current prelink context.

Parameters
[in,out]ContextPrelinked context.
[in,out]ExecutableKext executable copied to prelinked.
[in]PlistRootCurrent kext info.plist.
[in]LoadAddressKext load address.
[in]KmodAddressKext kmod address.
[in]FileOffsetThe file offset of the first segment.
Returns
prelinked kext to be inserted into PRELINKED_CONTEXT.

Definition at line 1146 of file PrelinkedKext.c.

◆ InternalNewPrelinkedKext()

PRELINKED_KEXT * InternalNewPrelinkedKext ( IN OC_MACHO_CONTEXT * Context,
IN XML_NODE * KextPlist )

Creates new PRELINKED_KEXT from OC_MACHO_CONTEXT.

Definition at line 665 of file PrelinkedKext.c.

◆ InternalScanBuildLinkedSymbolTable()

STATIC EFI_STATUS InternalScanBuildLinkedSymbolTable ( IN OUT PRELINKED_KEXT * Kext,
IN PRELINKED_CONTEXT * Context )

Definition at line 342 of file PrelinkedKext.c.

◆ InternalScanBuildLinkedVtables()

STATIC EFI_STATUS InternalScanBuildLinkedVtables ( IN OUT PRELINKED_KEXT * Kext,
IN PRELINKED_CONTEXT * Context )

Definition at line 480 of file PrelinkedKext.c.

◆ InternalScanCurrentPrelinkedKextLinkInfo()

STATIC VOID InternalScanCurrentPrelinkedKextLinkInfo ( IN OUT PRELINKED_KEXT * Kext,
IN PRELINKED_CONTEXT * Context )

Definition at line 288 of file PrelinkedKext.c.

◆ InternalScanPrelinkedKext()

EFI_STATUS InternalScanPrelinkedKext ( IN OUT PRELINKED_KEXT * Kext,
IN OUT PRELINKED_CONTEXT * Context,
IN BOOLEAN Dependency )

Scan PRELINKED_KEXT for dependencies.

Definition at line 978 of file PrelinkedKext.c.

◆ InternalUnlockContextKexts()

VOID InternalUnlockContextKexts ( IN PRELINKED_CONTEXT * Context)

Unlock all context dependency kexts by unsetting Processed flag.

Parameters
[in]ContextPrelinked context.

Definition at line 1132 of file PrelinkedKext.c.

◆ InternalUpdateLinkBuffer()

STATIC EFI_STATUS InternalUpdateLinkBuffer ( IN OUT PRELINKED_KEXT * Kext,
IN OUT PRELINKED_CONTEXT * Context )

Definition at line 600 of file PrelinkedKext.c.