[#61822] Plan Developers Meeting Japan April 2014 — Zachary Scott <e@...>

I would like to request developers meeting around April 17 or 18 in this mo=

14 messages 2014/04/03
[#61825] Re: Plan Developers Meeting Japan April 2014 — Urabe Shyouhei <shyouhei@...> 2014/04/03

It's good if we have a meeting then.

[#61826] Re: Plan Developers Meeting Japan April 2014 — Zachary Scott <e@...> 2014/04/03

Regarding openssl issues, I=E2=80=99ve discussed possible meeting time with=

[#61833] Re: Plan Developers Meeting Japan April 2014 — Martin Bo煬et <martin.bosslet@...> 2014/04/03

Hi,

[ruby-core:61800] [ruby-trunk - Bug #9692] __builtin_longjmp is called with a value greater than 1 (GCC compilation error)

From: mliska@...
Date: 2014-04-01 14:57:32 UTC
List: ruby-core #61800
Issue #9692 has been updated by Martin Li=C5=A1ka.


I found the problem in configuration:

without LTO:
configure:15773: checking for __builtin_setjmp
configure:15790: x86_64-pc-linux-gnu-gcc -o conftest -march=3Dnative -O2 -p=
ipe -flto=3D9 -fno-lto -fno-use-linker-plugin -fno-strict-aliasing  -fno-lt=
o -fno-use-linker-plugin -fstack-protector conftest.c -lrt -ldl -lcrypt -lm=
  >&5
conftest.c: In function 't':
conftest.c:274:35: error: '__builtin_longjmp' second argument must be 1
     jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}

with LTO:
configure:15773: checking for __builtin_setjmp
configure:15790: x86_64-pc-linux-gnu-gcc -o conftest -march=3Dnative -O2 -p=
ipe -flto=3D9 -fno-strict-aliasing  -fstack-protector conftest.c -lrt -ldl =
-lcrypt -lm  >&5
configure:15790: $? =3D 0
configure:15799: result: yes
configure:15804: checking for setjmp type

confdefs.h:
 #include <setjmp.h>
     jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}
 int
 main ()
 {
 __builtin_setjmp(jb);
   ;
   return 0;
 }

In LTO the compiler proves that function t is never used and so that the fu=
nction is discarded. That introduces problem in configuration, because __bu=
iltin_longjmp must be always called with 1 constant.

----------------------------------------
Bug #9692: __builtin_longjmp is called with a value greater than 1 (GCC com=
pilation error)
https://bugs.ruby-lang.org/issues/9692#change-46035

* Author: Martin Li=C5=A1ka
* Status: Open
* Priority: Normal
* Assignee:=20
* Category:=20
* Target version:=20
* ruby -v: 2.0.0-p353
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Hello,
    during testing of LTO on a gentoo machine:
Linux qemubox 3.12.13-gentoo #2 SMP Fri Mar 28 22:30:38 Local time zone mus=
t be set--see zic  x86_64 Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz GenuineIn=
tel GNU/Linux

Configure detects:
checking for __builtin_setjmp... yes
checking for setjmp type... __builtin_setjmp

Problem is that ruby calls longjmp with value greater than 1, e.g. TAG_RAIS=
E (0x6). With -flto compiler proves that __builtin_longjmp is always called=
 with such a value and following errors are displayed:

eval.c: In function =E2=80=98rb_jump_tag=E2=80=99:
eval.c:668:5: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument mu=
st be 1
     JUMP_TAG(tag);
     ^
thread.c: In function =E2=80=98rb_threadptr_to_kill=E2=80=99:
thread.c:1887:5: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument=
 must be 1
     TH_JUMP_TAG(th, TAG_FATAL);
     ^
vm.c: In function =E2=80=98vm_exec=E2=80=99:
vm.c:1413:3: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument mus=
t be 1
   JUMP_TAG(state);
   ^
eval.c: In function =E2=80=98setup_exception=E2=80=99:
eval.c:437:34: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument m=
ust be 1
  if (INTERNAL_EXCEPTION_P(mesg)) JUMP_TAG(TAG_FATAL);
                                  ^
eval.c:502:2: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument mu=
st be 1
  JUMP_TAG(TAG_FATAL);
  ^
eval.c: In function =E2=80=98rb_raise_jump=E2=80=99:
eval.c:662:5: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument mu=
st be 1
     JUMP_TAG(TAG_RAISE);
     ^
eval.c: In function =E2=80=98rb_longjmp=E2=80=99:
eval.c:521:5: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument mu=
st be 1
     JUMP_TAG(tag);
     ^
gc.c: In function =E2=80=98rb_memerror=E2=80=99:
gc.c:3417:2: error: =E2=80=98__builtin_longjmp=E2=80=99 second argument mus=
t be 1
  JUMP_TAG(TAG_RAISE);
  ^

gcc --version:
gcc (GCC) 4.9.0 20140331 (experimental)




--=20
https://bugs.ruby-lang.org/

In This Thread

Prev Next