[patch] cgen vs relc vs locals

DJ Delorie dj@redhat.com
Wed May 13 21:41:00 GMT 2009


Use of local labels in %lo() on mep-elf caused a segfault as there was
no bfd symbol for that expression.  No regressions on gas or gcc
tests.  Committed.

2009-05-13  DJ Delorie  <dj@redhat.com>

	* cgen.c (gas_cgen_parse_operand): Guard against NULL pointers.

Index: cgen.c
===================================================================
RCS file: /cvs/src/src/gas/cgen.c,v
retrieving revision 1.33
diff -p -U3 -r1.33 cgen.c
--- cgen.c	3 Jul 2007 11:01:02 -0000	1.33
+++ cgen.c	13 May 2009 21:29:06 -0000
@@ -452,9 +452,10 @@ gas_cgen_parse_operand (cd, want, strP, 
 	  if (exp.X_op == O_symbol
 	      && reloc_type == BFD_RELOC_RELC
 	      && exp.X_add_symbol->sy_value.X_op == O_constant
-	      && exp.X_add_symbol->bsym->section != expr_section
-	      && exp.X_add_symbol->bsym->section != absolute_section
-	      && exp.X_add_symbol->bsym->section != undefined_section)
+	      && (!exp.X_add_symbol->bsym
+		  || (exp.X_add_symbol->bsym->section != expr_section
+		      && exp.X_add_symbol->bsym->section != absolute_section
+		      && exp.X_add_symbol->bsym->section != undefined_section)))
 	    {
 	      /* Local labels will have been (eagerly) turned into constants
 		 by now, due to the inappropriately deep insight of the



More information about the Binutils mailing list