mirror of
git://slackware.nl/current.git
synced 2025-01-30 08:38:10 +01:00
107 lines
3.8 KiB
Diff
107 lines
3.8 KiB
Diff
|
diff -Naur a/binutils-2.31.1/bfd/ChangeLog b/binutils-2.31.1/bfd/ChangeLog
|
||
|
--- a/binutils-2.31.1/bfd/ChangeLog 2018-07-18 00:50:08.000000000 -0700
|
||
|
+++ b/binutils-2.31.1/bfd/ChangeLog 2018-08-31 02:34:06.852965351 -0700
|
||
|
@@ -1,3 +1,15 @@
|
||
|
+2018-08-25 H.J. Lu <hongjiu.lu@intel.com>
|
||
|
+
|
||
|
+ PR ld/23499
|
||
|
+ * elf.c (_bfd_elf_get_symbol_version_string): Return
|
||
|
+ _("<corrupt>") for corrupt symbol version info.
|
||
|
+
|
||
|
+2018-08-10 H.J. Lu <hongjiu.lu@intel.com>
|
||
|
+
|
||
|
+ PR ld/23499
|
||
|
+ * elflink.c (bfd_elf_record_link_assignment): Always clear
|
||
|
+ h->verinfo.verdef when overriding a dynamic definition.
|
||
|
+
|
||
|
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||
|
|
||
|
2.31.1 Release point.
|
||
|
diff -Naur a/binutils-2.31.1/bfd/elf.c b/binutils-2.31.1/bfd/elf.c
|
||
|
--- a/binutils-2.31.1/bfd/elf.c 2018-08-31 01:07:56.804985073 -0700
|
||
|
+++ b/binutils-2.31.1/bfd/elf.c 2018-08-31 02:36:40.067964767 -0700
|
||
|
@@ -1884,7 +1884,7 @@
|
||
|
{
|
||
|
Elf_Internal_Verneed *t;
|
||
|
|
||
|
- version_string = "";
|
||
|
+ version_string = _("<corrupt>");
|
||
|
for (t = elf_tdata (abfd)->verref;
|
||
|
t != NULL;
|
||
|
t = t->vn_nextref)
|
||
|
diff -Naur a/binutils-2.31.1/bfd/elflink.c b/binutils-2.31.1/bfd/elflink.c
|
||
|
--- a/binutils-2.31.1/bfd/elflink.c 2018-07-13 00:33:03.000000000 -0700
|
||
|
+++ b/binutils-2.31.1/bfd/elflink.c 2018-08-31 01:30:01.056980022 -0700
|
||
|
@@ -686,13 +686,11 @@
|
||
|
&& !h->def_regular)
|
||
|
h->root.type = bfd_link_hash_undefined;
|
||
|
|
||
|
- /* If this symbol is not being provided by the linker script, and it is
|
||
|
- currently defined by a dynamic object, but not by a regular object,
|
||
|
- then clear out any version information because the symbol will not be
|
||
|
- associated with the dynamic object any more. */
|
||
|
- if (!provide
|
||
|
- && h->def_dynamic
|
||
|
- && !h->def_regular)
|
||
|
+ /* If this symbol is currently defined by a dynamic object, but not
|
||
|
+ by a regular object, then clear out any version information because
|
||
|
+ the symbol will not be associated with the dynamic object any
|
||
|
+ more. */
|
||
|
+ if (h->def_dynamic && !h->def_regular)
|
||
|
h->verinfo.verdef = NULL;
|
||
|
|
||
|
/* Make sure this symbol is not garbage collected. */
|
||
|
diff -Naur a/binutils-2.31.1/binutils/ChangeLog b/binutils-2.31.1/binutils/ChangeLog
|
||
|
--- a/binutils-2.31.1/binutils/ChangeLog 2018-07-18 00:50:26.000000000 -0700
|
||
|
+++ b/binutils-2.31.1/binutils/ChangeLog 2018-08-31 02:37:48.060964507 -0700
|
||
|
@@ -1,3 +1,9 @@
|
||
|
+2018-08-25 H.J. Lu <hongjiu.lu@intel.com>
|
||
|
+
|
||
|
+ PR ld/23499
|
||
|
+ * readelf.c (get_symbol_version_string): Return _("<corrupt>")
|
||
|
+ for corrupt symbol version info.
|
||
|
+
|
||
|
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||
|
|
||
|
2.31.1 Release point.
|
||
|
diff -Naur a/binutils-2.31.1/binutils/readelf.c b/binutils-2.31.1/binutils/readelf.c
|
||
|
--- a/binutils-2.31.1/binutils/readelf.c 2018-06-24 11:38:57.000000000 -0700
|
||
|
+++ b/binutils-2.31.1/binutils/readelf.c 2018-08-31 02:47:39.215962252 -0700
|
||
|
@@ -11252,6 +11252,7 @@
|
||
|
unsigned char data[2];
|
||
|
unsigned short vers_data;
|
||
|
unsigned long offset;
|
||
|
+ unsigned short max_vd_ndx;
|
||
|
|
||
|
if (!is_dynsym
|
||
|
|| version_info[DT_VERSIONTAGIDX (DT_VERSYM)] == 0)
|
||
|
@@ -11269,6 +11270,8 @@
|
||
|
if ((vers_data & VERSYM_HIDDEN) == 0 && vers_data == 0)
|
||
|
return NULL;
|
||
|
|
||
|
+ max_vd_ndx = 0;
|
||
|
+
|
||
|
/* Usually we'd only see verdef for defined symbols, and verneed for
|
||
|
undefined symbols. However, symbols defined by the linker in
|
||
|
.dynbss for variables copied from a shared library in order to
|
||
|
@@ -11311,6 +11314,9 @@
|
||
|
ivd.vd_flags = BYTE_GET (evd.vd_flags);
|
||
|
}
|
||
|
|
||
|
+ if ((ivd.vd_ndx & VERSYM_VERSION) > max_vd_ndx)
|
||
|
+ max_vd_ndx = ivd.vd_ndx & VERSYM_VERSION;
|
||
|
+
|
||
|
off += ivd.vd_next;
|
||
|
}
|
||
|
while (ivd.vd_ndx != (vers_data & VERSYM_VERSION) && ivd.vd_next != 0);
|
||
|
@@ -11402,6 +11408,9 @@
|
||
|
return (ivna.vna_name < strtab_size
|
||
|
? strtab + ivna.vna_name : _("<corrupt>"));
|
||
|
}
|
||
|
+ else if ((max_vd_ndx || (vers_data & VERSYM_VERSION) != 1)
|
||
|
+ && (vers_data & VERSYM_VERSION) > max_vd_ndx)
|
||
|
+ return _("<corrupt>");
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|