summaryrefslogtreecommitdiff
path: root/usr.bin/gcore
diff options
context:
space:
mode:
authorJustin Hibbits <jhibbits@FreeBSD.org>2019-10-11 14:17:31 +0000
committerJustin Hibbits <jhibbits@FreeBSD.org>2019-10-11 14:17:31 +0000
commit942aefd5675556b297a73f3ed4e94690a59cf9ed (patch)
tree1ce07d3d6f82c0c34e171ed324c35d87abdd76ce /usr.bin/gcore
parent26517dcf60576f345c34909e447a8dd5f5ecf34c (diff)
downloadsrc-test2-942aefd5675556b297a73f3ed4e94690a59cf9ed.tar.gz
src-test2-942aefd5675556b297a73f3ed4e94690a59cf9ed.zip
gcore: Add powerpc64 32-bit gcore support
Summary: Add the necessary bits for taking 32-bit gcore coredumps on powerpc64. Reviewed by: luporl Differential Revision: https://reviews.freebsd.org/D21954
Notes
Notes: svn path=/head/; revision=353437
Diffstat (limited to 'usr.bin/gcore')
-rw-r--r--usr.bin/gcore/Makefile3
-rw-r--r--usr.bin/gcore/elf32core.c13
2 files changed, 15 insertions, 1 deletions
diff --git a/usr.bin/gcore/Makefile b/usr.bin/gcore/Makefile
index 205b3f1ea46c..e58f4ede82b3 100644
--- a/usr.bin/gcore/Makefile
+++ b/usr.bin/gcore/Makefile
@@ -5,7 +5,8 @@ PROG= gcore
SRCS= elfcore.c gcore.c
LIBADD= sbuf util
-.if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "amd64"
+.if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "amd64" || \
+ ${MACHINE_ARCH} == "powerpc64"
SRCS+= elf32core.c
.endif
diff --git a/usr.bin/gcore/elf32core.c b/usr.bin/gcore/elf32core.c
index ba35631f4fb3..4e91fb0bc065 100644
--- a/usr.bin/gcore/elf32core.c
+++ b/usr.bin/gcore/elf32core.c
@@ -41,6 +41,17 @@ elf_convert_gregset(elfcore_gregset_t *rd, struct reg *rs)
rd->r_lr = rs->x[14];
rd->r_pc = rs->elr;
rd->r_cpsr = rs->spsr;
+#elif defined(__powerpc64__)
+ int i;
+
+ for (i = 0; i < 32; i++)
+ rd->fixreg[i] = rs->fixreg[i];
+ rd->lr = rs->lr;
+ rd->cr = rs->cr;
+ rd->xer = rs->xer;
+ rd->ctr = rs->ctr;
+ rd->pc = rs->pc;
+#else
#error Unsupported architecture
#endif
}
@@ -53,6 +64,8 @@ elf_convert_fpregset(elfcore_fpregset_t *rd, struct fpreg *rs)
memcpy(rd, rs, sizeof(*rd));
#elif defined(__aarch64__)
/* ARM64TODO */
+#elif defined(__powerpc64__)
+ memcpy(rd, rs, sizeof(*rd));
#else
#error Unsupported architecture
#endif