summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2003-04-06 05:20:00 +0000
committerpeter <peter@FreeBSD.org>2003-04-06 05:20:00 +0000
commit099c5dc3815f7d00dba37bb95396870048a049ce (patch)
tree5b658f1dcc9264a61cce8f8d8782caff11379b22 /sys/kern
parent070e2898a0d5f648b496f43ba5c351da5da0ce0d (diff)
downloadFreeBSD-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.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/link_elf.c8
-rw-r--r--sys/kern/link_elf_obj.c8
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);
OpenPOWER on IntegriCloud