提交 644017a3 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

clean up bits that were not necessary in the end

上级 a1402352
......@@ -31,12 +31,12 @@ multiboot_header:
#define flags (1<<16 | 1<<0)
.long magic
.long flags
.long (- magic - flags) # checksum
.long PADDR(multiboot_header) # header address
.long PADDR(multiboot_header)-0x1000 # load address, incl elf headers
.long PADDR(edata) # load end address
.long PADDR(end) # bss end address
.long PADDR(start) # entry address
.long (- magic - flags) # checksum
.long PADDR(multiboot_header) # header address
.long PADDR(multiboot_header) # load address
.long PADDR(edata) # load end address
.long PADDR(end) # bss end address
.long PADDR(start) # entry address
# Entry point jumped to by boot loader. Running in 32-bit mode.
# http://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Machine-state
......
......@@ -11,6 +11,8 @@
void*
operator new(unsigned long nbytes)
{
panic("global operator new");
u64* x = (u64*) kmalloc(nbytes + sizeof(u64), "cpprt new");
*x = nbytes;
return x+1;
......@@ -19,6 +21,8 @@ operator new(unsigned long nbytes)
void
operator delete(void* p)
{
panic("global operator delete");
u64* x = (u64*) p;
kmfree(x-1, x[-1] + sizeof(u64));
}
......@@ -173,34 +177,11 @@ free(void* vp)
kmfree(p-1, p[-1]+8);
}
struct dl_phdr_info {
Elf64_Addr dlpi_addr;
const char *dlpi_name;
const struct proghdr *dlpi_phdr;
Elf64_Half dlpi_phnum;
unsigned long long int dlpi_adds;
unsigned long long int dlpi_subs;
};
extern "C" int dl_iterate_phdr(int (*cb) (struct dl_phdr_info *info,
size_t size, void *data),
void *data);
extern "C" int dl_iterate_phdr(void);
int
dl_iterate_phdr(int (*cb) (struct dl_phdr_info *info, size_t size, void *data),
void *data)
{
extern char multiboot_header[];
elfhdr *eh = (elfhdr*) &multiboot_header[-0x1000];
assert(eh->magic == ELF_MAGIC);
struct dl_phdr_info info;
info.dlpi_addr = 0;
info.dlpi_name = "kernel";
info.dlpi_phdr = (proghdr*) (((char*) eh) + eh->phoff);
info.dlpi_phnum = eh->phnum;
info.dlpi_adds = 0;
info.dlpi_subs = 0;
return cb(&info, sizeof(struct dl_phdr_info), data);
dl_iterate_phdr(void)
{
return -1;
}
extern "C" void __stack_chk_fail(void);
......
......@@ -4,12 +4,9 @@ ENTRY(xxx)
SECTIONS
{
/* Skip one page to leave room for ELF headers.
* See multiboot_header and dl_iterate_phdr.
*/
. = 0xFFFFFFFFC0101000;
. = 0xFFFFFFFFC0100000;
PROVIDE(text = .);
.text : AT(0x101000) {
.text : AT(0x100000) {
*(.text .stub .text.* .gnu.linkonce.t.*)
}
.rodata : {
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论