[patch] bfd: Core files with p_filesz < p_memsz (build-id)
Alan Modra
amodra@bigpond.net.au
Fri Aug 3 00:13:00 GMT 2007
More information about the Binutils mailing list
Fri Aug 3 00:13:00 GMT 2007
- Previous message (by thread): [patch] bfd: Core files with p_filesz < p_memsz (build-id)
- Next message (by thread): [patch] bfd: Core files with p_filesz < p_memsz (build-id)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, Aug 02, 2007 at 04:02:49PM -0400, Daniel Jacobowitz wrote:
> On Wed, Aug 01, 2007 at 10:35:47PM +0930, Alan Modra wrote:
> > I think BFD is still doing the right thing. Please fix this in gdb.
>
> Could you elaborate? Consider a core with these headers:
[snip]
> So we report the BSS portion of an entirely BSS PT_LOAD as having size
> zero (plus contents flag, bizarre). But the BSS portion of a partially
> filled PT_LOAD is shown with size equal to its memory size. I don't
> see why they should be inconsistent, and it makes handling this in GDB
> a little awkward.
Oh, I see. I was just looking at the split case. I'd say the
non-split behaviour is a bug. A program header with p_filesz zero and
p_memsz non-zero really ought to create a bfd section with size equal
to p_memsz, without SEC_HAS_CONTENTS and SEC_LOAD.
So I think we should apply the following, and possibly on top of this
do something special for core files.
Index: bfd/elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.404
diff -u -p -w -r1.404 elf.c
--- bfd/elf.c 1 Aug 2007 19:55:10 -0000 1.404
+++ bfd/elf.c 2 Aug 2007 23:58:56 -0000
@@ -2223,7 +2223,7 @@ _bfd_elf_new_section_hook (bfd *abfd, as
for the single program segment. The first has the length specified by
the file size of the segment, and the second has the length specified
by the difference between the two sizes. In effect, the segment is split
- into it's initialized and uninitialized parts.
+ into its initialized and uninitialized parts.
*/
@@ -2242,6 +2242,9 @@ _bfd_elf_make_section_from_phdr (bfd *ab
split = ((hdr->p_memsz > 0)
&& (hdr->p_filesz > 0)
&& (hdr->p_memsz > hdr->p_filesz));
+
+ if (hdr->p_filesz > 0)
+ {
sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
len = strlen (namebuf) + 1;
name = bfd_alloc (abfd, len);
@@ -2272,10 +2275,11 @@ _bfd_elf_make_section_from_phdr (bfd *ab
{
newsect->flags |= SEC_READONLY;
}
+ }
- if (split)
+ if (hdr->p_memsz > hdr->p_filesz)
{
- sprintf (namebuf, "%s%db", typename, index);
+ sprintf (namebuf, "%s%d%s", typename, index, split ? "b" : "");
len = strlen (namebuf) + 1;
name = bfd_alloc (abfd, len);
if (!name)
--
Alan Modra
Australia Development Lab, IBM
- Previous message (by thread): [patch] bfd: Core files with p_filesz < p_memsz (build-id)
- Next message (by thread): [patch] bfd: Core files with p_filesz < p_memsz (build-id)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list