Date: Sat, 16 Jan 2016 07:46:25 +0000 (UTC) From: Dmitry Chagin <dchagin@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r294135 - stable/10/usr.bin/kdump Message-ID: <201601160746.u0G7kP0T066668@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dchagin Date: Sat Jan 16 07:46:25 2016 New Revision: 294135 URL: https://svnweb.freebsd.org/changeset/base/294135 Log: MFC r283430: Teach kdump to understand both linux emulation. Added: stable/10/usr.bin/kdump/linux32_syscalls.conf - copied unchanged from r283430, head/usr.bin/kdump/linux32_syscalls.conf Modified: stable/10/usr.bin/kdump/Makefile stable/10/usr.bin/kdump/kdump.c Directory Properties: stable/10/ (props changed) Modified: stable/10/usr.bin/kdump/Makefile ============================================================================== --- stable/10/usr.bin/kdump/Makefile Sat Jan 16 05:58:17 2016 (r294134) +++ stable/10/usr.bin/kdump/Makefile Sat Jan 16 07:46:25 2016 (r294135) @@ -3,10 +3,6 @@ .include <bsd.own.mk> -.if (${MACHINE_ARCH} == "amd64") -SFX= 32 -.endif - .PATH: ${.CURDIR}/../ktrace PROG= kdump @@ -24,6 +20,9 @@ CLEANFILES= ioctl.c kdump_subr.c kdump_s .if (${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386") CLEANFILES+= linux_syscalls.c .endif +.if (${MACHINE_ARCH} == "amd64") +CLEANFILES+= linux32_syscalls.c +.endif ioctl.c: mkioctls env MACHINE=${MACHINE} CPP="${CPP}" \ @@ -37,7 +36,11 @@ kdump_subr.c: mksubr kdump_subr.h sh ${.CURDIR}/mksubr ${DESTDIR}/usr/include >${.TARGET} .if (${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386") sh ${.CURDIR}/../../sys/kern/makesyscalls.sh \ - ${.CURDIR}/../../sys/${MACHINE_ARCH}/linux${SFX}/syscalls.master ${.CURDIR}/linux_syscalls.conf + ${.CURDIR}/../../sys/${MACHINE_ARCH}/linux/syscalls.master ${.CURDIR}/linux_syscalls.conf +.endif +.if (${MACHINE_ARCH} == "amd64") + sh ${.CURDIR}/../../sys/kern/makesyscalls.sh \ + ${.CURDIR}/../../sys/${MACHINE_ARCH}/linux32/syscalls.master ${.CURDIR}/linux32_syscalls.conf .endif .include <bsd.prog.mk> Modified: stable/10/usr.bin/kdump/kdump.c ============================================================================== --- stable/10/usr.bin/kdump/kdump.c Sat Jan 16 05:58:17 2016 (r294134) +++ stable/10/usr.bin/kdump/kdump.c Sat Jan 16 07:46:25 2016 (r294135) @@ -139,13 +139,11 @@ static struct ktr_header ktr_header; #if defined(__amd64__) || defined(__i386__) -void linux_ktrsyscall(struct ktr_syscall *); -void linux_ktrsysret(struct ktr_sysret *); +void linux_ktrsyscall(struct ktr_syscall *, u_int); +void linux_ktrsysret(struct ktr_sysret *, u_int); extern const char *linux_syscallnames[]; #include <linux_syscalls.c> -static int nlinux_syscalls = sizeof(linux_syscallnames) / \ - sizeof(linux_syscallnames[0]); /* * from linux.h @@ -165,6 +163,12 @@ static int bsd_to_linux_errno[ELAST + 1] }; #endif +#if defined(__amd64__) +extern const char *linux32_syscallnames[]; + +#include <linux32_syscalls.c> +#endif + struct proc_info { TAILQ_ENTRY(proc_info) info; @@ -331,7 +335,8 @@ main(int argc, char *argv[]) case KTR_SYSCALL: #if defined(__amd64__) || defined(__i386__) if ((sv_flags & SV_ABI_MASK) == SV_ABI_LINUX) - linux_ktrsyscall((struct ktr_syscall *)m); + linux_ktrsyscall((struct ktr_syscall *)m, + sv_flags); else #endif ktrsyscall((struct ktr_syscall *)m, sv_flags); @@ -339,7 +344,8 @@ main(int argc, char *argv[]) case KTR_SYSRET: #if defined(__amd64__) || defined(__i386__) if ((sv_flags & SV_ABI_MASK) == SV_ABI_LINUX) - linux_ktrsysret((struct ktr_sysret *)m); + linux_ktrsysret((struct ktr_sysret *)m, + sv_flags); else #endif ktrsysret((struct ktr_sysret *)m, sv_flags); @@ -1891,16 +1897,28 @@ ktrfaultend(struct ktr_faultend *ktr) } #if defined(__amd64__) || defined(__i386__) + +#if defined(__amd64__) +#define NLINUX_SYSCALLS(v) ((v) & SV_ILP32 ? \ + nitems(linux32_syscallnames) : nitems(linux_syscallnames)) +#define LINUX_SYSCALLNAMES(v, i) ((v) & SV_ILP32 ? \ + linux32_syscallnames[i] : linux_syscallnames[i]) +#else +#define NLINUX_SYSCALLS(v) (nitems(linux_syscallnames)) +#define LINUX_SYSCALLNAMES(v, i) (linux_syscallnames[i]) +#endif + void -linux_ktrsyscall(struct ktr_syscall *ktr) +linux_ktrsyscall(struct ktr_syscall *ktr, u_int sv_flags) { int narg = ktr->ktr_narg; + unsigned code = ktr->ktr_code; register_t *ip; - if (ktr->ktr_code >= nlinux_syscalls || ktr->ktr_code < 0) + if (ktr->ktr_code < 0 || code >= NLINUX_SYSCALLS(sv_flags)) printf("[%d]", ktr->ktr_code); else { - printf("%s", linux_syscallnames[ktr->ktr_code]); + printf("%s", LINUX_SYSCALLNAMES(sv_flags, ktr->ktr_code)); if (syscallno) printf("[%d]", ktr->ktr_code); } @@ -1915,16 +1933,16 @@ linux_ktrsyscall(struct ktr_syscall *ktr } void -linux_ktrsysret(struct ktr_sysret *ktr) +linux_ktrsysret(struct ktr_sysret *ktr, u_int sv_flags) { register_t ret = ktr->ktr_retval; + unsigned code = ktr->ktr_code; int error = ktr->ktr_error; - int code = ktr->ktr_code; - if (code >= nlinux_syscalls || code < 0) - printf("[%d] ", code); + if (ktr->ktr_code < 0 || code >= NLINUX_SYSCALLS(sv_flags)) + printf("[%d] ", ktr->ktr_code); else { - printf("%s", linux_syscallnames[code]); + printf("%s ", LINUX_SYSCALLNAMES(sv_flags, code)); if (syscallno) printf("[%d]", code); printf(" "); Copied: stable/10/usr.bin/kdump/linux32_syscalls.conf (from r283430, head/usr.bin/kdump/linux32_syscalls.conf) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/10/usr.bin/kdump/linux32_syscalls.conf Sat Jan 16 07:46:25 2016 (r294135, copy of r283430, head/usr.bin/kdump/linux32_syscalls.conf) @@ -0,0 +1,11 @@ +# $FreeBSD$ +sysnames="linux32_syscalls.c" +sysproto="/dev/null" +sysproto_h=_LINUX32_SYSPROTO_H_ +syshdr="/dev/null" +syssw="/dev/null" +sysmk="/dev/null" +syscallprefix="LINUX32_SYS_" +switchname="/dev/null" +namesname="linux32_syscallnames" +systrace="/dev/null"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601160746.u0G7kP0T066668>