+2010-01-26  Alan Modra  <amodra@gmail.com>
+           H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/11218
+       * elflink.c (elf_link_output_extsym): Do not ignore undefined
+       symbols with ref_regular set when gc_sections is active.
+
 2010-01-25  Alan Modra  <amodra@gmail.com>
 
        PR ld/11217
 
     {
       /* If we have an undefined symbol reference here then it must have
         come from a shared library that is being linked in.  (Undefined
-        references in regular files have already been handled).  */
+        references in regular files have already been handled unless
+        they are in unreferenced sections which are removed by garbage
+        collection).  */
       bfd_boolean ignore_undef = FALSE;
 
       /* Some symbols may be special in that the fact that they're
       /* If we are reporting errors for this situation then do so now.  */
       if (ignore_undef == FALSE
          && h->ref_dynamic
-         && ! h->ref_regular
+         && (!h->ref_regular || finfo->info->gc_sections)
          && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
          && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
        {
          if (! (finfo->info->callbacks->undefined_symbol
-                (finfo->info, h->root.root.string, h->root.u.undef.abfd,
+                (finfo->info, h->root.root.string,
+                 h->ref_regular ? NULL : h->root.u.undef.abfd,
                  NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
            {
              eoinfo->failed = TRUE;
 
+2010-01-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/11218
+       * ld-gc/dummy.s: New.
+       * ld-gc/pr11218-1.c: Likewise.
+       * ld-gc/pr11218-2.c: Likewise.
+       * ld-gc/pr11218.d: Likewise.
+
 2010-01-23  Richard Sandiford  <r.sandiford@uk.ibm.com>
 
        * ld-powerpc/aix-ref-1-32.od, ld-powerpc/aix-ref-1-64.od,
 
 run_dump_test "noent"
 run_dump_test "abi-note"
 run_dump_test "start"
+if { [is_remote host] || [which $CC] != 0 } {
+    if { [istarget "*-*-linux*"] } {
+       ld_compile "$CC -fPIC $CFLAGS $cflags" $srcdir/$subdir/pr11218-1.c tmpdir/pr11218-1.o
+       ld_simple_link $ld tmpdir/pr11218-1.so "-shared tmpdir/pr11218-1.o"
+       ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/pr11218-2.c tmpdir/pr11218-2.o
+       run_dump_test "pr11218"
+    }
+}
 
--- /dev/null
+extern void unresolved_detected_at_runtime_not_at_linktime(void);
+void foo_in_so(void)
+{
+   unresolved_detected_at_runtime_not_at_linktime();
+}
 
--- /dev/null
+extern void foo_in_so(void);
+
+void call_unresolved(void)
+{
+   unresolved_detected_at_runtime_not_at_linktime();
+}
+
+int main(int argc, char *argv[])
+{
+   foo_in_so();
+
+   return 0;
+}
 
--- /dev/null
+# name: --gc-sections with shared library
+# source: dummy.s
+# ld: --gc-sections -e main tmpdir/pr11218-2.o tmpdir/pr11218-1.so
+# target: *-*-linux*
+# error: undefined reference to `unresolved_detected_at_runtime_not_at_linktime'