From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32480 invoked by alias); 26 Nov 2004 20:37:52 -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 32308 invoked from network); 26 Nov 2004 20:37:42 -0000 Received: from unknown (HELO hub.ott.qnx.com) (209.226.137.76) by sourceware.org with SMTP; 26 Nov 2004 20:37:42 -0000 Received: from smtp.ott.qnx.com (smtp.ott.qnx.com [10.0.2.158]) by hub.ott.qnx.com (8.9.3/8.9.3) with ESMTP id QAA16779 for ; Fri, 26 Nov 2004 16:00:00 -0500 Received: from [10.12.1.181] (dhcpa181 [10.12.1.181]) by smtp.ott.qnx.com (8.8.8/8.6.12) with ESMTP id PAA02759 for ; Fri, 26 Nov 2004 15:37:41 -0500 Message-ID: <41A794A8.9090008@qnx.com> Date: Fri, 26 Nov 2004 20:37:00 -0000 From: Kris Warkentin User-Agent: Mozilla Thunderbird 0.8 (Windows/20040913) MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: Ping: [patch] general updates and improvements to QNX NTO support References: <419E5B3C.3020209@qnx.com> In-Reply-To: <419E5B3C.3020209@qnx.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2004-11/txt/msg00476.txt.bz2 Pinging sources.redhat.com [12.107.209.250] with 21229 bytes of data: Kris Warkentin wrote: > Sorry about the vagueness of the patch description. I've been working > on this off and on for a while but I've been lazy about submitting. > By and large, most of this is just about being able to switch targets > to future-proof against a multi-arch gdb. > > Also I've created hooks for recognizing when we're dealing with a > Neutrino target. Unfortunately there is no nice way to recognize our > binaries so I have to fall back on cheating. > > A few other things are there as well such as an > 'in_dynsym_resolve_code' for better solib support, a core sniffer and > some assorted re-arrangement of things. > > I had started getting rid of some of the deprecated things (core_fns) > but was having trouble so I ripped that part of the patch out to work > on and submit later. Looks like I'm also going to have to get rid of > to_xfer_memory. > > cheers, > > Kris > > ChangeLog entry: > 2004-11-19 Kris Warkentin > > * nto-tdep.h: Include osabi.h. Prototypes for generic Neutrino > osabi sniffer, signal handling initializer and > 'in_dynsym_resolve_code' function. > (struct nto_target_ops): Put comments inline with struct. Add osabi > sniffer hook. Redefine macros to permit testing/assignment. > * nto-tdep.c (nto_find_and_open_solib): Allocate all buffers > dynamically to support arbitrary root paths. Check for basename of > lib in search path and then check for absolute. > (nto_in_dynsym_resolve_code): New function. > (nto_core_sniffer): New function. > (regset_core_fns): Register core sniffer. > (nto_initialize_signals): New function. > (_initialize_nto_tdep): Move signal initialization code to above to > avoid initialization race conditions. > * nto-procfs.c: Minor formatting/indenting changes. > (procfs_is_nto_target): New function. > (procfs_open): Set nto_is_nto_target. > (_initialize_procfs): Ditto. Remove notice_signals() call to avoid > initialization race conditions. > (procfs_create_inferior): Resume inferior after creation. > * i386-nto-tdep.c (init_i386nto_ops): Use new macros for assignment. > (i386nto_init_abi): Initialize signals. Set > TARGET_SO_IN_DYNSYM_RESOLVE_CODE. > (_initialize_i386nto_tdep): Register osabi sniffer. > >------------------------------------------------------------------------ > >Index: i386-nto-tdep.c >=================================================================== >RCS file: /cvs/src/src/gdb/i386-nto-tdep.c,v >retrieving revision 1.15 >diff -u -r1.15 i386-nto-tdep.c >--- i386-nto-tdep.c 31 Oct 2004 19:52:46 -0000 1.15 >+++ i386-nto-tdep.c 19 Nov 2004 20:07:18 -0000 >@@ -258,15 +258,14 @@ > static void > init_i386nto_ops (void) > { >- current_nto_target.nto_regset_id = i386nto_regset_id; >- current_nto_target.nto_supply_gregset = i386nto_supply_gregset; >- current_nto_target.nto_supply_fpregset = i386nto_supply_fpregset; >- current_nto_target.nto_supply_altregset = nto_dummy_supply_regset; >- current_nto_target.nto_supply_regset = i386nto_supply_regset; >- current_nto_target.nto_register_area = i386nto_register_area; >- current_nto_target.nto_regset_fill = i386nto_regset_fill; >- current_nto_target.nto_fetch_link_map_offsets = >- i386nto_svr4_fetch_link_map_offsets; >+ nto_regset_id = i386nto_regset_id; >+ nto_supply_gregset = i386nto_supply_gregset; >+ nto_supply_fpregset = i386nto_supply_fpregset; >+ nto_supply_altregset = nto_dummy_supply_regset; >+ nto_supply_regset = i386nto_supply_regset; >+ nto_register_area = i386nto_register_area; >+ nto_regset_fill = i386nto_regset_fill; >+ nto_fetch_link_map_offsets = i386nto_svr4_fetch_link_map_offsets; > } > > static void >@@ -274,6 +273,9 @@ > { > struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); > >+ /* Deal with our strange signals. */ >+ nto_initialize_signals (); >+ > /* NTO uses ELF. */ > i386_elf_init_abi (info, gdbarch); > >@@ -301,6 +303,9 @@ > /* Supply a nice function to find our solibs. */ > TARGET_SO_FIND_AND_OPEN_SOLIB = nto_find_and_open_solib; > >+ /* Our linker code is in libc. */ >+ TARGET_SO_IN_DYNSYM_RESOLVE_CODE = nto_in_dynsym_resolve_code; >+ > init_i386nto_ops (); > } > >@@ -309,4 +314,6 @@ > { > gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_QNXNTO, > i386nto_init_abi); >+ gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, >+ nto_elf_osabi_sniffer); > } >Index: nto-procfs.c >=================================================================== >RCS file: /cvs/src/src/gdb/nto-procfs.c,v >retrieving revision 1.6 >diff -u -r1.6 nto-procfs.c >--- nto-procfs.c 8 Oct 2004 20:29:47 -0000 1.6 >+++ nto-procfs.c 19 Nov 2004 20:07:18 -0000 >@@ -97,20 +97,26 @@ > is required is because QNX node descriptors are transient so > we have to re-acquire them every time. */ > static unsigned >-nto_node(void) >+nto_node (void) > { > unsigned node; > >- if (ND_NODE_CMP(nto_procfs_node, ND_LOCAL_NODE) == 0) >+ if (ND_NODE_CMP (nto_procfs_node, ND_LOCAL_NODE) == 0) > return ND_LOCAL_NODE; > >- node = netmgr_strtond(nto_procfs_path,0); >+ node = netmgr_strtond (nto_procfs_path, 0); > if (node == -1) >- error ("Lost the QNX node. Debug session probably over."); >+ error ("Lost the QNX node. Debug session probably over."); > > return (node); > } > >+static enum gdb_osabi >+procfs_is_nto_target (bfd *abfd) >+{ >+ return GDB_OSABI_QNXNTO; >+} >+ > /* This is called when we call 'target procfs ' from the (gdb) prompt. > For QNX6 (nto), the only valid arg will be a QNX node string, > eg: "/net/some_node". If arg is not a valid QNX node, we will >@@ -124,6 +130,8 @@ > int fd, total_size; > procfs_sysinfo *sysinfo; > >+ nto_is_nto_target = procfs_is_nto_target; >+ > /* Set the default node used for spawning to this one, > and only override it if there is a valid arg. */ > >@@ -153,7 +161,8 @@ > *endstr = 0; > } > } >- snprintf (nto_procfs_path, PATH_MAX - 1, "%s%s", nodestr ? nodestr : "", "/proc"); >+ snprintf (nto_procfs_path, PATH_MAX - 1, "%s%s", nodestr ? nodestr : "", >+ "/proc"); > if (nodestr) > xfree (nodestr); > >@@ -271,7 +280,7 @@ > if (dp == NULL) > { > fprintf_unfiltered (gdb_stderr, "failed to opendir \"%s\" - %d (%s)", >- nto_procfs_path, errno, safe_strerror (errno)); >+ nto_procfs_path, errno, safe_strerror (errno)); > return; > } > >@@ -299,7 +308,7 @@ > if (fd == -1) > { > fprintf_unfiltered (gdb_stderr, "failed to open %s - %d (%s)\n", >- buf, errno, safe_strerror (errno)); >+ buf, errno, safe_strerror (errno)); > closedir (dp); > return; > } >@@ -308,8 +317,8 @@ > if (devctl (fd, DCMD_PROC_INFO, pidinfo, sizeof (buf), 0) != EOK) > { > fprintf_unfiltered (gdb_stderr, >- "devctl DCMD_PROC_INFO failed - %d (%s)\n", errno, >- safe_strerror (errno)); >+ "devctl DCMD_PROC_INFO failed - %d (%s)\n", >+ errno, safe_strerror (errno)); > break; > } > num_threads = pidinfo->num_threads; >@@ -375,7 +384,8 @@ > err = devctl (ctl_fd, DCMD_PROC_MAPINFO, NULL, 0, &num); > if (err != EOK) > { >- printf ("failed devctl num mapinfos - %d (%s)\n", err, safe_strerror (err)); >+ printf ("failed devctl num mapinfos - %d (%s)\n", err, >+ safe_strerror (err)); > return; > } > >@@ -565,7 +575,7 @@ > > if (devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0) == EOK > && status.flags & _DEBUG_FLAG_STOPPED) >- SignalKill (nto_node(), PIDGET (ptid), 0, SIGCONT, 0, 0); >+ SignalKill (nto_node (), PIDGET (ptid), 0, SIGCONT, 0, 0); > attach_flag = 1; > nto_init_solib_absolute_prefix (); > return ptid; >@@ -778,7 +788,7 @@ > siggnal = atoi (args); > > if (siggnal) >- SignalKill (nto_node(), PIDGET (inferior_ptid), 0, siggnal, 0, 0); >+ SignalKill (nto_node (), PIDGET (inferior_ptid), 0, siggnal, 0, 0); > > close (ctl_fd); > ctl_fd = -1; >@@ -868,8 +878,8 @@ > { > if (signal_to_pass != status.info.si_signo) > { >- SignalKill (nto_node(), PIDGET (inferior_ptid), 0, signal_to_pass, >- 0, 0); >+ SignalKill (nto_node (), PIDGET (inferior_ptid), 0, >+ signal_to_pass, 0, 0); > run.flags |= _DEBUG_RUN_CLRFLT | _DEBUG_RUN_CLRSIG; > } > else /* Let it kill the program without telling us. */ >@@ -892,7 +902,7 @@ > { > if (!ptid_equal (inferior_ptid, null_ptid)) > { >- SignalKill (nto_node(), PIDGET (inferior_ptid), 0, SIGKILL, 0, 0); >+ SignalKill (nto_node (), PIDGET (inferior_ptid), 0, SIGKILL, 0, 0); > close (ctl_fd); > } > inferior_ptid = null_ptid; >@@ -1042,7 +1052,7 @@ > > if (ND_NODE_CMP (nto_procfs_node, ND_LOCAL_NODE) != 0) > { >- inherit.nd = nto_node(); >+ inherit.nd = nto_node (); > inherit.flags |= SPAWN_SETND; > inherit.flags &= ~SPAWN_EXEC; > } >@@ -1055,7 +1065,8 @@ > sigprocmask (SIG_BLOCK, &set, NULL); > > if (pid == -1) >- error ("Error spawning %s: %d (%s)", argv[0], errno, safe_strerror (errno)); >+ error ("Error spawning %s: %d (%s)", argv[0], errno, >+ safe_strerror (errno)); > > if (fds[0] != STDIN_FILENO) > close (fds[0]); >@@ -1083,6 +1094,8 @@ > || (symfile_objfile != NULL && symfile_objfile->obfd != NULL)) > SOLIB_CREATE_INFERIOR_HOOK (pid); > #endif >+ stop_soon = 0; >+ proceed (-1, TARGET_SIGNAL_DEFAULT, 0); > } > > static void >@@ -1324,7 +1337,6 @@ > > /* Set up trace and fault sets, as gdb expects them. */ > sigemptyset (&run.trace); >- notice_signals (); > > /* Stuff some information. */ > nto_cpuinfo_flags = SYSPAGE_ENTRY (cpuinfo)->flags; >@@ -1332,6 +1344,8 @@ > > add_info ("pidlist", procfs_pidlist, "pidlist"); > add_info ("meminfo", procfs_meminfo, "memory information"); >+ >+ nto_is_nto_target = procfs_is_nto_target; > } > > >Index: nto-tdep.c >=================================================================== >RCS file: /cvs/src/src/gdb/nto-tdep.c,v >retrieving revision 1.9 >diff -u -r1.9 nto-tdep.c >--- nto-tdep.c 30 Jul 2004 19:17:19 -0000 1.9 >+++ nto-tdep.c 19 Nov 2004 20:07:18 -0000 >@@ -86,10 +86,10 @@ > int > nto_find_and_open_solib (char *solib, unsigned o_flags, char **temp_pathname) > { >- char *buf, arch_path[PATH_MAX], *nto_root, *endian; >+ char *buf, *arch_path, *nto_root, *endian, *base; > const char *arch; >- char *path_fmt = "%s/lib:%s/usr/lib:%s/usr/photon/lib\ >-:%s/usr/photon/dll:%s/lib/dll"; >+ int ret; >+#define PATH_FMT "%s/lib:%s/usr/lib:%s/usr/photon/lib:%s/usr/photon/dll:%s/lib/dll" > > nto_root = nto_target (); > if (strcmp (TARGET_ARCHITECTURE->arch_name, "i386") == 0) >@@ -109,13 +109,38 @@ > endian = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "be" : "le"; > } > >+ /* In case nto_root is short, add strlen(solib) >+ so we can reuse arch_path below. */ >+ arch_path = >+ alloca (strlen (nto_root) + strlen (arch) + strlen (endian) + 2 + >+ strlen (solib)); > sprintf (arch_path, "%s/%s%s", nto_root, arch, endian); > >- buf = alloca (strlen (path_fmt) + strlen (arch_path) * 5 + 1); >- sprintf (buf, path_fmt, arch_path, arch_path, arch_path, arch_path, >+ buf = alloca (strlen (PATH_FMT) + strlen (arch_path) * 5 + 1); >+ sprintf (buf, PATH_FMT, arch_path, arch_path, arch_path, arch_path, > arch_path); > >- return openp (buf, OPF_TRY_CWD_FIRST, solib, o_flags, 0, temp_pathname); >+ /* Don't assume basename() isn't destructive. */ >+ base = strrchr (solib, '/'); >+ if (!base) >+ base = solib; >+ else >+ base++; /* Skip over '/'. */ >+ >+ ret = openp (buf, 1, base, o_flags, 0, temp_pathname); >+ if (ret < 0 && base != solib) >+ { >+ sprintf (arch_path, "/%s", solib); >+ ret = open (arch_path, o_flags, 0); >+ if (temp_pathname) >+ { >+ if (ret >= 0) >+ *temp_pathname = gdb_realpath (arch_path); >+ else >+ **temp_pathname = '\0'; >+ } >+ } >+ return ret; > } > > void >@@ -266,6 +291,53 @@ > sec->endaddr = nto_truncate_ptr (sec->endaddr + LM_ADDR (so) - vaddr); > } > >+/* This is cheating a bit because our linker code is in libc.so. If we >+ ever implement lazy linking, this may need to be re-examined. */ >+int >+nto_in_dynsym_resolve_code (CORE_ADDR pc) >+{ >+ if (in_plt_section (pc, NULL)) >+ return 1; >+ return 0; >+} >+ >+void >+nto_generic_supply_gpregset (const struct regset *regset, >+ struct regcache *regcache, int regnum, >+ const void *gregs, size_t len) >+{ >+} >+ >+void >+nto_generic_supply_fpregset (const struct regset *regset, >+ struct regcache *regcache, int regnum, >+ const void *fpregs, size_t len) >+{ >+} >+ >+void >+nto_generic_supply_altregset (const struct regset *regset, >+ struct regcache *regcache, int regnum, >+ const void *altregs, size_t len) >+{ >+} >+ >+void >+nto_dummy_supply_regset (char *regs) >+{ >+ /* Do nothing. */ >+} >+ >+enum gdb_osabi >+nto_elf_osabi_sniffer (bfd *abfd) >+{ >+ if (nto_is_nto_target) >+ { >+ return nto_is_nto_target (abfd); >+ } >+ return GDB_OSABI_UNKNOWN; >+} >+ > static void > fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, > int which, CORE_ADDR reg_addr) >@@ -287,12 +359,6 @@ > } > } > >-void >-nto_dummy_supply_regset (char *regs) >-{ >- /* Do nothing. */ >-} >- > /* Register that we are able to handle ELF file formats using standard > procfs "regset" structures. */ > static struct core_fns regset_core_fns = { >@@ -304,18 +370,8 @@ > }; > > void >-_initialize_nto_tdep (void) >+nto_initialize_signals (void) > { >- add_setshow_zinteger_cmd ("nto-debug", class_maintenance, >- &nto_internal_debugging, "\ >-Set QNX NTO internal debugging.", "\ >-Show QNX NTO internal debugging.", "\ >-When non-zero, nto specific debug info is\n\ >-displayed. Different information is displayed\n\ >-for different positive values.", "\ >-QNX NTO internal debugging is %s.", >- NULL, NULL, &setdebuglist, &showdebuglist); >- > /* We use SIG45 for pulses, or something, so nostop, noprint > and pass them. */ > signal_stop_update (target_signal_from_name ("SIG45"), 0); >@@ -334,7 +390,19 @@ > signal_print_update (SIGPHOTON, 0); > signal_pass_update (SIGPHOTON, 1); > #endif >+} > >+void >+_initialize_nto_tdep (void) >+{ >+ add_setshow_zinteger_cmd ("nto-debug", class_maintenance, >+ &nto_internal_debugging, "\ >+Set QNX NTO internal debugging.", "\ >+Show QNX NTO internal debugging.", "\ >+When non-zero, nto specific debug info is\n\ >+displayed. Different information is displayed\n\ >+for different positive values.", "\ >+QNX NTO internal debugging is %s.", NULL, NULL, &setdebuglist, &showdebuglist); > /* Register core file support. */ > deprecated_add_core_fns (®set_core_fns); > } >Index: nto-tdep.h >=================================================================== >RCS file: /cvs/src/src/gdb/nto-tdep.h,v >retrieving revision 1.2 >diff -u -r1.2 nto-tdep.h >--- nto-tdep.h 6 May 2003 16:47:47 -0000 1.2 >+++ nto-tdep.h 19 Nov 2004 20:07:18 -0000 >@@ -26,6 +26,8 @@ > > #include "defs.h" > #include "solist.h" >+#include "osabi.h" >+#include "regset.h" > > /* Generic functions in nto-tdep.c. */ > >@@ -36,39 +38,38 @@ > > int proc_iterate_over_mappings (int (*func) (int, CORE_ADDR)); > >-void nto_relocate_section_addresses (struct so_list *, struct section_table *); >+void nto_relocate_section_addresses (struct so_list *, >+ struct section_table *); > > int nto_map_arch_to_cputype (const char *); > > int nto_find_and_open_solib (char *, unsigned, char **); > >+enum gdb_osabi nto_elf_osabi_sniffer (bfd *abfd); >+ >+void nto_initialize_signals (void); >+ >+void nto_generic_supply_gpregset (const struct regset *, struct regcache *, >+ int, const void *, size_t); >+ >+void nto_generic_supply_fpregset (const struct regset *, struct regcache *, >+ int, const void *, size_t); >+ >+void nto_generic_supply_altregset (const struct regset *, struct regcache *, >+ int, const void *, size_t); >+ > /* Dummy function for initializing nto_target_ops on targets which do > not define a particular regset. */ > void nto_dummy_supply_regset (char *regs); > >+int nto_in_dynsym_resolve_code (CORE_ADDR pc); >+ > /* Target operations defined for Neutrino targets (-nto-tdep.c). */ > > struct nto_target_ops > { >- int nto_internal_debugging; >- unsigned nto_cpuinfo_flags; >- int nto_cpuinfo_valid; >- >- int (*nto_regset_id) (int); >- void (*nto_supply_gregset) (char *); >- void (*nto_supply_fpregset) (char *); >- void (*nto_supply_altregset) (char *); >- void (*nto_supply_regset) (int, char *); >- int (*nto_register_area) (int, int, unsigned *); >- int (*nto_regset_fill) (int, char *); >- struct link_map_offsets *(*nto_fetch_link_map_offsets) (void); >-}; >- >-extern struct nto_target_ops current_nto_target; >- > /* For 'maintenance debug nto-debug' command. */ >-#define nto_internal_debugging \ >- (current_nto_target.nto_internal_debugging) >+ int nto_internal_debugging; > > /* The CPUINFO flags from the remote. Currently used by > i386 for fxsave but future proofing other hosts. >@@ -76,47 +77,69 @@ > depending on our host/target. It would only be invalid > if we were talking to an older pdebug which didn't support > the cpuinfo message. */ >-#define nto_cpuinfo_flags \ >- (current_nto_target.nto_cpuinfo_flags) >+ unsigned nto_cpuinfo_flags; > > /* True if successfully retrieved cpuinfo from remote. */ >-#define nto_cpuinfo_valid \ >- (current_nto_target.nto_cpuinfo_valid) >+ int nto_cpuinfo_valid; > > /* Given a register, return an id that represents the Neutrino > regset it came from. If reg == -1 update all regsets. */ >-#define nto_regset_id(reg) \ >- (*current_nto_target.nto_regset_id) (reg) >+ int (*nto_regset_id) (int); > >-#define nto_supply_gregset(regs) \ >- (*current_nto_target.nto_supply_gregset) (regs) >+ void (*nto_supply_gregset) (char *); > >-#define nto_supply_fpregset(regs) \ >- (*current_nto_target.nto_supply_fpregset) (regs) >+ void (*nto_supply_fpregset) (char *); > >-#define nto_supply_altregset(regs) \ >- (*current_nto_target.nto_supply_altregset) (regs) >+ void (*nto_supply_altregset) (char *); > > /* Given a regset, tell gdb about registers stored in data. */ >-#define nto_supply_regset(regset, data) \ >- (*current_nto_target.nto_supply_regset) (regset, data) >+ void (*nto_supply_regset) (int, char *); > > /* Given a register and regset, calculate the offset into the regset > and stuff it into the last argument. If regno is -1, calculate the > size of the entire regset. Returns length of data, -1 if unknown > regset, 0 if unknown register. */ >-#define nto_register_area(reg, regset, off) \ >- (*current_nto_target.nto_register_area) (reg, regset, off) >+ int (*nto_register_area) (int, int, unsigned *); > > /* Build the Neutrino register set info into the data buffer. > Return -1 if unknown regset, 0 otherwise. */ >-#define nto_regset_fill(regset, data) \ >- (*current_nto_target.nto_regset_fill) (regset, data) >+ int (*nto_regset_fill) (int, char *); > > /* Gives the fetch_link_map_offsets function exposure outside of > solib-svr4.c so that we can override relocate_section_addresses(). */ >-#define nto_fetch_link_map_offsets() \ >- (*current_nto_target.nto_fetch_link_map_offsets) () >+ struct link_map_offsets *(*nto_fetch_link_map_offsets) (void); >+ >+/* Used by nto_elf_osabi_sniffer to determine if we're connected to an >+ Neutrino target. */ >+ enum gdb_osabi (*nto_is_nto_target) (bfd *abfd); >+}; >+ >+extern struct nto_target_ops current_nto_target; >+ >+#define nto_internal_debugging (current_nto_target.nto_internal_debugging) >+ >+#define nto_cpuinfo_flags (current_nto_target.nto_cpuinfo_flags) >+ >+#define nto_cpuinfo_valid (current_nto_target.nto_cpuinfo_valid) >+ >+#define nto_regset_id (current_nto_target.nto_regset_id) >+ >+#define nto_supply_gregset (current_nto_target.nto_supply_gregset) >+ >+#define nto_supply_fpregset (current_nto_target.nto_supply_fpregset) >+ >+#define nto_supply_altregset (current_nto_target.nto_supply_altregset) >+ >+#define nto_supply_regset (current_nto_target.nto_supply_regset) >+ >+#define nto_register_area (current_nto_target.nto_register_area) >+ >+#define nto_regset_fill (current_nto_target.nto_regset_fill) >+ >+#define nto_fetch_link_map_offsets \ >+(current_nto_target.nto_fetch_link_map_offsets) >+ >+#define nto_is_nto_target (current_nto_target.nto_is_nto_target) > > /* Keep this consistant with neutrino syspage.h. */ > enum > >