+2017-10-23  Nick Clifton  <nickc@redhat.com>
+
+       PR 22319
+       * elflink.c (elf_link_output_extsym): Keep global undefined
+       symbols if they have been marked as needed.
+
 2017-10-23  Maciej W. Rozycki  <macro@imgtec.com>
 
        * elfn32-mips.c (mips_elf_n32_mkobject): New prototype and
 
      relocatable output or when needed for --emit-relocs.  */
   else if (input_sec == bfd_und_section_ptr
           && h->indx != -2
+          /* PR 22319 Do not strip global undefined symbols marked as being needed.  */
+          && (h->mark != 1 || ELF_ST_BIND (sym.st_info) != STB_GLOBAL)
           && !bfd_link_relocatable (flinfo->info))
     return TRUE;
+
   /* Also strip others that we couldn't earlier due to dynamic symbol
      processing.  */
   if (strip)
 
+2017-10-23  Nick Clifton  <nickc@redhat.com>
+
+       PR 22310
+       * testsuite/ld-elf/pr22310.s: New test source file.
+       * testsuite/ld-elf/pr22310.d: New test driver.
+       * testsuite/ld-mmix/undef-3.d: Update expected output from readelf.
+
 2017-10-21  Hans-Peter Nilsson  <hp@axis.com>
 
        PR ld/21233
 
--- /dev/null
+#name: PR 22319 - required undefined symbols in output
+#ld: -u undefined_symbol -e 0
+#nm: -u
+#notarget: dlx-*-* 
+# The DLX target fails because it needs a special linker script to handle file symbols.
+
+[      ]+U+[   ]+undefined_symbol
+#pass
+
 
  +\[ 1\] \.text +PROGBITS +0+ +0+78
  +0+4 +0+ +AX +0 +0 +4
  +\[ 2\] \.symtab +SYMTAB +0+ .*
- +0+a8 +0+18 +3 +2 +8
+ +0+c0 +0+18 +3 +2 +8
  +\[ 3\] \.strtab +STRTAB +0+ .*
- +0+21 +0+ +0 +0 +1
+ +0+28 +0+ +0 +0 +1
  +\[ 4\] \.shstrtab +STRTAB +0+ +[0-9a-f]+
  +0+21 +0+ +0 +0 +1
 Key to Flags:
 #...
 
-Symbol table '\.symtab' contains 7 entries:
+Symbol table '\.symtab' contains 8 entries:
  +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
  +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND 
  +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1 
- +2: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
- +3: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 __bss_start
- +4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _edata
- +5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _end
- +6: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\.
+[      ]+2: 0+[        ]+0[    ]+NOTYPE[       ]+GLOBAL[       ]+DEFAULT[      ]+UND[  ]+undefd
+ +3: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
+ +4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 __bss_start
+ +5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _edata
+ +6: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _end
+ +7: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\.