|
Nick Clifton |
6893f2 |
diff -rup binutils.orig/gold/layout.cc binutils-2.29.1/gold/layout.cc
|
|
Nick Clifton |
6893f2 |
--- binutils.orig/gold/layout.cc 2017-10-18 12:00:31.990714767 +0100
|
|
Nick Clifton |
6893f2 |
+++ binutils-2.29.1/gold/layout.cc 2017-10-18 12:00:41.351604074 +0100
|
|
Nick Clifton |
6893f2 |
@@ -2211,10 +2211,11 @@ Layout::define_section_symbols(Symbol_ta
|
|
Nick Clifton |
6893f2 |
0, // symsize
|
|
Nick Clifton |
6893f2 |
elfcpp::STT_NOTYPE,
|
|
Nick Clifton |
6893f2 |
elfcpp::STB_GLOBAL,
|
|
Nick Clifton |
6893f2 |
- elfcpp::STV_DEFAULT,
|
|
Nick Clifton |
6893f2 |
+ elfcpp::STV_PROTECTED,
|
|
Nick Clifton |
6893f2 |
0, // nonvis
|
|
Nick Clifton |
6893f2 |
false, // offset_is_from_end
|
|
Nick Clifton |
6893f2 |
- true); // only_if_ref
|
|
Nick Clifton |
6893f2 |
+ true, // only_if_ref
|
|
Nick Clifton |
6893f2 |
+ true); // must_be_in_reg
|
|
Nick Clifton |
6893f2 |
|
|
Nick Clifton |
6893f2 |
symtab->define_in_output_data(stop_name.c_str(),
|
|
Nick Clifton |
6893f2 |
NULL, // version
|
|
Nick Clifton |
6893f2 |
@@ -2224,10 +2225,11 @@ Layout::define_section_symbols(Symbol_ta
|
|
Nick Clifton |
6893f2 |
0, // symsize
|
|
Nick Clifton |
6893f2 |
elfcpp::STT_NOTYPE,
|
|
Nick Clifton |
6893f2 |
elfcpp::STB_GLOBAL,
|
|
Nick Clifton |
6893f2 |
- elfcpp::STV_DEFAULT,
|
|
Nick Clifton |
6893f2 |
+ elfcpp::STV_PROTECTED,
|
|
Nick Clifton |
6893f2 |
0, // nonvis
|
|
Nick Clifton |
6893f2 |
true, // offset_is_from_end
|
|
Nick Clifton |
6893f2 |
- true); // only_if_ref
|
|
Nick Clifton |
6893f2 |
+ true, // only_if_ref
|
|
Nick Clifton |
6893f2 |
+ true); // must_be_in_reg
|
|
Nick Clifton |
6893f2 |
}
|
|
Nick Clifton |
6893f2 |
}
|
|
Nick Clifton |
6893f2 |
}
|
|
Nick Clifton |
6893f2 |
Only in binutils-2.29.1/gold: layout.cc.orig
|
|
Nick Clifton |
6893f2 |
diff -rup binutils.orig/gold/symtab.cc binutils-2.29.1/gold/symtab.cc
|
|
Nick Clifton |
6893f2 |
--- binutils.orig/gold/symtab.cc 2017-10-18 12:00:31.990714767 +0100
|
|
Nick Clifton |
6893f2 |
+++ binutils-2.29.1/gold/symtab.cc 2017-10-18 12:00:41.352604062 +0100
|
|
Nick Clifton |
6893f2 |
@@ -1760,7 +1760,9 @@ Sized_symbol<size>*
|
|
Nick Clifton |
6893f2 |
Symbol_table::define_special_symbol(const char** pname, const char** pversion,
|
|
Nick Clifton |
6893f2 |
bool only_if_ref,
|
|
Nick Clifton |
6893f2 |
Sized_symbol<size>** poldsym,
|
|
Nick Clifton |
6893f2 |
- bool* resolve_oldsym, bool is_forced_local)
|
|
Nick Clifton |
6893f2 |
+ bool* resolve_oldsym,
|
|
Nick Clifton |
6893f2 |
+ bool is_forced_local,
|
|
Nick Clifton |
6893f2 |
+ bool must_be_in_reg)
|
|
Nick Clifton |
6893f2 |
{
|
|
Nick Clifton |
6893f2 |
*resolve_oldsym = false;
|
|
Nick Clifton |
6893f2 |
*poldsym = NULL;
|
|
Nick Clifton |
6893f2 |
@@ -1797,7 +1799,11 @@ Symbol_table::define_special_symbol(cons
|
|
Nick Clifton |
6893f2 |
oldsym = this->lookup(*pname, *pversion);
|
|
Nick Clifton |
6893f2 |
if (oldsym == NULL && is_default_version)
|
|
Nick Clifton |
6893f2 |
oldsym = this->lookup(*pname, NULL);
|
|
Nick Clifton |
6893f2 |
- if (oldsym == NULL || !oldsym->is_undefined())
|
|
Nick Clifton |
6893f2 |
+ // If the symbol must be defined in a regular object, ignore
|
|
Nick Clifton |
6893f2 |
+ // definition from a dynamic object.
|
|
Nick Clifton |
6893f2 |
+ if (oldsym == NULL
|
|
Nick Clifton |
6893f2 |
+ || (!oldsym->is_undefined()
|
|
Nick Clifton |
6893f2 |
+ && (!must_be_in_reg || !oldsym->is_from_dynobj())))
|
|
Nick Clifton |
6893f2 |
return NULL;
|
|
Nick Clifton |
6893f2 |
|
|
Nick Clifton |
6893f2 |
*pname = oldsym->name();
|
|
Nick Clifton |
6893f2 |
@@ -1916,7 +1922,8 @@ Symbol_table::define_in_output_data(cons
|
|
Nick Clifton |
6893f2 |
elfcpp::STV visibility,
|
|
Nick Clifton |
6893f2 |
unsigned char nonvis,
|
|
Nick Clifton |
6893f2 |
bool offset_is_from_end,
|
|
Nick Clifton |
6893f2 |
- bool only_if_ref)
|
|
Nick Clifton |
6893f2 |
+ bool only_if_ref,
|
|
Nick Clifton |
6893f2 |
+ bool must_be_in_reg)
|
|
Nick Clifton |
6893f2 |
{
|
|
Nick Clifton |
6893f2 |
if (parameters->target().get_size() == 32)
|
|
Nick Clifton |
6893f2 |
{
|
|
Nick Clifton |
6893f2 |
@@ -1925,7 +1932,8 @@ Symbol_table::define_in_output_data(cons
|
|
Nick Clifton |
6893f2 |
value, symsize, type, binding,
|
|
Nick Clifton |
6893f2 |
visibility, nonvis,
|
|
Nick Clifton |
6893f2 |
offset_is_from_end,
|
|
Nick Clifton |
6893f2 |
- only_if_ref);
|
|
Nick Clifton |
6893f2 |
+ only_if_ref,
|
|
Nick Clifton |
6893f2 |
+ must_be_in_reg);
|
|
Nick Clifton |
6893f2 |
#else
|
|
Nick Clifton |
6893f2 |
gold_unreachable();
|
|
Nick Clifton |
6893f2 |
#endif
|
|
Nick Clifton |
6893f2 |
@@ -1937,7 +1945,8 @@ Symbol_table::define_in_output_data(cons
|
|
Nick Clifton |
6893f2 |
value, symsize, type, binding,
|
|
Nick Clifton |
6893f2 |
visibility, nonvis,
|
|
Nick Clifton |
6893f2 |
offset_is_from_end,
|
|
Nick Clifton |
6893f2 |
- only_if_ref);
|
|
Nick Clifton |
6893f2 |
+ only_if_ref,
|
|
Nick Clifton |
6893f2 |
+ must_be_in_reg);
|
|
Nick Clifton |
6893f2 |
#else
|
|
Nick Clifton |
6893f2 |
gold_unreachable();
|
|
Nick Clifton |
6893f2 |
#endif
|
|
Nick Clifton |
6893f2 |
@@ -1962,7 +1971,8 @@ Symbol_table::do_define_in_output_data(
|
|
Nick Clifton |
6893f2 |
elfcpp::STV visibility,
|
|
Nick Clifton |
6893f2 |
unsigned char nonvis,
|
|
Nick Clifton |
6893f2 |
bool offset_is_from_end,
|
|
Nick Clifton |
6893f2 |
- bool only_if_ref)
|
|
Nick Clifton |
6893f2 |
+ bool only_if_ref,
|
|
Nick Clifton |
6893f2 |
+ bool must_be_in_reg)
|
|
Nick Clifton |
6893f2 |
{
|
|
Nick Clifton |
6893f2 |
Sized_symbol<size>* sym;
|
|
Nick Clifton |
6893f2 |
Sized_symbol<size>* oldsym;
|
|
Nick Clifton |
6893f2 |
@@ -1975,7 +1985,8 @@ Symbol_table::do_define_in_output_data(
|
|
Nick Clifton |
6893f2 |
sym = this->define_special_symbol<size, true>(&name, &version,
|
|
Nick Clifton |
6893f2 |
only_if_ref, &oldsym,
|
|
Nick Clifton |
6893f2 |
&resolve_oldsym,
|
|
Nick Clifton |
6893f2 |
- is_forced_local);
|
|
Nick Clifton |
6893f2 |
+ is_forced_local,
|
|
Nick Clifton |
6893f2 |
+ must_be_in_reg);
|
|
Nick Clifton |
6893f2 |
#else
|
|
Nick Clifton |
6893f2 |
gold_unreachable();
|
|
Nick Clifton |
6893f2 |
#endif
|
|
Nick Clifton |
6893f2 |
@@ -1986,7 +1997,8 @@ Symbol_table::do_define_in_output_data(
|
|
Nick Clifton |
6893f2 |
sym = this->define_special_symbol<size, false>(&name, &version,
|
|
Nick Clifton |
6893f2 |
only_if_ref, &oldsym,
|
|
Nick Clifton |
6893f2 |
&resolve_oldsym,
|
|
Nick Clifton |
6893f2 |
- is_forced_local);
|
|
Nick Clifton |
6893f2 |
+ is_forced_local,
|
|
Nick Clifton |
6893f2 |
+ must_be_in_reg);
|
|
Nick Clifton |
6893f2 |
#else
|
|
Nick Clifton |
6893f2 |
gold_unreachable();
|
|
Nick Clifton |
6893f2 |
#endif
|
|
Nick Clifton |
6893f2 |
diff -rup binutils.orig/gold/symtab.h binutils-2.29.1/gold/symtab.h
|
|
Nick Clifton |
6893f2 |
--- binutils.orig/gold/symtab.h 2017-10-18 12:00:32.002714624 +0100
|
|
Nick Clifton |
6893f2 |
+++ binutils-2.29.1/gold/symtab.h 2017-10-18 12:00:41.352604062 +0100
|
|
Nick Clifton |
6893f2 |
@@ -1488,7 +1488,8 @@ class Symbol_table
|
|
Nick Clifton |
6893f2 |
Output_data*, uint64_t value, uint64_t symsize,
|
|
Nick Clifton |
6893f2 |
elfcpp::STT type, elfcpp::STB binding,
|
|
Nick Clifton |
6893f2 |
elfcpp::STV visibility, unsigned char nonvis,
|
|
Nick Clifton |
6893f2 |
- bool offset_is_from_end, bool only_if_ref);
|
|
Nick Clifton |
6893f2 |
+ bool offset_is_from_end, bool only_if_ref,
|
|
Nick Clifton |
6893f2 |
+ bool must_be_in_reg = false);
|
|
Nick Clifton |
6893f2 |
|
|
Nick Clifton |
6893f2 |
// Define a special symbol based on an Output_segment. It is a
|
|
Nick Clifton |
6893f2 |
// multiple definition error if this symbol is already defined.
|
|
Nick Clifton |
6893f2 |
@@ -1803,7 +1804,8 @@ class Symbol_table
|
|
Nick Clifton |
6893f2 |
Sized_symbol<size>*
|
|
Nick Clifton |
6893f2 |
define_special_symbol(const char** pname, const char** pversion,
|
|
Nick Clifton |
6893f2 |
bool only_if_ref, Sized_symbol<size>** poldsym,
|
|
Nick Clifton |
6893f2 |
- bool* resolve_oldsym, bool is_forced_local);
|
|
Nick Clifton |
6893f2 |
+ bool* resolve_oldsym, bool is_forced_local,
|
|
Nick Clifton |
6893f2 |
+ bool must_be_in_reg = false);
|
|
Nick Clifton |
6893f2 |
|
|
Nick Clifton |
6893f2 |
// Define a symbol in an Output_data, sized version.
|
|
Nick Clifton |
6893f2 |
template<int size>
|
|
Nick Clifton |
6893f2 |
@@ -1814,7 +1816,8 @@ class Symbol_table
|
|
Nick Clifton |
6893f2 |
typename elfcpp::Elf_types<size>::Elf_WXword ssize,
|
|
Nick Clifton |
6893f2 |
elfcpp::STT type, elfcpp::STB binding,
|
|
Nick Clifton |
6893f2 |
elfcpp::STV visibility, unsigned char nonvis,
|
|
Nick Clifton |
6893f2 |
- bool offset_is_from_end, bool only_if_ref);
|
|
Nick Clifton |
6893f2 |
+ bool offset_is_from_end, bool only_if_ref,
|
|
Nick Clifton |
6893f2 |
+ bool must_be_in_reg = false);
|
|
Nick Clifton |
6893f2 |
|
|
Nick Clifton |
6893f2 |
// Define a symbol in an Output_segment, sized version.
|
|
Nick Clifton |
6893f2 |
template<int size>
|
|
Nick Clifton |
6893f2 |
Only in binutils-2.29.1/gold: symtab.h.orig
|