Added an ELF64 version of preloaded_image.
* There is now 2 structures, preloaded_elf32_image and preloaded_elf64_image, which both inherit from preloaded_image. * For now I've just hardcoded in use of preloaded_elf32_image, but the bootloader ELF code will shortly be converted to use templates which use the appropriate structure. The kernel will be changed later when I add ELF64 support to it. * All kernel_args data is now compatible between 32-bit and 64-bit kernels.
This commit is contained in:
@@ -15,9 +15,9 @@ extern "C" {
|
||||
|
||||
/* ELF support */
|
||||
|
||||
extern status_t boot_arch_elf_relocate_rel(struct preloaded_image *image,
|
||||
extern status_t boot_arch_elf_relocate_rel(preloaded_elf32_image *image,
|
||||
struct Elf32_Rel *rel, int rel_len);
|
||||
extern status_t boot_arch_elf_relocate_rela(struct preloaded_image *image,
|
||||
extern status_t boot_arch_elf_relocate_rela(preloaded_elf32_image *image,
|
||||
struct Elf32_Rela *rel, int rel_len);
|
||||
|
||||
|
||||
|
||||
@@ -11,27 +11,29 @@
|
||||
#include <elf_priv.h>
|
||||
#include <util/FixedWidthPointer.h>
|
||||
|
||||
typedef struct elf32_region {
|
||||
area_id id;
|
||||
uint32 start;
|
||||
uint32 size;
|
||||
int32 delta;
|
||||
} _PACKED elf32_region;
|
||||
|
||||
typedef struct elf64_region {
|
||||
area_id id;
|
||||
uint64 start;
|
||||
uint64 size;
|
||||
int64 delta;
|
||||
} _PACKED elf64_region;
|
||||
|
||||
struct preloaded_image {
|
||||
FixedWidthPointer<struct preloaded_image> next;
|
||||
char *name;
|
||||
elf_region text_region;
|
||||
elf_region data_region;
|
||||
FixedWidthPointer<char> name;
|
||||
uint8 elf_class;
|
||||
addr_range dynamic_section;
|
||||
struct Elf32_Ehdr elf_header;
|
||||
|
||||
struct Elf32_Sym *syms;
|
||||
struct Elf32_Rel *rel;
|
||||
int rel_len;
|
||||
struct Elf32_Rela *rela;
|
||||
int rela_len;
|
||||
struct Elf32_Rel *pltrel;
|
||||
int pltrel_len;
|
||||
int pltrel_type;
|
||||
|
||||
struct Elf32_Sym *debug_symbols;
|
||||
const char *debug_string_table;
|
||||
uint32 num_debug_symbols, debug_string_table_size;
|
||||
FixedWidthPointer<const char> debug_string_table;
|
||||
uint32 num_debug_symbols;
|
||||
uint32 debug_string_table_size;
|
||||
|
||||
ino_t inode;
|
||||
image_id id;
|
||||
@@ -40,11 +42,45 @@ struct preloaded_image {
|
||||
// set by the module initialization code
|
||||
} _PACKED;
|
||||
|
||||
struct preloaded_elf32_image : public preloaded_image {
|
||||
Elf32_Ehdr elf_header;
|
||||
elf32_region text_region;
|
||||
elf32_region data_region;
|
||||
|
||||
FixedWidthPointer<Elf32_Sym> syms;
|
||||
FixedWidthPointer<Elf32_Rel> rel;
|
||||
int32 rel_len;
|
||||
FixedWidthPointer<Elf32_Rela> rela;
|
||||
int32 rela_len;
|
||||
FixedWidthPointer<Elf32_Rel> pltrel;
|
||||
int32 pltrel_len;
|
||||
int32 pltrel_type;
|
||||
|
||||
FixedWidthPointer<Elf32_Sym> debug_symbols;
|
||||
} _PACKED;
|
||||
|
||||
struct preloaded_elf64_image : public preloaded_image {
|
||||
Elf64_Ehdr elf_header;
|
||||
elf64_region text_region;
|
||||
elf64_region data_region;
|
||||
|
||||
FixedWidthPointer<Elf64_Sym> syms;
|
||||
FixedWidthPointer<Elf64_Rel> rel;
|
||||
int64 rel_len;
|
||||
FixedWidthPointer<Elf64_Rela> rela;
|
||||
int64 rela_len;
|
||||
FixedWidthPointer<Elf64_Rel> pltrel;
|
||||
int64 pltrel_len;
|
||||
int64 pltrel_type;
|
||||
|
||||
FixedWidthPointer<Elf64_Sym> debug_symbols;
|
||||
} _PACKED;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern status_t boot_elf_resolve_symbol(struct preloaded_image *image,
|
||||
extern status_t boot_elf_resolve_symbol(struct preloaded_elf32_image *image,
|
||||
struct Elf32_Sym *symbol, addr_t *symbolAddress);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -44,7 +44,7 @@ typedef struct kernel_args {
|
||||
uint32 kernel_args_size;
|
||||
uint32 version;
|
||||
|
||||
struct preloaded_image kernel_image;
|
||||
FixedWidthPointer<struct preloaded_image> kernel_image;
|
||||
FixedWidthPointer<struct preloaded_image> preloaded_images;
|
||||
|
||||
uint32 num_physical_memory_ranges;
|
||||
|
||||
Reference in New Issue
Block a user