1 /* Target definitions for GNU/Linux on ARM, for GDB.
2    Copyright 1999, 2000 Free Software Foundation, Inc.
3 
4    This file is part of GDB.
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20 
21 #ifndef TM_ARMLINUX_H
22 #define TM_ARMLINUX_H
23 
24 /* Include the common ARM target definitions.  */
25 #include "arm/tm-arm.h"
26 
27 #include "config/tm-linux.h"
28 
29 /* We've multi-arched this.  */
30 #undef IN_SOLIB_CALL_TRAMPOLINE
31 
32 /* On ARM GNU/Linux, a call to a library routine does not have to go
33    through any trampoline code.  */
34 #define IN_SOLIB_RETURN_TRAMPOLINE(pc, name)	0
35 
36 /* We've multi-arched this.  */
37 #undef SKIP_TRAMPOLINE_CODE
38 
39 /* When we call a function in a shared library, and the PLT sends us
40    into the dynamic linker to find the function's real address, we
41    need to skip over the dynamic linker call.  This function decides
42    when to skip, and where to skip to.  See the comments for
43    SKIP_SOLIB_RESOLVER at the top of infrun.c.  */
44 #if 0
45 #undef IN_SOLIB_DYNSYM_RESOLVE_CODE
46 extern CORE_ADDR arm_in_solib_dynsym_resolve_code (CORE_ADDR pc, char *name);
47 #define IN_SOLIB_DYNSYM_RESOLVE_CODE  arm_in_solib_dynsym_resolve_code
48 /* ScottB: Current definition is
49 extern CORE_ADDR in_svr4_dynsym_resolve_code (CORE_ADDR pc, char *name);
50 #define IN_SOLIB_DYNSYM_RESOLVE_CODE  in_svr4_dynsym_resolve_code */
51 #endif
52 
53 /* When the ARM Linux kernel invokes a signal handler, the return
54    address points at a special instruction which'll trap back into
55    the kernel.  These definitions are used to identify this bit of
56    code as a signal trampoline in order to support backtracing
57    through calls to signal handlers. */
58 
59 int arm_linux_in_sigtramp (CORE_ADDR pc, char *name);
60 #define DEPRECATED_IN_SIGTRAMP(pc, name) arm_linux_in_sigtramp (pc, name)
61 
62 /* Each OS has different mechanisms for accessing the various
63    registers stored in the sigcontext structure.  These definitions
64    provide a mechanism by which the generic code in arm-tdep.c can
65    find the addresses at which various registers are saved at in the
66    sigcontext structure.  If SIGCONTEXT_REGISTER_ADDRESS is not
67    defined, arm-tdep.c will define it to be 0.  (See ia64-tdep.c and
68    ia64-linux-tdep.c to see what a similar mechanism looks like when
69    multi-arched.) */
70 
71 extern CORE_ADDR arm_linux_sigcontext_register_address (CORE_ADDR, CORE_ADDR,
72                                                         int);
73 #define SIGCONTEXT_REGISTER_ADDRESS arm_linux_sigcontext_register_address
74 
75 #endif /* TM_ARMLINUX_H */
76