kernel-ark/arch/i386/kernel
Chuck Ebbert 635cf99a80 [PATCH] i386: fix singlestep through an int80 syscall
Using PTRACE_SINGLESTEP on a child that does an int80 syscall misses the
SIGTRAP that should be delivered upon syscall exit.  Fix that by setting
TIF_SINGLESTEP when entering the kernel via int80 with TF set.

/* Test whether singlestep through an int80 syscall works.
 */
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include <asm/user.h>

static int child, status;
static struct user_regs_struct regs;

static void do_child()
{
	ptrace(PTRACE_TRACEME, 0, 0, 0);
	kill(getpid(), SIGUSR1);
	asm ("int $0x80" : : "a" (20)); /* getpid */
}

static void do_parent()
{
	unsigned long eip, expected = 0;
again:
	waitpid(child, &status, 0);
	if (WIFEXITED(status) || WIFSIGNALED(status))
		return;

	if (WIFSTOPPED(status)) {
		ptrace(PTRACE_GETREGS, child, 0, &regs);
		eip = regs.eip;
		if (expected)
			fprintf(stderr, "child stop @ %08x, expected %08x %s\n",
					eip, expected,
					eip == expected ? "" : " <== ERROR");

		if (*(unsigned short *)eip == 0x80cd) {
			fprintf(stderr, "int 0x80 at %08x\n", (unsigned int)eip);
			expected = eip + 2;
		} else
			expected = 0;

		ptrace(PTRACE_SINGLESTEP, child, NULL, NULL);
	}
	goto again;
}

