X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fbfd-target.c;h=99b49aad13b924dc80909d80853eb1f3291bed1f;hb=3fffc0701a26bc0baa563fdc793cafb3d3f02a93;hp=0e553d25893fe4b881837d1c50b7e869094bc1e9;hpb=891e75843af5c8d3433cf767e1d2f98b58f7e60b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/bfd-target.c b/gdb/bfd-target.c index 0e553d2589..99b49aad13 100644 --- a/gdb/bfd-target.c +++ b/gdb/bfd-target.c @@ -1,6 +1,6 @@ /* Very simple "bfd" target, for GDB, the GNU debugger. - Copyright (C) 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2003-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,7 @@ #include "target.h" #include "bfd-target.h" #include "exec.h" +#include "gdb_bfd.h" /* The object that is stored in the target_ops->to_data field has this type. */ @@ -35,65 +36,68 @@ struct target_bfd_data struct target_section_table table; }; -static LONGEST +static enum target_xfer_status target_bfd_xfer_partial (struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) { switch (object) { case TARGET_OBJECT_MEMORY: { - struct target_bfd_data *data = ops->to_data; + struct target_bfd_data *data = (struct target_bfd_data *) ops->to_data; return section_table_xfer_memory_partial (readbuf, writebuf, - offset, len, + offset, len, xfered_len, data->table.sections, data->table.sections_end, NULL); } default: - return -1; + return TARGET_XFER_E_IO; } } static struct target_section_table * target_bfd_get_section_table (struct target_ops *ops) { - struct target_bfd_data *data = ops->to_data; + struct target_bfd_data *data = (struct target_bfd_data *) ops->to_data; return &data->table; } static void -target_bfd_xclose (struct target_ops *t, int quitting) +target_bfd_close (struct target_ops *t) { - struct target_bfd_data *data = t->to_data; + struct target_bfd_data *data = (struct target_bfd_data *) t->to_data; - bfd_close (data->bfd); + gdb_bfd_unref (data->bfd); xfree (data->table.sections); xfree (data); xfree (t); } struct target_ops * -target_bfd_reopen (struct bfd *bfd) +target_bfd_reopen (struct bfd *abfd) { struct target_ops *t; struct target_bfd_data *data; - data = XZALLOC (struct target_bfd_data); - data->bfd = bfd; - build_section_table (bfd, &data->table.sections, &data->table.sections_end); + data = XCNEW (struct target_bfd_data); + data->bfd = abfd; + gdb_bfd_ref (abfd); + build_section_table (abfd, &data->table.sections, &data->table.sections_end); - t = XZALLOC (struct target_ops); + t = XCNEW (struct target_ops); t->to_shortname = "bfd"; t->to_longname = _("BFD backed target"); t->to_doc = _("You should never see this"); t->to_get_section_table = target_bfd_get_section_table; t->to_xfer_partial = target_bfd_xfer_partial; - t->to_xclose = target_bfd_xclose; + t->to_close = target_bfd_close; t->to_data = data; + t->to_magic = OPS_MAGIC; return t; }