[PATCH] Ensure DSO_FILENAME does not dereference NULL.

Marcus Shawcroft marcus.shawcroft@linaro.org
Tue Nov 12 15:25:00 GMT 2013


The AArch64 and ARM glibc build is currently broken for trunk gcc.
Both builds fail with link errors for the multiple definition of
_dl_addr_inside_object.

This is caused by the "Isolate erroneous paths optimization" patch
recently added to gcc here:

http://gcc.gnu.org/ml/gcc-patches/2013-10/msg02648.html

One effect of this patch is to replace unreachable paths with a call to abort().

There is code in _dl_lookup_symbol_x() which may pass NULL to
DSO_FILENAME().  This macro always dereferences the filename.  The
isolate erroneous paths cod in gcc inserts an abort() in place of the
ill defined code. The linker subsequently pulls in a bunch of code
from libpic.a, including the alternative definition of
_dl_addr_inside_object.

The convention elsewhere appears to be to pass "" rather than NULL.
This patch seems obvious to me, I'll commit it tomorrow unless anyone
objects.

* elf/dl-lookup.c (_dl_lookup_symbol_x): Pass "" instead of NULL to
DSO_FILENAME().

Cheers
/Marcus
-------------- next part --------------
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 39f463e..f869dcf 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -746,7 +746,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
 	     contain the needed symbol.  This code is never reached
 	     for unversioned lookups.  */
 	  assert (version != NULL);
-	  const char *reference_name = undef_map ? undef_map->l_name : NULL;
+	  const char *reference_name = undef_map ? undef_map->l_name : "";
 
 	  /* XXX We cannot translate the message.  */
 	  _dl_signal_cerror (0, DSO_FILENAME (reference_name),
-- 
1.7.9.5



More information about the Libc-alpha mailing list