* [patch/rfc] New (!) BFD target
@ 2003-10-23 0:50 Andrew Cagney
2003-10-23 2:41 ` Daniel Jacobowitz
2003-10-31 19:23 ` Andrew Cagney
0 siblings, 2 replies; 5+ messages in thread
From: Andrew Cagney @ 2003-10-23 0:50 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 688 bytes --]
Hello,
The attached adds a really simple BFD "target" and is used:
bfd = bfd_open.. (...);
targ = target_bfd_reopen (bfd)
... operation involving targ ...
target_close (targ, 0);
Looking at solib-svr4, this object makes it possible to change this:
load_addr = read_pc () - tmp_bfd->start_address;
into this:
load_addr = (read_pc ()
- gdbarch_convert_from_func_ptr_addr (current_gdbarch,
bfd_get_start_address (tmp_bfd),
tmp_bfd_target));
i.e., pointer conversion is performed using the original executable and
not the running program. Something needed to fix PPC64 needs.
thoughts?
I'll look to commit this in a few days,
Andrew
[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 8800 bytes --]
2003-10-22 Andrew Cagney <cagney@redhat.com>
* target.h (struct target_ops): Add "to_data";
* bfd-target.h, bfd-target.c: New files.
* Makefile.in (SFILES): Add "bfd-target.c".
(COMMON_OBS): Add "bfd-target.o".
(bfd-target.o): Specify dependencies.
(bfd_target_h): Define.
* defs.h (XZALLOC): Define.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.460
diff -u -r1.460 Makefile.in
--- Makefile.in 23 Oct 2003 00:13:53 -0000 1.460
+++ Makefile.in 23 Oct 2003 00:35:10 -0000
@@ -511,7 +511,9 @@
SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
ax-general.c ax-gdb.c \
- bcache.c block.c blockframe.c breakpoint.c buildsym.c \
+ bcache.c \
+ bfd-target.c \
+ block.c blockframe.c breakpoint.c buildsym.c \
c-exp.y c-lang.c c-typeprint.c c-valprint.c \
charset.c cli-out.c coffread.c coff-pe-read.c \
complaints.c completer.c corefile.c \
@@ -634,6 +636,7 @@
ax_gdb_h = ax-gdb.h
ax_h = ax.h $(doublest_h)
bcache_h = bcache.h
+bfd_target_h = bfd-target.h
block_h = block.h
breakpoint_h = breakpoint.h $(frame_h) $(value_h) $(gdb_events_h)
buildsym_h = buildsym.h
@@ -866,7 +869,9 @@
$(SUBDIR_CLI_SRCS)
TAGFILES_WITH_SRCDIR = $(HFILES_WITH_SRCDIR)
-COMMON_OBS = version.o blockframe.o breakpoint.o findvar.o regcache.o \
+COMMON_OBS = version.o \
+ bfd-target.o \
+ blockframe.o breakpoint.o findvar.o regcache.o \
charset.o disasm.o dummy-frame.o \
source.o values.o eval.o valops.o valarith.o valprint.o printcmd.o \
block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o \
@@ -1599,6 +1604,8 @@
$(regcache_h)
ax-general.o: ax-general.c $(defs_h) $(ax_h) $(value_h) $(gdb_string_h)
bcache.o: bcache.c $(defs_h) $(gdb_obstack_h) $(bcache_h) $(gdb_string_h)
+bfd-target.o: bfd-target.c $(defs_h) $(target_h) $(bfd_target_h) \
+ $(gdb_assert_h) $(gdb_string_h)
block.o: block.c $(defs_h) $(block_h) $(symtab_h) $(symfile_h) \
$(gdb_obstack_h) $(cp_support_h)
blockframe.o: blockframe.c $(defs_h) $(symtab_h) $(bfd_h) $(symfile_h) \
Index: bfd-target.c
===================================================================
RCS file: bfd-target.c
diff -N bfd-target.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bfd-target.c 23 Oct 2003 00:35:10 -0000
@@ -0,0 +1,120 @@
+/* Very simple "bfd" target, for GDB, the GNU debugger.
+
+ Copyright 2003 Free Software Foundation, 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include "defs.h"
+#include "target.h"
+#include "bfd-target.h"
+#include "gdb_assert.h"
+#include "gdb_string.h"
+
+/* Locate all mappable sections of a BFD file, filling in a target
+ section for each. */
+
+struct section_closure
+{
+ struct section_table *end;
+};
+
+static void
+add_to_section_table (struct bfd *abfd, struct bfd_section *asect,
+ void *closure)
+{
+ struct section_closure *pp = closure;
+ flagword aflag;
+
+ /* NOTE: cagney/2003-10-22: Is this pruning useful? */
+ aflag = bfd_get_section_flags (abfd, asect);
+ if (!(aflag & SEC_ALLOC))
+ return;
+ if (bfd_section_size (abfd, asect) == 0)
+ return;
+ pp->end->bfd = abfd;
+ pp->end->the_bfd_section = asect;
+ pp->end->addr = bfd_section_vma (abfd, asect);
+ pp->end->endaddr = pp->end->addr + bfd_section_size (abfd, asect);
+ pp->end++;
+}
+
+void
+build_target_sections_from_bfd (struct target_ops *targ, struct bfd *abfd)
+{
+ unsigned count;
+ struct section_table *start;
+ struct section_closure cl;
+
+ count = bfd_count_sections (abfd);
+ target_resize_to_sections (targ, count);
+ start = targ->to_sections;
+ cl.end = targ->to_sections;
+ bfd_map_over_sections (abfd, add_to_section_table, &cl);
+ gdb_assert (cl.end - start <= count);
+}
+
+LONGEST
+target_bfd_read_partial (struct target_ops *ops,
+ enum target_object object,
+ const char *annex, void *buf,
+ ULONGEST offset, LONGEST len)
+{
+ switch (object)
+ {
+ case TARGET_OBJECT_MEMORY:
+ {
+ struct section_table *s = target_section_by_addr (ops, offset);
+ if (s == NULL)
+ return -1;
+ /* If the length extends beyond the section, truncate it. Be
+ careful to not suffer from overflow (wish S contained a
+ length). */
+ if ((offset - s->addr + len) > (s->endaddr - s->addr))
+ len = (s->endaddr - s->addr) - (offset - s->addr);
+ if (bfd_get_section_contents (s->bfd, s->the_bfd_section, buf,
+ offset - s->addr, len))
+ return len;
+ else
+ return -1;
+ }
+ default:
+ return -1;
+ }
+}
+
+void
+target_bfd_xclose (struct target_ops *t, int quitting)
+{
+ bfd_close (t->to_data);
+ xfree (t->to_sections);
+ xfree (t);
+}
+
+struct target_ops *
+target_bfd_reopen (struct bfd *bfd)
+{
+ struct target_ops *t = XZALLOC (struct target_ops);
+ t->to_shortname = "bfd";
+ t->to_longname = "BFD backed target";
+ t->to_doc = "You should never see this";
+ t->to_read_partial = target_bfd_read_partial;
+ t->to_xclose = target_bfd_xclose;
+ t->to_data = bfd;
+ build_target_sections_from_bfd (t, bfd);
+ return t;
+}
Index: bfd-target.h
===================================================================
RCS file: bfd-target.h
diff -N bfd-target.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bfd-target.h 23 Oct 2003 00:35:10 -0000
@@ -0,0 +1,39 @@
+/* Very simple "bfd" target, for GDB, the GNU debugger.
+
+ Copyright 2003 Free Software Foundation, 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef BFD_TARGET_H
+#define BFD_TARGET_H
+
+struct bfd;
+struct target_ops;
+
+/* Given an existing BFD, re-open it as a "struct target_ops". On
+ close, it will also close the corresponding BFD (which is like
+ freopen and fdopen). */
+struct target_ops *target_bfd_reopen (struct bfd *bfd);
+
+/* Map over ABFD's sections, creating corresponding entries in the
+ target's section table. */
+
+void build_target_sections_from_bfd (struct target_ops *targ,
+ struct bfd *abfd);
+
+#endif
Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.132
diff -u -r1.132 defs.h
--- defs.h 20 Oct 2003 15:37:58 -0000 1.132
+++ defs.h 23 Oct 2003 00:35:10 -0000
@@ -871,6 +871,7 @@
/* Utility macros to allocate typed memory. Avoids errors like
``struct foo *foo = xmalloc (sizeof bar)'' and ``struct foo *foo =
(struct foo *) xmalloc (sizeof bar)''. */
+#define XZALLOC(TYPE) ((TYPE*) memset (xmalloc (sizeof (TYPE)), 0, sizeof (TYPE)))
#define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
#define XCALLOC(NMEMB, TYPE) ((TYPE*) xcalloc ((NMEMB), sizeof (TYPE)))
Index: target.h
===================================================================
RCS file: /cvs/src/src/gdb/target.h,v
retrieving revision 1.47
diff -u -r1.47 target.h
--- target.h 23 Oct 2003 00:13:53 -0000 1.47
+++ target.h 23 Oct 2003 00:35:10 -0000
@@ -268,6 +268,8 @@
char *to_doc; /* Documentation. Does not include trailing
newline, and starts with a one-line descrip-
tion (probably similar to to_longname). */
+ /* Per-target scratch pad. */
+ void *to_data;
/* The open routine takes the rest of the parameters from the
command, and (if successful) pushes a new target onto the
stack. Targets should supply this routine, if only to provide
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch/rfc] New (!) BFD target
2003-10-23 0:50 [patch/rfc] New (!) BFD target Andrew Cagney
@ 2003-10-23 2:41 ` Daniel Jacobowitz
2003-10-23 5:08 ` Andrew Cagney
2003-10-31 19:23 ` Andrew Cagney
1 sibling, 1 reply; 5+ messages in thread
From: Daniel Jacobowitz @ 2003-10-23 2:41 UTC (permalink / raw)
To: gdb-patches
On Wed, Oct 22, 2003 at 08:50:26PM -0400, Andrew Cagney wrote:
> Hello,
>
> The attached adds a really simple BFD "target" and is used:
>
> bfd = bfd_open.. (...);
> targ = target_bfd_reopen (bfd)
> ... operation involving targ ...
> target_close (targ, 0);
>
> Looking at solib-svr4, this object makes it possible to change this:
>
> load_addr = read_pc () - tmp_bfd->start_address;
>
> into this:
>
> load_addr = (read_pc ()
> - gdbarch_convert_from_func_ptr_addr (current_gdbarch,
>
> bfd_get_start_address (tmp_bfd),
> tmp_bfd_target));
>
> i.e., pointer conversion is performed using the original executable and
> not the running program. Something needed to fix PPC64 needs.
>
> thoughts?
> I'll look to commit this in a few days,
I've already said my pieces about "xclose" and adding more mutable
members to the target_ops structure in separate messages, so I won't
repeat them. However, please explain more clearly why this is
necessary - you haven't provided enough context to understand.
Also, how does this interact with the "exec" target, whose
functionality it seems to duplicate in some ways? There should be an
exec target down the stack somewhere, why aren't you using that?
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch/rfc] New (!) BFD target
2003-10-23 2:41 ` Daniel Jacobowitz
@ 2003-10-23 5:08 ` Andrew Cagney
2003-10-23 15:43 ` Daniel Jacobowitz
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Cagney @ 2003-10-23 5:08 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
> Also, how does this interact with the "exec" target, whose
> functionality it seems to duplicate in some ways? There should be an
> exec target down the stack somewhere, why aren't you using that?
bfd-target.h is "new" and "re-entrant". "exec.c" is "old" and "very
very non-re-entrant". Recall that I wrote:
> What you're casually dismissing as trivial: "Not everywhere will need to be converted" and "Eventually, with low urgency, the non-ops should be moved out of it" are exactly the things I also need *now*.
The change I posted, for svr4-solib.o, requires two active bfd-backed
targets (the executable and ld.so), and hence re-entrency[sp].
Follow on changes can see "corefile.c" and "exec.c" both overhauled to
use this new bfd-target foundation/parent object.
Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch/rfc] New (!) BFD target
2003-10-23 5:08 ` Andrew Cagney
@ 2003-10-23 15:43 ` Daniel Jacobowitz
0 siblings, 0 replies; 5+ messages in thread
From: Daniel Jacobowitz @ 2003-10-23 15:43 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Thu, Oct 23, 2003 at 01:08:47AM -0400, Andrew Cagney wrote:
> >Also, how does this interact with the "exec" target, whose
> >functionality it seems to duplicate in some ways? There should be an
> >exec target down the stack somewhere, why aren't you using that?
>
> bfd-target.h is "new" and "re-entrant". "exec.c" is "old" and "very
> very non-re-entrant". Recall that I wrote:
>
> >What you're casually dismissing as trivial: "Not everywhere will need to
> >be converted" and "Eventually, with low urgency, the non-ops should be
> >moved out of it" are exactly the things I also need *now*.
>
> The change I posted, for svr4-solib.o, requires two active bfd-backed
> targets (the executable and ld.so), and hence re-entrency[sp].
>
> Follow on changes can see "corefile.c" and "exec.c" both overhauled to
> use this new bfd-target foundation/parent object.
OK, as commonized code between corefile and exec handling this makes a
bit more sense to me.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch/rfc] New (!) BFD target
2003-10-23 0:50 [patch/rfc] New (!) BFD target Andrew Cagney
2003-10-23 2:41 ` Daniel Jacobowitz
@ 2003-10-31 19:23 ` Andrew Cagney
1 sibling, 0 replies; 5+ messages in thread
From: Andrew Cagney @ 2003-10-31 19:23 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 1074 bytes --]
> Hello,
>
> The attached adds a really simple BFD "target" and is used:
>
> bfd = bfd_open.. (...);
> targ = target_bfd_reopen (bfd)
> ... operation involving targ ...
> target_close (targ, 0);
>
> Looking at solib-svr4, this object makes it possible to change this:
>
> load_addr = read_pc () - tmp_bfd->start_address;
>
> into this:
>
> load_addr = (read_pc ()
> - gdbarch_convert_from_func_ptr_addr (current_gdbarch,
> bfd_get_start_address (tmp_bfd), tmp_bfd_target));
>
> i.e., pointer conversion is performed using the original executable and not the running program. Something needed to fix PPC64 needs.
I've attached the updated patch which I've just committed.
Andrew
> 2003-10-22 Andrew Cagney <cagney@redhat.com>
>
> * target.h (struct target_ops): Add "to_data";
> * bfd-target.h, bfd-target.c: New files.
> * Makefile.in (SFILES): Add "bfd-target.c".
> (COMMON_OBS): Add "bfd-target.o".
> (bfd-target.o): Specify dependencies.
> (bfd_target_h): Define.
> * defs.h (XZALLOC): Define.
>
[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 9398 bytes --]
2003-10-31 Andrew Cagney <cagney@redhat.com>
* defs.h (XZALLOC): Define.
* target.h (struct target_ops): Add "to_data";
* bfd-target.h, bfd-target.c: New files.
* Makefile.in (SFILES): Add "bfd-target.c".
(COMMON_OBS): Add "bfd-target.o".
(bfd-target.o): Specify dependencies.
(bfd_target_h): Define.
* defs.h (XZALLOC): Define.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.464
diff -u -r1.464 Makefile.in
--- Makefile.in 31 Oct 2003 16:37:03 -0000 1.464
+++ Makefile.in 31 Oct 2003 19:17:12 -0000
@@ -511,7 +511,9 @@
SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
ax-general.c ax-gdb.c \
- bcache.c block.c blockframe.c breakpoint.c buildsym.c \
+ bcache.c \
+ bfd-target.c \
+ block.c blockframe.c breakpoint.c buildsym.c \
c-exp.y c-lang.c c-typeprint.c c-valprint.c \
charset.c cli-out.c coffread.c coff-pe-read.c \
complaints.c completer.c corefile.c \
@@ -634,6 +636,7 @@
ax_gdb_h = ax-gdb.h
ax_h = ax.h $(doublest_h)
bcache_h = bcache.h
+bfd_target_h = bfd-target.h
block_h = block.h
breakpoint_h = breakpoint.h $(frame_h) $(value_h) $(gdb_events_h)
buildsym_h = buildsym.h
@@ -867,7 +870,9 @@
$(SUBDIR_CLI_SRCS)
TAGFILES_WITH_SRCDIR = $(HFILES_WITH_SRCDIR)
-COMMON_OBS = version.o blockframe.o breakpoint.o findvar.o regcache.o \
+COMMON_OBS = version.o \
+ bfd-target.o \
+ blockframe.o breakpoint.o findvar.o regcache.o \
charset.o disasm.o dummy-frame.o \
source.o values.o eval.o valops.o valarith.o valprint.o printcmd.o \
block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o \
@@ -1600,6 +1605,8 @@
$(regcache_h)
ax-general.o: ax-general.c $(defs_h) $(ax_h) $(value_h) $(gdb_string_h)
bcache.o: bcache.c $(defs_h) $(gdb_obstack_h) $(bcache_h) $(gdb_string_h)
+bfd-target.o: bfd-target.c $(defs_h) $(target_h) $(bfd_target_h) \
+ $(gdb_assert_h) $(gdb_string_h)
block.o: block.c $(defs_h) $(block_h) $(symtab_h) $(symfile_h) \
$(gdb_obstack_h) $(cp_support_h)
blockframe.o: blockframe.c $(defs_h) $(symtab_h) $(bfd_h) $(symfile_h) \
Index: bfd-target.c
===================================================================
RCS file: bfd-target.c
diff -N bfd-target.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bfd-target.c 31 Oct 2003 19:17:12 -0000
@@ -0,0 +1,131 @@
+/* Very simple "bfd" target, for GDB, the GNU debugger.
+
+ Copyright 2003 Free Software Foundation, 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include "defs.h"
+#include "target.h"
+#include "bfd-target.h"
+#include "gdb_assert.h"
+#include "gdb_string.h"
+
+/* Locate all mappable sections of a BFD file, filling in a target
+ section for each. */
+
+struct section_closure
+{
+ struct section_table *end;
+};
+
+static void
+add_to_section_table (struct bfd *abfd, struct bfd_section *asect,
+ void *closure)
+{
+ struct section_closure *pp = closure;
+ flagword aflag;
+
+ /* NOTE: cagney/2003-10-22: Is this pruning useful? */
+ aflag = bfd_get_section_flags (abfd, asect);
+ if (!(aflag & SEC_ALLOC))
+ return;
+ if (bfd_section_size (abfd, asect) == 0)
+ return;
+ pp->end->bfd = abfd;
+ pp->end->the_bfd_section = asect;
+ pp->end->addr = bfd_section_vma (abfd, asect);
+ pp->end->endaddr = pp->end->addr + bfd_section_size (abfd, asect);
+ pp->end++;
+}
+
+void
+build_target_sections_from_bfd (struct target_ops *targ, struct bfd *abfd)
+{
+ unsigned count;
+ struct section_table *start;
+ struct section_closure cl;
+
+ count = bfd_count_sections (abfd);
+ target_resize_to_sections (targ, count);
+ start = targ->to_sections;
+ cl.end = targ->to_sections;
+ bfd_map_over_sections (abfd, add_to_section_table, &cl);
+ gdb_assert (cl.end - start <= count);
+}
+
+LONGEST
+target_bfd_xfer_partial (struct target_ops *ops,
+ enum target_object object,
+ const char *annex, const void *writebuf,
+ void *readbuf, ULONGEST offset, LONGEST len)
+{
+ switch (object)
+ {
+ case TARGET_OBJECT_MEMORY:
+ {
+ struct section_table *s = target_section_by_addr (ops, offset);
+ if (s == NULL)
+ return -1;
+ /* If the length extends beyond the section, truncate it. Be
+ careful to not suffer from overflow (wish S contained a
+ length). */
+ if ((offset - s->addr + len) > (s->endaddr - s->addr))
+ len = (s->endaddr - s->addr) - (offset - s->addr);
+ if (readbuf != NULL
+ && !bfd_get_section_contents (s->bfd, s->the_bfd_section,
+ readbuf, offset - s->addr, len))
+ return -1;
+#if 1
+ if (writebuf != NULL)
+ return -1;
+#else
+ /* FIXME: cagney/2003-10-31: The BFD interface doesn't yet
+ take a const buffer. */
+ if (writebuf != NULL
+ && !bfd_set_section_contents (s->bfd, s->the_bfd_section,
+ writebuf, offset - s->addr, len))
+ return -1;
+#endif
+ return len;
+ }
+ default:
+ return -1;
+ }
+}
+
+void
+target_bfd_xclose (struct target_ops *t, int quitting)
+{
+ bfd_close (t->to_data);
+ xfree (t->to_sections);
+ xfree (t);
+}
+
+struct target_ops *
+target_bfd_reopen (struct bfd *bfd)
+{
+ struct target_ops *t = XZALLOC (struct target_ops);
+ t->to_shortname = "bfd";
+ t->to_longname = "BFD backed target";
+ t->to_doc = "You should never see this";
+ t->to_xfer_partial = target_bfd_xfer_partial;
+ t->to_xclose = target_bfd_xclose;
+ t->to_data = bfd;
+ build_target_sections_from_bfd (t, bfd);
+ return t;
+}
Index: bfd-target.h
===================================================================
RCS file: bfd-target.h
diff -N bfd-target.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bfd-target.h 31 Oct 2003 19:17:12 -0000
@@ -0,0 +1,39 @@
+/* Very simple "bfd" target, for GDB, the GNU debugger.
+
+ Copyright 2003 Free Software Foundation, 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef BFD_TARGET_H
+#define BFD_TARGET_H
+
+struct bfd;
+struct target_ops;
+
+/* Given an existing BFD, re-open it as a "struct target_ops". On
+ close, it will also close the corresponding BFD (which is like
+ freopen and fdopen). */
+struct target_ops *target_bfd_reopen (struct bfd *bfd);
+
+/* Map over ABFD's sections, creating corresponding entries in the
+ target's section table. */
+
+void build_target_sections_from_bfd (struct target_ops *targ,
+ struct bfd *abfd);
+
+#endif
Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.132
diff -u -r1.132 defs.h
--- defs.h 20 Oct 2003 15:37:58 -0000 1.132
+++ defs.h 31 Oct 2003 19:17:13 -0000
@@ -868,9 +868,10 @@
"libiberty.h". */
extern void xfree (void *);
-/* Utility macros to allocate typed memory. Avoids errors like
- ``struct foo *foo = xmalloc (sizeof bar)'' and ``struct foo *foo =
- (struct foo *) xmalloc (sizeof bar)''. */
+/* Utility macros to allocate typed memory. Avoids errors like:
+ struct foo *foo = xmalloc (sizeof struct bar); and memset (foo,
+ sizeof (struct foo), 0). */
+#define XZALLOC(TYPE) ((TYPE*) memset (xmalloc (sizeof (TYPE)), 0, sizeof (TYPE)))
#define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
#define XCALLOC(NMEMB, TYPE) ((TYPE*) xcalloc ((NMEMB), sizeof (TYPE)))
Index: target.h
===================================================================
RCS file: /cvs/src/src/gdb/target.h,v
retrieving revision 1.50
diff -u -r1.50 target.h
--- target.h 31 Oct 2003 15:25:34 -0000 1.50
+++ target.h 31 Oct 2003 19:17:13 -0000
@@ -280,6 +280,8 @@
char *to_doc; /* Documentation. Does not include trailing
newline, and starts with a one-line descrip-
tion (probably similar to to_longname). */
+ /* Per-target scratch pad. */
+ void *to_data;
/* The open routine takes the rest of the parameters from the
command, and (if successful) pushes a new target onto the
stack. Targets should supply this routine, if only to provide
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2003-10-31 19:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-10-23 0:50 [patch/rfc] New (!) BFD target Andrew Cagney
2003-10-23 2:41 ` Daniel Jacobowitz
2003-10-23 5:08 ` Andrew Cagney
2003-10-23 15:43 ` Daniel Jacobowitz
2003-10-31 19:23 ` Andrew Cagney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox