blob: 3c782807e2498b3476cbd73e1f0c42b886e417f4 [file] [log] [blame]
/** @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