]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fix knetbsd symbols
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 16 Jan 2010 10:06:55 +0000 (11:06 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 16 Jan 2010 10:06:55 +0000 (11:06 +0100)
loader/i386/bsdXX.c

index 77d0599218fbf1ac0104d823b528ebc01452002b..ccf3864406bcd027fb43739f8c9e0386a4a2a34b 100644 (file)
@@ -410,8 +410,7 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
 
   chunk_size = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
     + ALIGN_UP (strsize, sizeof (grub_freebsd_addr_t))
-    + sizeof (e) + e.e_phnum * e.e_phentsize
-    + e.e_shnum * e.e_shentsize;
+    + sizeof (e) + e.e_shnum * e.e_shentsize;
 
   symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t));
   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)
     return err;
 
-  symtab.nsyms = chunk_size;
+  symtab.nsyms = 1;
   symtab.ssyms = symtarget;
   symtab.esyms = symtarget + chunk_size;
 
@@ -427,20 +426,13 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
   
   e2 = (Elf_Ehdr *) curload;
   grub_memcpy (curload, &e, sizeof (e));
-  e2->e_phoff = sizeof (e);
-  e2->e_shoff = sizeof (e) + e.e_phnum * e.e_phentsize;
+  e2->e_phoff = 0;
+  e2->e_phnum = 0;
+  e2->e_phentsize = 0;
+  e2->e_shstrndx = 0;
+  e2->e_shoff = 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
                                                + e.e_shnum * e.e_shentsize);
@@ -450,19 +442,14 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator,
       s2 = (Elf_Shdr *) curload;
       grub_memcpy (curload, s, e.e_shentsize);
       if (s == symsh)
-       {
-         s2->sh_offset = sizeof (e) + e.e_phnum * e.e_phentsize
-           + e.e_shnum * e.e_shentsize;
-       }
+       s2->sh_offset = sizeof (e) + e.e_shnum * e.e_shentsize;
       else if (s == strsh)
-       {
-         s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
-           + sizeof (e) + e.e_phnum * e.e_phentsize
-           + e.e_shnum * e.e_shentsize;
-       }
+       s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t))
+         + sizeof (e) + e.e_shnum * e.e_shentsize;
       else
        s2->sh_offset = 0;
       s2->sh_addr = s2->sh_offset;
+      curload += e.e_shentsize;
     }
 
   if (grub_file_seek (file, symsh->sh_offset) == (grub_off_t) -1)