------- Comment #5 from ebotcazou at gcc dot gnu dot org  2009-11-04 11:57 
-------
> Running target unix//-m32
> FAIL: gnat.dg/null_pointer_deref1.adb execution test
> 
> the 64bit variant passes.
> 
> the log just states
> 
> raised STORAGE_ERROR : stack overflow (or erroneous memory access)

OK, thanks for the clarification.  Which kernel do you run?  Does the following
patch help?

Index: config/i386/linux-unwind.h
===================================================================
--- config/i386/linux-unwind.h  (revision 153778)
+++ config/i386/linux-unwind.h  (working copy)
@@ -172,6 +172,25 @@ x86_fallback_frame_state (struct _Unwind
   fs->signal_frame = 1;
   return _URC_NO_REASON;
 }
+
+#define MD_FROB_UPDATE_CONTEXT x86_frob_update_context
+
+/* Fix up for kernels that have vDSO, but don't have S flag in it.  */
+
+static void
+x86_frob_update_context (struct _Unwind_Context *context,
+                        _Unwind_FrameState *fs ATTRIBUTE_UNUSED)
+{
+  unsigned char *pc = context->ra;
+
+  /* movl $__NR_rt_sigreturn,%eax ; {int $0x80 | syscall}  */
+  if (*(unsigned char *)(pc+0) == 0xb8
+      && *(unsigned int *)(pc+1) == 173
+      && (*(unsigned short *)(pc+5) == 0x80cd
+         || *(unsigned short *)(pc+5) == 0x050f))
+    _Unwind_SetSignalFrame (context, 1);
+}
+
 #endif /* not glibc 2.0 */
 #endif /* ifdef __x86_64__  */
 #endif /* ifdef inhibit_libc  */


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41929

Reply via email to