elf.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. */
  6. #ifndef _ELF_H
  7. #define _ELF_H
  8. #include <stdint.h>
  9. #define ELF_MAGIC 0x464c457fu
  10. #define EM_ARM 0x28u
  11. #define EF_ARM_ABI_FLOAT_HARD 0x00000400u
  12. #define PT_LOAD 0x00000001u
  13. #pragma pack(push, 1)
  14. struct elf_header {
  15. uint32_t magic;
  16. uint8_t arch_class;
  17. uint8_t endianness;
  18. uint8_t version;
  19. uint8_t abi;
  20. uint8_t abi_version;
  21. uint8_t _pad[7];
  22. uint16_t type;
  23. uint16_t machine;
  24. uint32_t version2;
  25. };
  26. struct elf32_header {
  27. struct elf_header common;
  28. uint32_t entry;
  29. uint32_t ph_offset;
  30. uint32_t sh_offset;
  31. uint32_t flags;
  32. uint16_t eh_size;
  33. uint16_t ph_entry_size;
  34. uint16_t ph_num;
  35. uint16_t sh_entry_size;
  36. uint16_t sh_num;
  37. uint16_t sh_str_index;
  38. };
  39. struct elf32_ph_entry {
  40. uint32_t type;
  41. uint32_t offset;
  42. uint32_t vaddr;
  43. uint32_t paddr;
  44. uint32_t filez;
  45. uint32_t memsz;
  46. uint32_t flags;
  47. uint32_t align;
  48. };
  49. #pragma pack(pop)
  50. #endif