elf-fdpic.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* FDPIC ELF load map
  2. *
  3. * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
  4. * Written by David Howells (dhowells@redhat.com)
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version
  9. * 2 of the License, or (at your option) any later version.
  10. */
  11. #ifndef _LINUX_ELF_FDPIC_H
  12. #define _LINUX_ELF_FDPIC_H
  13. #include <uapi/linux/elf-fdpic.h>
  14. /*
  15. * binfmt binary parameters structure
  16. */
  17. struct elf_fdpic_params {
  18. struct elfhdr hdr; /* ref copy of ELF header */
  19. struct elf_phdr *phdrs; /* ref copy of PT_PHDR table */
  20. struct elf32_fdpic_loadmap *loadmap; /* loadmap to be passed to userspace */
  21. unsigned long elfhdr_addr; /* mapped ELF header user address */
  22. unsigned long ph_addr; /* mapped PT_PHDR user address */
  23. unsigned long map_addr; /* mapped loadmap user address */
  24. unsigned long entry_addr; /* mapped entry user address */
  25. unsigned long stack_size; /* stack size requested (PT_GNU_STACK) */
  26. unsigned long dynamic_addr; /* mapped PT_DYNAMIC user address */
  27. unsigned long load_addr; /* user address at which to map binary */
  28. unsigned long flags;
  29. #define ELF_FDPIC_FLAG_ARRANGEMENT 0x0000000f /* PT_LOAD arrangement flags */
  30. #define ELF_FDPIC_FLAG_INDEPENDENT 0x00000000 /* PT_LOADs can be put anywhere */
  31. #define ELF_FDPIC_FLAG_HONOURVADDR 0x00000001 /* PT_LOAD.vaddr must be honoured */
  32. #define ELF_FDPIC_FLAG_CONSTDISP 0x00000002 /* PT_LOADs require constant
  33. * displacement */
  34. #define ELF_FDPIC_FLAG_CONTIGUOUS 0x00000003 /* PT_LOADs should be contiguous */
  35. #define ELF_FDPIC_FLAG_EXEC_STACK 0x00000010 /* T if stack to be executable */
  36. #define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020 /* T if stack not to be executable */
  37. #define ELF_FDPIC_FLAG_EXECUTABLE 0x00000040 /* T if this object is the executable */
  38. #define ELF_FDPIC_FLAG_PRESENT 0x80000000 /* T if this object is present */
  39. };
  40. #ifdef CONFIG_MMU
  41. extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params,
  42. struct elf_fdpic_params *interp_params,
  43. unsigned long *start_stack,
  44. unsigned long *start_brk);
  45. #endif
  46. #endif /* _LINUX_ELF_FDPIC_H */