Fix knetbsd symbols
This commit is contained in:
parent
820e8e55fd
commit
cefe39c94b
1 changed files with 11 additions and 24 deletions
|
@ -410,8 +410,7 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
|
||||||
|
|
||||||
chunk_size = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
|
chunk_size = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
|
||||||
+ ALIGN_UP (strsize, sizeof (grub_freebsd_addr_t))
|
+ ALIGN_UP (strsize, sizeof (grub_freebsd_addr_t))
|
||||||
+ sizeof (e) + e.e_phnum * e.e_phentsize
|
+ sizeof (e) + e.e_shnum * e.e_shentsize;
|
||||||
+ e.e_shnum * e.e_shentsize;
|
|
||||||
|
|
||||||
symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t));
|
symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t));
|
||||||
err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk,
|
err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk,
|
||||||
|
@ -419,7 +418,7 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
symtab.nsyms = chunk_size;
|
symtab.nsyms = 1;
|
||||||
symtab.ssyms = symtarget;
|
symtab.ssyms = symtarget;
|
||||||
symtab.esyms = symtarget + chunk_size;
|
symtab.esyms = symtarget + chunk_size;
|
||||||
|
|
||||||
|
@ -427,20 +426,13 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
|
||||||
|
|
||||||
e2 = (Elf_Ehdr *) curload;
|
e2 = (Elf_Ehdr *) curload;
|
||||||
grub_memcpy (curload, &e, sizeof (e));
|
grub_memcpy (curload, &e, sizeof (e));
|
||||||
e2->e_phoff = sizeof (e);
|
e2->e_phoff = 0;
|
||||||
e2->e_shoff = sizeof (e) + e.e_phnum * e.e_phentsize;
|
e2->e_phnum = 0;
|
||||||
|
e2->e_phentsize = 0;
|
||||||
|
e2->e_shstrndx = 0;
|
||||||
|
e2->e_shoff = sizeof (e);
|
||||||
|
|
||||||
curload += sizeof (e);
|
curload += sizeof (e);
|
||||||
if (grub_file_seek (file, e.e_phoff) == (grub_off_t) -1)
|
|
||||||
return grub_errno;
|
|
||||||
if (grub_file_read (file, curload, e.e_phnum * e.e_phentsize)
|
|
||||||
!= (grub_ssize_t) (e.e_phnum * e.e_phentsize))
|
|
||||||
{
|
|
||||||
if (! grub_errno)
|
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "invalid ELF");
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
curload += e.e_phnum * e.e_phentsize;
|
|
||||||
|
|
||||||
for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) (shdr
|
for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) (shdr
|
||||||
+ e.e_shnum * e.e_shentsize);
|
+ e.e_shnum * e.e_shentsize);
|
||||||
|
@ -450,19 +442,14 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
|
||||||
s2 = (Elf_Shdr *) curload;
|
s2 = (Elf_Shdr *) curload;
|
||||||
grub_memcpy (curload, s, e.e_shentsize);
|
grub_memcpy (curload, s, e.e_shentsize);
|
||||||
if (s == symsh)
|
if (s == symsh)
|
||||||
{
|
s2->sh_offset = sizeof (e) + e.e_shnum * e.e_shentsize;
|
||||||
s2->sh_offset = sizeof (e) + e.e_phnum * e.e_phentsize
|
|
||||||
+ e.e_shnum * e.e_shentsize;
|
|
||||||
}
|
|
||||||
else if (s == strsh)
|
else if (s == strsh)
|
||||||
{
|
s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
|
||||||
s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
|
+ sizeof (e) + e.e_shnum * e.e_shentsize;
|
||||||
+ sizeof (e) + e.e_phnum * e.e_phentsize
|
|
||||||
+ e.e_shnum * e.e_shentsize;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
s2->sh_offset = 0;
|
s2->sh_offset = 0;
|
||||||
s2->sh_addr = s2->sh_offset;
|
s2->sh_addr = s2->sh_offset;
|
||||||
|
curload += e.e_shentsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_file_seek (file, symsh->sh_offset) == (grub_off_t) -1)
|
if (grub_file_seek (file, symsh->sh_offset) == (grub_off_t) -1)
|
||||||
|
|
Loading…
Reference in a new issue