mirror of https://github.com/acidanthera/audk.git
109 lines
2.3 KiB
C
109 lines
2.3 KiB
C
/** @file
|
|
ELF library
|
|
|
|
Copyright (c) 2019 - 2021, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef EFI_LIB_INTERNAL_H_
|
|
#define EFI_LIB_INTERNAL_H_
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include "ElfLib.h"
|
|
#include "ElfCommon.h"
|
|
#include "Elf32.h"
|
|
#include "Elf64.h"
|
|
|
|
#define ELF_NEXT_ENTRY(EntryType, Current, EntrySize) \
|
|
((EntryType *) ((UINT8 *)Current + EntrySize))
|
|
|
|
/**
|
|
Return the section header specified by Index.
|
|
|
|
@param ImageBase The image base.
|
|
@param Index The section index.
|
|
|
|
@return Pointer to the section header.
|
|
**/
|
|
Elf32_Shdr *
|
|
GetElf32SectionByIndex (
|
|
IN UINT8 *ImageBase,
|
|
IN UINT32 Index
|
|
);
|
|
|
|
/**
|
|
Return the section header specified by Index.
|
|
|
|
@param ImageBase The image base.
|
|
@param Index The section index.
|
|
|
|
@return Pointer to the section header.
|
|
**/
|
|
Elf64_Shdr *
|
|
GetElf64SectionByIndex (
|
|
IN UINT8 *ImageBase,
|
|
IN UINT32 Index
|
|
);
|
|
|
|
/**
|
|
Return the segment header specified by Index.
|
|
|
|
@param ImageBase The image base.
|
|
@param Index The segment index.
|
|
|
|
@return Pointer to the segment header.
|
|
**/
|
|
Elf32_Phdr *
|
|
GetElf32SegmentByIndex (
|
|
IN UINT8 *ImageBase,
|
|
IN UINT32 Index
|
|
);
|
|
|
|
/**
|
|
Return the segment header specified by Index.
|
|
|
|
@param ImageBase The image base.
|
|
@param Index The segment index.
|
|
|
|
@return Pointer to the segment header.
|
|
**/
|
|
Elf64_Phdr *
|
|
GetElf64SegmentByIndex (
|
|
IN UINT8 *ImageBase,
|
|
IN UINT32 Index
|
|
);
|
|
|
|
/**
|
|
Load ELF image which has 32-bit architecture
|
|
|
|
@param[in] ElfCt ELF image context pointer.
|
|
|
|
@retval EFI_SUCCESS ELF binary is loaded successfully.
|
|
@retval Others Loading ELF binary fails.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
LoadElf32Image (
|
|
IN ELF_IMAGE_CONTEXT *ElfCt
|
|
);
|
|
|
|
/**
|
|
Load ELF image which has 64-bit architecture
|
|
|
|
@param[in] ImageBase Memory address of an image.
|
|
@param[out] EntryPoint The entry point of loaded ELF image.
|
|
|
|
@retval EFI_SUCCESS ELF binary is loaded successfully.
|
|
@retval Others Loading ELF binary fails.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
LoadElf64Image (
|
|
IN ELF_IMAGE_CONTEXT *ElfCt
|
|
);
|
|
|
|
#endif
|