diff options
Diffstat (limited to 'sys/alpha/alpha/elf_machdep.c')
-rw-r--r-- | sys/alpha/alpha/elf_machdep.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/sys/alpha/alpha/elf_machdep.c b/sys/alpha/alpha/elf_machdep.c index ebd3b60..8e443e7 100644 --- a/sys/alpha/alpha/elf_machdep.c +++ b/sys/alpha/alpha/elf_machdep.c @@ -32,9 +32,47 @@ #include <sys/proc.h> #include <sys/namei.h> #include <sys/fcntl.h> +#include <sys/sysent.h> +#include <sys/imgact_elf.h> +#include <sys/syscall.h> +#include <sys/signalvar.h> #include <sys/vnode.h> #include <sys/linker.h> #include <machine/elf.h> +#include <machine/md_var.h> + +struct sysentvec elf64_freebsd_sysvec = { + SYS_MAXSYSCALL, + sysent, + 0, + 0, + 0, + 0, + 0, + 0, + elf64_freebsd_fixup, + sendsig, + sigcode, + &szsigcode, + 0, + "FreeBSD ELF64", + __elfN(coredump), + NULL, + MINSIGSTKSZ +}; + +static Elf64_Brandinfo freebsd_brand_info = { + ELFOSABI_FREEBSD, + EM_ALPHA, + "FreeBSD", + "", + "/usr/libexec/ld-elf.so.1", + &elf64_freebsd_sysvec + }; + +SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_ANY, + (sysinit_cfunc_t) elf64_insert_brand_entry, + &freebsd_brand_info); /* Process one elf relocation with addend. */ int @@ -85,7 +123,7 @@ elf_reloc(linker_file_t lf, const void *data, int type) addr = elf_lookup(lf, symidx, 1); if (addr == 0) return -1; - addr += addend; + addr += addend; if (*where != addr) *where = addr; break; |