From: "H. J. Lu" <hjl@lucon.org>
To: GDB <gdb-patches@sources.redhat.com>
Subject: PATCH: Set SEC_NEVER_LOAD when clearing SEC_LOAD for gcore
Date: Wed, 20 Jun 2007 18:23:00 -0000 [thread overview]
Message-ID: <20070620182308.GA7859@lucon.org> (raw)
http://sources.redhat.com/bugzilla/show_bug.cgi?id=4606
is a gdb bug. When gcore_create_callback clears SEC_LOAD, it does't
set SEC_NEVER_LOAD nor clear SEC_HAS_CONTENTS. elf_fake_sections has
if (this_hdr->sh_type == SHT_NULL)
{
if ((asect->flags & SEC_GROUP) != 0)
this_hdr->sh_type = SHT_GROUP;
else if ((asect->flags & SEC_ALLOC) != 0
&& (((asect->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) ==
0)
|| (asect->flags & SEC_NEVER_LOAD) != 0))
this_hdr->sh_type = SHT_NOBITS;
else
this_hdr->sh_type = SHT_PROGBITS;
}
As the result, this_hdr->sh_type is set to SHT_PROGBITS while
SEC_LOAD is cleared. When Alan made this change:
- if ((flags & SEC_LOAD) != 0)
+ if (this_hdr->sh_type != SHT_NOBITS)
in assign_file_positions_for_load_sections, gcore no longer works
correctly.
This patch sets SEC_NEVER_LOAD when clearing SEC_LOAD. It restores
the old behavior and reduces the size of core file significantly.
I tested it on both Linux/x86-64 and Linux/ia64. On Linux/ia64,
I got
-rw-r--r-- 1 hjl hjl 349400 Jun 20 10:54 core.new
-rw-r--r-- 1 hjl hjl 3003608 Jun 19 17:28 core.old
On Linux/x86-64, I got
-rw-r--r-- 1 hjl hjl 195848 Jun 20 11:10 core.new
-rw-r--r-- 1 hjl hjl 1531144 Jun 20 11:21 core.old
BTW, bfd_make_section_anyway_with_flags is preferred over
bfd_make_section_anyway and bfd_set_section_flags.
H.J.
---
2007-06-20 H.J. Lu <hongjiu.lu@intel.com>
PR 4606
* gcore.c (gcore_command): Use bfd_make_section_anyway_with_flags
instead of bfd_make_section_anyway.
(gcore_create_callback): Likewise. Also set SEC_NEVER_LOAD
when clearing SEC_LOAD.
--- gdb/gcore.c.gcore 2007-06-19 08:44:04.000000000 -0700
+++ gdb/gcore.c 2007-06-20 11:09:43.000000000 -0700
@@ -88,14 +88,15 @@ gcore_command (char *args, int from_tty)
/* Create the note section. */
if (note_data != NULL && note_size != 0)
{
- note_sec = bfd_make_section_anyway (obfd, "note0");
+ note_sec = bfd_make_section_anyway_with_flags (obfd, "note0",
+ SEC_HAS_CONTENTS
+ | SEC_READONLY
+ | SEC_ALLOC);
if (note_sec == NULL)
error (_("Failed to create 'note' section for corefile: %s"),
bfd_errmsg (bfd_get_error ()));
bfd_set_section_vma (obfd, note_sec, 0);
- bfd_set_section_flags (obfd, note_sec,
- SEC_HAS_CONTENTS | SEC_READONLY | SEC_ALLOC);
bfd_set_section_alignment (obfd, note_sec, 0);
bfd_set_section_size (obfd, note_sec, note_size);
}
@@ -359,6 +360,7 @@ gcore_create_callback (CORE_ADDR vaddr,
&& !(bfd_get_file_flags (abfd) & BFD_IN_MEMORY))
{
flags &= ~SEC_LOAD;
+ flags |= SEC_NEVER_LOAD;
goto keep; /* break out of two nested for loops */
}
}
@@ -372,7 +374,7 @@ gcore_create_callback (CORE_ADDR vaddr,
else
flags |= SEC_DATA;
- osec = bfd_make_section_anyway (obfd, "load");
+ osec = bfd_make_section_anyway_with_flags (obfd, "load", flags);
if (osec == NULL)
{
warning (_("Couldn't make gcore segment: %s"),
@@ -389,7 +391,6 @@ gcore_create_callback (CORE_ADDR vaddr,
bfd_set_section_size (obfd, osec, size);
bfd_set_section_vma (obfd, osec, vaddr);
bfd_section_lma (obfd, osec) = 0; /* ??? bfd_set_section_lma? */
- bfd_set_section_flags (obfd, osec, flags);
return 0;
}
next reply other threads:[~2007-06-20 18:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-20 18:23 H. J. Lu [this message]
2007-06-20 18:29 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070620182308.GA7859@lucon.org \
--to=hjl@lucon.org \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox