diff options
author | peter <peter@FreeBSD.org> | 2003-04-06 05:20:00 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2003-04-06 05:20:00 +0000 |
commit | 099c5dc3815f7d00dba37bb95396870048a049ce (patch) | |
tree | 5b658f1dcc9264a61cce8f8d8782caff11379b22 | |
parent | 070e2898a0d5f648b496f43ba5c351da5da0ce0d (diff) | |
download | FreeBSD-src-099c5dc3815f7d00dba37bb95396870048a049ce.zip FreeBSD-src-099c5dc3815f7d00dba37bb95396870048a049ce.tar.gz |
Search for "elf32 kernel" (and elf64) and "elf32 module" (and elf64)
as well as "elf kernel" and "elf module". This is a precursor to
x86-64 support in the i386 loader so it can load an elf64 x86-64 kernel.
-rw-r--r-- | sys/kern/link_elf.c | 8 | ||||
-rw-r--r-- | sys/kern/link_elf_obj.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c index f15803f..1d27f73 100644 --- a/sys/kern/link_elf.c +++ b/sys/kern/link_elf.c @@ -258,7 +258,9 @@ link_elf_init(void* arg) dp = (Elf_Dyn*) &_DYNAMIC; modname = NULL; - modptr = preload_search_by_type("elf kernel"); + modptr = preload_search_by_type("elf" __XSTRING(__ELF_WORD_SIZE) " kernel"); + if (modptr == NULL) + modptr = preload_search_by_type("elf kernel"); if (modptr) modname = (char *)preload_search_info(modptr, MODINFO_NAME); if (modname == NULL) @@ -462,7 +464,9 @@ link_elf_link_preload(linker_class_t cls, baseptr = preload_search_info(modptr, MODINFO_ADDR); sizeptr = preload_search_info(modptr, MODINFO_SIZE); dynptr = preload_search_info(modptr, MODINFO_METADATA|MODINFOMD_DYNAMIC); - if (type == NULL || strcmp(type, "elf module") != 0) + if (type == NULL || + (strcmp(type, "elf" __XSTRING(__ELF_WORD_SIZE) " module") != 0 && + strcmp(type, "elf module") != 0)) return (EFTYPE); if (baseptr == NULL || sizeptr == NULL || dynptr == NULL) return (EINVAL); diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c index f15803f..1d27f73 100644 --- a/sys/kern/link_elf_obj.c +++ b/sys/kern/link_elf_obj.c @@ -258,7 +258,9 @@ link_elf_init(void* arg) dp = (Elf_Dyn*) &_DYNAMIC; modname = NULL; - modptr = preload_search_by_type("elf kernel"); + modptr = preload_search_by_type("elf" __XSTRING(__ELF_WORD_SIZE) " kernel"); + if (modptr == NULL) + modptr = preload_search_by_type("elf kernel"); if (modptr) modname = (char *)preload_search_info(modptr, MODINFO_NAME); if (modname == NULL) @@ -462,7 +464,9 @@ link_elf_link_preload(linker_class_t cls, baseptr = preload_search_info(modptr, MODINFO_ADDR); sizeptr = preload_search_info(modptr, MODINFO_SIZE); dynptr = preload_search_info(modptr, MODINFO_METADATA|MODINFOMD_DYNAMIC); - if (type == NULL || strcmp(type, "elf module") != 0) + if (type == NULL || + (strcmp(type, "elf" __XSTRING(__ELF_WORD_SIZE) " module") != 0 && + strcmp(type, "elf module") != 0)) return (EFTYPE); if (baseptr == NULL || sizeptr == NULL || dynptr == NULL) return (EINVAL); |