(_dl_relocate_object): Call elf_machine_runtime_setup unconditionally,
[kopensolaris-gnu/glibc.git] / elf / dl-error.c
index 5b5a616..a5c8611 100644 (file)
@@ -22,22 +22,36 @@ Cambridge, MA 02139, USA.  */
 #include <setjmp.h>
 
 static jmp_buf catch_env;
-static const char *signalled_errstring;
+static const char *signalled_errstring, *signalled_objname;
 
 void
-_dl_signal_error (int errcode, const char *errstring)
+_dl_signal_error (int errcode,
+                 const char *objname,
+                 const char *errstring)
 {
   signalled_errstring = errstring ?: "DYNAMIC LINKER BUG!!!";
+  signalled_objname = objname;
   longjmp (catch_env, errcode ?: -1);
 }
 
 int
-_dl_catch_error (const char **errstring, void (*operate) (void))
+_dl_catch_error (const char **errstring,
+                const char **objname,
+                void (*operate) (void))
 {
   int errcode;
 
-  signalled_errstring = NULL;
+  signalled_errstring = signalled_objname = NULL;
   errcode = setjmp (catch_env);
+  if (errcode == 0)
+    {
+      (*operate) ();
+      *errstring = *objname = NULL;
+      return 0;
+    }
+
+  /* We get here only if we longjmp'd out of OPERATE.  */
   *errstring = signalled_errstring;
-  return *errstring ? errcode : 0;
+  *objname = signalled_objname;
+  return errcode == -1 ? 0 : errcode;
 }