From: Tom Tromey <tromey@redhat.com>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 2/3] relocate the entry point addess when used
Date: Wed, 15 Jan 2014 17:59:00 -0000 [thread overview]
Message-ID: <87iotlqg6w.fsf@fleche.redhat.com> (raw)
In-Reply-To: <52D67425.9050904@redhat.com> (Pedro Alves's message of "Wed, 15 Jan 2014 11:42:29 +0000")
>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:
Pedro> I think it's just that the entry point is only really used for the main
Pedro> executable, and if that is loaded at some relocation offset, we'll
Pedro> always go through objfile_relocate (either PIE handling, or RSP
Pedro> qOffsets handling for embedded systems) after reading in symbols,
Pedro> while shared libraries are read in with the offsets already handy
Pedro> upfront.
Yeah, that makes sense.
Pedro> This is assuming osect ends up NULL after iterating over all.
Pedro> It's violating the abstraction of the macro. And, actually,
Pedro> it's wrong, showing exactly why such assumptions are a bad idea:
Tom> Sorry about that, I'll fix it up locally.
Pedro> Thanks.
Here's the updated patch.
Tom
commit 9211b8474f76a95e993f4dc6e2ee873c6997caa4
Author: Tom Tromey <tromey@redhat.com>
Date: Tue Dec 31 06:52:33 2013 -0700
relocate the entry point address when used
This changes the entry point to be unrelocated in the objfile, and
instead applies the relocation when it is used.
2014-01-15 Tom Tromey <tromey@redhat.com>
* objfiles.c (entry_point_address_query): Relocate entry point
address.
(objfile_relocate1): Do not relocate entry point address.
* objfiles.h (struct entry_info) <entry_point>: Update comment.
<the_bfd_section_index>: New field.
* symfile.c (init_entry_point_info): Find the entry point's
section.
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 01a4087..5d48363 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
2014-01-15 Tom Tromey <tromey@redhat.com>
+ * objfiles.c (entry_point_address_query): Relocate entry point
+ address.
+ (objfile_relocate1): Do not relocate entry point address.
+ * objfiles.h (struct entry_info) <entry_point>: Update comment.
+ <the_bfd_section_index>: New field.
+ * symfile.c (init_entry_point_info): Find the entry point's
+ section.
+
+2014-01-15 Tom Tromey <tromey@redhat.com>
+
* solib-frv.c (enable_break): Use entry_point_address_query.
2014-01-15 Pedro Alves <palves@redhat.com>
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 9cc0054..a80d4c7 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -367,7 +367,9 @@ entry_point_address_query (CORE_ADDR *entry_p)
if (symfile_objfile == NULL || !symfile_objfile->ei.entry_point_p)
return 0;
- *entry_p = symfile_objfile->ei.entry_point;
+ *entry_p = (symfile_objfile->ei.entry_point
+ + ANOFFSET (symfile_objfile->section_offsets,
+ symfile_objfile->ei.the_bfd_section_index));
return 1;
}
@@ -794,22 +796,6 @@ objfile_relocate1 (struct objfile *objfile,
to be out of order. */
msymbols_sort (objfile);
- if (objfile->ei.entry_point_p)
- {
- /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
- only as a fallback. */
- struct obj_section *s;
- s = find_pc_section (objfile->ei.entry_point);
- if (s)
- {
- int idx = gdb_bfd_section_index (objfile->obfd, s->the_bfd_section);
-
- objfile->ei.entry_point += ANOFFSET (delta, idx);
- }
- else
- objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
- }
-
{
int i;
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index c2b6177..620d7e8 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -101,9 +101,12 @@ struct objfile_data;
struct entry_info
{
- /* The relocated value we should use for this objfile entry point. */
+ /* The unrelocated value we should use for this objfile entry point. */
CORE_ADDR entry_point;
+ /* The index of the section in which the entry point appears. */
+ int the_bfd_section_index;
+
/* Set to 1 iff ENTRY_POINT contains a valid value. */
unsigned entry_point_p : 1;
};
diff --git a/gdb/symfile.c b/gdb/symfile.c
index d863282..bd12552 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -894,7 +894,9 @@ init_entry_point_info (struct objfile *objfile)
if (objfile->ei.entry_point_p)
{
+ struct obj_section *osect;
CORE_ADDR entry_point = objfile->ei.entry_point;
+ int found;
/* Make certain that the address points at real code, and not a
function descriptor. */
@@ -907,6 +909,25 @@ init_entry_point_info (struct objfile *objfile)
symbol table. */
objfile->ei.entry_point
= gdbarch_addr_bits_remove (get_objfile_arch (objfile), entry_point);
+
+ found = 0;
+ ALL_OBJFILE_OSECTIONS (objfile, osect)
+ {
+ struct bfd_section *sect = osect->the_bfd_section;
+
+ if (entry_point >= bfd_get_section_vma (objfile->obfd, sect)
+ && entry_point < (bfd_get_section_vma (objfile->obfd, sect)
+ + bfd_get_section_size (sect)))
+ {
+ objfile->ei.the_bfd_section_index
+ = gdb_bfd_section_index (objfile->obfd, sect);
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found)
+ objfile->ei.the_bfd_section_index = SECT_OFF_TEXT (objfile);
}
}
next prev parent reply other threads:[~2014-01-15 17:59 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-06 20:30 [PATCH 0/3] move entry point info to the per-BFD object Tom Tromey
2014-01-06 20:30 ` [PATCH 2/3] relocate the entry point addess when used Tom Tromey
2014-01-08 13:22 ` Pedro Alves
2014-01-13 20:46 ` Tom Tromey
2014-01-15 11:42 ` Pedro Alves
2014-01-15 17:59 ` Tom Tromey [this message]
2014-01-15 18:02 ` Pedro Alves
2014-01-06 20:30 ` [PATCH 1/3] change solib-frv to use entry_point_address_query Tom Tromey
2014-01-08 13:23 ` Pedro Alves
2014-01-06 20:30 ` [PATCH 3/3] move the entry point info into the per-bfd object Tom Tromey
2014-01-08 13:30 ` Pedro Alves
2014-01-13 20:51 ` Tom Tromey
2014-01-15 18:01 ` [PATCH 0/3] move entry point info to the per-BFD object Tom Tromey
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=87iotlqg6w.fsf@fleche.redhat.com \
--to=tromey@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=palves@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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).