From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25487 invoked by alias); 8 Nov 2002 23:58:06 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 25462 invoked from network); 8 Nov 2002 23:58:03 -0000 Received: from unknown (HELO walton.kettenis.dyndns.org) (62.163.169.250) by sources.redhat.com with SMTP; 8 Nov 2002 23:58:03 -0000 Received: from elgar.kettenis.dyndns.org (elgar.kettenis.dyndns.org [192.168.0.2]) by walton.kettenis.dyndns.org (8.12.6/8.12.5) with ESMTP id gA8Nw2tm000308 for ; Sat, 9 Nov 2002 00:58:02 +0100 (CET) (envelope-from kettenis@elgar.kettenis.dyndns.org) Received: from elgar.kettenis.dyndns.org (localhost [127.0.0.1]) by elgar.kettenis.dyndns.org (8.12.6/8.12.6) with ESMTP id gA8Nw2Pl017056 for ; Sat, 9 Nov 2002 00:58:02 +0100 (CET) (envelope-from kettenis@elgar.kettenis.dyndns.org) Received: (from kettenis@localhost) by elgar.kettenis.dyndns.org (8.12.6/8.12.6/Submit) id gA8Nw2Dj017053; Sat, 9 Nov 2002 00:58:02 +0100 (CET) Date: Fri, 08 Nov 2002 15:58:00 -0000 Message-Id: <200211082358.gA8Nw2Dj017053@elgar.kettenis.dyndns.org> From: Mark Kettenis To: gdb-patches@sources.redhat.com Subject: [PATCH] Use PT_IO ptrace request if available X-SW-Source: 2002-11/txt/msg00266.txt.bz2 The attached patch makes use of the PT_IO ptrace request that's available in *BSD for data transfers to/from the inferior. It's a couple of weeks ago now that my patch that fixes the FreeBSD 5.0-CURRENT kernel went in, and I hope that OpenBSD and NetBSD don't have any problems. We'll probably find out soon :-). Note that if you run FreeBSD 5.0-CURRENT from before October 16 and after March 16, your machine will probably lock up when using GDB. However, since -CURRENT is a development version, I think it's acceptable to ask people to upgrade. It would be great if we could get Linux to support the same interface. Committed. Mark Index: ChangeLog from Mark Kettenis * infptrace.c (child_xfer_memory): Make use of the new PT_IO request that's available in *BSD. Index: infptrace.c =================================================================== RCS file: /cvs/src/src/gdb/infptrace.c,v retrieving revision 1.21 diff -u -p -r1.21 infptrace.c --- infptrace.c 19 Jan 2002 03:32:36 -0000 1.21 +++ infptrace.c 8 Nov 2002 23:45:18 -0000 @@ -514,6 +514,37 @@ child_xfer_memory (CORE_ADDR memaddr, ch PTRACE_XFER_TYPE *buffer; struct cleanup *old_chain = NULL; +#ifdef PT_IO + /* OpenBSD 3.1, NetBSD 1.6 and FreeBSD 5.0 have a new PT_IO request + that promises to be much more efficient in reading and writing + data in the traced process's address space. */ + + { + struct ptrace_io_desc piod; + + /* NOTE: We assume that there are no distinct address spaces for + instruction and data. */ + piod.piod_op = write ? PIOD_WRITE_D : PIOD_READ_D; + piod.piod_offs = (void *) memaddr; + piod.piod_addr = myaddr; + piod.piod_len = len; + + if (ptrace (PT_IO, PIDGET (inferior_ptid), (caddr_t) &piod, 0) == -1) + { + /* If the PT_IO request is somehow not supported, fallback on + using PT_WRITE_D/PT_READ_D. Otherwise we will return zero + to indicate failure. */ + if (errno != EINVAL) + return 0; + } + else + { + /* Return the actual number of bytes read or written. */ + return piod.piod_len; + } + } +#endif + /* Allocate buffer of that many longwords. */ if (len < GDB_MAX_ALLOCA) {