int main(int argc, char * const argv[])
{
	child = fork();
	if (child)
		do_parent();
	else
		do_child();
	return 0;
}

Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-23 07:38:05 -08:00
..
acpi [PATCH] i386: port ATI timer fix from x86_64 to i386 II 2006-03-08 18:10:31 -08:00
cpu [PATCH] i386: fall back to sensible CPU model name 2006-03-23 07:38:04 -08:00
timers [PATCH] x86: mark cyc2ns_scale readmostly 2006-03-22 07:53:55 -08:00
.gitignore [PATCH] x86: gitignore some autogenerated files for i386 2006-02-14 16:09:35 -08:00
alternative.c [PATCH] x86: SMP alternatives 2006-03-23 07:38:04 -08:00
apic.c [PATCH] Plug kdump shutdown race window 2006-03-14 08:26:44 -08:00
apm.c [PATCH] capable/capability.h (arch/) 2006-01-11 18:42:14 -08:00
asm-offsets.c
bootflag.c
cpuid.c [PATCH] arch/i386/kernel/cpuid.c: unused variable 2006-01-06 08:33:38 -08:00
crash_dump.c [PATCH] kdump: read previous kernel's memory 2006-01-10 08:01:28 -08:00
crash.c [PATCH] i386: fix uses of user_mode() vs. user_mode_vm() 2006-03-23 07:38:05 -08:00
dmi_scan.c [PATCH] x86_64: Generalize DMI and enable for x86-64 2006-01-11 19:04:51 -08:00
doublefault.c
early_printk.c
efi_stub.S
efi.c [PATCH] efi_call_phys_epilog() warning fix 2006-03-22 07:53:55 -08:00
entry.S [PATCH] i386: fix singlestep through an int80 syscall 2006-03-23 07:38:05 -08:00
head.S [PATCH] x86: fix broken SMP boot sequence 2006-02-24 14:31:38 -08:00
i386_ksyms.c [PATCH] x86: fix broken SMP boot sequence 2006-02-24 14:31:38 -08:00
i387.c
i8237.c
i8259.c Revert "i386: move apic init in init_IRQs" 2005-10-31 19:16:17 -08:00
init_task.c [PATCH] Change maxaligned_in_smp alignemnt macros to internodealigned_in_smp macros 2006-01-08 20:13:38 -08:00
io_apic.c [PATCH] i386: port ATI timer fix from x86_64 to i386 II 2006-03-08 18:10:31 -08:00
ioport.c [PATCH] capable/capability.h (arch/) 2006-01-11 18:42:14 -08:00
irq.c [PATCH] Change maxaligned_in_smp alignemnt macros to internodealigned_in_smp macros 2006-01-08 20:13:38 -08:00
kprobes.c [PATCH] Kprobes causes NX protection fault on i686 SMP 2006-02-24 14:31:37 -08:00
ldt.c [PATCH] arch/i386/kernel/ldt.c should #include <asm/mmu_context.h> 2005-11-07 07:53:29 -08:00
machine_kexec.c [PATCH] fix kexec asm 2006-03-08 14:15:04 -08:00
Makefile [PATCH] x86: SMP alternatives 2006-03-23 07:38:04 -08:00
mca.c [PATCH] arch/i386: Use ARRAY_SIZE macro 2005-11-07 07:53:28 -08:00
microcode.c [PATCH] x86 microcode driver vs hotplug CPUs. 2006-02-28 20:53:43 -08:00
module.c [PATCH] x86: SMP alternatives 2006-03-23 07:38:04 -08:00
mpparse.c [PATCH] Compilation fix for ES7000 when no ACPI is specified in config (i386) 2006-03-23 07:38:04 -08:00
msr.c [PATCH] arch/i386/kernel/msr.c: removed unused variable 2006-01-06 08:33:38 -08:00
nmi.c [PATCH] x86: Fix i386 nmi_watchdog that does not trigger die_nmi 2006-03-08 14:14:01 -08:00
numaq.c
pci-dma.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
process.c [PATCH] i386: fix uses of user_mode() vs. user_mode_vm() 2006-03-23 07:38:05 -08:00
ptrace.c [PATCH] i386: Don't let ptrace set the nested task bit 2006-03-23 07:38:04 -08:00
quirks.c [PATCH] EDAC: core EDAC support code 2006-01-18 19:20:31 -08:00
reboot_fixups.c [PATCH] arch/i386/kernel/reboot_fixups.c should #include <linux/reboot_fixups.h> 2005-11-07 07:53:29 -08:00
reboot.c [PATCH] i386/x86-64: Don't IPI to offline cpus on shutdown 2006-01-11 19:04:50 -08:00
relocate_kernel.S
scx200.c [PATCH] arch: Replace pci_module_init() with pci_register_driver() 2006-01-09 12:13:21 -08:00
semaphore.c [PATCH] x86: SMP alternatives 2006-03-23 07:38:04 -08:00
setup.c [PATCH] x86: early printk handling fixes 2006-03-23 07:38:05 -08:00
sigframe.h
signal.c [PATCH] i386: let signal handlers set the resume flag 2006-03-23 07:38:05 -08:00
smp.c [PATCH] on_each_cpu(): disable local interrupts 2006-03-22 07:53:59 -08:00
smpboot.c [PATCH] x86: SMP alternatives 2006-03-23 07:38:04 -08:00
srat.c [PATCH] x86_64: Make i386 compile again with fourth DMA32 zone 2005-11-14 19:55:13 -08:00
summit.c
sys_i386.c [PATCH] Uninline sys_mmap common code (reduce binary size) 2006-03-22 07:54:02 -08:00
syscall_table.S [PATCH] fstatat64 support 2006-02-11 21:41:10 -08:00
sysenter.c
time_hpet.c [PATCH] move rtc_interrupt() prototype to rtc.h 2006-01-08 20:13:47 -08:00
time.c [PATCH] x86: fix potential jiffies overflow in timer_resume() 2006-03-06 18:40:44 -08:00
topology.c [PATCH] Fix topology.c location 2006-02-24 14:31:39 -08:00
trampoline.S
traps.c [PATCH] i386: fix uses of user_mode() vs. user_mode_vm() 2006-03-23 07:38:05 -08:00
vm86.c correct email address of Manfred Spraul 2006-01-15 02:43:54 +01:00
vmlinux.lds.S [PATCH] x86: SMP alternatives 2006-03-23 07:38:04 -08:00
vsyscall-int80.S
vsyscall-note.S
vsyscall-sigreturn.S
vsyscall-sysenter.S [PATCH] x86: document sysenter path 2006-02-14 16:09:35 -08:00
vsyscall.lds.S
vsyscall.S