xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/elf-fdpic.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* elf-fdpic.h: FDPIC ELF load map
2*53ee8cc1Swenshuai.xi  *
3*53ee8cc1Swenshuai.xi  * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
4*53ee8cc1Swenshuai.xi  * Written by David Howells (dhowells@redhat.com)
5*53ee8cc1Swenshuai.xi  *
6*53ee8cc1Swenshuai.xi  * This program is free software; you can redistribute it and/or
7*53ee8cc1Swenshuai.xi  * modify it under the terms of the GNU General Public License
8*53ee8cc1Swenshuai.xi  * as published by the Free Software Foundation; either version
9*53ee8cc1Swenshuai.xi  * 2 of the License, or (at your option) any later version.
10*53ee8cc1Swenshuai.xi  */
11*53ee8cc1Swenshuai.xi 
12*53ee8cc1Swenshuai.xi #ifndef _LINUX_ELF_FDPIC_H
13*53ee8cc1Swenshuai.xi #define _LINUX_ELF_FDPIC_H
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi #include <linux/elf.h>
16*53ee8cc1Swenshuai.xi 
17*53ee8cc1Swenshuai.xi #define PT_GNU_STACK    (PT_LOOS + 0x474e551)
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi /* segment mappings for ELF FDPIC libraries/executables/interpreters */
20*53ee8cc1Swenshuai.xi struct elf32_fdpic_loadseg {
21*53ee8cc1Swenshuai.xi 	Elf32_Addr	addr;		/* core address to which mapped */
22*53ee8cc1Swenshuai.xi 	Elf32_Addr	p_vaddr;	/* VMA recorded in file */
23*53ee8cc1Swenshuai.xi 	Elf32_Word	p_memsz;	/* allocation size recorded in file */
24*53ee8cc1Swenshuai.xi };
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi struct elf32_fdpic_loadmap {
27*53ee8cc1Swenshuai.xi 	Elf32_Half	version;	/* version of these structures, just in case... */
28*53ee8cc1Swenshuai.xi 	Elf32_Half	nsegs;		/* number of segments */
29*53ee8cc1Swenshuai.xi 	struct elf32_fdpic_loadseg segs[];
30*53ee8cc1Swenshuai.xi };
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi #define ELF32_FDPIC_LOADMAP_VERSION	0x0000
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi /*
35*53ee8cc1Swenshuai.xi  * binfmt binary parameters structure
36*53ee8cc1Swenshuai.xi  */
37*53ee8cc1Swenshuai.xi struct elf_fdpic_params {
38*53ee8cc1Swenshuai.xi 	struct elfhdr			hdr;		/* ref copy of ELF header */
39*53ee8cc1Swenshuai.xi 	struct elf_phdr			*phdrs;		/* ref copy of PT_PHDR table */
40*53ee8cc1Swenshuai.xi 	struct elf32_fdpic_loadmap	*loadmap;	/* loadmap to be passed to userspace */
41*53ee8cc1Swenshuai.xi 	unsigned long			elfhdr_addr;	/* mapped ELF header user address */
42*53ee8cc1Swenshuai.xi 	unsigned long			ph_addr;	/* mapped PT_PHDR user address */
43*53ee8cc1Swenshuai.xi 	unsigned long			map_addr;	/* mapped loadmap user address */
44*53ee8cc1Swenshuai.xi 	unsigned long			entry_addr;	/* mapped entry user address */
45*53ee8cc1Swenshuai.xi 	unsigned long			stack_size;	/* stack size requested (PT_GNU_STACK) */
46*53ee8cc1Swenshuai.xi 	unsigned long			dynamic_addr;	/* mapped PT_DYNAMIC user address */
47*53ee8cc1Swenshuai.xi 	unsigned long			load_addr;	/* user address at which to map binary */
48*53ee8cc1Swenshuai.xi 	unsigned long			flags;
49*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_ARRANGEMENT	0x0000000f	/* PT_LOAD arrangement flags */
50*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_INDEPENDENT	0x00000000	/* PT_LOADs can be put anywhere */
51*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_HONOURVADDR	0x00000001	/* PT_LOAD.vaddr must be honoured */
52*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_CONSTDISP	0x00000002	/* PT_LOADs require constant
53*53ee8cc1Swenshuai.xi 							 * displacement */
54*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_CONTIGUOUS	0x00000003	/* PT_LOADs should be contiguous */
55*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_EXEC_STACK	0x00000010	/* T if stack to be executable */
56*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_NOEXEC_STACK	0x00000020	/* T if stack not to be executable */
57*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_EXECUTABLE	0x00000040	/* T if this object is the executable */
58*53ee8cc1Swenshuai.xi #define ELF_FDPIC_FLAG_PRESENT		0x80000000	/* T if this object is present */
59*53ee8cc1Swenshuai.xi };
60*53ee8cc1Swenshuai.xi 
61*53ee8cc1Swenshuai.xi #ifdef CONFIG_MMU
62*53ee8cc1Swenshuai.xi extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params,
63*53ee8cc1Swenshuai.xi 				      struct elf_fdpic_params *interp_params,
64*53ee8cc1Swenshuai.xi 				      unsigned long *start_stack,
65*53ee8cc1Swenshuai.xi 				      unsigned long *start_brk);
66*53ee8cc1Swenshuai.xi #endif
67*53ee8cc1Swenshuai.xi 
68*53ee8cc1Swenshuai.xi #endif /* _LINUX_ELF_FDPIC_H */
69