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 | #define ELF32_FDPIC_LOADMAP_VERSION 0x0000 | 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 | #endif /* _UAPI_LINUX_ELF_FDPIC_H */ | 50 | #endif /* _UAPI_LINUX_ELF_FDPIC_H */ |