Project

General

Profile

This project is closed and read-only.

Actions

Bug #4411

closed

Context saving issue on PPC64

Bug #4411: Context saving issue on PPC64

Added by a3li (Alex Legler) over 15 years ago. Updated over 14 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
-
[ruby-core:35318]

Description

=begin
Hi,

please see this bug report with a stacktrace and gdb info: https://bugzilla.redhat.com/show_bug.cgi?id=628715
It also includes a proposed patch which I'd like to have considered for inclusion. The issue is still there in p334.

Thanks!
=end


Related issues 1 (0 open1 closed)

Has duplicate Ruby - Bug #3796: make check fails on powerpc64 linuxClosedshyouhei (Shyouhei Urabe)Actions

Updated by naruse (Yui NARUSE) over 15 years ago Actions #1

  • Priority changed from Normal to 3

=begin
We can't see brewweb.devel.redhat.com.
=end

Updated by a3li (Alex Legler) over 15 years ago Actions #2

=begin
I cannot access it either, it seems to be redhat-internal.

In case you were looking for the patch, it is here: https://bugzilla.redhat.com/attachment.cgi?id=445801
=end

Updated by nobu (Nobuyoshi Nakada) over 15 years ago Actions #3 [ruby-core:35369]

  • ruby -v changed from ruby 1.8.7 (2010-06-23 patchlevel 299) [powerpc64-linux] to -

=begin
Hi,

At Tue, 22 Feb 2011 15:33:59 +0900,
Alex Legler wrote in [ruby-core:35333]:

In case you were looking for the patch, it is here: https://bugzilla.redhat.com/attachment.cgi?id=445801

It's gccish code.

  • (((j)->status)?:(just_before_setjmp)), \
    

--
Nobu Nakada
=end

Updated by nobu (Nobuyoshi Nakada) over 15 years ago Actions #4 [ruby-core:35369]

=begin
Hi,

At Tue, 22 Feb 2011 15:33:59 +0900,
Alex Legler wrote in [ruby-core:35333]:

In case you were looking for the patch, it is here: https://bugzilla.redhat.com/attachment.cgi?id=445801

It's gccish code.

  • (((j)->status)?:(just_before_setjmp)), \
    

--
Nobu Nakada
=end

Updated by nobu (Nobuyoshi Nakada) over 15 years ago Actions #5 [ruby-core:35369]

=begin
Hi,

At Tue, 22 Feb 2011 15:33:59 +0900,
Alex Legler wrote in [ruby-core:35333]:

In case you were looking for the patch, it is here: https://bugzilla.redhat.com/attachment.cgi?id=445801

It's gccish code.

  • (((j)->status)?:(just_before_setjmp)), \
    

--
Nobu Nakada
=end

Updated by Anonymous over 15 years ago Actions #6 [ruby-core:36232]

It's gccish code.

  • (((j)->status)?:(just_before_setjmp)), \
    

GCCish or not it's been few months with no reaction here. Vanilla ruby is therefore unusable on PPC64. Can you provide better patch or at least a suggestion how we should fix it "in a better way"?
Cheers,
Kacper Kowalik

Updated by nobu (Nobuyoshi Nakada) over 15 years ago Actions #7 [ruby-core:36245]

=begin
Hi,

: At Tue, 17 May 2011 03:50:32 +0900,
: Kacper Kowalik wrote in [ruby-core:36232]:
GCCish or not it's been few months with no reaction
here. Vanilla ruby is therefore unusable on PPC64. Can you
provide better patch or at least a suggestion how we should
fix it "in a better way"?

Does this work?


diff --git a/eval.c b/eval.c
index a54fdce..e25ee24 100644
--- a/eval.c
+++ b/eval.c
@@ -188,6 +188,9 @@ int function_call_may_return_twice_false_2 = 0;
(function_call_may_return_twice_false_2 ?
setjmp(function_call_may_return_twice_jmp_buf) :
0)
+# elif defined(__ia64)
+# define JUST_BEFORE_SETJMP(extra_save, j) ((void)0)
+# define JUST_AFTER_SETJMP(extra_save, j) ((j)->status ? (void)0 : (extra_save))

elif defined(FreeBSD) && FreeBSD < 7

/*

  • workaround for FreeBSD/i386 getcontext/setcontext bug.
    @@ -205,16 +208,23 @@ static int volatile freebsd_clear_carry_flag = 0;

ifndef POST_GETCONTEXT

define POST_GETCONTEXT 0

endif

+# ifndef JUST_BEFORE_SETJMP
+# define JUST_BEFORE_SETJMP(extra_save, j) (extra_save)
+# endif
+# ifndef JUST_AFTER_SETJMP
+# define JUST_AFTER_SETJMP(extra_save, j) ((void)0)
+# endif

define ruby_longjmp(env, val) rb_jump_context(env, val)

-# define ruby_setjmp(just_before_setjmp, j) ((j)->status = 0, \

  • (just_before_setjmp), \
    

+# define ruby_setjmp(extra_save, j) ((j)->status = 0, \

  • JUST_BEFORE_SETJMP(extra_save, j), \
    PRE_GETCONTEXT, \
    getcontext(&(j)->context), \
    POST_GETCONTEXT, \
    
  • JUST_AFTER_SETJMP(extra_save, j), \
    (j)->status)
    

#else
-# define ruby_setjmp(just_before_setjmp, env) \

  • ((just_before_setjmp), RUBY_SETJMP(env))
    

+# define ruby_setjmp(extra_save, env) \

  • ((extra_save), RUBY_SETJMP(env))
    

define ruby_longjmp(env,val) RUBY_LONGJMP(env,val)

ifdef CYGWIN

ifndef _setjmp

--- Nobu Nakada
=end

Updated by Anonymous over 15 years ago Actions #8 [ruby-core:36277]

Nobuyoshi Nakada wrote:

Does this work?
Yes, thank you! But of course you need s/__ia64/PPC64/ following line:

+# elif defined(__ia64)
+# define JUST_BEFORE_SETJMP(extra_save, j) ((void)0)
Cheers,
Kacper Kowalik

Updated by Anonymous over 15 years ago Actions #9

Could this patch be applied to 1.8 branch?

Updated by nobu (Nobuyoshi Nakada) over 15 years ago Actions #10 [ruby-core:36829]

Hi,

At Wed, 18 May 2011 02:23:35 +0900,
Kacper Kowalik wrote in [ruby-core:36277]:

Yes, thank you! But of course you need s/__ia64/PPC64/ following line:

Thank you, I also noticed it just after the post.
Is it all upper case?

--
Nobu Nakada

Updated by Anonymous about 15 years ago Actions #11 [ruby-core:38054]

Nobuyoshi Nakada wrote:

Hi,

At Wed, 18 May 2011 02:23:35 +0900,
Kacper Kowalik wrote in [ruby-core:36277]:

Yes, thank you! But of course you need s/__ia64/PPC64/ following line:

Thank you, I also noticed it just after the post.
Is it all upper case?
Yes,

$ echo | gcc -dM -E - | grep -i ppc
#define _ARCH_PPCGR 1
#define PPC64 1
#define _ARCH_PPC 1
#define PPC 1
#define _ARCH_PPC64 1

Updated by nobu (Nobuyoshi Nakada) over 14 years ago Actions #12 [ruby-core:45503]

  • Description updated (diff)
  • Status changed from Open to Closed
  • % Done changed from 0 to 100

Fixed at r32542

Actions

Also available in: PDF Atom