This commit does most of the mechanical removal. IOW, the easy part.
procfs.c isn't touched beyond removing a couple obvious bits that are
guarded by a couple macros defined in config/alpha/nm-osf3.h. Going
beyond that for procfs.c & co would be a harder excision that
potentially affects Solaris.
Some comments in the generic alpha code ABIs that may still be
relevant and I wouldn't know what to do with them. That can always be
done on a separate pass, preferably by someone who can test on alpha.
A couple other spots have references to OSF/Tru64 and related files
being removed, but it felt like removing them would make things worse,
not better. We can revisit those when we next need to touch that
code.
I didn't remove a reference to osf in testsuite/lib/future.exp, as I
believe that code is imported from DejaGNU.
Built and tested on x86_64 Fedora 20, with --enable-targets=all.
Tested that building for --target=alpha-osf3 on x86_64 Fedora 20
fails with:
checking for default auto-load directory... $debugdir:$datadir/auto-load
checking for default auto-load safe-path... $debugdir:$datadir/auto-load
*** Configuration alpha-unknown-osf3 is obsolete.
*** Support has been REMOVED.
make[1]: *** [configure-gdb] Error 1
make[1]: Leaving directory `build-osf'
make: *** [all] Error 2
gdb/
2014-10-17 Pedro Alves <palves@redhat.com>
* Makefile.in (ALL_64_TARGET_OBS): Remove alpha-osf1-tdep.o.
(HFILES_NO_SRCDIR): Remove config/alpha/nm-osf3.h.
(ALLDEPFILES): Remove alpha-nat.c, alpha-osf1-tdep.c and
solib-osf.c.
* NEWS: Mention that support for alpha*-*-osf* has been removed.
* ada-lang.h [__alpha__ && __osf__]
(ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS): Delete.
* alpha-nat.c, alpha-osf1-tdep.c: Delete files.
* alpha-tdep.c (alpha_gdbarch_init): Remove reference to
GDB_OSABI_OSF1.
* config/alpha/alpha-osf3.mh, config/alpha/nm-osf3.h: Delete
files.
* config/djgpp/fnchange.lst (config/alpha/alpha-osf1.mh)
(config/alpha/alpha-osf2.mh, config/alpha/alpha-osf3.mh): Delete.
* configure: Regenerate.
* configure.ac: Remove references to osf.
* configure.host: Handle alpha*-*-osf* in the obsolete hosts
section. Remove all other references to osf.
* configure.tgt: Add alpha*-*-osf* to the obsolete targets section.
Remove all other references to osf.
* dec-thread.c: Delete file.
* defs.h (GDB_OSABI_OSF1): Delete.
* inferior.h (START_INFERIOR_TRAPS_EXPECTED): New unconditionally
defined.
* osabi.c (gdb_osabi_names): Delete "OSF/1".
* procfs.c (procfs_debug_inferior) [PROCFS_DONT_TRACE_FAULTS]:
Delete code.
(unconditionally_kill_inferior)
[PROCFS_NEED_CLEAR_CURSIG_FOR_KILL]: Delete code.
* solib-osf.c: Delete file.
gdb/testsuite/
2014-10-17 Pedro Alves <palves@redhat.com>
* gdb.base/callfuncs.exp: emove references to osf.
* gdb.base/sigall.exp: Likewise.
* gdb.gdb/selftest.exp: Likewise.
* gdb.hp/gdb.base-hp/callfwmall.exp: Likewise.
* gdb.mi/non-stop.c: Likewise.
* gdb.mi/pthreads.c: Likewise.
* gdb.reverse/sigall-precsave.exp: Likewise.
* gdb.reverse/sigall-reverse.exp: Likewise.
* gdb.threads/pthreads.c: Likewise.
* gdb.threads/pthreads.exp: Likewise.
gdb/doc/
2014-10-17 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Ada Tasks and Core Files): Delete mention of Tru64.
(SVR4 Process Information): Delete mention of OSF/1.
+2014-10-17 Pedro Alves <palves@redhat.com>
+
+ * Makefile.in (ALL_64_TARGET_OBS): Remove alpha-osf1-tdep.o.
+ (HFILES_NO_SRCDIR): Remove config/alpha/nm-osf3.h.
+ (ALLDEPFILES): Remove alpha-nat.c, alpha-osf1-tdep.c and
+ solib-osf.c.
+ * NEWS: Mention that support for alpha*-*-osf* has been removed.
+ * ada-lang.h [__alpha__ && __osf__]
+ (ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS): Delete.
+ * alpha-nat.c, alpha-osf1-tdep.c: Delete files.
+ * alpha-tdep.c (alpha_gdbarch_init): Remove reference to
+ GDB_OSABI_OSF1.
+ * config/alpha/alpha-osf3.mh, config/alpha/nm-osf3.h: Delete
+ files.
+ * config/djgpp/fnchange.lst (config/alpha/alpha-osf1.mh)
+ (config/alpha/alpha-osf2.mh, config/alpha/alpha-osf3.mh): Delete.
+ * configure: Regenerate.
+ * configure.ac: Remove references to osf.
+ * configure.host: Handle alpha*-*-osf* in the obsolete hosts
+ section. Remove all other references to osf.
+ * configure.tgt: Add alpha*-*-osf* to the obsolete targets section.
+ Remove all other references to osf.
+ * dec-thread.c: Delete file.
+ * defs.h (GDB_OSABI_OSF1): Delete.
+ * inferior.h (START_INFERIOR_TRAPS_EXPECTED): New unconditionally
+ defined.
+ * osabi.c (gdb_osabi_names): Delete "OSF/1".
+ * procfs.c (procfs_debug_inferior) [PROCFS_DONT_TRACE_FAULTS]:
+ Delete code.
+ (unconditionally_kill_inferior)
+ [PROCFS_NEED_CLEAR_CURSIG_FOR_KILL]: Delete code.
+ * solib-osf.c: Delete file.
+
2014-10-17 Pedro Alves <palves@redhat.com>
* remote.c (clear_threads_listing_context): Move higher up, out of
ALL_64_TARGET_OBS = \
aarch64-tdep.o aarch64-linux-tdep.o aarch64-newlib-tdep.o \
alphabsd-tdep.o alphafbsd-tdep.o alpha-linux-tdep.o alpha-mdebug-tdep.o \
- alphanbsd-tdep.o alphaobsd-tdep.o alpha-osf1-tdep.o alpha-tdep.o \
+ alphanbsd-tdep.o alphaobsd-tdep.o alpha-tdep.o \
amd64fbsd-tdep.o amd64-darwin-tdep.o amd64-dicos-tdep.o \
amd64-linux-tdep.o amd64nbsd-tdep.o \
amd64obsd-tdep.o amd64-sol2-tdep.o amd64-tdep.o amd64-windows-tdep.o \
language.h nbsd-tdep.h solib-svr4.h \
macroexp.h ui-file.h regcache.h tracepoint.h tracefile.h i386-tdep.h \
inf-child.h p-lang.h event-top.h gdbtypes.h user-regs.h \
-regformats/regdef.h config/alpha/nm-osf3.h config/i386/nm-i386gnu.h \
+regformats/regdef.h config/i386/nm-i386gnu.h \
config/i386/nm-fbsd.h \
config/nm-nto.h config/sparc/nm-sol2.h config/nm-linux.h \
top.h bsd-kvm.h gdb-stabs.h reggroups.h \
aarch64-tdep.c aarch64-linux-tdep.c aarch64-newlib-tdep.c \
aarch64-linux-nat.c \
aix-thread.c \
- alpha-nat.c alphabsd-nat.c alpha-linux-nat.c \
+ alphabsd-nat.c alpha-linux-nat.c \
alpha-tdep.c alpha-mdebug-tdep.c \
- alpha-linux-tdep.c alpha-osf1-tdep.c \
+ alpha-linux-tdep.c \
alphabsd-tdep.c alphafbsd-tdep.c alphanbsd-tdep.c alphaobsd-tdep.c \
amd64-nat.c amd64-tdep.c \
amd64bsd-nat.c amd64fbsd-nat.c amd64fbsd-tdep.c \
msp430-tdep.c \
nios2-tdep.c nios2-linux-tdep.c \
nbsd-nat.c nbsd-tdep.c obsd-nat.c obsd-tdep.c \
- solib-osf.c \
somread.c solib-som.c \
posix-hdep.c \
ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c ppc64-tdep.c \
Support for these obsolete configurations has been removed.
+alpha*-*-osf*
mips-sgi-irix5*
mips-sgi-irix6*
system and that might consider (confusing) debugging information.
Each name (a basic regular expression string) is followed by a
comma. FIXME: Should be part of a configuration file. */
-#if defined(__alpha__) && defined(__osf__)
-#define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \
- "^[agis]-.*\\.ad[bs]$", \
- "/usr/shlib/libpthread\\.so",
-#elif defined (__linux__)
+#if defined (__linux__)
#define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \
"^[agis]-.*\\.ad[bs]$", \
"/lib.*/libpthread\\.so[.0-9]*$", "/lib.*/libpthread\\.a$", \
+++ /dev/null
-/* Low level Alpha interface, for GDB when running native.
- Copyright (C) 1993-2014 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#include "defs.h"
-#include "inferior.h"
-#include "gdbcore.h"
-#include "target.h"
-#include "procfs.h"
-#include "regcache.h"
-
-#include "alpha-tdep.h"
-
-#include <sys/ptrace.h>
-#include <alpha/coreregs.h>
-#include <sys/user.h>
-
-
-/* Extract the register values out of the core file and store
- them into REGCACHE.
-
- CORE_REG_SECT points to the register values themselves, read into memory.
- CORE_REG_SIZE is the size of that area.
- WHICH says which set of registers we are handling (0 = int, 2 = float
- on machines where they are discontiguous).
- REG_ADDR is the offset from u.u_ar0 to the register values relative to
- core_reg_sect. This is used with old-fashioned core files to
- locate the registers in a large upage-plus-stack ".reg" section.
- Original upage address X is at location core_reg_sect+x+reg_addr. */
-
-static void
-fetch_osf_core_registers (struct regcache *regcache,
- char *core_reg_sect, unsigned core_reg_size,
- int which, CORE_ADDR reg_addr)
-{
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
- int regno;
- int addr;
- int bad_reg = -1;
-
- /* Table to map a gdb regnum to an index in the core register
- section. The floating point register values are garbage in
- OSF/1.2 core files. OSF5 uses different names for the register
- enum list, need to handle two cases. The actual values are the
- same. */
- static int const core_reg_mapping[ALPHA_NUM_REGS] =
- {
-#ifdef NCF_REGS
-#define EFL NCF_REGS
- CF_V0, CF_T0, CF_T1, CF_T2, CF_T3, CF_T4, CF_T5, CF_T6,
- CF_T7, CF_S0, CF_S1, CF_S2, CF_S3, CF_S4, CF_S5, CF_S6,
- CF_A0, CF_A1, CF_A2, CF_A3, CF_A4, CF_A5, CF_T8, CF_T9,
- CF_T10, CF_T11, CF_RA, CF_T12, CF_AT, CF_GP, CF_SP, -1,
- EFL + 0, EFL + 1, EFL + 2, EFL + 3,
- EFL + 4, EFL + 5, EFL + 6, EFL + 7,
- EFL + 8, EFL + 9, EFL + 10, EFL + 11,
- EFL + 12, EFL + 13, EFL + 14, EFL + 15,
- EFL + 16, EFL + 17, EFL + 18, EFL + 19,
- EFL + 20, EFL + 21, EFL + 22, EFL + 23,
- EFL + 24, EFL + 25, EFL + 26, EFL + 27,
- EFL + 28, EFL + 29, EFL + 30, EFL + 31,
- CF_PC, -1, -1
-#else
-#define EFL (EF_SIZE / 8)
- EF_V0, EF_T0, EF_T1, EF_T2, EF_T3, EF_T4, EF_T5, EF_T6,
- EF_T7, EF_S0, EF_S1, EF_S2, EF_S3, EF_S4, EF_S5, EF_S6,
- EF_A0, EF_A1, EF_A2, EF_A3, EF_A4, EF_A5, EF_T8, EF_T9,
- EF_T10, EF_T11, EF_RA, EF_T12, EF_AT, EF_GP, EF_SP, -1,
- EFL + 0, EFL + 1, EFL + 2, EFL + 3,
- EFL + 4, EFL + 5, EFL + 6, EFL + 7,
- EFL + 8, EFL + 9, EFL + 10, EFL + 11,
- EFL + 12, EFL + 13, EFL + 14, EFL + 15,
- EFL + 16, EFL + 17, EFL + 18, EFL + 19,
- EFL + 20, EFL + 21, EFL + 22, EFL + 23,
- EFL + 24, EFL + 25, EFL + 26, EFL + 27,
- EFL + 28, EFL + 29, EFL + 30, EFL + 31,
- EF_PC, -1, -1
-#endif
- };
-
- for (regno = 0; regno < ALPHA_NUM_REGS; regno++)
- {
- if (gdbarch_cannot_fetch_register (gdbarch, regno))
- {
- regcache_raw_supply (regcache, regno, NULL);
- continue;
- }
-
- if (regno == ALPHA_ZERO_REGNUM)
- {
- const gdb_byte zero[8] = { 0 };
-
- regcache_raw_supply (regcache, regno, zero);
- continue;
- }
-
- addr = 8 * core_reg_mapping[regno];
- if (addr < 0 || addr >= core_reg_size)
- {
- /* ??? UNIQUE is a new addition. Don't generate an error. */
- if (regno == ALPHA_UNIQUE_REGNUM)
- {
- regcache_raw_supply (regcache, regno, NULL);
- continue;
- }
- if (bad_reg < 0)
- bad_reg = regno;
- }
- else
- {
- regcache_raw_supply (regcache, regno, core_reg_sect + addr);
- }
- }
- if (bad_reg >= 0)
- {
- error (_("Register %s not found in core file."),
- gdbarch_register_name (gdbarch, bad_reg));
- }
-}
-
-
-#include <sys/procfs.h>
-/* Prototypes for supply_gregset etc. */
-#include "gregset.h"
-
-/* See the comment in m68k-tdep.c regarding the utility of these
- functions. */
-
-void
-supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp)
-{
- const long *regp = gregsetp->regs;
-
- /* PC is in slot 32. */
- alpha_supply_int_regs (regcache, -1, regp, regp + 31, NULL);
-}
-
-void
-fill_gregset (const struct regcache *regcache,
- gdb_gregset_t *gregsetp, int regno)
-{
- long *regp = gregsetp->regs;
-
- /* PC is in slot 32. */
- alpha_fill_int_regs (regcache, regno, regp, regp + 31, NULL);
-}
-
-/* Now we do the same thing for floating-point registers.
- Again, see the comments in m68k-tdep.c. */
-
-void
-supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
-{
- const long *regp = fpregsetp->regs;
-
- /* FPCR is in slot 32. */
- alpha_supply_fp_regs (regcache, -1, regp, regp + 31);
-}
-
-void
-fill_fpregset (const struct regcache *regcache,
- gdb_fpregset_t *fpregsetp, int regno)
-{
- long *regp = fpregsetp->regs;
-
- /* FPCR is in slot 32. */
- alpha_fill_fp_regs (regcache, regno, regp, regp + 31);
-}
-\f
-
-/* Register that we are able to handle alpha core file formats. */
-
-static struct core_fns alpha_osf_core_fns =
-{
- /* This really is bfd_target_unknown_flavour. */
-
- bfd_target_unknown_flavour, /* core_flavour */
- default_check_format, /* check_format */
- default_core_sniffer, /* core_sniffer */
- fetch_osf_core_registers, /* core_read_registers */
- NULL /* next */
-};
-
-/* Provide a prototype to silence -Wmissing-prototypes. */
-extern initialize_file_ftype _initialize_alpha_nat;
-
-void
-_initialize_alpha_nat (void)
-{
- struct target_ops *t;
-
- t = procfs_target ();
- add_target (t);
-
- deprecated_add_core_fns (&alpha_osf_core_fns);
-}
+++ /dev/null
-/* Target-dependent code for OSF/1 on Alpha.
- Copyright (C) 2002-2014 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#include "defs.h"
-#include "frame.h"
-#include "gdbcore.h"
-#include "value.h"
-#include "osabi.h"
-#include "objfiles.h"
-
-#include "alpha-tdep.h"
-
-static int
-alpha_osf1_pc_in_sigtramp (struct gdbarch *gdbarch,
- CORE_ADDR pc, const char *func_name)
-{
- return (func_name != NULL && strcmp ("__sigtramp", func_name) == 0);
-}
-
-static CORE_ADDR
-alpha_osf1_sigcontext_addr (struct frame_info *this_frame)
-{
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
- enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- struct frame_info *next_frame = get_next_frame (this_frame);
- struct frame_id next_id = null_frame_id;
-
- if (next_frame != NULL)
- next_id = get_frame_id (next_frame);
-
- return (read_memory_integer (next_id.stack_addr, 8, byte_order));
-}
-
-static void
-alpha_osf1_init_abi (struct gdbarch_info info,
- struct gdbarch *gdbarch)
-{
- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
- /* Hook into the MDEBUG frame unwinder. */
- alpha_mdebug_init_abi (info, gdbarch);
-
- /* The next/step support via procfs on OSF1 is broken when running
- on multi-processor machines. We need to use software single
- stepping instead. */
- set_gdbarch_software_single_step (gdbarch, alpha_software_single_step);
-
- tdep->sigcontext_addr = alpha_osf1_sigcontext_addr;
- tdep->pc_in_sigtramp = alpha_osf1_pc_in_sigtramp;
-
- tdep->jb_pc = 2;
- tdep->jb_elt_size = 8;
-}
-
-/* Provide a prototype to silence -Wmissing-prototypes. */
-extern initialize_file_ftype _initialize_alpha_osf1_tdep;
-
-void
-_initialize_alpha_osf1_tdep (void)
-{
- gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OSF1,
- alpha_osf1_init_abi);
-}
struct gdbarch_tdep *tdep;
struct gdbarch *gdbarch;
- /* Try to determine the ABI of the object we are loading. */
- if (info.abfd != NULL && info.osabi == GDB_OSABI_UNKNOWN)
- {
- /* If it's an ECOFF file, assume it's OSF/1. */
- if (bfd_get_flavour (info.abfd) == bfd_target_ecoff_flavour)
- info.osabi = GDB_OSABI_OSF1;
- }
-
/* Find a candidate among extant architectures. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
+++ /dev/null
-# Host: Little-endian Alpha running OSF/1-3.x and higher using procfs
-NAT_FILE= nm-osf3.h
-NATDEPFILES= alpha-nat.o fork-child.o \
- solib-osf.o procfs.o proc-api.o proc-events.o proc-flags.o \
- proc-why.o dec-thread.o
-HAVE_NATIVE_GCORE_HOST = 1
-NAT_CLIBS= -lpthreaddebug
+++ /dev/null
-/* Native definitions for alpha running OSF/1-3.x and higher, using procfs.
- Copyright (C) 1995-2014 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-/* Number of traps that happen between exec'ing the shell to run an
- inferior, and when we finally get to the inferior code, not
- counting the exec for the shell. This is 1 on most
- implementations. */
-#define START_INFERIOR_TRAPS_EXPECTED 2
-
-/* Don't trace faults under OSF/1, rely on the posting of the appropriate
- signal if fault tracing is disabled.
- Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable'
- fault from which we cannot continue (except by disabling the
- tracing).
- And as OSF/1 doesn't provide the standard fault definitions, the
- mapping of faults to appropriate signals in procfs_wait is difficult. */
-#define PROCFS_DONT_TRACE_FAULTS
-
-/* Work around some peculiarities in the OSF/1 procfs implementation. */
-#define PROCFS_NEED_CLEAR_CURSIG_FOR_KILL
@V@/gdb/armnbsd-nat.c @V@/gdb/armnbd-nat.c
@V@/gdb/armnbsd-tdep.c @V@/gdb/armnbd-tdep.c
@V@/gdb/c-exp.tab.c @V@/gdb/c-exp_tab.c
-@V@/gdb/config/alpha/alpha-osf1.mh @V@/gdb/config/alpha/alphosf1.mh
-@V@/gdb/config/alpha/alpha-osf2.mh @V@/gdb/config/alpha/alphosf2.mh
-@V@/gdb/config/alpha/alpha-osf3.mh @V@/gdb/config/alpha/alphosf3.mh
@V@/gdb/config/alpha/tm-alphalinux.h @V@/gdb/config/alpha/tm-alplinux.h
@V@/gdb/config/i386/nm-cygwin64.h @V@/gdb/config/i386/nm-cyg64.h
@V@/gdb/config/i386/nm-linux64.h @V@/gdb/config/i386/nm-lx64.h
fi
-# On alpha-osf, it appears that libtermcap and libcurses are not compatible.
-# There is a very specific comment in /usr/include/curses.h explaining that
-# termcap routines built into libcurses must not be used.
-#
-# The symptoms we observed so far is GDB unexpectedly changing
-# the terminal settings when tgetent is called - this is particularly
-# visible as the output is missing carriage returns, and so rapidly
-# becomes very hard to read.
-#
-# The readline configure script has already decided that libtermcap
-# was enough for its purposes, and so decided to build readline using
-# libtermcap. Since the TUI mode requires curses, building GDB with
-# TUI enabled results in both libraries to be used at the same time,
-# which is not allowed. This basically means that GDB with TUI is
-# broken on alpha-osf.
-
-case $host_os in
- osf* )
- if test x"$enable_tui" = xyes; then
- as_fn_error "Building GDB with TUI mode is not supported on this host" "$LINENO" 5
- fi
- if test x"$enable_tui" = xauto; then
- enable_tui=no
- fi
- ;;
-esac
-
# For the TUI, we need enhanced curses functionality.
if test x"$enable_tui" != xno; then
prefer_curses=yes
GDB_AC_DEFINE_RELOCATABLE(ICONV_BIN, iconv, ${iconv_bin})
])
-# On alpha-osf, it appears that libtermcap and libcurses are not compatible.
-# There is a very specific comment in /usr/include/curses.h explaining that
-# termcap routines built into libcurses must not be used.
-#
-# The symptoms we observed so far is GDB unexpectedly changing
-# the terminal settings when tgetent is called - this is particularly
-# visible as the output is missing carriage returns, and so rapidly
-# becomes very hard to read.
-#
-# The readline configure script has already decided that libtermcap
-# was enough for its purposes, and so decided to build readline using
-# libtermcap. Since the TUI mode requires curses, building GDB with
-# TUI enabled results in both libraries to be used at the same time,
-# which is not allowed. This basically means that GDB with TUI is
-# broken on alpha-osf.
-
-case $host_os in
- osf* )
- if test x"$enable_tui" = xyes; then
- AC_MSG_ERROR([Building GDB with TUI mode is not supported on this host])
- fi
- if test x"$enable_tui" = xauto; then
- enable_tui=no
- fi
- ;;
-esac
-
# For the TUI, we need enhanced curses functionality.
if test x"$enable_tui" != xno; then
prefer_curses=yes
vax-*-netbsdelf*)
;;
*-*-irix* | \
- alpha*-*-osf1* | \
- alpha*-*-osf2* | \
+ alpha*-*-osf* | \
arm*-*-netbsd* | \
hppa*-*-hiux* | \
i[34567]86-ncr-* | \
aarch64*-*-linux*) gdb_host=linux ;;
-alpha*-*-osf[3456789]*) gdb_host=alpha-osf3 ;;
alpha*-*-linux*) gdb_host=alpha-linux ;;
alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
gdb_host=fbsd ;;
case $targ in
*-*-irix* | \
+ alpha*-*-osf* | \
d10v-*-* | \
hppa*-*-hiux* | \
i[34567]86-ncr-* | \
build_gdbserver=yes
;;
-alpha*-*-osf*)
- # Target: Little-endian Alpha running OSF/1
- gdb_target_obs="alpha-tdep.o alpha-osf1-tdep.o alpha-mdebug-tdep.o"
- ;;
alpha*-*-linux*)
# Target: Little-endian Alpha running Linux
gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alpha-linux-tdep.o \
+++ /dev/null
-/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#include "defs.h"
-#include "command.h"
-#include "gdbcmd.h"
-#include "target.h"
-#include "observer.h"
-#include <sys/procfs.h>
-#include "gregset.h"
-#include "regcache.h"
-#include "inferior.h"
-#include "gdbthread.h"
-
-#include <pthread_debug.h>
-
-/* Print debugging traces if set to non-zero. */
-static int debug_dec_thread = 0;
-
-/* Non-zero if the dec-thread layer is active. */
-static int dec_thread_active = 0;
-
-/* The pthread_debug context. */
-pthreadDebugContext_t debug_context;
-
-/* The dec-thread target_ops structure. */
-static struct target_ops dec_thread_ops;
-
-/* Print a debug trace if DEBUG_DEC_THREAD is set (its value is adjusted
- by the user using "set debug dec-thread ..."). */
-
-static void
-debug (char *format, ...)
-{
- if (debug_dec_thread)
- {
- va_list args;
-
- va_start (args, format);
- printf_unfiltered ("DEC Threads: ");
- vprintf_unfiltered (format, args);
- printf_unfiltered ("\n");
- va_end (args);
- }
-}
-
-/* pthread debug callbacks. */
-
-static int
-suspend_clbk (void *caller_context)
-{
- return ESUCCESS;
-}
-
-static int
-resume_clbk (void *caller_context)
-{
- return ESUCCESS;
-}
-
-static int
-hold_clbk (void *caller_context, pthreadDebugKId_t kernel_tid)
-{
- return ESUCCESS;
-}
-
-static int
-unhold_clbk (void *caller_context, pthreadDebugKId_t kernel_tid)
-{
- return ESUCCESS;
-}
-
-static int
-read_clbk (void *caller_context, void *address, void *buffer,
- unsigned long size)
-{
- int status = target_read_memory ((CORE_ADDR) address, buffer, size);
-
- if (status != 0)
- return EINVAL;
-
- return ESUCCESS;
-}
-
-static int
-write_clbk (void *caller_context, void *address, void *buffer,
- unsigned long size)
-{
- int status = target_write_memory ((CORE_ADDR) address, buffer, size);
-
- if (status != 0)
- return EINVAL;
-
- return ESUCCESS;
-}
-
-/* Get integer regs. */
-
-static int
-get_reg_clbk(void *caller_context, pthreadDebugGetRegRtn_t regs,
- pthreadDebugKId_t kernel_tid)
-{
- debug ("get_reg_clbk");
-
- /* Not sure that we actually need to do anything in this callback. */
- return ESUCCESS;
-}
-
-/* Set integer regs. */
-
-static int
-set_reg_clbk(void *caller_context, const pthreadDebugRegs_t *regs,
- pthreadDebugKId_t kernel_tid)
-{
- debug ("set_reg_clbk");
-
- /* Not sure that we actually need to do anything in this callback. */
- return ESUCCESS;
-}
-
-static int
-output_clbk (void *caller_context, char *line)
-{
- printf_filtered ("%s\n", line);
- return ESUCCESS;
-}
-
-static int
-error_clbk (void *caller_context, char *line)
-{
- fprintf_filtered (gdb_stderr, "%s\n", line);
- return ESUCCESS;
-}
-
-/* Get floating-point regs. */
-
-static int
-get_fpreg_clbk (void *caller_context, pthreadDebugFregs_p fregs,
- pthreadDebugKId_t kernel_tid)
-{
- debug ("get_fpreg_clbk");
-
- /* Not sure that we actually need to do anything in this callback. */
- return ESUCCESS;
-}
-
-/* Set floating-point regs. */
-
-static int
-set_fpreg_clbk (void *caller_context, const pthreadDebugFregs_t *fregs,
- pthreadDebugKId_t kernel_tid)
-{
- debug ("set_fpreg_clbk");
-
- /* Not sure that we actually need to do anything in this callback. */
- return ESUCCESS;
-}
-
-static void *
-malloc_clbk (void *caller_context, size_t size)
-{
- return xmalloc (size);
-}
-
-static void
-free_clbk (void *caller_context, void *address)
-{
- xfree (address);
-}
-
-static int
-kthdinfo_clbk (pthreadDebugClient_t caller_context,
- pthreadDebugKId_t kernel_tid,
- pthreadDebugKThreadInfo_p thread_info)
-{
- return ENOTSUP;
-}
-
-static int
-speckthd_clbk (pthreadDebugClient_t caller_context,
- pthreadDebugSpecialType_t type,
- pthreadDebugKId_t *kernel_tid)
-{
- return ENOTSUP;
-}
-
-static pthreadDebugCallbacks_t debug_callbacks =
-{
- PTHREAD_DEBUG_VERSION,
- (pthreadDebugGetMemRtn_t) read_clbk,
- (pthreadDebugSetMemRtn_t) write_clbk,
- suspend_clbk,
- resume_clbk,
- kthdinfo_clbk,
- hold_clbk,
- unhold_clbk,
- (pthreadDebugGetFregRtn_t) get_fpreg_clbk,
- (pthreadDebugSetFregRtn_t) set_fpreg_clbk,
- (pthreadDebugGetRegRtn_t) get_reg_clbk,
- (pthreadDebugSetRegRtn_t) set_reg_clbk,
- (pthreadDebugOutputRtn_t) output_clbk,
- (pthreadDebugOutputRtn_t) error_clbk,
- malloc_clbk,
- free_clbk,
- speckthd_clbk
-};
-
-/* Activate thread support if appropriate. Do nothing if thread
- support is already active. */
-
-static void
-enable_dec_thread (void)
-{
- struct bound_minimal_symbol msym;
- void* caller_context;
- int status;
-
- /* If already active, nothing more to do. */
- if (dec_thread_active)
- return;
-
- msym = lookup_minimal_symbol ("__pthread_dbg_symtable", NULL, NULL);
- if (msym.minsym == NULL)
- {
- debug ("enable_dec_thread: No __pthread_dbg_symtable");
- return;
- }
-
- status = pthreadDebugContextInit (&caller_context, &debug_callbacks,
- (void *) SYMBOL_VALUE_ADDRESS (msym.minsym),
- &debug_context);
- if (status != ESUCCESS)
- {
- debug ("enable_dec_thread: pthreadDebugContextInit -> %d",
- status);
- return;
- }
-
- push_target (&dec_thread_ops);
- dec_thread_active = 1;
-
- debug ("enable_dec_thread: Thread support enabled.");
-}
-
-/* Deactivate thread support. Do nothing if thread support is
- already inactive. */
-
-static void
-disable_dec_thread (void)
-{
- if (!dec_thread_active)
- return;
-
- pthreadDebugContextDestroy (debug_context);
- unpush_target (&dec_thread_ops);
- dec_thread_active = 0;
-}
-
-/* A structure that contains a thread ID and is associated
- pthreadDebugThreadInfo_t data. */
-
-struct dec_thread_info
-{
- pthreadDebugId_t thread;
- pthreadDebugThreadInfo_t info;
-};
-typedef struct dec_thread_info dec_thread_info_s;
-
-/* The list of user threads. */
-
-DEF_VEC_O (dec_thread_info_s);
-VEC(dec_thread_info_s) *dec_thread_list;
-
-/* Release the memory used by the given VECP thread list pointer.
- Then set *VECP to NULL. */
-
-static void
-free_dec_thread_info_vec (VEC(dec_thread_info_s) **vecp)
-{
- int i;
- struct dec_thread_info *item;
- VEC(dec_thread_info_s) *vec = *vecp;
-
- for (i = 0; VEC_iterate (dec_thread_info_s, vec, i, item); i++)
- xfree (item);
- VEC_free (dec_thread_info_s, vec);
- *vecp = NULL;
-}
-
-/* Return a thread's ptid given its associated INFO. */
-
-static ptid_t
-ptid_build_from_info (struct dec_thread_info info)
-{
- int pid = ptid_get_pid (inferior_ptid);
-
- return ptid_build (pid, 0, (long) info.thread);
-}
-
-/* Return non-zero if PTID is still alive.
-
- Assumes that DEC_THREAD_LIST is up to date. */
-static int
-dec_thread_ptid_is_alive (ptid_t ptid)
-{
- pthreadDebugId_t tid = ptid_get_tid (ptid);
- int i;
- struct dec_thread_info *info;
-
- if (tid == 0)
- /* This is the thread corresponding to the process. This ptid
- is always alive until the program exits. */
- return 1;
-
- /* Search whether an entry with the same tid exists in the dec-thread
- list of threads. If it does, then the thread is still alive.
- No match found means that the thread must be dead, now. */
- for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); i++)
- if (info->thread == tid)
- return 1;
- return 0;
-}
-
-/* Recompute the list of user threads and store the result in
- DEC_THREAD_LIST. */
-
-static void
-update_dec_thread_list (void)
-{
- pthreadDebugId_t thread;
- pthreadDebugThreadInfo_t info;
- int res;
-
- free_dec_thread_info_vec (&dec_thread_list);
- res = pthreadDebugThdSeqInit (debug_context, &thread);
- while (res == ESUCCESS)
- {
-
- res = pthreadDebugThdGetInfo (debug_context, thread, &info);
- if (res != ESUCCESS)
- warning (_("unable to get thread info, ignoring thread %ld"),
- thread);
- else if (info.kind == PTHREAD_DEBUG_THD_KIND_INITIAL
- || info.kind == PTHREAD_DEBUG_THD_KIND_NORMAL)
- {
- struct dec_thread_info *item =
- xmalloc (sizeof (struct dec_thread_info));
-
- item->thread = thread;
- item->info = info;
- VEC_safe_push (dec_thread_info_s, dec_thread_list, item);
- }
- res = pthreadDebugThdSeqNext (debug_context, &thread);
- }
- pthreadDebugThdSeqDestroy (debug_context);
-}
-
-/* Implement the update_thread_list target_ops method. */
-
-static void
-dec_thread_update_thread_list (struct target_ops *ops)
-{
- int i;
- struct dec_thread_info *info;
- struct thread_info *tp, *tmp;
-
- update_dec_thread_list ();
-
- /* Delete GDB-side threads no longer found in dec_thread_list. */
- ALL_NON_EXITED_THREADS_SAFE (tp, tmp)
- {
- for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); i++)
- {
- if (ptid_equal (info->ptid, tp->ptid))
- break;
- }
- if (i == VEC_length (dec_thread_info_s, dec_thread_list))
- {
- /* Not found. */
- delete_thread (tp->ptid);
- }
- }
-
- /* And now add new threads. */
- for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); i++)
- {
- ptid_t ptid = ptid_build_from_info (*info);
-
- if (!in_thread_list (ptid))
- add_thread (ptid);
- }
-}
-
-/* The "to_detach" method of the dec_thread_ops. */
-
-static void
-dec_thread_detach (struct target_ops *ops, const char *args, int from_tty)
-{
- struct target_ops *beneath = find_target_beneath (ops);
-
- debug ("dec_thread_detach");
-
- disable_dec_thread ();
- beneath->to_detach (beneath, args, from_tty);
-}
-
-/* Return the ptid of the thread that is currently active. */
-
-static ptid_t
-get_active_ptid (void)
-{
- int i;
- struct dec_thread_info *info;
-
- for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info);
- i++)
- if (info->info.state == PTHREAD_DEBUG_STATE_RUNNING)
- return ptid_build_from_info (*info);
-
- /* No active thread found. This can happen when the program
- has just exited. */
- return null_ptid;
-}
-
-/* The "to_wait" method of the dec_thread_ops. */
-
-static ptid_t
-dec_thread_wait (struct target_ops *ops,
- ptid_t ptid, struct target_waitstatus *status, int options)
-{
- ptid_t active_ptid;
- struct target_ops *beneath = find_target_beneath (ops);
-
- debug ("dec_thread_wait");
-
- ptid = beneath->to_wait (beneath, ptid, status, options);
-
- /* The ptid returned by the target beneath us is the ptid of the process.
- We need to find which thread is currently active and return its ptid. */
- dec_thread_update_thread_list (ops);
- active_ptid = get_active_ptid ();
- if (ptid_equal (active_ptid, null_ptid))
- return ptid;
- return active_ptid;
-}
-
-/* Fetch the general purpose and floating point registers for the given
- thread TID, and store the result in GREGSET and FPREGSET. Return
- zero if successful. */
-
-static int
-dec_thread_get_regsets (pthreadDebugId_t tid, gdb_gregset_t *gregset,
- gdb_fpregset_t *fpregset)
-{
- int res;
- pthreadDebugRegs_t regs;
- pthreadDebugFregs_t fregs;
-
- res = pthreadDebugThdGetReg (debug_context, tid, ®s);
- if (res != ESUCCESS)
- {
- debug ("dec_thread_get_regsets: pthreadDebugThdGetReg -> %d", res);
- return -1;
- }
- memcpy (gregset->regs, ®s, sizeof (regs));
-
- res = pthreadDebugThdGetFreg (debug_context, tid, &fregs);
- if (res != ESUCCESS)
- {
- debug ("dec_thread_get_regsets: pthreadDebugThdGetFreg -> %d", res);
- return -1;
- }
- memcpy (fpregset->regs, &fregs, sizeof (fregs));
-
- return 0;
-}
-
-/* The "to_fetch_registers" method of the dec_thread_ops.
-
- Because the dec-thread debug API doesn't allow us to fetch
- only one register, we simply ignore regno and fetch+supply all
- registers. */
-
-static void
-dec_thread_fetch_registers (struct target_ops *ops,
- struct regcache *regcache, int regno)
-{
- pthreadDebugId_t tid = ptid_get_tid (inferior_ptid);
- gregset_t gregset;
- fpregset_t fpregset;
- int res;
-
- debug ("dec_thread_fetch_registers (tid=%ld, regno=%d)", tid, regno);
-
-
- if (tid == 0 || ptid_equal (inferior_ptid, get_active_ptid ()))
- {
- struct target_ops *beneath = find_target_beneath (ops);
-
- beneath->to_fetch_registers (beneath, regcache, regno);
- return;
- }
-
- res = dec_thread_get_regsets (tid, &gregset, &fpregset);
- if (res != 0)
- return;
-
- supply_gregset (regcache, &gregset);
- supply_fpregset (regcache, &fpregset);
-}
-
-/* Store the registers given in GREGSET and FPREGSET into the associated
- general purpose and floating point registers of thread TID. Return
- zero if successful. */
-
-static int
-dec_thread_set_regsets (pthreadDebugId_t tid, gdb_gregset_t gregset,
- gdb_fpregset_t fpregset)
-{
- int res;
- pthreadDebugRegs_t regs;
- pthreadDebugFregs_t fregs;
-
- memcpy (®s, gregset.regs, sizeof (regs));
- res = pthreadDebugThdSetReg (debug_context, tid, ®s);
- if (res != ESUCCESS)
- {
- debug ("dec_thread_set_regsets: pthreadDebugThdSetReg -> %d", res);
- return -1;
- }
-
- memcpy (&fregs, fpregset.regs, sizeof (fregs));
- res = pthreadDebugThdSetFreg (debug_context, tid, &fregs);
- if (res != ESUCCESS)
- {
- debug ("dec_thread_set_regsets: pthreadDebugThdSetFreg -> %d", res);
- return -1;
- }
-
- return 0;
-}
-
-/* The "to_store_registers" method of the dec_thread_ops.
-
- Because the dec-thread debug API doesn't allow us to store
- just one register, we store all the registers. */
-
-static void
-dec_thread_store_registers (struct target_ops *ops,
- struct regcache *regcache, int regno)
-{
- pthreadDebugId_t tid = ptid_get_tid (inferior_ptid);
- gregset_t gregset;
- fpregset_t fpregset;
- int res;
-
- debug ("dec_thread_store_registers (tid=%ld, regno=%d)", tid, regno);
-
- if (tid == 0 || ptid_equal (inferior_ptid, get_active_ptid ()))
- {
- struct target_ops *beneath = find_target_beneath (ops);
-
- beneath->to_store_registers (beneath, regcache, regno);
- return;
- }
-
- /* FIXME: brobecker/2008-05-28: I wonder if we could simply check
- in which register set the register is and then only store the
- registers for that register set, instead of storing both register
- sets. */
- fill_gregset (regcache, &gregset, -1);
- fill_fpregset (regcache, &fpregset, -1);
-
- res = dec_thread_set_regsets (tid, gregset, fpregset);
- if (res != 0)
- warning (_("failed to store registers."));
-}
-
-/* The "to_mourn_inferior" method of the dec_thread_ops. */
-
-static void
-dec_thread_mourn_inferior (struct target_ops *ops)
-{
- struct target_ops *beneath = find_target_beneath (ops);
-
- debug ("dec_thread_mourn_inferior");
-
- disable_dec_thread ();
- beneath->to_mourn_inferior (beneath);
-}
-
-/* The "to_thread_alive" method of the dec_thread_ops. */
-static int
-dec_thread_thread_alive (struct target_ops *ops, ptid_t ptid)
-{
- debug ("dec_thread_thread_alive (tid=%ld)", ptid_get_tid (ptid));
-
- /* The thread list maintained by GDB is up to date, since we update
- it everytime we stop. So check this list. */
- return in_thread_list (ptid);
-}
-
-/* The "to_pid_to_str" method of the dec_thread_ops. */
-
-static char *
-dec_thread_pid_to_str (struct target_ops *ops, ptid_t ptid)
-{
- static char *ret = NULL;
-
- if (ptid_get_tid (ptid) == 0)
- {
- struct target_ops *beneath = find_target_beneath (ops);
-
- return beneath->to_pid_to_str (beneath, ptid);
- }
-
- /* Free previous return value; a new one will be allocated by
- xstrprintf(). */
- xfree (ret);
-
- ret = xstrprintf (_("Thread %ld"), ptid_get_tid (ptid));
- return ret;
-}
-
-/* A "new-objfile" observer. Used to activate/deactivate dec-thread
- support. */
-
-static void
-dec_thread_new_objfile_observer (struct objfile *objfile)
-{
- if (objfile != NULL)
- enable_dec_thread ();
- else
- disable_dec_thread ();
-}
-
-/* The "to_get_ada_task_ptid" method of the dec_thread_ops. */
-
-static ptid_t
-dec_thread_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
-{
- int i;
- struct dec_thread_info *info;
-
- debug ("dec_thread_get_ada_task_ptid (struct target_ops *self,"
- " lwp=0x%lx, thread=0x%lx)",
- lwp, thread);
-
- for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info);
- i++)
- if (info->info.teb == (pthread_t) thread)
- return ptid_build_from_info (*info);
-
- warning (_("Could not find thread id from THREAD = 0x%lx"), thread);
- return inferior_ptid;
-}
-
-static void
-init_dec_thread_ops (void)
-{
- dec_thread_ops.to_shortname = "dec-threads";
- dec_thread_ops.to_longname = _("DEC threads support");
- dec_thread_ops.to_doc = _("DEC threads support");
- dec_thread_ops.to_detach = dec_thread_detach;
- dec_thread_ops.to_wait = dec_thread_wait;
- dec_thread_ops.to_fetch_registers = dec_thread_fetch_registers;
- dec_thread_ops.to_store_registers = dec_thread_store_registers;
- dec_thread_ops.to_mourn_inferior = dec_thread_mourn_inferior;
- dec_thread_ops.to_thread_alive = dec_thread_thread_alive;
- dec_thread_ops.to_update_thread_list = dec_thread_update_thread_list;
- dec_thread_ops.to_pid_to_str = dec_thread_pid_to_str;
- dec_thread_ops.to_stratum = thread_stratum;
- dec_thread_ops.to_get_ada_task_ptid = dec_thread_get_ada_task_ptid;
- dec_thread_ops.to_magic = OPS_MAGIC;
-}
-
-void
-_initialize_dec_thread (void)
-{
- init_dec_thread_ops ();
- complete_target_initialization (&dec_thread_ops);
-
- observer_attach_new_objfile (dec_thread_new_objfile_observer);
-
- add_setshow_boolean_cmd ("dec-thread", class_maintenance, &debug_dec_thread,
- _("Set debugging of DEC threads module."),
- _("Show debugging of DEC threads module."),
- _("Enables debugging output (used to debug GDB)."),
- NULL, NULL,
- &setdebuglist, &showdebuglist);
-}
GDB_OSABI_SVR4,
GDB_OSABI_HURD,
GDB_OSABI_SOLARIS,
- GDB_OSABI_OSF1,
GDB_OSABI_LINUX,
GDB_OSABI_FREEBSD_AOUT,
GDB_OSABI_FREEBSD_ELF,
+2014-10-17 Pedro Alves <palves@redhat.com>
+
+ * gdb.texinfo (Ada Tasks and Core Files): Delete mention of Tru64.
+ (SVR4 Process Information): Delete mention of OSF/1.
+
2014-10-01 Simon Marchi <simon.marchi@ericsson.com>
* gdb.texinfo (Miscellaneous gdb/mi Commands): Document new
tasking support may be limited or even unavailable, depending on
the platform being used.
For instance, on x86-linux, the list of tasks is available, but task
-switching is not supported. On Tru64, however, task switching will work
-as usual.
+switching is not supported.
-On certain platforms, including Tru64, the debugger needs to perform some
+On certain platforms, the debugger needs to perform some
memory writes in order to provide Ada tasking support. When inspecting
a core file, this means that the core file must be opened with read-write
privileges, using the command @samp{"set write on"} (@pxref{Patching}).
facility, the command @code{info proc} is available to report
information about the process running your program, or about any
process running on your system. This includes, as of this writing,
-@sc{gnu}/Linux, OSF/1 (Digital Unix), Solaris, and Irix, but
-not HP-UX, for example.
+@sc{gnu}/Linux and Solaris, but not HP-UX, for example.
This command may also work on core files that were created on a system
that has the @samp{/proc} facility.
/* Number of traps that happen between exec'ing the shell to run an
inferior and when we finally get to the inferior code, not counting
- the exec for the shell. This is 1 on most implementations.
- Overridden in nm.h files. */
-#if !defined(START_INFERIOR_TRAPS_EXPECTED)
+ the exec for the shell. This is 1 on all supported
+ implementations. */
#define START_INFERIOR_TRAPS_EXPECTED 1
-#endif
struct private_inferior;
"SVR4",
"GNU/Hurd",
"Solaris",
- "OSF/1",
"GNU/Linux",
"FreeBSD a.out",
"FreeBSD ELF",
sysset_t *traced_syscall_exits;
int status;
-#ifdef PROCFS_DONT_TRACE_FAULTS
- /* On some systems (OSF), we don't trace hardware faults.
- Apparently it's enough that we catch them as signals.
- Wonder why we don't just do that in general? */
- premptyset (&traced_faults); /* don't trace faults. */
-#else
/* Register to trace hardware faults in the child. */
prfillset (&traced_faults); /* trace all faults... */
gdb_prdelset (&traced_faults, FLTPAGE); /* except page fault. */
-#endif
if (!proc_set_traced_faults (pi, &traced_faults))
return __LINE__;
int parent_pid;
parent_pid = proc_parent_pid (pi);
-#ifdef PROCFS_NEED_CLEAR_CURSIG_FOR_KILL
- /* FIXME: use access functions. */
- /* Alpha OSF/1-3.x procfs needs a clear of the current signal
- before the PIOCKILL, otherwise it might generate a corrupted core
- file for the inferior. */
- if (ioctl (pi->ctl_fd, PIOCSSIG, NULL) < 0)
- {
- printf_filtered ("unconditionally_kill: SSIG failed!\n");
- }
-#endif
#ifdef PROCFS_NEED_PIOCSSIG_FOR_KILL
/* Alpha OSF/1-2.x procfs needs a PIOCSSIG call with a SIGKILL signal
to kill the inferior, otherwise it might remain stopped with a
+++ /dev/null
-/* Handle OSF/1, Digital UNIX, and Tru64 shared libraries
- for GDB, the GNU Debugger.
- Copyright (C) 1993-2014 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-/* When handling shared libraries, GDB has to find out the pathnames
- of all shared libraries that are currently loaded (to read in their
- symbols) and where the shared libraries are loaded in memory
- (to relocate them properly from their prelinked addresses to the
- current load address).
-
- Under OSF/1 there are two possibilities to get at this information:
-
- 1) Peek around in the runtime loader structures.
- These are not documented, and they are not defined in the system
- header files. The definitions below were obtained by experimentation,
- but they seem stable enough.
-
- 2) Use the libxproc.a library, which contains the equivalent ldr_*
- routines. The library is documented in Tru64 5.x, but as of 5.1, it
- only allows a process to examine itself. On earlier versions, it
- may require that the GDB executable be dynamically linked and that
- NAT_CLIBS include -lxproc -Wl,-expect_unresolved,ldr_process_context
- for GDB and all applications that are using libgdb.
-
- We will use the peeking approach until libxproc.a works for other
- processes. */
-
-#include "defs.h"
-
-#include <sys/types.h>
-#include <signal.h>
-#include "bfd.h"
-#include "symtab.h"
-#include "symfile.h"
-#include "objfiles.h"
-#include "target.h"
-#include "inferior.h"
-#include "infrun.h"
-#include "gdbthread.h"
-#include "solist.h"
-#include "solib.h"
-
-#ifdef USE_LDR_ROUTINES
-# include <loader.h>
-#endif
-
-#ifndef USE_LDR_ROUTINES
-/* Definition of runtime loader structures, found by experimentation. */
-#define RLD_CONTEXT_ADDRESS 0x3ffc0000000
-
-/* Per-module information structure referenced by ldr_context_t.head. */
-
-typedef struct
- {
- CORE_ADDR next;
- CORE_ADDR previous;
- CORE_ADDR unknown1;
- CORE_ADDR module_name;
- CORE_ADDR modinfo_addr; /* Used by next_link_map_member() to detect
- the end of the shared module list. */
- long module_id;
- CORE_ADDR unknown2;
- CORE_ADDR unknown3;
- long region_count;
- CORE_ADDR regioninfo_addr;
- }
-ldr_module_info_t;
-
-/* Per-region structure referenced by ldr_module_info_t.regioninfo_addr. */
-
-typedef struct
- {
- long unknown1;
- CORE_ADDR regionname_addr;
- long protection;
- CORE_ADDR vaddr;
- CORE_ADDR mapaddr;
- long size;
- long unknown2[5];
- }
-ldr_region_info_t;
-
-/* Structure at RLD_CONTEXT_ADDRESS specifying the start and finish addresses
- of the shared module list. */
-
-typedef struct
- {
- CORE_ADDR unknown1;
- CORE_ADDR unknown2;
- CORE_ADDR head;
- CORE_ADDR tail;
- }
-ldr_context_t;
-#endif /* !USE_LDR_ROUTINES */
-
-/* Per-section information, stored in struct lm_info.secs. */
-
-struct lm_sec
- {
- CORE_ADDR offset; /* difference between default and actual
- virtual addresses of section .name */
- CORE_ADDR nameaddr; /* address in inferior of section name */
- const char *name; /* name of section, null if not fetched */
- };
-
-/* Per-module information, stored in struct so_list.lm_info. */
-
-struct lm_info
- {
- int isloader; /* whether the module is /sbin/loader */
- int nsecs; /* length of .secs */
- struct lm_sec secs[1]; /* variable-length array of sections, sorted
- by name */
- };
-
-/* Context for iterating through the inferior's shared module list. */
-
-struct read_map_ctxt
- {
-#ifdef USE_LDR_ROUTINES
- ldr_process_t proc;
- ldr_module_t next;
-#else
- CORE_ADDR next; /* next element in module list */
- CORE_ADDR tail; /* last element in module list */
-#endif
- };
-
-/* Forward declaration for this module's autoinit function. */
-
-extern void _initialize_osf_solib (void);
-
-#ifdef USE_LDR_ROUTINES
-# if 0
-/* This routine is intended to be called by ldr_* routines to read memory from
- the current target. Usage:
-
- ldr_process = ldr_core_process ();
- ldr_set_core_reader (ldr_read_memory);
- ldr_xdetach (ldr_process);
- ldr_xattach (ldr_process);
-
- ldr_core_process() and ldr_read_memory() are neither documented nor
- declared in system header files. They work with OSF/1 2.x, and they might
- work with later versions as well. */
-
-static int
-ldr_read_memory (CORE_ADDR memaddr, char *myaddr, int len, int readstring)
-{
- int result;
- char *buffer;
-
- if (readstring)
- {
- target_read_string (memaddr, &buffer, len, &result);
- if (result == 0)
- strcpy (myaddr, buffer);
- xfree (buffer);
- }
- else
- result = target_read_memory (memaddr, myaddr, len);
-
- if (result != 0)
- result = -result;
- return result;
-}
-# endif /* 0 */
-#endif /* USE_LDR_ROUTINES */
-
-/* Comparison for qsort() and bsearch(): return -1, 0, or 1 according to
- whether lm_sec *P1's name is lexically less than, equal to, or greater
- than that of *P2. */
-
-static int
-lm_sec_cmp (const void *p1, const void *p2)
-{
- const struct lm_sec *lms1 = p1, *lms2 = p2;
-
- return strcmp (lms1->name, lms2->name);
-}
-
-/* Sort LMI->secs so that osf_relocate_section_addresses() can binary-search
- it. */
-
-static void
-lm_secs_sort (struct lm_info *lmi)
-{
- qsort (lmi->secs, lmi->nsecs, sizeof *lmi->secs, lm_sec_cmp);
-}
-
-/* Populate name fields of LMI->secs. */
-
-static void
-fetch_sec_names (struct lm_info *lmi)
-{
-#ifndef USE_LDR_ROUTINES
- int i, errcode;
- struct lm_sec *lms;
- char *name;
-
- for (i = 0; i < lmi->nsecs; i++)
- {
- lms = lmi->secs + i;
- target_read_string (lms->nameaddr, &name, PATH_MAX, &errcode);
- if (errcode != 0)
- {
- warning (_("unable to read shared sec name at 0x%lx"),
- lms->nameaddr);
- name = xstrdup ("");
- }
- lms->name = name;
- }
- lm_secs_sort (lmi);
-#endif
-}
-
-/* target_so_ops callback. Adjust SEC's addresses after it's been mapped into
- the process. */
-
-static void
-osf_relocate_section_addresses (struct so_list *so,
- struct target_section *sec)
-{
- struct lm_info *lmi;
- struct lm_sec lms_key, *lms;
-
- /* Fetch SO's section names if we haven't done so already. */
- lmi = so->lm_info;
- if (lmi->nsecs && !lmi->secs[0].name)
- fetch_sec_names (lmi);
-
- /* Binary-search for offset information corresponding to SEC. */
- lms_key.name = sec->the_bfd_section->name;
- lms = bsearch (&lms_key, lmi->secs, lmi->nsecs, sizeof *lms, lm_sec_cmp);
- if (lms)
- {
- sec->addr += lms->offset;
- sec->endaddr += lms->offset;
- }
-}
-
-/* target_so_ops callback. Free parts of SO allocated by this file. */
-
-static void
-osf_free_so (struct so_list *so)
-{
- int i;
- const char *name;
-
- for (i = 0; i < so->lm_info->nsecs; i++)
- {
- name = so->lm_info->secs[i].name;
- if (name)
- xfree ((void *) name);
- }
- xfree (so->lm_info);
-}
-
-/* target_so_ops callback. Discard information accumulated by this file and
- not freed by osf_free_so(). */
-
-static void
-osf_clear_solib (void)
-{
- return;
-}
-
-/* target_so_ops callback. Prepare to handle shared libraries after the
- inferior process has been created but before it's executed any
- instructions.
-
- For a statically bound executable, the inferior's first instruction is the
- one at "_start", or a similar text label. No further processing is needed
- in that case.
-
- For a dynamically bound executable, this first instruction is somewhere
- in the rld, and the actual user executable is not yet mapped in.
- We continue the inferior again, rld then maps in the actual user
- executable and any needed shared libraries and then sends
- itself a SIGTRAP.
-
- At that point we discover the names of all shared libraries and
- read their symbols in.
-
- FIXME
-
- This code does not properly handle hitting breakpoints which the
- user might have set in the rld itself. Proper handling would have
- to check if the SIGTRAP happened due to a kill call.
-
- Also, what if child has exit()ed? Must exit loop somehow. */
-
-static void
-osf_solib_create_inferior_hook (int from_tty)
-{
- struct inferior *inf;
- struct thread_info *tp;
-
- inf = current_inferior ();
-
- /* If we are attaching to the inferior, the shared libraries
- have already been mapped, so nothing more to do. */
- if (inf->attach_flag)
- return;
-
- /* Nothing to do for statically bound executables. */
-
- if (symfile_objfile == NULL
- || symfile_objfile->obfd == NULL
- || ((bfd_get_file_flags (symfile_objfile->obfd) & DYNAMIC) == 0))
- return;
-
- /* Now run the target. It will eventually get a SIGTRAP, at
- which point all of the libraries will have been mapped in and we
- can go groveling around in the rld structures to find
- out what we need to know about them.
-
- If debugging from a core file, we cannot resume the execution
- of the inferior. But this is actually not an issue, because
- shared libraries have already been mapped anyways, which means
- we have nothing more to do. */
- if (!target_can_run (¤t_target))
- return;
-
- tp = inferior_thread ();
- clear_proceed_status (0);
- inf->control.stop_soon = STOP_QUIETLY;
- tp->suspend.stop_signal = GDB_SIGNAL_0;
- do
- {
- target_resume (minus_one_ptid, 0, tp->suspend.stop_signal);
- wait_for_inferior ();
- }
- while (tp->suspend.stop_signal != GDB_SIGNAL_TRAP);
-
- /* solib_add will call reinit_frame_cache.
- But we are stopped in the runtime loader and we do not have symbols
- for the runtime loader. So heuristic_proc_start will be called
- and will put out an annoying warning.
- Delaying the resetting of stop_soon until after symbol loading
- suppresses the warning. */
- solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add);
- inf->control.stop_soon = NO_STOP_QUIETLY;
-}
-
-/* target_so_ops callback. Do additional symbol handling, lookup, etc. after
- symbols for a shared object have been loaded. */
-
-static void
-osf_special_symbol_handling (void)
-{
- return;
-}
-
-/* Initialize CTXT in preparation for iterating through the inferior's module
- list using read_map(). Return success. */
-
-static int
-open_map (struct read_map_ctxt *ctxt)
-{
-#ifdef USE_LDR_ROUTINES
- /* Note: As originally written, ldr_my_process() was used to obtain
- the value for ctxt->proc. This is incorrect, however, since
- ldr_my_process() retrieves the "unique identifier" associated
- with the current process (i.e. GDB) and not the one being
- debugged. Presumably, the pid of the process being debugged is
- compatible with the "unique identifier" used by the ldr_
- routines, so we use that. */
- ctxt->proc = ptid_get_pid (inferior_ptid);
- if (ldr_xattach (ctxt->proc) != 0)
- return 0;
- ctxt->next = LDR_NULL_MODULE;
-#else
- CORE_ADDR ldr_context_addr, prev, next;
- ldr_context_t ldr_context;
-
- if (target_read_memory ((CORE_ADDR) RLD_CONTEXT_ADDRESS,
- (char *) &ldr_context_addr,
- sizeof (CORE_ADDR)) != 0)
- return 0;
- if (target_read_memory (ldr_context_addr,
- (char *) &ldr_context,
- sizeof (ldr_context_t)) != 0)
- return 0;
- ctxt->next = ldr_context.head;
- ctxt->tail = ldr_context.tail;
-#endif
- return 1;
-}
-
-/* Initialize SO to have module NAME, /sbin/loader indicator ISLOADR, and
- space for NSECS sections. */
-
-static void
-init_so (struct so_list *so, char *name, int isloader, int nsecs)
-{
- int namelen, i;
-
- /* solib.c requires various fields to be initialized to 0. */
- memset (so, 0, sizeof *so);
-
- /* Copy the name. */
- namelen = strlen (name);
- if (namelen >= SO_NAME_MAX_PATH_SIZE)
- namelen = SO_NAME_MAX_PATH_SIZE - 1;
-
- memcpy (so->so_original_name, name, namelen);
- so->so_original_name[namelen] = '\0';
- memcpy (so->so_name, so->so_original_name, namelen + 1);
-
- /* Allocate section space. */
- so->lm_info = xmalloc (sizeof (struct lm_info)
- + (nsecs - 1) * sizeof (struct lm_sec));
- so->lm_info->isloader = isloader;
- so->lm_info->nsecs = nsecs;
- for (i = 0; i < nsecs; i++)
- so->lm_info->secs[i].name = NULL;
-}
-
-/* Initialize SO's section SECIDX with name address NAMEADDR, name string
- NAME, default virtual address VADDR, and actual virtual address
- MAPADDR. */
-
-static void
-init_sec (struct so_list *so, int secidx, CORE_ADDR nameaddr,
- const char *name, CORE_ADDR vaddr, CORE_ADDR mapaddr)
-{
- struct lm_sec *lms;
-
- lms = so->lm_info->secs + secidx;
- lms->nameaddr = nameaddr;
- lms->name = name;
- lms->offset = mapaddr - vaddr;
-}
-
-/* If there are more elements starting at CTXT in inferior's module list,
- store the next element in SO, advance CTXT to the next element, and return
- 1, else return 0. */
-
-static int
-read_map (struct read_map_ctxt *ctxt, struct so_list *so)
-{
- ldr_module_info_t minf;
- ldr_region_info_t rinf;
-
-#ifdef USE_LDR_ROUTINES
- size_t size;
- ldr_region_t i;
-
- /* Retrieve the next element. */
- if (ldr_next_module (ctxt->proc, &ctxt->next) != 0)
- return 0;
- if (ctxt->next == LDR_NULL_MODULE)
- return 0;
- if (ldr_inq_module (ctxt->proc, ctxt->next, &minf, sizeof minf, &size) != 0)
- return 0;
-
- /* Initialize the module name and section count. */
- init_so (so, minf.lmi_name, 0, minf.lmi_nregion);
-
- /* Retrieve section names and offsets. */
- for (i = 0; i < minf.lmi_nregion; i++)
- {
- if (ldr_inq_region (ctxt->proc, ctxt->next, i, &rinf,
- sizeof rinf, &size) != 0)
- goto err;
- init_sec (so, (int) i, 0, xstrdup (rinf.lri_name),
- (CORE_ADDR) rinf.lri_vaddr, (CORE_ADDR) rinf.lri_mapaddr);
- }
- lm_secs_sort (so->lm_info);
-#else
- char *name;
- int errcode, i;
-
- /* Retrieve the next element. */
- if (!ctxt->next)
- return 0;
- if (target_read_memory (ctxt->next, (char *) &minf, sizeof minf) != 0)
- return 0;
- if (ctxt->next == ctxt->tail)
- ctxt->next = 0;
- else
- ctxt->next = minf.next;
-
- /* Initialize the module name and section count. */
- target_read_string (minf.module_name, &name, PATH_MAX, &errcode);
- if (errcode != 0)
- return 0;
- init_so (so, name, !minf.modinfo_addr, minf.region_count);
- xfree (name);
-
- /* Retrieve section names and offsets. */
- for (i = 0; i < minf.region_count; i++)
- {
- if (target_read_memory (minf.regioninfo_addr + i * sizeof rinf,
- (char *) &rinf, sizeof rinf) != 0)
- goto err;
- init_sec (so, i, rinf.regionname_addr, NULL, rinf.vaddr, rinf.mapaddr);
- }
-#endif /* !USE_LDR_ROUTINES */
- return 1;
-
- err:
- osf_free_so (so);
- return 0;
-}
-
-/* Free resources allocated by open_map (CTXT). */
-
-static void
-close_map (struct read_map_ctxt *ctxt)
-{
-#ifdef USE_LDR_ROUTINES
- ldr_xdetach (ctxt->proc);
-#endif
-}
-
-/* target_so_ops callback. Return a list of shared objects currently loaded
- in the inferior. */
-
-static struct so_list *
-osf_current_sos (void)
-{
- struct so_list *head = NULL, *tail = NULL, *newtail, so;
- struct read_map_ctxt ctxt;
- int skipped_main;
-
- if (!open_map (&ctxt))
- return NULL;
-
- /* Read subsequent elements. */
- for (skipped_main = 0;;)
- {
- if (!read_map (&ctxt, &so))
- break;
-
- /* Skip the main program module, which is first in the list after
- /sbin/loader. */
- if (!so.lm_info->isloader && !skipped_main)
- {
- osf_free_so (&so);
- skipped_main = 1;
- continue;
- }
-
- newtail = xmalloc (sizeof *newtail);
- if (!head)
- head = newtail;
- else
- tail->next = newtail;
- tail = newtail;
-
- memcpy (tail, &so, sizeof so);
- tail->next = NULL;
- }
-
- close_map (&ctxt);
- return head;
-}
-
-/* target_so_ops callback. Attempt to locate and open the main symbol
- file. */
-
-static int
-osf_open_symbol_file_object (void *from_ttyp)
-{
- struct read_map_ctxt ctxt;
- struct so_list so;
- int found;
-
- if (symfile_objfile)
- if (!query (_("Attempt to reload symbols from process? ")))
- return 0;
-
- /* The first module after /sbin/loader is the main program. */
- if (!open_map (&ctxt))
- return 0;
- for (found = 0; !found;)
- {
- if (!read_map (&ctxt, &so))
- break;
- found = !so.lm_info->isloader;
- osf_free_so (&so);
- }
- close_map (&ctxt);
-
- if (found)
- symbol_file_add_main (so.so_name, *(int *) from_ttyp);
- return found;
-}
-
-/* target_so_ops callback. Return whether PC is in the dynamic linker. */
-
-static int
-osf_in_dynsym_resolve_code (CORE_ADDR pc)
-{
- /* This function currently always return False. This is a temporary
- solution which only consequence is to introduce a minor incovenience
- for the user: When stepping inside a subprogram located in a shared
- library, gdb might stop inside the dynamic loader code instead of
- inside the subprogram itself. See the explanations in infrun.c about
- the in_solib_dynsym_resolve_code() function for more details. */
- return 0;
-}
-
-static struct target_so_ops osf_so_ops;
-
-void
-_initialize_osf_solib (void)
-{
- osf_so_ops.relocate_section_addresses = osf_relocate_section_addresses;
- osf_so_ops.free_so = osf_free_so;
- osf_so_ops.clear_solib = osf_clear_solib;
- osf_so_ops.solib_create_inferior_hook = osf_solib_create_inferior_hook;
- osf_so_ops.special_symbol_handling = osf_special_symbol_handling;
- osf_so_ops.current_sos = osf_current_sos;
- osf_so_ops.open_symbol_file_object = osf_open_symbol_file_object;
- osf_so_ops.in_dynsym_resolve_code = osf_in_dynsym_resolve_code;
- osf_so_ops.bfd_open = solib_bfd_open;
-
- /* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */
- current_target_so_ops = &osf_so_ops;
-}
+2014-10-17 Pedro Alves <palves@redhat.com>
+
+ * gdb.base/callfuncs.exp: emove references to osf.
+ * gdb.base/sigall.exp: Likewise.
+ * gdb.gdb/selftest.exp: Likewise.
+ * gdb.hp/gdb.base-hp/callfwmall.exp: Likewise.
+ * gdb.mi/non-stop.c: Likewise.
+ * gdb.mi/pthreads.c: Likewise.
+ * gdb.reverse/sigall-precsave.exp: Likewise.
+ * gdb.reverse/sigall-reverse.exp: Likewise.
+ * gdb.threads/pthreads.c: Likewise.
+ * gdb.threads/pthreads.exp: Likewise.
+
2014-10-17 Yao Qi <yao@codesourcery.com>
* gdb.base/commands.exp (gdbvar_complex_if_while_test): Don't
if $prototypes then {
setup_xfail "sparc-*-*" "mips*-*-*" 5318
if { ! [test_compiler_info gcc-*-*] } then {
- setup_xfail "alpha-dec-osf2*" "i*86-*-sysv4*" 5318
+ setup_xfail "i*86-*-sysv4*" 5318
}
}
"Continuing.*Program received signal SIG$esig.*" \
"get signal $esig"
}
- if [ istarget "alpha-dec-osf3*" ] then {
- # OSF/1-3.x is unable to continue with a job control stop signal.
- # The inferior remains stopped without an event of interest
- # and GDB waits forever for the inferior to stop on an event
- # of interest. Work around the kernel bug.
- if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } {
- setup_xfail "alpha-dec-osf3*"
- fail "cannot continue from signal $thissig"
- set need_another_continue 0
- }
- }
if $need_another_continue then {
if { $thissig == "URG" } {
-re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" {
pass "$description"
}
- -re ".*$gdb_prompt $" {
- # On the alpha, we hit the infamous problem about gdb
- # being unable to get the frame pointer (mentioned in
- # gdb/README). As it is intermittent, there is no way to
- # XFAIL it which will give us an XPASS if the problem goes
- # away.
- setup_xfail "alpha*-*-osf*"
- fail "$description"
- }
}
if $prototypes then {
setup_xfail "sparc-*-*" "mips*-*-*" 5318
if {!$gcc_compiled} then {
- setup_xfail "alpha-dec-osf2*" "i*86-*-sysv4*" 5318
+ setup_xfail "i*86-*-sysv4*" 5318
}
}
gdb_test "p t_float_values2(3.14159,float_val2)" " = 1"
#include <stdlib.h>
#include <pthread.h>
-/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
+/* Under HPUX 10, the second arg of pthread_create
is prototyped to be just a "pthread_attr_t", while under Solaris it
is a "pthread_attr_t *". Arg! */
-#if defined (__osf__) || defined (__hpux__)
+#if defined (__hpux__)
#define PTHREAD_CREATE_ARG2(arg) arg
#define PTHREAD_CREATE_NULL_ARG2 null_attr
static pthread_attr_t null_attr;
#include <stdlib.h>
#include <pthread.h>
-/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
+/* Under HPUX 10, the second arg of pthread_create
is prototyped to be just a "pthread_attr_t", while under Solaris it
is a "pthread_attr_t *". Arg! */
-#if defined (__osf__) || defined (__hpux__)
+#if defined (__hpux__)
#define PTHREAD_CREATE_ARG2(arg) arg
#define PTHREAD_CREATE_NULL_ARG2 null_attr
static pthread_attr_t null_attr;
}
}
}
- if [ istarget "alpha-dec-osf3*" ] then {
- # OSF/1-3.x is unable to continue with a job control stop signal.
- # The inferior remains stopped without an event of interest
- # and GDB waits forever for the inferior to stop on an event
- # of interest. Work around the kernel bug.
- if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } {
- setup_xfail "alpha-dec-osf3*"
- fail "cannot continue from signal $thissig"
- set need_another_continue 0
- }
- }
if $need_another_continue then {
if { $thissig == "URG" } {
}
}
}
- if [ istarget "alpha-dec-osf3*" ] then {
- # OSF/1-3.x is unable to continue with a job control stop signal.
- # The inferior remains stopped without an event of interest
- # and GDB waits forever for the inferior to stop on an event
- # of interest. Work around the kernel bug.
- if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } {
- setup_xfail "alpha-dec-osf3*"
- fail "cannot continue from signal $thissig"
- set need_another_continue 0
- }
- }
if $need_another_continue then {
if { $thissig == "URG" } {
#include <stdlib.h>
#include <pthread.h>
-/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
+/* Under HPUX 10, the second arg of pthread_create
is prototyped to be just a "pthread_attr_t", while under Solaris it
is a "pthread_attr_t *". Arg! */
-#if defined (__osf__) || defined (__hpux__)
+#if defined (__hpux__)
#define PTHREAD_CREATE_ARG2(arg) arg
#define PTHREAD_CREATE_NULL_ARG2 null_attr
static pthread_attr_t null_attr;
foo (1, 2, 3);
-#ifndef __osf__
if (pthread_attr_init (&attr))
{
perror ("pthread_attr_init 1");
exit (1);
}
-#endif
#ifdef PTHREAD_SCOPE_SYSTEM
if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))
}
}
-setup_xfail "alpha-*-osf*"
if [runto_main] then {
- clear_xfail "alpha-*-osf*"
if [test_startup] then {
if [check_control_c] then {
warning "Could not stop child with ^C; skipping rest of tests.\n"
check_backtraces
}
}
-clear_xfail "alpha-*-osf*"