* [patch] Set bfd field in target_section
@ 2009-07-28 14:46 Aleksandar Ristovski
2009-07-28 14:51 ` Pedro Alves
0 siblings, 1 reply; 11+ messages in thread
From: Aleksandar Ristovski @ 2009-07-28 14:46 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 498 bytes --]
Hello,
I believe this is related to Pedro's patch from 03-Jun-09. I
didn't see where we set target_section.bfd field - maybe I
am overlooking something, but in bfd-target, in function
target_bfd_xclose we will call bfd_close
(table->sections->bfd); bfd_close doesn't like NULL argument.
Am I missing something, or is this (the patch) missing?
Patch attached.
Thanks,
--
Aleksandar Ristovski
QNX Software Systems
ChangeLog:
* exec.c (build_section_table): Setup section_table bfd field.
[-- Attachment #2: exec_c-20090728.diff --]
[-- Type: text/x-patch, Size: 641 bytes --]
Index: gdb/exec.c
===================================================================
RCS file: /cvs/src/src/gdb/exec.c,v
retrieving revision 1.90
diff -u -p -r1.90 exec.c
--- gdb/exec.c 2 Jul 2009 17:21:06 -0000 1.90
+++ gdb/exec.c 28 Jul 2009 14:21:09 -0000
@@ -441,6 +441,7 @@ build_section_table (struct bfd *some_bf
bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
if (*end > *start + count)
internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
+ (*start)->bfd = (*end)->bfd = some_bfd;
/* We could realloc the table, but it probably loses for most files. */
return 0;
}
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [patch] Set bfd field in target_section 2009-07-28 14:46 [patch] Set bfd field in target_section Aleksandar Ristovski @ 2009-07-28 14:51 ` Pedro Alves 2009-07-28 14:59 ` Pedro Alves ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Pedro Alves @ 2009-07-28 14:51 UTC (permalink / raw) To: gdb-patches; +Cc: Aleksandar Ristovski, gdb-patches On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: > Hello, > > I believe this is related to Pedro's patch from 03-Jun-09. I > didn't see where we set target_section.bfd field - maybe I > am overlooking something, but in bfd-target, in function > target_bfd_xclose we will call bfd_close > (table->sections->bfd); bfd_close doesn't like NULL argument. > > Am I missing something, or is this (the patch) missing? Doesn't add_to_section_table set the bfd in each new target section? > > Patch attached. > > Thanks, > > -- > Aleksandar Ristovski > QNX Software Systems > > ChangeLog: > > * exec.c (build_section_table): Setup section_table bfd field. > exec_c-20090728.diff > Index: gdb/exec.c > =================================================================== > RCS file: /cvs/src/src/gdb/exec.c,v > retrieving revision 1.90 > diff -u -p -r1.90 exec.c > --- gdb/exec.c 2 Jul 2009 17:21:06 -0000 1.90 > +++ gdb/exec.c 28 Jul 2009 14:21:09 -0000 > @@ -441,6 +441,7 @@ build_section_table (struct bfd *some_bf > bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end); > if (*end > *start + count) > internal_error (__FILE__, __LINE__, _("failed internal consistency check")); > + (*start)->bfd = (*end)->bfd = some_bfd; > /* We could realloc the table, but it probably loses for most files. */ > return 0; > } -- Pedro Alves ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 14:51 ` Pedro Alves @ 2009-07-28 14:59 ` Pedro Alves 2009-07-28 15:06 ` Aleksandar Ristovski 2009-07-28 15:16 ` Pedro Alves 2 siblings, 0 replies; 11+ messages in thread From: Pedro Alves @ 2009-07-28 14:59 UTC (permalink / raw) To: gdb-patches; +Cc: Aleksandar Ristovski, gdb-patches On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: > Hello, > > I believe this is related to Pedro's patch from 03-Jun-09. I > didn't see where we set target_section.bfd field - maybe I > am overlooking something, but in bfd-target, in function > target_bfd_xclose we will call bfd_close > (table->sections->bfd); bfd_close doesn't like NULL argument. > > Am I missing something, or is this (the patch) missing? Doesn't add_to_section_table set the bfd in each new target section? > > Patch attached. > > Thanks, > > -- > Aleksandar Ristovski > QNX Software Systems > > ChangeLog: > > * exec.c (build_section_table): Setup section_table bfd field. > exec_c-20090728.diff > Index: gdb/exec.c > =================================================================== > RCS file: /cvs/src/src/gdb/exec.c,v > retrieving revision 1.90 > diff -u -p -r1.90 exec.c > --- gdb/exec.c 2 Jul 2009 17:21:06 -0000 1.90 > +++ gdb/exec.c 28 Jul 2009 14:21:09 -0000 > @@ -441,6 +441,7 @@ build_section_table (struct bfd *some_bf > bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end); > if (*end > *start + count) > internal_error (__FILE__, __LINE__, _("failed internal consistency check")); > + (*start)->bfd = (*end)->bfd = some_bfd; > /* We could realloc the table, but it probably loses for most files. */ > return 0; > } -- Pedro Alves ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 14:51 ` Pedro Alves 2009-07-28 14:59 ` Pedro Alves @ 2009-07-28 15:06 ` Aleksandar Ristovski 2009-07-28 16:22 ` Pedro Alves 2009-07-28 15:16 ` Pedro Alves 2 siblings, 1 reply; 11+ messages in thread From: Aleksandar Ristovski @ 2009-07-28 15:06 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: >> Hello, >> >> I believe this is related to Pedro's patch from 03-Jun-09. I >> didn't see where we set target_section.bfd field - maybe I >> am overlooking something, but in bfd-target, in function >> target_bfd_xclose we will call bfd_close >> (table->sections->bfd); bfd_close doesn't like NULL argument. >> >> Am I missing something, or is this (the patch) missing? > > Doesn't add_to_section_table set the bfd in each new > target section? Indeed it does. However, the problem is if we don't find any sections in a bfd, it will exit and will leave bfd field 0. I get this situation at the moment because I broke my xfer_partial, but I think it could happen in general? --- Aleksandar ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 15:06 ` Aleksandar Ristovski @ 2009-07-28 16:22 ` Pedro Alves 2009-07-28 16:37 ` Aleksandar Ristovski 0 siblings, 1 reply; 11+ messages in thread From: Pedro Alves @ 2009-07-28 16:22 UTC (permalink / raw) To: Aleksandar Ristovski; +Cc: gdb-patches On Tuesday 28 July 2009 15:45:25, Aleksandar Ristovski wrote: > Pedro Alves wrote: > > On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: > >> Hello, > >> > >> I believe this is related to Pedro's patch from 03-Jun-09. I > >> didn't see where we set target_section.bfd field - maybe I > >> am overlooking something, but in bfd-target, in function > >> target_bfd_xclose we will call bfd_close > >> (table->sections->bfd); bfd_close doesn't like NULL argument. > >> > >> Am I missing something, or is this (the patch) missing? > > > > Doesn't add_to_section_table set the bfd in each new > > target section? > > Indeed it does. However, the problem is if we don't find any > sections in a bfd, it will exit and will leave bfd field 0. Right, but table->sections will be equal to table->sections_end, meaning the table is empty. Your fix isn't correct, since you should never write to *sections_end, which is one-past-the-end of the sections in the table. In the degenerate case of bfd_count_sections == 0 (not 0 ALLOC sections), xmalloc will still return something non-NULL, but, writing to this pointer invokes undefined behaviour. > I get this situation at the moment because I broke my > xfer_partial, but I think it could happen in general? Testing finished succesfully, so I've applied the patch with this ChangeLog entry. Let me know if something is still wrong. 2009-07-28 Pedro Alves <pedro@codesourcery.com> * bfd-target.c (target_bfd_xclose): Only close the bfd if the section table is not empty. (target_bfd_reopen): If the section table ends up empty, close the bfd here. -- Pedro Alves ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 16:22 ` Pedro Alves @ 2009-07-28 16:37 ` Aleksandar Ristovski 2009-07-28 16:37 ` Pedro Alves 0 siblings, 1 reply; 11+ messages in thread From: Aleksandar Ristovski @ 2009-07-28 16:37 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On Tuesday 28 July 2009 15:45:25, Aleksandar Ristovski wrote: >> Pedro Alves wrote: >>> On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: >>>> Hello, >>>> >>>> I believe this is related to Pedro's patch from 03-Jun-09. I >>>> didn't see where we set target_section.bfd field - maybe I >>>> am overlooking something, but in bfd-target, in function >>>> target_bfd_xclose we will call bfd_close >>>> (table->sections->bfd); bfd_close doesn't like NULL argument. >>>> >>>> Am I missing something, or is this (the patch) missing? >>> Doesn't add_to_section_table set the bfd in each new >>> target section? >> Indeed it does. However, the problem is if we don't find any >> sections in a bfd, it will exit and will leave bfd field 0. > > Right, but table->sections will be equal to table->sections_end, > meaning the table is empty. Your fix isn't correct, since you > should never write to *sections_end, which is one-past-the-end > of the sections in the table. In the degenerate case of > bfd_count_sections == 0 (not 0 ALLOC sections), xmalloc will > still return something non-NULL, but, writing to this pointer > invokes undefined behaviour. > >> I get this situation at the moment because I broke my >> xfer_partial, but I think it could happen in general? > > Testing finished succesfully, so I've applied the patch > with this ChangeLog entry. Let me know if something is still wrong. > > 2009-07-28 Pedro Alves <pedro@codesourcery.com> > > * bfd-target.c (target_bfd_xclose): Only close the bfd if the > section table is not empty. > (target_bfd_reopen): If the section table ends up empty, close the > bfd here. > I think now you broke it in a different way. Now we can end up trying to read from a closed bfd. And just wondering, why not simply: Index: gdb/exec.c =================================================================== RCS file: /cvs/src/src/gdb/exec.c,v retrieving revision 1.90 diff -u -p -r1.90 exec.c --- gdb/exec.c 2 Jul 2009 17:21:06 -0000 1.90 +++ gdb/exec.c 28 Jul 2009 14:58:16 -0000 @@ -381,6 +381,7 @@ add_to_section_table (bfd *abfd, struct struct target_section **table_pp = (struct target_section **) table_pp_char; flagword aflag; + (*table_pp)->bfd = abfd; /* Check the section flags, but do not discard zero-length sections, since some symbols may still be attached to this section. For instance, we encountered on sparc-solaris 2.10 a shared library with an empty .bss @@ -390,7 +391,6 @@ add_to_section_table (bfd *abfd, struct if (!(aflag & SEC_ALLOC)) return; - (*table_pp)->bfd = abfd; (*table_pp)->the_bfd_section = asect; (*table_pp)->addr = bfd_section_vma (abfd, asect); (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (abfd, asect); -- Aleksandar Ristovski QNX Software Systems ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 16:37 ` Aleksandar Ristovski @ 2009-07-28 16:37 ` Pedro Alves 2009-07-28 21:48 ` Aleksandar Ristovski 0 siblings, 1 reply; 11+ messages in thread From: Pedro Alves @ 2009-07-28 16:37 UTC (permalink / raw) To: gdb-patches; +Cc: Aleksandar Ristovski On Tuesday 28 July 2009 16:16:23, Aleksandar Ristovski wrote: > Pedro Alves wrote: > I think now you broke it in a different way. Now we can end > up trying to read from a closed bfd. Ooops, you're right. There are uses of the bfd after transfering its ownership to the bfd target with target_bfd_reopen, and closing the bfd target (target_close)... This target is modeled on fdopen, which is why I blindly assumed it wasn't happening. I've reverted that patch. > And just wondering, why not simply: > > Index: gdb/exec.c > =================================================================== > RCS file: /cvs/src/src/gdb/exec.c,v > retrieving revision 1.90 > diff -u -p -r1.90 exec.c > --- gdb/exec.c 2 Jul 2009 17:21:06 -0000 1.90 > +++ gdb/exec.c 28 Jul 2009 14:58:16 -0000 > @@ -381,6 +381,7 @@ add_to_section_table (bfd *abfd, struct > struct target_section **table_pp = (struct > target_section **) table_pp_char; > flagword aflag; > > + (*table_pp)->bfd = abfd; > /* Check the section flags, but do not discard > zero-length sections, since > some symbols may still be attached to this section. > For instance, we > encountered on sparc-solaris 2.10 a shared library > with an empty .bss > @@ -390,7 +391,6 @@ add_to_section_table (bfd *abfd, struct > if (!(aflag & SEC_ALLOC)) > return; > > - (*table_pp)->bfd = abfd; > (*table_pp)->the_bfd_section = asect; > (*table_pp)->addr = bfd_section_vma (abfd, asect); > (*table_pp)->endaddr = (*table_pp)->addr + > bfd_section_size (abfd, asect); Still not right, because that's still papering over the problem, and still hitting undefined behaviour, in the case of the table ending up being empty. When table->sections == table->sections_end, we should never dereference table->sections, like in 'table->sections->bfd'. Notice how the end pointer isn't advanced if !SEC_ALLOC. Consider the fact that we usually xmalloc enough memory that makes that not misbehave a coincidence. E.g., see that with a resize_section_table call, you can end up with table->sections == NULL, and table->section_end == NULL, which is legal, because table->sections is still equal to table->sections_end in that case (meaning empty table). There used to be an extra structure in bfd_target.c to hold the sections and the bfd, which didn't look necessary when I reimplemented bfd-target.c on top of exec.c's functions, but it is clear now that we need it anyway. Here's a patch that brings something like that back. Could you try it? Thanks. -- Pedro Alves 2009-07-28 Pedro Alves <pedro@codesourcery.com> * bfd-target.c (struct target_bfd_data): New. (target_bfd_xfer_partial): Adjust to get at the section table from the new structure. (target_bfd_get_section_table): Ditto. (target_bfd_xclose): Ditto. Get the bfd pointer from the target_bfd_data structure, from the section table. (target_bfd_reopen): Store a struct target_bfd_data in the target_ops to_data field, instead of a target_section_table. --- gdb/bfd-target.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) Index: src/gdb/bfd-target.c =================================================================== --- src.orig/gdb/bfd-target.c 2009-07-28 16:20:59.000000000 +0100 +++ src/gdb/bfd-target.c 2009-07-28 16:48:12.000000000 +0100 @@ -22,6 +22,19 @@ #include "bfd-target.h" #include "exec.h" +/* The object that is stored in the target_ops->to_data field has this + type. */ +struct target_bfd_data +{ + /* The BFD we're wrapping. */ + struct bfd *bfd; + + /* The section table build from the ALLOC sections in BFD. Note + that we rely on extracting the BFD from a random section in the + table, since the table can be legitimately empty. */ + struct target_section_table table; +}; + static LONGEST target_bfd_xfer_partial (struct target_ops *ops, enum target_object object, @@ -33,10 +46,10 @@ target_bfd_xfer_partial (struct target_o { case TARGET_OBJECT_MEMORY: { - struct target_section_table *table = ops->to_data; + struct target_bfd_data *data = ops->to_data; return section_table_xfer_memory_partial (readbuf, writebuf, offset, len, - table->sections, - table->sections_end, + data->table.sections, + data->table.sections_end, NULL); } default: @@ -47,17 +60,18 @@ target_bfd_xfer_partial (struct target_o static struct target_section_table * target_bfd_get_section_table (struct target_ops *ops) { - return ops->to_data; + struct target_bfd_data *data = ops->to_data; + return &data->table; } static void target_bfd_xclose (struct target_ops *t, int quitting) { - struct target_section_table *table = t->to_data; - if (table->sections) - bfd_close (table->sections->bfd); - xfree (table->sections); - xfree (table); + struct target_bfd_data *data = t->to_data; + + bfd_close (data->bfd); + xfree (data->table.sections); + xfree (data); xfree (t); } @@ -65,10 +79,11 @@ struct target_ops * target_bfd_reopen (struct bfd *bfd) { struct target_ops *t; - struct target_section_table *table; + struct target_bfd_data *data; - table = XZALLOC (struct target_section_table); - build_section_table (bfd, &table->sections, &table->sections_end); + data = XZALLOC (struct target_bfd_data); + data->bfd = bfd; + build_section_table (bfd, &data->table.sections, &data->table.sections_end); t = XZALLOC (struct target_ops); t->to_shortname = "bfd"; @@ -77,7 +92,7 @@ target_bfd_reopen (struct bfd *bfd) 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_data = table; + t->to_data = data; return t; } ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 16:37 ` Pedro Alves @ 2009-07-28 21:48 ` Aleksandar Ristovski 2009-08-08 16:54 ` Pedro Alves 0 siblings, 1 reply; 11+ messages in thread From: Aleksandar Ristovski @ 2009-07-28 21:48 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On Tuesday 28 July 2009 16:16:23, Aleksandar Ristovski wrote: >> Pedro Alves wrote: >> I think now you broke it in a different way. Now we can end >> up trying to read from a closed bfd. > > Ooops, you're right. There are uses of the bfd after transfering > its ownership to the bfd target with target_bfd_reopen, and closing > the bfd target (target_close)... This target is modeled on fdopen, > which is why I blindly assumed it wasn't happening. I've reverted > that patch. > >> And just wondering, why not simply: >> >> Index: gdb/exec.c >> =================================================================== >> RCS file: /cvs/src/src/gdb/exec.c,v >> retrieving revision 1.90 >> diff -u -p -r1.90 exec.c >> --- gdb/exec.c 2 Jul 2009 17:21:06 -0000 1.90 >> +++ gdb/exec.c 28 Jul 2009 14:58:16 -0000 >> @@ -381,6 +381,7 @@ add_to_section_table (bfd *abfd, struct >> struct target_section **table_pp = (struct >> target_section **) table_pp_char; >> flagword aflag; >> >> + (*table_pp)->bfd = abfd; >> /* Check the section flags, but do not discard >> zero-length sections, since >> some symbols may still be attached to this section. >> For instance, we >> encountered on sparc-solaris 2.10 a shared library >> with an empty .bss >> @@ -390,7 +391,6 @@ add_to_section_table (bfd *abfd, struct >> if (!(aflag & SEC_ALLOC)) >> return; >> >> - (*table_pp)->bfd = abfd; >> (*table_pp)->the_bfd_section = asect; >> (*table_pp)->addr = bfd_section_vma (abfd, asect); >> (*table_pp)->endaddr = (*table_pp)->addr + >> bfd_section_size (abfd, asect); > > Still not right, because that's still papering over the problem, and > still hitting undefined behaviour, in the case of the > table ending up being empty. When table->sections == table->sections_end, > we should never dereference table->sections, like in 'table->sections->bfd'. > Notice how the end pointer isn't advanced if !SEC_ALLOC. > Consider the fact that we usually xmalloc enough memory that > makes that not misbehave a coincidence. E.g., see that with > a resize_section_table call, you can end up with table->sections == NULL, > and table->section_end == NULL, which is legal, because table->sections > is still equal to table->sections_end in that case (meaning empty table). > > There used to be an extra structure in bfd_target.c to hold > the sections and the bfd, which didn't look necessary when I > reimplemented bfd-target.c on top of exec.c's functions, but > it is clear now that we need it anyway. Here's a patch that > brings something like that back. > > Could you try it? Thanks. > I tried it, it works. Thanks, -- Aleksandar Ristovski QNX Software Systems ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 21:48 ` Aleksandar Ristovski @ 2009-08-08 16:54 ` Pedro Alves 0 siblings, 0 replies; 11+ messages in thread From: Pedro Alves @ 2009-08-08 16:54 UTC (permalink / raw) To: gdb-patches; +Cc: Aleksandar Ristovski On Tuesday 28 July 2009 20:51:34, Aleksandar Ristovski wrote: > Pedro Alves wrote: > > There used to be an extra structure in bfd_target.c to hold > > the sections and the bfd, which didn't look necessary when I > > reimplemented bfd-target.c on top of exec.c's functions, but > > it is clear now that we need it anyway. Here's a patch that > > brings something like that back. > > (actually, there never was such a thing, I must have dreamed about it. :-) The bfd used to be stored directly in target_ops->to_data, and once upon a time, there used to be target_ops->to_sections|target_ops->to_sections_end pointers.) > > Could you try it? Thanks. > > > I tried it, it works. Thanks, I've applied it. -- Pedro Alves ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 14:51 ` Pedro Alves 2009-07-28 14:59 ` Pedro Alves 2009-07-28 15:06 ` Aleksandar Ristovski @ 2009-07-28 15:16 ` Pedro Alves 2009-07-28 15:57 ` Aleksandar Ristovski 2 siblings, 1 reply; 11+ messages in thread From: Pedro Alves @ 2009-07-28 15:16 UTC (permalink / raw) To: gdb-patches; +Cc: Aleksandar Ristovski On Tuesday 28 July 2009 15:34:41, Pedro Alves wrote: > On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: > > Hello, > > > > I believe this is related to Pedro's patch from 03-Jun-09. I > > didn't see where we set target_section.bfd field - maybe I > > am overlooking something, but in bfd-target, in function > > target_bfd_xclose we will call bfd_close > > (table->sections->bfd); bfd_close doesn't like NULL argument. > > > > Am I missing something, or is this (the patch) missing? > > Doesn't add_to_section_table set the bfd in each new > target section? I think you've got yourself an executable without any ALLOC section, hence the section table ends up empty. I think something like this will fix the problem. I'll give a test spin and apply it. -- Pedro Alves --- gdb/bfd-target.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) Index: src/gdb/bfd-target.c =================================================================== --- src.orig/gdb/bfd-target.c 2009-07-28 15:43:27.000000000 +0100 +++ src/gdb/bfd-target.c 2009-07-28 15:47:33.000000000 +0100 @@ -54,7 +54,10 @@ static void target_bfd_xclose (struct target_ops *t, int quitting) { struct target_section_table *table = t->to_data; - if (table->sections) + + /* If the target sections table is empty, the bfd had already been + closed. */ + if (table->sections != table->sections_end) bfd_close (table->sections->bfd); xfree (table->sections); xfree (table); @@ -70,6 +73,12 @@ target_bfd_reopen (struct bfd *bfd) table = XZALLOC (struct target_section_table); build_section_table (bfd, &table->sections, &table->sections_end); + /* No use keeping the bfd open if there are no target sections we + care about. This way, we avoid keeping the bfd pointer stored + somewhere so that target_bfd_xclose could use it. */ + if (table->sections == table->sections_end) + bfd_close (bfd); + t = XZALLOC (struct target_ops); t->to_shortname = "bfd"; t->to_longname = _("BFD backed target"); ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch] Set bfd field in target_section 2009-07-28 15:16 ` Pedro Alves @ 2009-07-28 15:57 ` Aleksandar Ristovski 0 siblings, 0 replies; 11+ messages in thread From: Aleksandar Ristovski @ 2009-07-28 15:57 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On Tuesday 28 July 2009 15:34:41, Pedro Alves wrote: >> On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: >>> Hello, >>> >>> I believe this is related to Pedro's patch from 03-Jun-09. I >>> didn't see where we set target_section.bfd field - maybe I >>> am overlooking something, but in bfd-target, in function >>> target_bfd_xclose we will call bfd_close >>> (table->sections->bfd); bfd_close doesn't like NULL argument. >>> >>> Am I missing something, or is this (the patch) missing? >> Doesn't add_to_section_table set the bfd in each new >> target section? > > I think you've got yourself an executable without any ALLOC > section, hence the section table ends up empty. I think something > like this will fix the problem. I'll give a test spin and > apply it. > Actually, I got it by mismatching libraries. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2009-08-08 16:39 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2009-07-28 14:46 [patch] Set bfd field in target_section Aleksandar Ristovski 2009-07-28 14:51 ` Pedro Alves 2009-07-28 14:59 ` Pedro Alves 2009-07-28 15:06 ` Aleksandar Ristovski 2009-07-28 16:22 ` Pedro Alves 2009-07-28 16:37 ` Aleksandar Ristovski 2009-07-28 16:37 ` Pedro Alves 2009-07-28 21:48 ` Aleksandar Ristovski 2009-08-08 16:54 ` Pedro Alves 2009-07-28 15:16 ` Pedro Alves 2009-07-28 15:57 ` Aleksandar Ristovski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox