]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/i386-sol2-tdep.c
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / i386-sol2-tdep.c
CommitLineData
8201327c 1/* Target-dependent code for Solaris x86.
911bc6ee 2
213516ef 3 Copyright (C) 2002-2023 Free Software Foundation, Inc.
8201327c
MK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
8201327c
MK
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8201327c
MK
19
20#include "defs.h"
52e9098c 21#include "value.h"
4be87837 22#include "osabi.h"
8201327c 23
081bf9da 24#include "sol2-tdep.h"
8201327c 25#include "i386-tdep.h"
75f501b5 26#include "solib-svr4.h"
8201327c 27
6a9756ed
MK
28/* From <ia32/sys/reg.h>. */
29static int i386_sol2_gregset_reg_offset[] =
30{
31 11 * 4, /* %eax */
32 10 * 4, /* %ecx */
33 9 * 4, /* %edx */
34 8 * 4, /* %ebx */
35 17 * 4, /* %esp */
36 6 * 4, /* %ebp */
37 5 * 4, /* %esi */
38 4 * 4, /* %edi */
39 14 * 4, /* %eip */
40 16 * 4, /* %eflags */
41 15 * 4, /* %cs */
42 18 * 4, /* %ss */
43 3 * 4, /* %ds */
44 2 * 4, /* %es */
45 1 * 4, /* %fs */
46 0 * 4 /* %gs */
47};
48
8349554d
MK
49/* Solaris doesn't have a `struct sigcontext', but it does have a
50 `mcontext_t' that contains the saved set of machine registers. */
51
52static CORE_ADDR
bd2b40ac 53i386_sol2_mcontext_addr (frame_info_ptr this_frame)
8349554d
MK
54{
55 CORE_ADDR sp, ucontext_addr;
56
10458914
DJ
57 sp = get_frame_register_unsigned (this_frame, I386_ESP_REGNUM);
58 ucontext_addr = get_frame_memory_unsigned (this_frame, sp + 8, 4);
8349554d
MK
59
60 return ucontext_addr + 36;
61}
62
8201327c
MK
63/* Solaris 2. */
64
65static void
66i386_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
67{
08106042 68 i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
8201327c
MK
69
70 /* Solaris is SVR4-based. */
71 i386_svr4_init_abi (info, gdbarch);
72
d412e696 73 sol2_init_abi (info, gdbarch);
149ad273 74
6a9756ed
MK
75 /* Solaris reserves space for its FPU emulator in `fpregset_t'.
76 There is also some space reserved for the registers of a Weitek
77 math coprocessor. */
78 tdep->gregset_reg_offset = i386_sol2_gregset_reg_offset;
79 tdep->gregset_num_regs = ARRAY_SIZE (i386_sol2_gregset_reg_offset);
80 tdep->sizeof_gregset = 19 * 4;
81 tdep->sizeof_fpregset = 380;
82
911bc6ee 83 /* Signal trampolines are slightly different from SVR4. */
d412e696 84 tdep->sigtramp_p = sol2_sigtramp_p;
8349554d
MK
85 tdep->sigcontext_addr = i386_sol2_mcontext_addr;
86 tdep->sc_reg_offset = tdep->gregset_reg_offset;
87 tdep->sc_num_regs = tdep->gregset_num_regs;
75f501b5 88
081bf9da 89 /* Solaris has SVR4-style shared libraries. */
75f501b5
MK
90 set_solib_svr4_fetch_link_map_offsets
91 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
8201327c
MK
92}
93\f
94
6e157172
MK
95static enum gdb_osabi
96i386_sol2_osabi_sniffer (bfd *abfd)
97{
98 /* If we have a section named .SUNW_version, then it is almost
99 certainly Solaris 2. */
100 if (bfd_get_section_by_name (abfd, ".SUNW_version"))
101 return GDB_OSABI_SOLARIS;
102
103 return GDB_OSABI_UNKNOWN;
104}
105
6c265988 106void _initialize_i386_sol2_tdep ();
8201327c 107void
6c265988 108_initialize_i386_sol2_tdep ()
8201327c 109{
0c52bd59 110 /* Register an ELF OS ABI sniffer for Solaris 2 binaries. */
6e157172
MK
111 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
112 i386_sol2_osabi_sniffer);
113
05816f70 114 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SOLARIS,
8201327c
MK
115 i386_sol2_init_abi);
116}