summaryrefslogtreecommitdiffstats
path: root/sys/boot/alpha
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1998-10-15 21:55:58 +0000
committerdfr <dfr@FreeBSD.org>1998-10-15 21:55:58 +0000
commit8c5d5288fbcb70de02621327a3273553234cea0b (patch)
tree720ac8a702aaf7cf2977a9a9e163dd8a38d7e148 /sys/boot/alpha
parente8799dedf6b7473d0987a29b908ba35cf6fedf0f (diff)
downloadFreeBSD-src-8c5d5288fbcb70de02621327a3273553234cea0b.zip
FreeBSD-src-8c5d5288fbcb70de02621327a3273553234cea0b.tar.gz
Fix the bootinfo so that the right values actual make it into the kernel.
Diffstat (limited to 'sys/boot/alpha')
-rw-r--r--sys/boot/alpha/libalpha/bootinfo.c9
-rw-r--r--sys/boot/alpha/libalpha/elf_freebsd.c12
2 files changed, 11 insertions, 10 deletions
diff --git a/sys/boot/alpha/libalpha/bootinfo.c b/sys/boot/alpha/libalpha/bootinfo.c
index 99f213a..226c4a8 100644
--- a/sys/boot/alpha/libalpha/bootinfo.c
+++ b/sys/boot/alpha/libalpha/bootinfo.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bootinfo.c,v 1.1 1998/10/14 09:53:25 peter Exp $
+ * $Id: bootinfo.c,v 1.2 1998/10/15 17:06:36 peter Exp $
*/
#include <stand.h>
@@ -146,13 +146,13 @@ bi_copymodules(vm_offset_t addr)
* - Module metadata are formatted and placed in kernel space.
*/
int
-bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save)
+bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
+ struct loaded_module *mp)
{
struct loaded_module *xp;
vm_offset_t addr, bootinfo_addr;
u_int pad;
vm_offset_t ssym, esym;
- struct loaded_module *mp;
struct module_metadata *md;
ssym = esym = 0;
@@ -163,6 +163,9 @@ bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save)
if (ssym == 0 || esym == 0)
ssym = esym = 0; /* sanity */
+ bi->ssym = ssym;
+ bi->esym = esym;
+
/* find the last module in the chain */
addr = 0;
for (xp = mod_findmodule(NULL, NULL); xp != NULL; xp = xp->m_next) {
diff --git a/sys/boot/alpha/libalpha/elf_freebsd.c b/sys/boot/alpha/libalpha/elf_freebsd.c
index edb0c21..e2cadae 100644
--- a/sys/boot/alpha/libalpha/elf_freebsd.c
+++ b/sys/boot/alpha/libalpha/elf_freebsd.c
@@ -1,4 +1,4 @@
-/* $Id: elf_freebsd.c,v 1.4 1998/10/11 03:53:35 dima Exp $ */
+/* $Id: elf_freebsd.c,v 1.5 1998/10/14 09:53:25 peter Exp $ */
/* $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $ */
/*-
@@ -91,7 +91,8 @@
#define _KERNEL
static int elf_exec(struct loaded_module *amp);
-int bi_load(struct bootinfo_v1 *, vm_offset_t *);
+int bi_load(struct bootinfo_v1 *, vm_offset_t *,
+ struct loaded_module *);
struct module_format alpha_elf = { elf_loadmodule, elf_exec };
@@ -104,23 +105,20 @@ elf_exec(struct loaded_module *mp)
struct module_metadata *md;
Elf_Ehdr *hdr;
int err;
- vm_offset_t ssym, esym;
if ((md = mod_findmetadata(mp, MODINFOMD_ELFHDR)) == NULL)
return(EFTYPE); /* XXX actually EFUCKUP */
hdr = (Elf_Ehdr *)&(md->md_data);
/* XXX ffp_save does not appear to be used in the kernel.. */
- err = bi_load(&bootinfo_v1, &ffp_save);
+ bzero(&bootinfo_v1, sizeof(bootinfo_v1));
+ err = bi_load(&bootinfo_v1, &ffp_save, mp);
if (err)
return(err);
/*
* Fill in the bootinfo for the kernel.
*/
- bzero(&bootinfo_v1, sizeof(bootinfo_v1));
- bootinfo_v1.ssym = ssym;
- bootinfo_v1.esym = esym;
strncpy(bootinfo_v1.booted_kernel, mp->m_name,
sizeof(bootinfo_v1.booted_kernel));
prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo_v1.boot_flags,
OpenPOWER on IntegriCloud