summaryrefslogtreecommitdiffstats
path: root/sys/boot/ofw
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2015-12-01 17:01:27 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2015-12-01 17:01:27 +0000
commit30ee3ed7550a4dcf3e98b86631814e814710942a (patch)
treedad81cd493c121399fa7384f0c3757067c3735dd /sys/boot/ofw
parent635273ca5baf8502302e42c12d4a4307a566483f (diff)
downloadFreeBSD-src-30ee3ed7550a4dcf3e98b86631814e814710942a.zip
FreeBSD-src-30ee3ed7550a4dcf3e98b86631814e814710942a.tar.gz
Allow loader to load 64-bit ELFv2 PowerPC kernels.
Diffstat (limited to 'sys/boot/ofw')
-rw-r--r--sys/boot/ofw/libofw/ppc64_elf_freebsd.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/boot/ofw/libofw/ppc64_elf_freebsd.c b/sys/boot/ofw/libofw/ppc64_elf_freebsd.c
index f85a77a..b411da4 100644
--- a/sys/boot/ofw/libofw/ppc64_elf_freebsd.c
+++ b/sys/boot/ofw/libofw/ppc64_elf_freebsd.c
@@ -77,8 +77,11 @@ ppc64_ofw_elf_exec(struct preloaded_file *fp)
}
e = (Elf_Ehdr *)&fmp->md_data;
- /* Handle function descriptor */
- entry = *(uint64_t *)e->e_entry;
+ /* Handle function descriptor for ELFv1 kernels */
+ if ((e->e_flags & 3) == 2)
+ entry = e->e_entry;
+ else
+ entry = *(uint64_t *)e->e_entry;
if ((error = md_load64(fp->f_args, &mdp, &dtbp)) != 0)
return (error);
OpenPOWER on IntegriCloud