binutils-gdb/gdb/netbsd-tdep.c
Simon Marchi dda83cd783 gdb, gdbserver, gdbsupport: fix leading space vs tabs issues
Many spots incorrectly use only spaces for indentation (for example,
there are a lot of spots in ada-lang.c).  I've always found it awkward
when I needed to edit one of these spots: do I keep the original wrong
indentation, or do I fix it?  What if the lines around it are also
wrong, do I fix them too?  I probably don't want to fix them in the same
patch, to avoid adding noise to my patch.

So I propose to fix as much as possible once and for all (hopefully).

One typical counter argument for this is that it makes code archeology
more difficult, because git-blame will show this commit as the last
change for these lines.  My counter counter argument is: when
git-blaming, you often need to do "blame the file at the parent commit"
anyway, to go past some other refactor that touched the line you are
interested in, but is not the change you are looking for.  So you
already need a somewhat efficient way to do this.

Using some interactive tool, rather than plain git-blame, makes this
trivial.  For example, I use "tig blame <file>", where going back past
the commit that changed the currently selected line is one keystroke.
It looks like Magit in Emacs does it too (though I've never used it).
Web viewers of Github and Gitlab do it too.  My point is that it won't
really make archeology more difficult.

The other typical counter argument is that it will cause conflicts with
existing patches.  That's true... but it's a one time cost, and those
are not conflicts that are difficult to resolve.  I have also tried "git
rebase --ignore-whitespace", it seems to work well.  Although that will
re-introduce the faulty indentation, so one needs to take care of fixing
the indentation in the patch after that (which is easy).

gdb/ChangeLog:

	* aarch64-linux-tdep.c: Fix indentation.
	* aarch64-ravenscar-thread.c: Fix indentation.
	* aarch64-tdep.c: Fix indentation.
	* aarch64-tdep.h: Fix indentation.
	* ada-lang.c: Fix indentation.
	* ada-lang.h: Fix indentation.
	* ada-tasks.c: Fix indentation.
	* ada-typeprint.c: Fix indentation.
	* ada-valprint.c: Fix indentation.
	* ada-varobj.c: Fix indentation.
	* addrmap.c: Fix indentation.
	* addrmap.h: Fix indentation.
	* agent.c: Fix indentation.
	* aix-thread.c: Fix indentation.
	* alpha-bsd-nat.c: Fix indentation.
	* alpha-linux-tdep.c: Fix indentation.
	* alpha-mdebug-tdep.c: Fix indentation.
	* alpha-nbsd-tdep.c: Fix indentation.
	* alpha-obsd-tdep.c: Fix indentation.
	* alpha-tdep.c: Fix indentation.
	* amd64-bsd-nat.c: Fix indentation.
	* amd64-darwin-tdep.c: Fix indentation.
	* amd64-linux-nat.c: Fix indentation.
	* amd64-linux-tdep.c: Fix indentation.
	* amd64-nat.c: Fix indentation.
	* amd64-obsd-tdep.c: Fix indentation.
	* amd64-tdep.c: Fix indentation.
	* amd64-windows-tdep.c: Fix indentation.
	* annotate.c: Fix indentation.
	* arc-tdep.c: Fix indentation.
	* arch-utils.c: Fix indentation.
	* arch/arm-get-next-pcs.c: Fix indentation.
	* arch/arm.c: Fix indentation.
	* arm-linux-nat.c: Fix indentation.
	* arm-linux-tdep.c: Fix indentation.
	* arm-nbsd-tdep.c: Fix indentation.
	* arm-pikeos-tdep.c: Fix indentation.
	* arm-tdep.c: Fix indentation.
	* arm-tdep.h: Fix indentation.
	* arm-wince-tdep.c: Fix indentation.
	* auto-load.c: Fix indentation.
	* auxv.c: Fix indentation.
	* avr-tdep.c: Fix indentation.
	* ax-gdb.c: Fix indentation.
	* ax-general.c: Fix indentation.
	* bfin-linux-tdep.c: Fix indentation.
	* block.c: Fix indentation.
	* block.h: Fix indentation.
	* blockframe.c: Fix indentation.
	* bpf-tdep.c: Fix indentation.
	* break-catch-sig.c: Fix indentation.
	* break-catch-syscall.c: Fix indentation.
	* break-catch-throw.c: Fix indentation.
	* breakpoint.c: Fix indentation.
	* breakpoint.h: Fix indentation.
	* bsd-uthread.c: Fix indentation.
	* btrace.c: Fix indentation.
	* build-id.c: Fix indentation.
	* buildsym-legacy.h: Fix indentation.
	* buildsym.c: Fix indentation.
	* c-typeprint.c: Fix indentation.
	* c-valprint.c: Fix indentation.
	* c-varobj.c: Fix indentation.
	* charset.c: Fix indentation.
	* cli/cli-cmds.c: Fix indentation.
	* cli/cli-decode.c: Fix indentation.
	* cli/cli-decode.h: Fix indentation.
	* cli/cli-script.c: Fix indentation.
	* cli/cli-setshow.c: Fix indentation.
	* coff-pe-read.c: Fix indentation.
	* coffread.c: Fix indentation.
	* compile/compile-cplus-types.c: Fix indentation.
	* compile/compile-object-load.c: Fix indentation.
	* compile/compile-object-run.c: Fix indentation.
	* completer.c: Fix indentation.
	* corefile.c: Fix indentation.
	* corelow.c: Fix indentation.
	* cp-abi.h: Fix indentation.
	* cp-namespace.c: Fix indentation.
	* cp-support.c: Fix indentation.
	* cp-valprint.c: Fix indentation.
	* cris-linux-tdep.c: Fix indentation.
	* cris-tdep.c: Fix indentation.
	* darwin-nat-info.c: Fix indentation.
	* darwin-nat.c: Fix indentation.
	* darwin-nat.h: Fix indentation.
	* dbxread.c: Fix indentation.
	* dcache.c: Fix indentation.
	* disasm.c: Fix indentation.
	* dtrace-probe.c: Fix indentation.
	* dwarf2/abbrev.c: Fix indentation.
	* dwarf2/attribute.c: Fix indentation.
	* dwarf2/expr.c: Fix indentation.
	* dwarf2/frame.c: Fix indentation.
	* dwarf2/index-cache.c: Fix indentation.
	* dwarf2/index-write.c: Fix indentation.
	* dwarf2/line-header.c: Fix indentation.
	* dwarf2/loc.c: Fix indentation.
	* dwarf2/macro.c: Fix indentation.
	* dwarf2/read.c: Fix indentation.
	* dwarf2/read.h: Fix indentation.
	* elfread.c: Fix indentation.
	* eval.c: Fix indentation.
	* event-top.c: Fix indentation.
	* exec.c: Fix indentation.
	* exec.h: Fix indentation.
	* expprint.c: Fix indentation.
	* f-lang.c: Fix indentation.
	* f-typeprint.c: Fix indentation.
	* f-valprint.c: Fix indentation.
	* fbsd-nat.c: Fix indentation.
	* fbsd-tdep.c: Fix indentation.
	* findvar.c: Fix indentation.
	* fork-child.c: Fix indentation.
	* frame-unwind.c: Fix indentation.
	* frame-unwind.h: Fix indentation.
	* frame.c: Fix indentation.
	* frv-linux-tdep.c: Fix indentation.
	* frv-tdep.c: Fix indentation.
	* frv-tdep.h: Fix indentation.
	* ft32-tdep.c: Fix indentation.
	* gcore.c: Fix indentation.
	* gdb_bfd.c: Fix indentation.
	* gdbarch.sh: Fix indentation.
	* gdbarch.c: Re-generate
	* gdbarch.h: Re-generate.
	* gdbcore.h: Fix indentation.
	* gdbthread.h: Fix indentation.
	* gdbtypes.c: Fix indentation.
	* gdbtypes.h: Fix indentation.
	* glibc-tdep.c: Fix indentation.
	* gnu-nat.c: Fix indentation.
	* gnu-nat.h: Fix indentation.
	* gnu-v2-abi.c: Fix indentation.
	* gnu-v3-abi.c: Fix indentation.
	* go32-nat.c: Fix indentation.
	* guile/guile-internal.h: Fix indentation.
	* guile/scm-cmd.c: Fix indentation.
	* guile/scm-frame.c: Fix indentation.
	* guile/scm-iterator.c: Fix indentation.
	* guile/scm-math.c: Fix indentation.
	* guile/scm-ports.c: Fix indentation.
	* guile/scm-pretty-print.c: Fix indentation.
	* guile/scm-value.c: Fix indentation.
	* h8300-tdep.c: Fix indentation.
	* hppa-linux-nat.c: Fix indentation.
	* hppa-linux-tdep.c: Fix indentation.
	* hppa-nbsd-nat.c: Fix indentation.
	* hppa-nbsd-tdep.c: Fix indentation.
	* hppa-obsd-nat.c: Fix indentation.
	* hppa-tdep.c: Fix indentation.
	* hppa-tdep.h: Fix indentation.
	* i386-bsd-nat.c: Fix indentation.
	* i386-darwin-nat.c: Fix indentation.
	* i386-darwin-tdep.c: Fix indentation.
	* i386-dicos-tdep.c: Fix indentation.
	* i386-gnu-nat.c: Fix indentation.
	* i386-linux-nat.c: Fix indentation.
	* i386-linux-tdep.c: Fix indentation.
	* i386-nto-tdep.c: Fix indentation.
	* i386-obsd-tdep.c: Fix indentation.
	* i386-sol2-nat.c: Fix indentation.
	* i386-tdep.c: Fix indentation.
	* i386-tdep.h: Fix indentation.
	* i386-windows-tdep.c: Fix indentation.
	* i387-tdep.c: Fix indentation.
	* i387-tdep.h: Fix indentation.
	* ia64-libunwind-tdep.c: Fix indentation.
	* ia64-libunwind-tdep.h: Fix indentation.
	* ia64-linux-nat.c: Fix indentation.
	* ia64-linux-tdep.c: Fix indentation.
	* ia64-tdep.c: Fix indentation.
	* ia64-tdep.h: Fix indentation.
	* ia64-vms-tdep.c: Fix indentation.
	* infcall.c: Fix indentation.
	* infcmd.c: Fix indentation.
	* inferior.c: Fix indentation.
	* infrun.c: Fix indentation.
	* iq2000-tdep.c: Fix indentation.
	* language.c: Fix indentation.
	* linespec.c: Fix indentation.
	* linux-fork.c: Fix indentation.
	* linux-nat.c: Fix indentation.
	* linux-tdep.c: Fix indentation.
	* linux-thread-db.c: Fix indentation.
	* lm32-tdep.c: Fix indentation.
	* m2-lang.c: Fix indentation.
	* m2-typeprint.c: Fix indentation.
	* m2-valprint.c: Fix indentation.
	* m32c-tdep.c: Fix indentation.
	* m32r-linux-tdep.c: Fix indentation.
	* m32r-tdep.c: Fix indentation.
	* m68hc11-tdep.c: Fix indentation.
	* m68k-bsd-nat.c: Fix indentation.
	* m68k-linux-nat.c: Fix indentation.
	* m68k-linux-tdep.c: Fix indentation.
	* m68k-tdep.c: Fix indentation.
	* machoread.c: Fix indentation.
	* macrocmd.c: Fix indentation.
	* macroexp.c: Fix indentation.
	* macroscope.c: Fix indentation.
	* macrotab.c: Fix indentation.
	* macrotab.h: Fix indentation.
	* main.c: Fix indentation.
	* mdebugread.c: Fix indentation.
	* mep-tdep.c: Fix indentation.
	* mi/mi-cmd-catch.c: Fix indentation.
	* mi/mi-cmd-disas.c: Fix indentation.
	* mi/mi-cmd-env.c: Fix indentation.
	* mi/mi-cmd-stack.c: Fix indentation.
	* mi/mi-cmd-var.c: Fix indentation.
	* mi/mi-cmds.c: Fix indentation.
	* mi/mi-main.c: Fix indentation.
	* mi/mi-parse.c: Fix indentation.
	* microblaze-tdep.c: Fix indentation.
	* minidebug.c: Fix indentation.
	* minsyms.c: Fix indentation.
	* mips-linux-nat.c: Fix indentation.
	* mips-linux-tdep.c: Fix indentation.
	* mips-nbsd-tdep.c: Fix indentation.
	* mips-tdep.c: Fix indentation.
	* mn10300-linux-tdep.c: Fix indentation.
	* mn10300-tdep.c: Fix indentation.
	* moxie-tdep.c: Fix indentation.
	* msp430-tdep.c: Fix indentation.
	* namespace.h: Fix indentation.
	* nat/fork-inferior.c: Fix indentation.
	* nat/gdb_ptrace.h: Fix indentation.
	* nat/linux-namespaces.c: Fix indentation.
	* nat/linux-osdata.c: Fix indentation.
	* nat/netbsd-nat.c: Fix indentation.
	* nat/x86-dregs.c: Fix indentation.
	* nbsd-nat.c: Fix indentation.
	* nbsd-tdep.c: Fix indentation.
	* nios2-linux-tdep.c: Fix indentation.
	* nios2-tdep.c: Fix indentation.
	* nto-procfs.c: Fix indentation.
	* nto-tdep.c: Fix indentation.
	* objfiles.c: Fix indentation.
	* objfiles.h: Fix indentation.
	* opencl-lang.c: Fix indentation.
	* or1k-tdep.c: Fix indentation.
	* osabi.c: Fix indentation.
	* osabi.h: Fix indentation.
	* osdata.c: Fix indentation.
	* p-lang.c: Fix indentation.
	* p-typeprint.c: Fix indentation.
	* p-valprint.c: Fix indentation.
	* parse.c: Fix indentation.
	* ppc-linux-nat.c: Fix indentation.
	* ppc-linux-tdep.c: Fix indentation.
	* ppc-nbsd-nat.c: Fix indentation.
	* ppc-nbsd-tdep.c: Fix indentation.
	* ppc-obsd-nat.c: Fix indentation.
	* ppc-ravenscar-thread.c: Fix indentation.
	* ppc-sysv-tdep.c: Fix indentation.
	* ppc64-tdep.c: Fix indentation.
	* printcmd.c: Fix indentation.
	* proc-api.c: Fix indentation.
	* producer.c: Fix indentation.
	* producer.h: Fix indentation.
	* prologue-value.c: Fix indentation.
	* prologue-value.h: Fix indentation.
	* psymtab.c: Fix indentation.
	* python/py-arch.c: Fix indentation.
	* python/py-bpevent.c: Fix indentation.
	* python/py-event.c: Fix indentation.
	* python/py-event.h: Fix indentation.
	* python/py-finishbreakpoint.c: Fix indentation.
	* python/py-frame.c: Fix indentation.
	* python/py-framefilter.c: Fix indentation.
	* python/py-inferior.c: Fix indentation.
	* python/py-infthread.c: Fix indentation.
	* python/py-objfile.c: Fix indentation.
	* python/py-prettyprint.c: Fix indentation.
	* python/py-registers.c: Fix indentation.
	* python/py-signalevent.c: Fix indentation.
	* python/py-stopevent.c: Fix indentation.
	* python/py-stopevent.h: Fix indentation.
	* python/py-threadevent.c: Fix indentation.
	* python/py-tui.c: Fix indentation.
	* python/py-unwind.c: Fix indentation.
	* python/py-value.c: Fix indentation.
	* python/py-xmethods.c: Fix indentation.
	* python/python-internal.h: Fix indentation.
	* python/python.c: Fix indentation.
	* ravenscar-thread.c: Fix indentation.
	* record-btrace.c: Fix indentation.
	* record-full.c: Fix indentation.
	* record.c: Fix indentation.
	* reggroups.c: Fix indentation.
	* regset.h: Fix indentation.
	* remote-fileio.c: Fix indentation.
	* remote.c: Fix indentation.
	* reverse.c: Fix indentation.
	* riscv-linux-tdep.c: Fix indentation.
	* riscv-ravenscar-thread.c: Fix indentation.
	* riscv-tdep.c: Fix indentation.
	* rl78-tdep.c: Fix indentation.
	* rs6000-aix-tdep.c: Fix indentation.
	* rs6000-lynx178-tdep.c: Fix indentation.
	* rs6000-nat.c: Fix indentation.
	* rs6000-tdep.c: Fix indentation.
	* rust-lang.c: Fix indentation.
	* rx-tdep.c: Fix indentation.
	* s12z-tdep.c: Fix indentation.
	* s390-linux-tdep.c: Fix indentation.
	* score-tdep.c: Fix indentation.
	* ser-base.c: Fix indentation.
	* ser-mingw.c: Fix indentation.
	* ser-uds.c: Fix indentation.
	* ser-unix.c: Fix indentation.
	* serial.c: Fix indentation.
	* sh-linux-tdep.c: Fix indentation.
	* sh-nbsd-tdep.c: Fix indentation.
	* sh-tdep.c: Fix indentation.
	* skip.c: Fix indentation.
	* sol-thread.c: Fix indentation.
	* solib-aix.c: Fix indentation.
	* solib-darwin.c: Fix indentation.
	* solib-frv.c: Fix indentation.
	* solib-svr4.c: Fix indentation.
	* solib.c: Fix indentation.
	* source.c: Fix indentation.
	* sparc-linux-tdep.c: Fix indentation.
	* sparc-nbsd-tdep.c: Fix indentation.
	* sparc-obsd-tdep.c: Fix indentation.
	* sparc-ravenscar-thread.c: Fix indentation.
	* sparc-tdep.c: Fix indentation.
	* sparc64-linux-tdep.c: Fix indentation.
	* sparc64-nbsd-tdep.c: Fix indentation.
	* sparc64-obsd-tdep.c: Fix indentation.
	* sparc64-tdep.c: Fix indentation.
	* stabsread.c: Fix indentation.
	* stack.c: Fix indentation.
	* stap-probe.c: Fix indentation.
	* stubs/ia64vms-stub.c: Fix indentation.
	* stubs/m32r-stub.c: Fix indentation.
	* stubs/m68k-stub.c: Fix indentation.
	* stubs/sh-stub.c: Fix indentation.
	* stubs/sparc-stub.c: Fix indentation.
	* symfile-mem.c: Fix indentation.
	* symfile.c: Fix indentation.
	* symfile.h: Fix indentation.
	* symmisc.c: Fix indentation.
	* symtab.c: Fix indentation.
	* symtab.h: Fix indentation.
	* target-float.c: Fix indentation.
	* target.c: Fix indentation.
	* target.h: Fix indentation.
	* tic6x-tdep.c: Fix indentation.
	* tilegx-linux-tdep.c: Fix indentation.
	* tilegx-tdep.c: Fix indentation.
	* top.c: Fix indentation.
	* tracefile-tfile.c: Fix indentation.
	* tracepoint.c: Fix indentation.
	* tui/tui-disasm.c: Fix indentation.
	* tui/tui-io.c: Fix indentation.
	* tui/tui-regs.c: Fix indentation.
	* tui/tui-stack.c: Fix indentation.
	* tui/tui-win.c: Fix indentation.
	* tui/tui-winsource.c: Fix indentation.
	* tui/tui.c: Fix indentation.
	* typeprint.c: Fix indentation.
	* ui-out.h: Fix indentation.
	* unittests/copy_bitwise-selftests.c: Fix indentation.
	* unittests/memory-map-selftests.c: Fix indentation.
	* utils.c: Fix indentation.
	* v850-tdep.c: Fix indentation.
	* valarith.c: Fix indentation.
	* valops.c: Fix indentation.
	* valprint.c: Fix indentation.
	* valprint.h: Fix indentation.
	* value.c: Fix indentation.
	* value.h: Fix indentation.
	* varobj.c: Fix indentation.
	* vax-tdep.c: Fix indentation.
	* windows-nat.c: Fix indentation.
	* windows-tdep.c: Fix indentation.
	* xcoffread.c: Fix indentation.
	* xml-syscall.c: Fix indentation.
	* xml-tdesc.c: Fix indentation.
	* xstormy16-tdep.c: Fix indentation.
	* xtensa-config.c: Fix indentation.
	* xtensa-linux-nat.c: Fix indentation.
	* xtensa-linux-tdep.c: Fix indentation.
	* xtensa-tdep.c: Fix indentation.

gdbserver/ChangeLog:

	* ax.cc: Fix indentation.
	* dll.cc: Fix indentation.
	* inferiors.h: Fix indentation.
	* linux-low.cc: Fix indentation.
	* linux-nios2-low.cc: Fix indentation.
	* linux-ppc-ipa.cc: Fix indentation.
	* linux-ppc-low.cc: Fix indentation.
	* linux-x86-low.cc: Fix indentation.
	* linux-xtensa-low.cc: Fix indentation.
	* regcache.cc: Fix indentation.
	* server.cc: Fix indentation.
	* tracepoint.cc: Fix indentation.

gdbsupport/ChangeLog:

	* common-exceptions.h: Fix indentation.
	* event-loop.cc: Fix indentation.
	* fileio.cc: Fix indentation.
	* filestuff.cc: Fix indentation.
	* gdb-dlfcn.cc: Fix indentation.
	* gdb_string_view.h: Fix indentation.
	* job-control.cc: Fix indentation.
	* signals.cc: Fix indentation.

Change-Id: I4bad7ae6be0fbe14168b8ebafb98ffe14964a695
2020-11-02 10:28:45 -05:00

633 lines
17 KiB
C

/* Common target-dependent code for NetBSD systems.
Copyright (C) 2002-2020 Free Software Foundation, Inc.
Contributed by Wasabi Systems, 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 "auxv.h"
#include "solib-svr4.h"
#include "netbsd-tdep.h"
#include "gdbarch.h"
#include "objfiles.h"
#include "xml-syscall.h"
/* Flags in the 'kve_protection' field in struct kinfo_vmentry. These
match the KVME_PROT_* constants in <sys/sysctl.h>. */
#define KINFO_VME_PROT_READ 0x00000001
#define KINFO_VME_PROT_WRITE 0x00000002
#define KINFO_VME_PROT_EXEC 0x00000004
/* Flags in the 'kve_flags' field in struct kinfo_vmentry. These
match the KVME_FLAG_* constants in <sys/sysctl.h>. */
#define KINFO_VME_FLAG_COW 0x00000001
#define KINFO_VME_FLAG_NEEDS_COPY 0x00000002
#define KINFO_VME_FLAG_NOCOREDUMP 0x00000004
#define KINFO_VME_FLAG_PAGEABLE 0x00000008
#define KINFO_VME_FLAG_GROWS_UP 0x00000010
#define KINFO_VME_FLAG_GROWS_DOWN 0x00000020
/* FIXME: kettenis/20060115: We should really eliminate the next two
functions completely. */
struct link_map_offsets *
nbsd_ilp32_solib_svr4_fetch_link_map_offsets (void)
{
return svr4_ilp32_fetch_link_map_offsets ();
}
struct link_map_offsets *
nbsd_lp64_solib_svr4_fetch_link_map_offsets (void)
{
return svr4_lp64_fetch_link_map_offsets ();
}
int
nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *func_name)
{
/* Check for libc-provided signal trampoline. All such trampolines
have function names which begin with "__sigtramp". */
return (func_name != NULL
&& startswith (func_name, "__sigtramp"));
}
/* This enum is derived from NETBSD's <sys/signal.h>. */
enum
{
NBSD_SIGHUP = 1,
NBSD_SIGINT = 2,
NBSD_SIGQUIT = 3,
NBSD_SIGILL = 4,
NBSD_SIGTRAP = 5,
NBSD_SIGABRT = 6,
NBSD_SIGEMT = 7,
NBSD_SIGFPE = 8,
NBSD_SIGKILL = 9,
NBSD_SIGBUS = 10,
NBSD_SIGSEGV = 11,
NBSD_SIGSYS = 12,
NBSD_SIGPIPE = 13,
NBSD_SIGALRM = 14,
NBSD_SIGTERM = 15,
NBSD_SIGURG = 16,
NBSD_SIGSTOP = 17,
NBSD_SIGTSTP = 18,
NBSD_SIGCONT = 19,
NBSD_SIGCHLD = 20,
NBSD_SIGTTIN = 21,
NBSD_SIGTTOU = 22,
NBSD_SIGIO = 23,
NBSD_SIGXCPU = 24,
NBSD_SIGXFSZ = 25,
NBSD_SIGVTALRM = 26,
NBSD_SIGPROF = 27,
NBSD_SIGWINCH = 28,
NBSD_SIGINFO = 29,
NBSD_SIGUSR1 = 30,
NBSD_SIGUSR2 = 31,
NBSD_SIGPWR = 32,
NBSD_SIGRTMIN = 33,
NBSD_SIGRTMAX = 63,
};
/* Implement the "gdb_signal_from_target" gdbarch method. */
static enum gdb_signal
nbsd_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
{
switch (signal)
{
case 0:
return GDB_SIGNAL_0;
case NBSD_SIGHUP:
return GDB_SIGNAL_HUP;
case NBSD_SIGINT:
return GDB_SIGNAL_INT;
case NBSD_SIGQUIT:
return GDB_SIGNAL_QUIT;
case NBSD_SIGILL:
return GDB_SIGNAL_ILL;
case NBSD_SIGTRAP:
return GDB_SIGNAL_TRAP;
case NBSD_SIGABRT:
return GDB_SIGNAL_ABRT;
case NBSD_SIGEMT:
return GDB_SIGNAL_EMT;
case NBSD_SIGFPE:
return GDB_SIGNAL_FPE;
case NBSD_SIGKILL:
return GDB_SIGNAL_KILL;
case NBSD_SIGBUS:
return GDB_SIGNAL_BUS;
case NBSD_SIGSEGV:
return GDB_SIGNAL_SEGV;
case NBSD_SIGSYS:
return GDB_SIGNAL_SYS;
case NBSD_SIGPIPE:
return GDB_SIGNAL_PIPE;
case NBSD_SIGALRM:
return GDB_SIGNAL_ALRM;
case NBSD_SIGTERM:
return GDB_SIGNAL_TERM;
case NBSD_SIGURG:
return GDB_SIGNAL_URG;
case NBSD_SIGSTOP:
return GDB_SIGNAL_STOP;
case NBSD_SIGTSTP:
return GDB_SIGNAL_TSTP;
case NBSD_SIGCONT:
return GDB_SIGNAL_CONT;
case NBSD_SIGCHLD:
return GDB_SIGNAL_CHLD;
case NBSD_SIGTTIN:
return GDB_SIGNAL_TTIN;
case NBSD_SIGTTOU:
return GDB_SIGNAL_TTOU;
case NBSD_SIGIO:
return GDB_SIGNAL_IO;
case NBSD_SIGXCPU:
return GDB_SIGNAL_XCPU;
case NBSD_SIGXFSZ:
return GDB_SIGNAL_XFSZ;
case NBSD_SIGVTALRM:
return GDB_SIGNAL_VTALRM;
case NBSD_SIGPROF:
return GDB_SIGNAL_PROF;
case NBSD_SIGWINCH:
return GDB_SIGNAL_WINCH;
case NBSD_SIGINFO:
return GDB_SIGNAL_INFO;
case NBSD_SIGUSR1:
return GDB_SIGNAL_USR1;
case NBSD_SIGUSR2:
return GDB_SIGNAL_USR2;
case NBSD_SIGPWR:
return GDB_SIGNAL_PWR;
/* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>,
therefore we have to handle them here. */
case NBSD_SIGRTMIN:
return GDB_SIGNAL_REALTIME_33;
case NBSD_SIGRTMAX:
return GDB_SIGNAL_REALTIME_63;
}
if (signal >= NBSD_SIGRTMIN + 1 && signal <= NBSD_SIGRTMAX - 1)
{
int offset = signal - NBSD_SIGRTMIN + 1;
return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_34 + offset);
}
return GDB_SIGNAL_UNKNOWN;
}
/* Implement the "gdb_signal_to_target" gdbarch method. */
static int
nbsd_gdb_signal_to_target (struct gdbarch *gdbarch,
enum gdb_signal signal)
{
switch (signal)
{
case GDB_SIGNAL_0:
return 0;
case GDB_SIGNAL_HUP:
return NBSD_SIGHUP;
case GDB_SIGNAL_INT:
return NBSD_SIGINT;
case GDB_SIGNAL_QUIT:
return NBSD_SIGQUIT;
case GDB_SIGNAL_ILL:
return NBSD_SIGILL;
case GDB_SIGNAL_TRAP:
return NBSD_SIGTRAP;
case GDB_SIGNAL_ABRT:
return NBSD_SIGABRT;
case GDB_SIGNAL_EMT:
return NBSD_SIGEMT;
case GDB_SIGNAL_FPE:
return NBSD_SIGFPE;
case GDB_SIGNAL_KILL:
return NBSD_SIGKILL;
case GDB_SIGNAL_BUS:
return NBSD_SIGBUS;
case GDB_SIGNAL_SEGV:
return NBSD_SIGSEGV;
case GDB_SIGNAL_SYS:
return NBSD_SIGSYS;
case GDB_SIGNAL_PIPE:
return NBSD_SIGPIPE;
case GDB_SIGNAL_ALRM:
return NBSD_SIGALRM;
case GDB_SIGNAL_TERM:
return NBSD_SIGTERM;
case GDB_SIGNAL_URG:
return NBSD_SIGSTOP;
case GDB_SIGNAL_TSTP:
return NBSD_SIGTSTP;
case GDB_SIGNAL_CONT:
return NBSD_SIGCONT;
case GDB_SIGNAL_CHLD:
return NBSD_SIGCHLD;
case GDB_SIGNAL_TTIN:
return NBSD_SIGTTIN;
case GDB_SIGNAL_TTOU:
return NBSD_SIGTTOU;
case GDB_SIGNAL_IO:
return NBSD_SIGIO;
case GDB_SIGNAL_XCPU:
return NBSD_SIGXCPU;
case GDB_SIGNAL_XFSZ:
return NBSD_SIGXFSZ;
case GDB_SIGNAL_VTALRM:
return NBSD_SIGVTALRM;
case GDB_SIGNAL_PROF:
return NBSD_SIGPROF;
case GDB_SIGNAL_WINCH:
return NBSD_SIGWINCH;
case GDB_SIGNAL_INFO:
return NBSD_SIGINFO;
case GDB_SIGNAL_USR1:
return NBSD_SIGUSR1;
case GDB_SIGNAL_USR2:
return NBSD_SIGUSR2;
case GDB_SIGNAL_PWR:
return NBSD_SIGPWR;
/* GDB_SIGNAL_REALTIME_33 is not continuous in <gdb/signals.def>,
therefore we have to handle it here. */
case GDB_SIGNAL_REALTIME_33:
return NBSD_SIGRTMIN;
/* Same comment applies to _64. */
case GDB_SIGNAL_REALTIME_63:
return NBSD_SIGRTMAX;
}
if (signal >= GDB_SIGNAL_REALTIME_34
&& signal <= GDB_SIGNAL_REALTIME_62)
{
int offset = signal - GDB_SIGNAL_REALTIME_32;
return NBSD_SIGRTMIN + 1 + offset;
}
return -1;
}
/* Shared library resolver handling. */
static CORE_ADDR
nbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
{
struct bound_minimal_symbol msym;
msym = lookup_minimal_symbol ("_rtld_bind_start", NULL, NULL);
if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
return frame_unwind_caller_pc (get_current_frame ());
else
return find_solib_trampoline_target (get_current_frame (), pc);
}
static struct gdbarch_data *nbsd_gdbarch_data_handle;
struct nbsd_gdbarch_data
{
struct type *siginfo_type;
};
static void *
init_nbsd_gdbarch_data (struct gdbarch *gdbarch)
{
return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct nbsd_gdbarch_data);
}
static struct nbsd_gdbarch_data *
get_nbsd_gdbarch_data (struct gdbarch *gdbarch)
{
return ((struct nbsd_gdbarch_data *)
gdbarch_data (gdbarch, nbsd_gdbarch_data_handle));
}
/* Implement the "get_siginfo_type" gdbarch method. */
static struct type *
nbsd_get_siginfo_type (struct gdbarch *gdbarch)
{
nbsd_gdbarch_data *nbsd_gdbarch_data = get_nbsd_gdbarch_data (gdbarch);
if (nbsd_gdbarch_data->siginfo_type != NULL)
return nbsd_gdbarch_data->siginfo_type;
type *char_type = builtin_type (gdbarch)->builtin_char;
type *int_type = builtin_type (gdbarch)->builtin_int;
type *long_type = builtin_type (gdbarch)->builtin_long;
type *void_ptr_type
= lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
type *int32_type = builtin_type (gdbarch)->builtin_int32;
type *uint32_type = builtin_type (gdbarch)->builtin_uint32;
type *uint64_type = builtin_type (gdbarch)->builtin_uint64;
bool lp64 = TYPE_LENGTH (void_ptr_type) == 8;
size_t char_bits = gdbarch_addressable_memory_unit_size (gdbarch) * 8;
/* pid_t */
type *pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
TYPE_LENGTH (int32_type) * char_bits, "pid_t");
TYPE_TARGET_TYPE (pid_type) = int32_type;
/* uid_t */
type *uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
TYPE_LENGTH (uint32_type) * char_bits, "uid_t");
TYPE_TARGET_TYPE (uid_type) = uint32_type;
/* clock_t */
type *clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
TYPE_LENGTH (int_type) * char_bits, "clock_t");
TYPE_TARGET_TYPE (clock_type) = int_type;
/* lwpid_t */
type *lwpid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
TYPE_LENGTH (int32_type) * char_bits,
"lwpid_t");
TYPE_TARGET_TYPE (lwpid_type) = int32_type;
/* union sigval */
type *sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
sigval_type->set_name (gdbarch_obstack_strdup (gdbarch, "sigval"));
append_composite_type_field (sigval_type, "sival_int", int_type);
append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
/* union _option */
type *option_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
option_type->set_name (gdbarch_obstack_strdup (gdbarch, "_option"));
append_composite_type_field (option_type, "_pe_other_pid", pid_type);
append_composite_type_field (option_type, "_pe_lwp", lwpid_type);
/* union _reason */
type *reason_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
/* _rt */
type *t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
append_composite_type_field (t, "_pid", pid_type);
append_composite_type_field (t, "_uid", uid_type);
append_composite_type_field (t, "_value", sigval_type);
append_composite_type_field (reason_type, "_rt", t);
/* _child */
t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
append_composite_type_field (t, "_pid", pid_type);
append_composite_type_field (t, "_uid", uid_type);
append_composite_type_field (t, "_status", int_type);
append_composite_type_field (t, "_utime", clock_type);
append_composite_type_field (t, "_stime", clock_type);
append_composite_type_field (reason_type, "_child", t);
/* _fault */
t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
append_composite_type_field (t, "_addr", void_ptr_type);
append_composite_type_field (t, "_trap", int_type);
append_composite_type_field (t, "_trap2", int_type);
append_composite_type_field (t, "_trap3", int_type);
append_composite_type_field (reason_type, "_fault", t);
/* _poll */
t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
append_composite_type_field (t, "_band", long_type);
append_composite_type_field (t, "_fd", int_type);
append_composite_type_field (reason_type, "_poll", t);
/* _syscall */
t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
append_composite_type_field (t, "_sysnum", int_type);
append_composite_type_field (t, "_retval",
init_vector_type (int_type, 2));
append_composite_type_field (t, "_error", int_type);
append_composite_type_field (t, "_args",
init_vector_type (uint64_type, 8));
append_composite_type_field (reason_type, "_syscall", t);
/* _ptrace_state */
t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
append_composite_type_field (t, "_pe_report_event", int_type);
append_composite_type_field (t, "_option", option_type);
append_composite_type_field (reason_type, "_ptrace_state", t);
/* struct _ksiginfo */
type *ksiginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
ksiginfo_type->set_name (gdbarch_obstack_strdup (gdbarch, "_ksiginfo"));
append_composite_type_field (ksiginfo_type, "_signo", int_type);
append_composite_type_field (ksiginfo_type, "_code", int_type);
append_composite_type_field (ksiginfo_type, "_errno", int_type);
if (lp64)
append_composite_type_field (ksiginfo_type, "_pad", int_type);
append_composite_type_field (ksiginfo_type, "_reason", reason_type);
/* union siginfo */
type *siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
siginfo_type->set_name (gdbarch_obstack_strdup (gdbarch, "siginfo"));
append_composite_type_field (siginfo_type, "si_pad",
init_vector_type (char_type, 128));
append_composite_type_field (siginfo_type, "_info", ksiginfo_type);
nbsd_gdbarch_data->siginfo_type = siginfo_type;
return siginfo_type;
}
/* See nbsd-tdep.h. */
void
nbsd_info_proc_mappings_header (int addr_bit)
{
printf_filtered (_("Mapped address spaces:\n\n"));
if (addr_bit == 64)
{
printf_filtered (" %18s %18s %10s %10s %9s %s\n",
"Start Addr",
" End Addr",
" Size", " Offset", "Flags ", "File");
}
else
{
printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
"Start Addr",
" End Addr",
" Size", " Offset", "Flags ", "File");
}
}
/* Helper function to generate mappings flags for a single VM map
entry in 'info proc mappings'. */
static const char *
nbsd_vm_map_entry_flags (int kve_flags, int kve_protection)
{
static char vm_flags[9];
vm_flags[0] = (kve_protection & KINFO_VME_PROT_READ) ? 'r' : '-';
vm_flags[1] = (kve_protection & KINFO_VME_PROT_WRITE) ? 'w' : '-';
vm_flags[2] = (kve_protection & KINFO_VME_PROT_EXEC) ? 'x' : '-';
vm_flags[3] = ' ';
vm_flags[4] = (kve_flags & KINFO_VME_FLAG_COW) ? 'C' : '-';
vm_flags[5] = (kve_flags & KINFO_VME_FLAG_NEEDS_COPY) ? 'N' : '-';
vm_flags[6] = (kve_flags & KINFO_VME_FLAG_PAGEABLE) ? 'P' : '-';
vm_flags[7] = (kve_flags & KINFO_VME_FLAG_GROWS_UP) ? 'U'
: (kve_flags & KINFO_VME_FLAG_GROWS_DOWN) ? 'D' : '-';
vm_flags[8] = '\0';
return vm_flags;
}
void
nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start,
ULONGEST kve_end, ULONGEST kve_offset,
int kve_flags, int kve_protection,
const char *kve_path)
{
if (addr_bit == 64)
{
printf_filtered (" %18s %18s %10s %10s %9s %s\n",
hex_string (kve_start),
hex_string (kve_end),
hex_string (kve_end - kve_start),
hex_string (kve_offset),
nbsd_vm_map_entry_flags (kve_flags, kve_protection),
kve_path);
}
else
{
printf_filtered ("\t%10s %10s %10s %10s %9s %s\n",
hex_string (kve_start),
hex_string (kve_end),
hex_string (kve_end - kve_start),
hex_string (kve_offset),
nbsd_vm_map_entry_flags (kve_flags, kve_protection),
kve_path);
}
}
/* Implement the "get_syscall_number" gdbarch method. */
static LONGEST
nbsd_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread)
{
/* NetBSD doesn't use gdbarch_get_syscall_number since NetBSD
native targets fetch the system call number from the
'si_sysnum' member of siginfo_t in nbsd_nat_target::wait.
However, system call catching requires this function to be
set. */
internal_error (__FILE__, __LINE__, _("nbsd_get_sycall_number called"));
}
/* See nbsd-tdep.h. */
void
nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
set_gdbarch_gdb_signal_from_target (gdbarch, nbsd_gdb_signal_from_target);
set_gdbarch_gdb_signal_to_target (gdbarch, nbsd_gdb_signal_to_target);
set_gdbarch_skip_solib_resolver (gdbarch, nbsd_skip_solib_resolver);
set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse);
set_gdbarch_get_siginfo_type (gdbarch, nbsd_get_siginfo_type);
/* `catch syscall' */
set_xml_syscall_file_name (gdbarch, "syscalls/netbsd.xml");
set_gdbarch_get_syscall_number (gdbarch, nbsd_get_syscall_number);
}
void _initialize_nbsd_tdep ();
void
_initialize_nbsd_tdep ()
{
nbsd_gdbarch_data_handle
= gdbarch_data_register_post_init (init_nbsd_gdbarch_data);
}