* gc.h (gc_process_relocs): Don't look through function descriptors.
* icf.cc (get_section_contents): Do so here instead.
This commit is contained in:
parent
0a251e08fa
commit
ad3d8a2f04
3 changed files with 26 additions and 30 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-03-15 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* gc.h (gc_process_relocs): Don't look through function descriptors.
|
||||
* icf.cc (get_section_contents): Do so here instead.
|
||||
|
||||
2013-03-13 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* powerpc.cc (is_branch_reloc): Forward declare.
|
||||
|
|
32
gold/gc.h
32
gold/gc.h
|
@ -253,21 +253,7 @@ gc_process_relocs(
|
|||
{
|
||||
Address symvalue = dst_off - addend;
|
||||
if (is_ordinary)
|
||||
{
|
||||
Symbol_location loc;
|
||||
loc.object = dst_obj;
|
||||
loc.shndx = dst_indx;
|
||||
loc.offset = convert_types<off_t, Address>(dst_off);
|
||||
// Look through function descriptors.
|
||||
parameters->target().function_location(&loc);
|
||||
if (loc.shndx != dst_indx)
|
||||
{
|
||||
// Modify symvalue/addend to the code entry.
|
||||
symvalue = loc.offset;
|
||||
addend = 0;
|
||||
}
|
||||
(*secvec).push_back(Section_id(loc.object, loc.shndx));
|
||||
}
|
||||
(*secvec).push_back(Section_id(dst_obj, dst_indx));
|
||||
else
|
||||
(*secvec).push_back(Section_id(NULL, 0));
|
||||
(*symvec).push_back(NULL);
|
||||
|
@ -343,21 +329,7 @@ gc_process_relocs(
|
|||
{
|
||||
Address symvalue = dst_off - addend;
|
||||
if (is_ordinary && gsym->source() == Symbol::FROM_OBJECT)
|
||||
{
|
||||
Symbol_location loc;
|
||||
loc.object = dst_obj;
|
||||
loc.shndx = dst_indx;
|
||||
loc.offset = convert_types<off_t, Address>(dst_off);
|
||||
// Look through function descriptors.
|
||||
parameters->target().function_location(&loc);
|
||||
if (loc.shndx != dst_indx)
|
||||
{
|
||||
// Modify symvalue/addend to the code entry.
|
||||
symvalue = loc.offset;
|
||||
addend = 0;
|
||||
}
|
||||
(*secvec).push_back(Section_id(loc.object, loc.shndx));
|
||||
}
|
||||
(*secvec).push_back(Section_id(dst_obj, dst_indx));
|
||||
else
|
||||
(*secvec).push_back(Section_id(NULL, 0));
|
||||
(*symvec).push_back(gsym);
|
||||
|
|
19
gold/icf.cc
19
gold/icf.cc
|
@ -288,6 +288,25 @@ get_section_contents(bool first_iteration,
|
|||
|
||||
for (; it_v != v.end(); ++it_v, ++it_s, ++it_a, ++it_o, ++it_addend_size)
|
||||
{
|
||||
if (first_iteration
|
||||
&& it_v->first != NULL)
|
||||
{
|
||||
Symbol_location loc;
|
||||
loc.object = it_v->first;
|
||||
loc.shndx = it_v->second;
|
||||
loc.offset = convert_types<off_t, long long>(it_a->first
|
||||
+ it_a->second);
|
||||
// Look through function descriptors
|
||||
parameters->target().function_location(&loc);
|
||||
if (loc.shndx != it_v->second)
|
||||
{
|
||||
it_v->second = loc.shndx;
|
||||
// Modify symvalue/addend to the code entry.
|
||||
it_a->first = loc.offset;
|
||||
it_a->second = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ADDEND_STR stores the symbol value and addend and offset,
|
||||
// each at most 16 hex digits long. it_a points to a pair
|
||||
// where first is the symbol value and second is the
|
||||
|
|
Loading…
Add table
Reference in a new issue