diff options
author | peter <peter@FreeBSD.org> | 2002-07-20 02:56:12 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2002-07-20 02:56:12 +0000 |
commit | cc7b2e42482d2eb35468c5dd11903248b12692b2 (patch) | |
tree | 442882c197085f1177ad99039e6387b24c60e44a /sys/alpha/linux | |
parent | c458732bcf221adf5c81f68d8d9044444c901a54 (diff) | |
download | FreeBSD-src-cc7b2e42482d2eb35468c5dd11903248b12692b2.zip FreeBSD-src-cc7b2e42482d2eb35468c5dd11903248b12692b2.tar.gz |
Infrastructure tweaks to allow having both an Elf32 and an Elf64 executable
handler in the kernel at the same time. Also, allow for the
exec_new_vmspace() code to build a different sized vmspace depending on
the executable environment. This is a big help for execing i386 binaries
on ia64. The ELF exec code grows the ability to map partial pages when
there is a page size difference, eg: emulating 4K pages on 8K or 16K
hardware pages.
Flesh out the i386 emulation support for ia64. At this point, the only
binary that I know of that fails is cvsup, because the cvsup runtime
tries to execute code in pages not marked executable.
Obtained from: dfr (mostly, many tweaks from me).
Diffstat (limited to 'sys/alpha/linux')
-rw-r--r-- | sys/alpha/linux/linux_sysvec.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/alpha/linux/linux_sysvec.c b/sys/alpha/linux/linux_sysvec.c index bedb8bf..52af25f 100644 --- a/sys/alpha/linux/linux_sysvec.c +++ b/sys/alpha/linux/linux_sysvec.c @@ -189,13 +189,14 @@ struct sysentvec elf_linux_sysvec = { &linux_szsigcode, 0, "Linux ELF", - elf_coredump, + elf64_coredump, exec_linux_imgact_try, LINUX_MINSIGSTKSZ }; static Elf64_Brandinfo linux_brand = { ELFOSABI_LINUX, + EM_ALPHA, "Linux", "/compat/linux", "/lib/ld-linux.so.1", @@ -204,6 +205,7 @@ static Elf64_Brandinfo linux_brand = { static Elf64_Brandinfo linux_glibc2brand = { ELFOSABI_LINUX, + EM_ALPHA, "Linux", "/compat/linux", "/lib/ld-linux.so.2", @@ -229,7 +231,7 @@ linux_elf_modevent(module_t mod, int type, void *data) case MOD_LOAD: for (brandinfo = &linux_brandlist[0]; *brandinfo != NULL; ++brandinfo) - if (elf_insert_brand_entry(*brandinfo) < 0) + if (elf64_insert_brand_entry(*brandinfo) < 0) error = EINVAL; if (error == 0) { SET_FOREACH(lihp, linux_ioctl_handler_set) @@ -242,12 +244,12 @@ linux_elf_modevent(module_t mod, int type, void *data) case MOD_UNLOAD: for (brandinfo = &linux_brandlist[0]; *brandinfo != NULL; ++brandinfo) - if (elf_brand_inuse(*brandinfo)) + if (elf64_brand_inuse(*brandinfo)) error = EBUSY; if (error == 0) { for (brandinfo = &linux_brandlist[0]; *brandinfo != NULL; ++brandinfo) - if (elf_remove_brand_entry(*brandinfo) < 0) + if (elf64_remove_brand_entry(*brandinfo) < 0) error = EINVAL; } if (error == 0) { |