text: /** @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
  