diff -Naur crash-gcore-command-1.3.1_orig/libgcore/gcore_x86.c crash-gcore-command-1.3.1/libgcore/gcore_x86.c
--- crash-gcore-command-1.3.1_orig/libgcore/gcore_x86.c	2014-11-06 09:58:47.000000000 +0000
+++ crash-gcore-command-1.3.1/libgcore/gcore_x86.c	2016-10-01 06:18:32.201965162 +0000
@@ -1648,17 +1648,27 @@
 {
 	const int nr_syscall = (int)regs->orig_ax;
 
-	/*
-	 * rsp is saved in per-CPU old_rsp, which is saved in
-	 * thread->usersp at each context switch.
-	 */
-	if (is_task_active(target->task)) {
-		regs->sp = gxt->get_old_rsp(target->processor);
-	} else {
-		readmem(target->task + OFFSET(task_struct_thread) +
-			GCORE_OFFSET(thread_struct_usersp), KVADDR, &regs->sp,
-			sizeof(regs->sp),
-			"genregs_get: usersp", gcore_verbose_error_handle());
+	if (THIS_KERNEL_VERSION < LINUX(4,4,0) /* not sure */) {
+		/*
+		 * rsp is saved in per-CPU old_rsp, which is saved in
+		 * thread->usersp at each context switch.
+		 */
+		if (is_task_active(target->task)) {
+			regs->sp = gxt->get_old_rsp(target->processor);
+		} else {
+			readmem(target->task + OFFSET(task_struct_thread) +
+				GCORE_OFFSET(thread_struct_usersp), KVADDR, &regs->sp,
+				sizeof(regs->sp),
+				"genregs_get: usersp", gcore_verbose_error_handle());
+		}
+
+		/*
+		 * See FIXUP_TOP_OF_STACK in arch/x86/kernel/entry_64.S.
+		 */
+		regs->ss = __USER_DS;
+		regs->cs = __USER_CS;
+		regs->cx = (ulong)-1;
+		regs->flags = regs->r11;
 	}
 
 	/*
@@ -1667,14 +1677,6 @@
 	if (!gxt->is_special_syscall(nr_syscall))
 		restore_rest(target->task, regs, active_regs);
 
-	/*
-	 * See FIXUP_TOP_OF_STACK in arch/x86/kernel/entry_64.S.
-	 */
-	regs->ss = __USER_DS;
-	regs->cs = __USER_CS;
-	regs->cx = (ulong)-1;
-	regs->flags = regs->r11;
-
 	restore_segment_registers(target->task, regs);
 }