[PATCH] HPPA/BFD: Fix no-.data DT_HP_LOAD_MAP segfault

Maciej W. Rozycki macro@linux-mips.org
Sat Jul 27 23:21:00 GMT 2013


Hi,

 This change fixes a 64-bit HPPA linker crash when a dynamic ELF output 
object is requested, but there's no .data section output, typically 
because of the use of the /DISCARD/ linker script keyword.  I gather the 
section is used for some statically allocated data area defined by the ABI 
and pointed to by the HP_LOAD_MAP dynamic tag.  As such I suppose such 
binaries are not ABI compliant, but the linker shouldn't crash regardless, 
so I propose the following simple fix that makes the linker fail with: 
"final link failed: Nonrepresentable section on output" instead.

 I found the problem reproducible with the hppa64-linux-gnu and 
hppa64-hp-hpux11.23 targets.

 OK to apply?  I revealed this in some unrelated testing so based on that 
I suppose I can cook up a test case to cover this specifically if that 
would help.  Alternatively please feel free to propose a better fix.

2013-07-27  Maciej W. Rozycki  <macro@linux-mips.org>

	* elf64-hppa.c (elf64_hppa_finish_dynamic_sections)
	<DT_HP_LOAD_MAP>: Return unsuccessfully if there's no `.data'
	section.

  Maciej

binutils-2.23.52-20130506-ld-hp-load-map.patch
Index: binutils/bfd/elf64-hppa.c
===================================================================
--- binutils.orig/bfd/elf64-hppa.c
+++ binutils/bfd/elf64-hppa.c
@@ -2524,6 +2524,8 @@ elf64_hppa_finish_dynamic_sections (bfd 
 		 area at the start of the .data section.  So all we have to
 		 to is find the start of the .data section.  */
 	      s = bfd_get_section_by_name (output_bfd, ".data");
+	      if (!s)
+		return FALSE;
 	      dyn.d_un.d_ptr = s->vma;
 	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;



More information about the Binutils mailing list