xref: /openbsd-src/gnu/usr.bin/binutils/gdb/nbsd-tdep.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis /* Common target-dependent code for NetBSD systems.
2*b725ae77Skettenis    Copyright 2002 Free Software Foundation, Inc.
3*b725ae77Skettenis    Contributed by Wasabi Systems, Inc.
4*b725ae77Skettenis 
5*b725ae77Skettenis    This file is part of GDB.
6*b725ae77Skettenis 
7*b725ae77Skettenis    This program is free software; you can redistribute it and/or modify
8*b725ae77Skettenis    it under the terms of the GNU General Public License as published by
9*b725ae77Skettenis    the Free Software Foundation; either version 2 of the License, or
10*b725ae77Skettenis    (at your option) any later version.
11*b725ae77Skettenis 
12*b725ae77Skettenis    This program is distributed in the hope that it will be useful,
13*b725ae77Skettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
14*b725ae77Skettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*b725ae77Skettenis    GNU General Public License for more details.
16*b725ae77Skettenis 
17*b725ae77Skettenis    You should have received a copy of the GNU General Public License
18*b725ae77Skettenis    along with this program; if not, write to the Free Software
19*b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
20*b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
21*b725ae77Skettenis 
22*b725ae77Skettenis #include "defs.h"
23*b725ae77Skettenis #include "gdb_string.h"
24*b725ae77Skettenis #include "solib-svr4.h"
25*b725ae77Skettenis 
26*b725ae77Skettenis /* Fetch (and possibly build) an appropriate link_map_offsets
27*b725ae77Skettenis    structure for NetBSD targets using the struct offsets defined
28*b725ae77Skettenis    in <link.h> (but without actual reference to that file).
29*b725ae77Skettenis 
30*b725ae77Skettenis    This makes it possible to access NetBSD shared libraries from a
31*b725ae77Skettenis    GDB that was not built on the same platform (for cross debugging).
32*b725ae77Skettenis 
33*b725ae77Skettenis    We provide versions for ILP32 and LP64 NetBSD targets here.  */
34*b725ae77Skettenis 
35*b725ae77Skettenis struct link_map_offsets *
nbsd_ilp32_solib_svr4_fetch_link_map_offsets(void)36*b725ae77Skettenis nbsd_ilp32_solib_svr4_fetch_link_map_offsets (void)
37*b725ae77Skettenis {
38*b725ae77Skettenis   static struct link_map_offsets lmo;
39*b725ae77Skettenis   static struct link_map_offsets *lmp = NULL;
40*b725ae77Skettenis 
41*b725ae77Skettenis   if (lmp == NULL)
42*b725ae77Skettenis     {
43*b725ae77Skettenis       lmp = &lmo;
44*b725ae77Skettenis 
45*b725ae77Skettenis       lmo.r_debug_size = 16;
46*b725ae77Skettenis 
47*b725ae77Skettenis       lmo.r_map_offset = 4;
48*b725ae77Skettenis       lmo.r_map_size   = 4;
49*b725ae77Skettenis 
50*b725ae77Skettenis       lmo.link_map_size = 20;
51*b725ae77Skettenis 
52*b725ae77Skettenis       lmo.l_addr_offset = 0;
53*b725ae77Skettenis       lmo.l_addr_size   = 4;
54*b725ae77Skettenis 
55*b725ae77Skettenis       lmo.l_name_offset = 4;
56*b725ae77Skettenis       lmo.l_name_size   = 4;
57*b725ae77Skettenis 
58*b725ae77Skettenis       lmo.l_next_offset = 12;
59*b725ae77Skettenis       lmo.l_next_size   = 4;
60*b725ae77Skettenis 
61*b725ae77Skettenis       lmo.l_prev_offset = 16;
62*b725ae77Skettenis       lmo.l_prev_size   = 4;
63*b725ae77Skettenis     }
64*b725ae77Skettenis 
65*b725ae77Skettenis   return lmp;
66*b725ae77Skettenis }
67*b725ae77Skettenis 
68*b725ae77Skettenis struct link_map_offsets *
nbsd_lp64_solib_svr4_fetch_link_map_offsets(void)69*b725ae77Skettenis nbsd_lp64_solib_svr4_fetch_link_map_offsets (void)
70*b725ae77Skettenis {
71*b725ae77Skettenis   static struct link_map_offsets lmo;
72*b725ae77Skettenis   static struct link_map_offsets *lmp = NULL;
73*b725ae77Skettenis 
74*b725ae77Skettenis   if (lmp == NULL)
75*b725ae77Skettenis     {
76*b725ae77Skettenis       lmp = &lmo;
77*b725ae77Skettenis 
78*b725ae77Skettenis       lmo.r_debug_size = 32;
79*b725ae77Skettenis 
80*b725ae77Skettenis       lmo.r_map_offset = 8;
81*b725ae77Skettenis       lmo.r_map_size   = 8;
82*b725ae77Skettenis 
83*b725ae77Skettenis       lmo.link_map_size = 40;
84*b725ae77Skettenis 
85*b725ae77Skettenis       lmo.l_addr_offset = 0;
86*b725ae77Skettenis       lmo.l_addr_size   = 8;
87*b725ae77Skettenis 
88*b725ae77Skettenis       lmo.l_name_offset = 8;
89*b725ae77Skettenis       lmo.l_name_size   = 8;
90*b725ae77Skettenis 
91*b725ae77Skettenis       lmo.l_next_offset = 24;
92*b725ae77Skettenis       lmo.l_next_size   = 8;
93*b725ae77Skettenis 
94*b725ae77Skettenis       lmo.l_prev_offset = 32;
95*b725ae77Skettenis       lmo.l_prev_size   = 8;
96*b725ae77Skettenis     }
97*b725ae77Skettenis 
98*b725ae77Skettenis   return lmp;
99*b725ae77Skettenis }
100*b725ae77Skettenis 
101*b725ae77Skettenis int
nbsd_pc_in_sigtramp(CORE_ADDR pc,char * func_name)102*b725ae77Skettenis nbsd_pc_in_sigtramp (CORE_ADDR pc, char *func_name)
103*b725ae77Skettenis {
104*b725ae77Skettenis   /* Check for libc-provided signal trampoline.  All such trampolines
105*b725ae77Skettenis      have function names which begin with "__sigtramp".  */
106*b725ae77Skettenis 
107*b725ae77Skettenis   return (func_name != NULL
108*b725ae77Skettenis 	  && strncmp (func_name, "__sigtramp", 10) == 0);
109*b725ae77Skettenis }
110