Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /* FDPIC ELF load map
0003  *
0004  * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
0005  * Written by David Howells (dhowells@redhat.com)
0006  */
0007 
0008 #ifndef _LINUX_ELF_FDPIC_H
0009 #define _LINUX_ELF_FDPIC_H
0010 
0011 #include <uapi/linux/elf-fdpic.h>
0012 
0013 /*
0014  * binfmt binary parameters structure
0015  */
0016 struct elf_fdpic_params {
0017     struct elfhdr           hdr;        /* ref copy of ELF header */
0018     struct elf_phdr         *phdrs;     /* ref copy of PT_PHDR table */
0019     struct elf32_fdpic_loadmap  *loadmap;   /* loadmap to be passed to userspace */
0020     unsigned long           elfhdr_addr;    /* mapped ELF header user address */
0021     unsigned long           ph_addr;    /* mapped PT_PHDR user address */
0022     unsigned long           map_addr;   /* mapped loadmap user address */
0023     unsigned long           entry_addr; /* mapped entry user address */
0024     unsigned long           stack_size; /* stack size requested (PT_GNU_STACK) */
0025     unsigned long           dynamic_addr;   /* mapped PT_DYNAMIC user address */
0026     unsigned long           load_addr;  /* user address at which to map binary */
0027     unsigned long           flags;
0028 #define ELF_FDPIC_FLAG_ARRANGEMENT  0x0000000f  /* PT_LOAD arrangement flags */
0029 #define ELF_FDPIC_FLAG_INDEPENDENT  0x00000000  /* PT_LOADs can be put anywhere */
0030 #define ELF_FDPIC_FLAG_HONOURVADDR  0x00000001  /* PT_LOAD.vaddr must be honoured */
0031 #define ELF_FDPIC_FLAG_CONSTDISP    0x00000002  /* PT_LOADs require constant
0032                              * displacement */
0033 #define ELF_FDPIC_FLAG_CONTIGUOUS   0x00000003  /* PT_LOADs should be contiguous */
0034 #define ELF_FDPIC_FLAG_EXEC_STACK   0x00000010  /* T if stack to be executable */
0035 #define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020  /* T if stack not to be executable */
0036 #define ELF_FDPIC_FLAG_EXECUTABLE   0x00000040  /* T if this object is the executable */
0037 #define ELF_FDPIC_FLAG_PRESENT      0x80000000  /* T if this object is present */
0038 };
0039 
0040 #ifdef CONFIG_MMU
0041 extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params,
0042                       struct elf_fdpic_params *interp_params,
0043                       unsigned long *start_stack,
0044                       unsigned long *start_brk);
0045 #endif
0046 
0047 #endif /* _LINUX_ELF_FDPIC_H */