]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - debian/patches/211-hjl-binutils-weakdef.dpatch
Import 2.18.1~cvs20080103-0tinyos1 from old svn repo.
[msp430-binutils.git] / debian / patches / 211-hjl-binutils-weakdef.dpatch
diff --git a/debian/patches/211-hjl-binutils-weakdef.dpatch b/debian/patches/211-hjl-binutils-weakdef.dpatch
new file mode 100755 (executable)
index 0000000..bab2c63
--- /dev/null
@@ -0,0 +1,131 @@
+#!/bin/sh -e
+## 211-hjl-binutils-weakdef.dpatch
+##
+## DP: Description: elflink.c (elf_link_add_object_symbols): Check symbol type
+## DP: Description: for symbol alias in a dynamic object.
+## DP: Author: H.J. Lu  <hongjiu.lu@intel.com>
+## DP: Upstream status: hjl 2.17.50.0.18
+## DP: Original patch: binutils-weakdef-1.patch
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+bfd/
+
+2007-07-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elflink.c (elf_link_add_object_symbols): Check symbol type
+       for symbol alias in a dynamic object.
+
+ld/testsuite/
+
+2007-07-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * ld-elf/data2.c: New.
+       * ld-elf/weakdef1.c: Likewise.
+
+       * ld-elf/shared.exp: Add tests for libdata2 and weakdef1.
+
+@DPATCH@
+diff -urNad binutils-2.18~cvs20070812~/bfd/elflink.c binutils-2.18~cvs20070812/bfd/elflink.c
+--- binutils-2.18~cvs20070812~/bfd/elflink.c   2007-08-12 13:48:32.000000000 +0200
++++ binutils-2.18~cvs20070812/bfd/elflink.c    2007-08-12 13:48:41.000000000 +0200
+@@ -4558,6 +4558,7 @@
+         asection *slook;
+         bfd_vma vlook;
+         long ilook;
++        int tlook;
+         size_t i, j, idx;
+         hlook = weaks;
+@@ -4570,6 +4571,7 @@
+                     || hlook->root.type == bfd_link_hash_indirect);
+         slook = hlook->root.u.def.section;
+         vlook = hlook->root.u.def.value;
++        tlook = hlook->type;
+         ilook = -1;
+         i = 0;
+@@ -4607,9 +4609,10 @@
+           {
+             h = sorted_sym_hash [i];
+-            /* Stop if value or section doesn't match.  */
++            /* Stop if value, section or type doesn't match.  */
+             if (h->root.u.def.value != vlook
+-                || h->root.u.def.section != slook)
++                || h->root.u.def.section != slook
++                || h->type != tlook)
+               break;
+             else if (h != hlook)
+               {
+diff -urNad binutils-2.18~cvs20070812~/ld/testsuite/ld-elf/data2.c binutils-2.18~cvs20070812/ld/testsuite/ld-elf/data2.c
+--- binutils-2.18~cvs20070812~/ld/testsuite/ld-elf/data2.c     1970-01-01 01:00:00.000000000 +0100
++++ binutils-2.18~cvs20070812/ld/testsuite/ld-elf/data2.c      2007-08-12 13:48:41.000000000 +0200
+@@ -0,0 +1,9 @@
++int foo = 0;
++extern int foo_alias __attribute__ ((weak, alias ("foo")));
++
++void
++bar (void)
++{
++  foo = -1;
++}
++
+diff -urNad binutils-2.18~cvs20070812~/ld/testsuite/ld-elf/shared.exp binutils-2.18~cvs20070812/ld/testsuite/ld-elf/shared.exp
+--- binutils-2.18~cvs20070812~/ld/testsuite/ld-elf/shared.exp  2007-07-06 16:09:43.000000000 +0200
++++ binutils-2.18~cvs20070812/ld/testsuite/ld-elf/shared.exp   2007-08-12 13:48:41.000000000 +0200
+@@ -123,6 +123,9 @@
+   {"Build libdata1.so"
+    "-shared" "-fPIC"
+    {data1.c} {} "libdata1.so"}
++  {"Build libdata2.so"
++   "-shared" "-fPIC"
++   {data2.c} {} "libdata2.so"}
+ }
+ set run_tests {
+@@ -235,6 +238,9 @@
+     {"Run with libdata1.so"
+      "tmpdir/libdata1.so" ""
+      {dynbss1.c} "dynbss1" "pass.out"}
++    {"Run with libdata2.so"
++     "tmpdir/libdata2.so" ""
++     {weakdef1.c} "weakdef1" "pass.out"}
+ }
+ run_cc_link_tests $build_tests
+diff -urNad binutils-2.18~cvs20070812~/ld/testsuite/ld-elf/weakdef1.c binutils-2.18~cvs20070812/ld/testsuite/ld-elf/weakdef1.c
+--- binutils-2.18~cvs20070812~/ld/testsuite/ld-elf/weakdef1.c  1970-01-01 01:00:00.000000000 +0100
++++ binutils-2.18~cvs20070812/ld/testsuite/ld-elf/weakdef1.c   2007-08-12 13:48:41.000000000 +0200
+@@ -0,0 +1,15 @@
++#include <stdio.h>
++#include <stdlib.h>
++
++extern int foo_alias;
++extern void bar (void);
++
++int
++main (void)
++{
++  bar ();
++  if (foo_alias != -1)
++    abort ();
++  printf ("PASS\n");
++  return 0;
++}