The binfmt_flat_fdpic code has a number of 32-bit specific data structures associated with it. Extend it to be able to support and be used on 64-bit systems as well. The new code defines a number of key 64-bit variants of the core elf-fdpic data structures - along side the existing 32-bit sized ones. A common set of generic named structures are defined to be either the 32-bit or 64-bit ones as required at compile time. This is a similar technique to that used in the ELF binfmt loader. For example: elf_fdpic_loadseg is either elf32_fdpic_loadseg or elf64_fdpic_loadseg elf_fdpic_loadmap is either elf32_fdpic_loadmap or elf64_fdpic_loadmap the choice based on ELFCLASS32 or ELFCLASS64.
Showing the changes to include/uapi (1 of 3 files). Show all
Unified · Split
| @@ -32,4 +32,19 @@ struct elf32_fdpic_loadmap { · 31 unmodified lines | ||
| 32 | 32 | |
| 33 | 33 | #define ELF32_FDPIC_LOADMAP_VERSION 0x0000 |
| 34 | 34 | |
| 35 | +/* segment mappings for ELF FDPIC libraries/executables/interpreters */ | |
| 36 | +struct elf64_fdpic_loadseg { | |
| 37 | + Elf64_Addr addr; /* core address to which mapped */ | |
| 38 | + Elf64_Addr p_vaddr; /* VMA recorded in file */ | |
| 39 | + Elf64_Word p_memsz; /* allocation size recorded in file */ | |
| 40 | +}; | |
| 41 | + | |
| 42 | +struct elf64_fdpic_loadmap { | |
| 43 | + Elf64_Half version; /* version of these structures, just in case... */ | |
| 44 | + Elf64_Half nsegs; /* number of segments */ | |
| 45 | + struct elf64_fdpic_loadseg segs[]; | |
| 46 | +}; | |
| 47 | + | |
| 48 | +#define ELF64_FDPIC_LOADMAP_VERSION 0x0000 | |
| 49 | + | |
| 35 | 50 | #endif /* _UAPI_LINUX_ELF_FDPIC_H */ |