957a1b17eb
{HAIKU,HOST,TARGET}_KERNEL_PIC_{CC,LINK}FLAGS which define the compiler/linker flags specifying the kind of position independence the kernel shall have. For x86 we had and still have -fno-pic, but the PPC kernel has -fPIE (position independent executable) now, as we need to relocate it. * The boot loader relocates the kernel now. Mostly copied the relocation code from the kernel ELF loader. Almost completely rewrote the PPC specific relocation code, though. It's more correct and more complete now (some things are still missing though). * Added boot platform awareness to the kernel. Moved the generic Open Firmware code (openfirmware.c/h) from the boot loader to the kernel. * The kernel PPC serial debug output is sent to the console for the time being. * The PPC boot loader counts the CPUs now and allocates the kernel stacks (made OF device iteration a bit more flexible on the way -- the search can be restricted to subtree). Furthermore we really enter the kernel... (Yay! :-) ... and crash in the first dprintf() (in the atomic_set() called by acquire_spinlock()). kprintf() works, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15756 a95241bf-73f2-0310-859d-f6bbb57e9c96
52 lines
1.0 KiB
C
52 lines
1.0 KiB
C
/*
|
|
** Copyright 2003-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
|
** Distributed under the terms of the OpenBeOS License.
|
|
*/
|
|
#ifndef KERNEL_BOOT_ELF_H
|
|
#define KERNEL_BOOT_ELF_H
|
|
|
|
|
|
#include <boot/addr_range.h>
|
|
#include <sys/stat.h>
|
|
#include <elf_priv.h>
|
|
|
|
|
|
struct preloaded_image {
|
|
struct preloaded_image *next;
|
|
char *name;
|
|
elf_region text_region;
|
|
elf_region data_region;
|
|
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;
|
|
|
|
ino_t inode;
|
|
image_id id;
|
|
// the ID field will be filled out in the kernel
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern status_t boot_elf_resolve_symbol(struct preloaded_image *image,
|
|
struct Elf32_Sym *symbol, addr_t *symbolAddress);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* KERNEL_BOOT_ELF_H */
|