]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/bfd-target.c
Skip gdb.server/ tests if lack of XML support
[thirdparty/binutils-gdb.git] / gdb / bfd-target.c
CommitLineData
bba2d28d
AC
1/* Very simple "bfd" target, for GDB, the GNU debugger.
2
618f726f 3 Copyright (C) 2003-2016 Free Software Foundation, Inc.
bba2d28d
AC
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
bba2d28d
AC
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/>. */
bba2d28d
AC
19
20#include "defs.h"
21#include "target.h"
22#include "bfd-target.h"
348f8c02 23#include "exec.h"
cbb099e8 24#include "gdb_bfd.h"
bba2d28d 25
891e7584
PA
26/* The object that is stored in the target_ops->to_data field has this
27 type. */
28struct target_bfd_data
29{
30 /* The BFD we're wrapping. */
31 struct bfd *bfd;
32
33 /* The section table build from the ALLOC sections in BFD. Note
34 that we can't rely on extracting the BFD from a random section in
35 the table, since the table can be legitimately empty. */
36 struct target_section_table table;
37};
38
9b409511 39static enum target_xfer_status
bba2d28d
AC
40target_bfd_xfer_partial (struct target_ops *ops,
41 enum target_object object,
961cb7b5
MK
42 const char *annex, gdb_byte *readbuf,
43 const gdb_byte *writebuf,
9b409511
YQ
44 ULONGEST offset, ULONGEST len,
45 ULONGEST *xfered_len)
bba2d28d
AC
46{
47 switch (object)
48 {
49 case TARGET_OBJECT_MEMORY:
07b82ea5 50 {
9a3c8263 51 struct target_bfd_data *data = (struct target_bfd_data *) ops->to_data;
891e7584 52 return section_table_xfer_memory_partial (readbuf, writebuf,
9b409511 53 offset, len, xfered_len,
891e7584
PA
54 data->table.sections,
55 data->table.sections_end,
07b82ea5
PA
56 NULL);
57 }
bba2d28d 58 default:
2ed4b548 59 return TARGET_XFER_E_IO;
bba2d28d
AC
60 }
61}
62
07b82ea5
PA
63static struct target_section_table *
64target_bfd_get_section_table (struct target_ops *ops)
65{
9a3c8263 66 struct target_bfd_data *data = (struct target_bfd_data *) ops->to_data;
891e7584 67 return &data->table;
07b82ea5
PA
68}
69
2c0b251b 70static void
460014f5 71target_bfd_xclose (struct target_ops *t)
bba2d28d 72{
9a3c8263 73 struct target_bfd_data *data = (struct target_bfd_data *) t->to_data;
891e7584 74
cbb099e8 75 gdb_bfd_unref (data->bfd);
891e7584
PA
76 xfree (data->table.sections);
77 xfree (data);
bba2d28d
AC
78 xfree (t);
79}
80
81struct target_ops *
ad13d8df 82target_bfd_reopen (struct bfd *abfd)
bba2d28d 83{
07b82ea5 84 struct target_ops *t;
891e7584 85 struct target_bfd_data *data;
07b82ea5 86
41bf6aca 87 data = XCNEW (struct target_bfd_data);
520b0001
TT
88 data->bfd = abfd;
89 gdb_bfd_ref (abfd);
ad13d8df 90 build_section_table (abfd, &data->table.sections, &data->table.sections_end);
07b82ea5 91
41bf6aca 92 t = XCNEW (struct target_ops);
bba2d28d 93 t->to_shortname = "bfd";
3d263c1d
BI
94 t->to_longname = _("BFD backed target");
95 t->to_doc = _("You should never see this");
07b82ea5 96 t->to_get_section_table = target_bfd_get_section_table;
bba2d28d
AC
97 t->to_xfer_partial = target_bfd_xfer_partial;
98 t->to_xclose = target_bfd_xclose;
891e7584 99 t->to_data = data;
7fdc1521 100 t->to_magic = OPS_MAGIC;
348f8c02 101
bba2d28d
AC
102 return t;
103}