This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Save final 'error' in __nptl_setxid_error()


Hi,

I recently got an abort() inside allocatestack.c::__nptl_setxid_error().
Unfortunately it's impossible to see the last error from the syscall (from kernel). It would be really invaluable to see this number, but it tends to be optimized out into registers, which are then clobbered by abort() itself.

I suggest the newest 'error' is placed into the cmdp structure (into memory), so that core dumps will contain this value.

Would something like this (patch attached) be reasonable?

--- glibc.orig/nptl/allocatestack.c	2017-09-19 12:58:11.456588117 +1000
+++ glibc/nptl/allocatestack.c	2017-09-19 12:59:43.906355264 +1000
@@ -1083,9 +1083,12 @@ __nptl_setxid_error (struct xid_command
       int olderror = cmdp->error;
       if (olderror == error)
 	break;
-      if (olderror != -1)
+      if (olderror != -1) {
+	/* save error to memory so it's not lost in coredumps.  */
+	cmdp->error = error;
 	/* Mismatch between current and previous results.  */
 	abort ();
+	}
     }
   while (atomic_compare_and_exchange_bool_acq (&cmdp->error, error, -1));
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]