summaryrefslogtreecommitdiffstats
path: root/sys/boot/arc/lib
diff options
context:
space:
mode:
authorbp <bp@FreeBSD.org>2000-05-01 17:41:25 +0000
committerbp <bp@FreeBSD.org>2000-05-01 17:41:25 +0000
commit816e92565a65b81ec26724758fea6f694964d18f (patch)
tree1dc1dbf863d6b27d97804bdaca0c1d05f196c481 /sys/boot/arc/lib
parent222439bc50eba6251adfdfbf06fc7474d33911ad (diff)
downloadFreeBSD-src-816e92565a65b81ec26724758fea6f694964d18f.zip
FreeBSD-src-816e92565a65b81ec26724758fea6f694964d18f.tar.gz
Update loader logic to distinguish modules vs. files.
Add support for module metadata. The old way of dependancy handling will be supported for a while. Reviewed by: peter
Diffstat (limited to 'sys/boot/arc/lib')
-rw-r--r--sys/boot/arc/lib/bootinfo.c32
-rw-r--r--sys/boot/arc/lib/elf_freebsd.c18
2 files changed, 25 insertions, 25 deletions
diff --git a/sys/boot/arc/lib/bootinfo.c b/sys/boot/arc/lib/bootinfo.c
index 8b74e0d..f95e7e4 100644
--- a/sys/boot/arc/lib/bootinfo.c
+++ b/sys/boot/arc/lib/bootinfo.c
@@ -121,17 +121,17 @@ bi_copyenv(vm_offset_t addr)
vm_offset_t
bi_copymodules(vm_offset_t addr)
{
- struct loaded_module *mp;
- struct module_metadata *md;
+ struct preloaded_file *fp;
+ struct file_metadata *md;
/* start with the first module on the list, should be the kernel */
- for (mp = mod_findmodule(NULL, NULL); mp != NULL; mp = mp->m_next) {
+ for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) {
- MOD_NAME(addr, mp->m_name); /* this field must come first */
- MOD_TYPE(addr, mp->m_type);
- MOD_ADDR(addr, mp->m_addr);
- MOD_SIZE(addr, mp->m_size);
- for (md = mp->m_metadata; md != NULL; md = md->md_next)
+ MOD_NAME(addr, fp->f_name); /* this field must come first */
+ MOD_TYPE(addr, fp->f_type);
+ MOD_ADDR(addr, fp->f_addr);
+ MOD_SIZE(addr, fp->f_size);
+ for (md = fp->f_metadata; md != NULL; md = md->md_next)
if (!(md->md_type & MODINFOMD_NOCOPY))
MOD_METADATA(addr, md);
}
@@ -147,18 +147,18 @@ bi_copymodules(vm_offset_t addr)
*/
int
bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
- struct loaded_module *mp)
+ struct preloaded_file *fp)
{
- struct loaded_module *xp;
+ struct preloaded_file *xp;
vm_offset_t addr, bootinfo_addr;
u_int pad;
vm_offset_t ssym, esym;
- struct module_metadata *md;
+ struct file_metadata *md;
ssym = esym = 0;
- if ((md = mod_findmetadata(mp, MODINFOMD_SSYM)) != NULL)
+ if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL)
ssym = *((vm_offset_t *)&(md->md_data));
- if ((md = mod_findmetadata(mp, MODINFOMD_ESYM)) != NULL)
+ if ((md = file_findmetadata(fp, MODINFOMD_ESYM)) != NULL)
esym = *((vm_offset_t *)&(md->md_data));
if (ssym == 0 || esym == 0)
ssym = esym = 0; /* sanity */
@@ -168,9 +168,9 @@ bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
/* find the last module in the chain */
addr = 0;
- for (xp = mod_findmodule(NULL, NULL); xp != NULL; xp = xp->m_next) {
- if (addr < (xp->m_addr + xp->m_size))
- addr = xp->m_addr + xp->m_size;
+ for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) {
+ if (addr < (xp->f_addr + xp->f_size))
+ addr = xp->f_addr + xp->f_size;
}
/* pad to a page boundary */
pad = (u_int)addr & PAGE_MASK;
diff --git a/sys/boot/arc/lib/elf_freebsd.c b/sys/boot/arc/lib/elf_freebsd.c
index 4e75820..994a787 100644
--- a/sys/boot/arc/lib/elf_freebsd.c
+++ b/sys/boot/arc/lib/elf_freebsd.c
@@ -90,37 +90,37 @@
#define _KERNEL
-static int elf_exec(struct loaded_module *amp);
+static int elf_exec(struct preloaded_file *amp);
int bi_load(struct bootinfo_v1 *, vm_offset_t *,
- struct loaded_module *);
+ struct preloaded_file *);
-struct module_format alpha_elf = { elf_loadmodule, elf_exec };
+struct file_format alpha_elf = { elf_loadfile, elf_exec };
vm_offset_t ffp_save, ptbr_save;
static int
-elf_exec(struct loaded_module *mp)
+elf_exec(struct preloaded_file *fp)
{
#if 0
static struct bootinfo_v1 bootinfo_v1;
- struct module_metadata *md;
+ struct file_metadata *md;
Elf_Ehdr *hdr;
int err;
- if ((md = mod_findmetadata(mp, MODINFOMD_ELFHDR)) == NULL)
+ if ((md = file_findmetadata(fp, 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.. */
bzero(&bootinfo_v1, sizeof(bootinfo_v1));
- err = bi_load(&bootinfo_v1, &ffp_save, mp);
+ err = bi_load(&bootinfo_v1, &ffp_save, fp);
if (err)
return(err);
/*
* Fill in the bootinfo for the kernel.
*/
- strncpy(bootinfo_v1.booted_kernel, mp->m_name,
+ strncpy(bootinfo_v1.booted_kernel, fp->f_name,
sizeof(bootinfo_v1.booted_kernel));
prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo_v1.boot_flags,
sizeof(bootinfo_v1.boot_flags));
@@ -130,7 +130,7 @@ elf_exec(struct loaded_module *mp)
bootinfo_v1.cnputc = NULL;
bootinfo_v1.cnpollc = NULL;
- printf("Entering %s at 0x%lx...\n", mp->m_name, hdr->e_entry);
+ printf("Entering %s at 0x%lx...\n", fp->f_name, hdr->e_entry);
exit(0);
closeall();
alpha_pal_imb();
OpenPOWER on IntegriCloud