From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32312 invoked by alias); 4 Nov 2003 19:09:48 -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 32304 invoked from network); 4 Nov 2003 19:09:48 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (207.219.125.105) by sources.redhat.com with SMTP; 4 Nov 2003 19:09:48 -0000 Received: from redhat.com (toocool.toronto.redhat.com [172.16.14.72]) by touchme.toronto.redhat.com (Postfix) with ESMTP id 9A91E800046; Tue, 4 Nov 2003 14:09:47 -0500 (EST) Message-ID: <3FA7F97B.4090909@redhat.com> Date: Tue, 04 Nov 2003 19:09:00 -0000 From: "J. Johnston" Organization: Red Hat Inc. User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Andrew Cagney Cc: Daniel Jacobowitz , Kevin Buettner , Marcel Moolenaar , gdb-patches@sources.redhat.com Subject: Re: RFA: ia64 portion of libunwind patch References: <3F986E31.8050201@redhat.com> <1031024175718.ZM3475@localhost.localdomain> <3F996D88.9060505@redhat.com> <1031024185625.ZM9827@localhost.localdomain> <3F9F0180.2010702@redhat.com> <20031029012833.GA11070@nevyn.them.org> <3FA043B2.6090401@redhat.com> In-Reply-To: <3FA043B2.6090401@redhat.com> Content-Type: multipart/mixed; boundary="------------080106070806050004000803" X-SW-Source: 2003-11/txt/msg00046.txt.bz2 This is a multi-part message in MIME format. --------------080106070806050004000803 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 2057 I have chosen the first option to implement the syscall. I have included a patch here regarding this mechanism. Ok to commit? -- Jeff J. 2003-11-04 Jeff Johnston * config/ia64/nm-linux.h (CHILD_TO_XFER_PARTIAL): New macro to set up the ia64 linux native target to_xfer_partial method. (ia64_linux_xfer_partial): New prototype. * ia64-linux-nat.c (ia64_linux_xfer_partial): New function. * inftarg.c (init_child_ops)[CHILD_TO_XFER_PARTIAL]: Set up xfer partial method if one provided via macro. * target.c (init_dummy_target): Initialize to_xfer_partial to default. * target.h (target_object): Add new TARGET_OBJECT_UNWIND_TABLE enum. Andrew Cagney wrote: >> Nothing which involves a syscall is acceptable in a tdep file. That's >> what the t means - target support. > > > ("tdep" mysteriously means "architecture vector support". That "t" > really no longer makes sense :-() > > Yes, architecture vector shouldn't be directly making syscalls. Instead > the architecture specific code should use the target vector to obtain > this system information. Here I think the best option is to add another > TARGET_OBJECT_xxxx variant and then use the target_read() method to pull > in the data. > > As for the native target side, ia64-linux-nat should export something > like ia64_linux_child_read_partial that performs the syscall. The > tricky [er messy] part is wiring it into child_ops, I see there are lots > of choices :-( > > - define a nm-*.c macro and have that enable the assignment (ex #define > NATIVE_TO_READ_PARTIAL ia64_linux_child?) (ref KILL_INFERIOR) > > - have a callback set the to_read_partial method in child_ops > (exec_set_find_memory_regions) > > - modify all the targets so that each implements the new method > > - others? > > Is this information available via /proc? In a core file? > > Andrew > > PS: Note this pending patch. Dependant on the timing you or I may need > to tweak the name. > http://sources.redhat.com/ml/gdb-patches/2003-10/msg00795.html > > > --------------080106070806050004000803 Content-Type: text/plain; name="xfer_partial.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xfer_partial.patch" Content-length: 4491 Index: config/ia64/nm-linux.h =================================================================== RCS file: /cvs/src/src/gdb/config/ia64/nm-linux.h,v retrieving revision 1.10 diff -u -r1.10 nm-linux.h --- config/ia64/nm-linux.h 20 Jun 2003 13:57:29 -0000 1.10 +++ config/ia64/nm-linux.h 4 Nov 2003 16:53:37 -0000 @@ -69,4 +69,13 @@ extern int ia64_linux_remove_watchpoint (ptid_t ptid, CORE_ADDR addr, int len); +#include "target.h" + +#define CHILD_TO_XFER_PARTIAL ia64_linux_xfer_partial +extern LONGEST ia64_linux_xfer_partial (struct target_ops *ops, + enum target_object object, + const char *annex, const void *writebuf, + void *readbuf, + ULONGEST offset, LONGEST len); + #endif /* #ifndef NM_LINUX_H */ Index: ia64-linux-nat.c =================================================================== RCS file: /cvs/src/src/gdb/ia64-linux-nat.c,v retrieving revision 1.20 diff -u -r1.20 ia64-linux-nat.c --- ia64-linux-nat.c 2 Oct 2003 20:28:29 -0000 1.20 +++ ia64-linux-nat.c 4 Nov 2003 16:53:37 -0000 @@ -34,6 +34,7 @@ #ifdef HAVE_SYS_REG_H #include #endif +#include #include #include @@ -644,4 +645,48 @@ write_register_pid (IA64_PSR_REGNUM, psr, ptid); return (CORE_ADDR) siginfo.si_addr; +} + +LONGEST +ia64_linux_xfer_partial (struct target_ops *ops, + enum target_object object, + const char *annex, const void *writebuf, + void *readbuf, + ULONGEST offset, LONGEST len) +{ + switch (object) + { + case TARGET_OBJECT_UNWIND_TABLE: + return syscall (__NR_getunwind, readbuf, len); + case TARGET_OBJECT_MEMORY: + if (ops->to_xfer_memory != NULL) + /* Fall back to the target's "to_xfer_memory" method. */ + { + int xfered = -1; + errno = 0; + if (writebuf != NULL) + { + void *buffer = xmalloc (len); + struct cleanup *cleanup = make_cleanup (xfree, buffer); + memcpy (buffer, writebuf, len); + xfered = ops->to_xfer_memory (offset, buffer, len, 1/*write*/, NULL, + ops); + do_cleanups (cleanup); + } + if (readbuf != NULL) + xfered = ops->to_xfer_memory (offset, readbuf, len, 0/*read*/, NULL, + ops); + + if (xfered > 0) + return xfered; + else if (xfered == 0 && errno == 0) + /* "to_xfer_memory" uses 0, cross checked against ERRNO as one + indication of an error. */ + return 0; + else + return -1; + } + default: + return -1; + } } Index: inftarg.c =================================================================== RCS file: /cvs/src/src/gdb/inftarg.c,v retrieving revision 1.18 diff -u -r1.18 inftarg.c --- inftarg.c 21 Sep 2003 01:26:45 -0000 1.18 +++ inftarg.c 4 Nov 2003 16:53:37 -0000 @@ -609,6 +609,9 @@ child_ops.to_get_current_exception_event = child_get_current_exception_event; child_ops.to_pid_to_exec_file = child_pid_to_exec_file; child_ops.to_stratum = process_stratum; +#ifdef CHILD_TO_XFER_PARTIAL + child_ops.to_xfer_partial = CHILD_TO_XFER_PARTIAL; +#endif child_ops.to_has_all_memory = 1; child_ops.to_has_memory = 1; child_ops.to_has_stack = 1; Index: target.c =================================================================== RCS file: /cvs/src/src/gdb/target.c,v retrieving revision 1.64 diff -u -r1.64 target.c --- target.c 31 Oct 2003 15:25:34 -0000 1.64 +++ target.c 4 Nov 2003 16:53:38 -0000 @@ -1644,6 +1644,7 @@ dummy_target.to_stratum = dummy_stratum; dummy_target.to_find_memory_regions = dummy_find_memory_regions; dummy_target.to_make_corefile_notes = dummy_make_corefile_notes; + dummy_target.to_xfer_partial = default_xfer_partial; dummy_target.to_magic = OPS_MAGIC; } Index: target.h =================================================================== RCS file: /cvs/src/src/gdb/target.h,v retrieving revision 1.51 diff -u -r1.51 target.h --- target.h 31 Oct 2003 19:19:51 -0000 1.51 +++ target.h 4 Nov 2003 16:53:38 -0000 @@ -223,8 +223,10 @@ /* AVR target specific transfer. See "avr-tdep.c" and "remote.c". */ TARGET_OBJECT_AVR, /* Transfer up-to LEN bytes of memory starting at OFFSET. */ - TARGET_OBJECT_MEMORY - /* Possible future ojbects: TARGET_OJBECT_FILE, TARGET_OBJECT_PROC, + TARGET_OBJECT_MEMORY, + /* Kernel Unwind Table. See "ia64-tdep.c". */ + TARGET_OBJECT_UNWIND_TABLE, + /* Possible future objects: TARGET_OBJECT_FILE, TARGET_OBJECT_PROC, TARGET_OBJECT_AUXV, ... */ }; --------------080106070806050004000803--