[#5219] Segmentation fault in timeout.rb — Michel Pastor <K@...>

Hi,

18 messages 2005/06/16
[#5220] Re: Segmentation fault in timeout.rb — Eric Hodel <drbrain@...7.net> 2005/06/16

[#5221] Re: Segmentation fault in timeout.rb — Michel Pastor <K@...> 2005/06/16

On Fri, 17 Jun 2005 05:03:18 +0900

[#5223] Re: Segmentation fault in timeout.rb — nobu.nokada@... 2005/06/17

Hi,

[#5296] Subversion — Shugo Maeda <shugo@...>

Hi,

64 messages 2005/06/30
[#5297] Re: Subversion — Curt Hibbs <curt@...> 2005/06/30

Shugo Maeda wrote:

[#5298] Re: Subversion — Nikolai Weibull <mailing-lists.ruby-core@...> 2005/06/30

Curt Hibbs wrote:

[#5301] Re: Subversion — Austin Ziegler <halostatue@...> 2005/06/30

On 6/30/05, Nikolai Weibull

[#5304] Re: Subversion — Nikolai Weibull <mailing-lists.ruby-core@...> 2005/06/30

Austin Ziegler wrote:

[#5305] Re: Subversion — Austin Ziegler <halostatue@...> 2005/06/30

On 6/30/05, Nikolai Weibull

[#5307] Re: Subversion — mathew <meta@...> 2005/06/30

Austin Ziegler wrote:

[#5308] Re: Subversion — Austin Ziegler <halostatue@...> 2005/06/30

On 6/30/05, mathew <meta@pobox.com> wrote:

[#5311] Re: Subversion — mathew <meta@...> 2005/07/01

Austin Ziegler wrote:

[#5323] Re: Subversion — Austin Ziegler <halostatue@...> 2005/07/01

On 7/1/05, mathew <meta@pobox.com> wrote:

[#5325] Re: Subversion — Nikolai Weibull <mailing-lists.ruby-core@...> 2005/07/01

Austin Ziegler wrote:

[PATCH] 1.8.3 p1 segfault in array.c- bccwin32 - bcc5.5 (free) compiler bug

From: "daz" <dooby@...10.karoo.co.uk>
Date: 2005-06-06 18:21:28 UTC
List: ruby-core #5152
Hi,

There's a line in array.c which confuses the Borland 5.5 compiler
optimizer into corrupting a pointer held in a register.

Use of -O2 flag with the 'free' compiler causes a SEGV in
miniruby during the bccwin32 build process.

I tried to produce a small test case for the Borland community to
comment on but without success, so I can't say if this is a known
problem or even what the problem is.
It doesn't occur anywhere else in the 183p1 source.

Fix has a much smaller impact than adding 'volatile' would have.

I don't like the code change, especially as it means the same thing
but it will be preferable to the SEGV if you can bear it.

---

* array.c (sort_2): work around SEGV caused by rare Borland 5.5
  compiler bug when using optimize -O2 flag [ruby-core:5152]

=======================================================================

--- array_1_137_2_23.c Fri May 13 03:38:18 2005
+++ array_patched.c  Mon Jun 06 17:35:30 2005
@@ -1584,7 +1584,7 @@ sort_2(ap, bp, data)
  if ((long)a < (long)b) return -1;
  return 0;
     }
-    if (TYPE(a) == T_STRING && TYPE(b) == T_STRING) {
+    if (TYPE(a) == T_STRING) if (TYPE(b) == T_STRING) {  /* OK: && */
  return rb_str_cmp(a, b);
     }

=======================================================================

In case you're interested, here's the offending part of the
assembler expansion:

     ;
     ; if (TYPE(a) == T_STRING && TYPE(b) == T_STRING) {
     ;
     ; EBX = a, ESI = b ; returns EDX

     ; <snip>

     ; [ TYPE(a) ] if (a == Qundef) return T_UNDEF;

     cmp  ebx,6
     jne  short @542
     mov  edx,60
     jmp  short @543
@542:
     ; [ TYPE(a) ] if (SYMBOL_P(a)) return T_SYMBOL;

     and  ebx,255   ; <---***  VALUE 'a' in EBX corrupted  ***
     cmp  ebx,14
     jne  short @544
     mov  edx,36
     jmp  short @545
@544:
     ; return BUILTIN_TYPE(a);
     mov  edx,dword ptr [ebx]  ; <---***  SEGV (ebx)
     and  edx,63

@543:
@545:
   ; <snip>  same for TYPE(b)   }



The bug sends its apologies :-o


daz



begin 666 array_bccO2.patch
M+2TM(&%R<F%Y7S%?,3,W7S)?,C,N8PE&<FD@36%Y(#$S(# S.C,X.C$X(#(P
M,#4**RLK(&%R<F%Y7W!A=&-H960N8PD)36]N($IU;B P-B Q-SHS-3HS," R
M,# U"D! ("TQ-3@T+#<@*S$U.#0L-R! 0"!S;W)T7S(H87 L(&)P+"!D871A
M*0H@"6EF("@H;&]N9REA(#P@*&QO;F<I8BD@<F5T=7)N("TQ.PH@"7)E='5R
M;B P.PH@(" @('T*+2 @("!I9B H5%E012AA*2 ]/2!47U-44DE.1R F)B!4
M65!%*&(I(#T](%1?4U1224Y'*2!["BL@(" @:68@*%194$4H82D@/3T@5%]3
M5%))3D<I(&EF("A465!%*&(I(#T](%1?4U1224Y'*2![(" O*B!/2SH@)B8@
E*B\*( ER971U<FX@<F)?<W1R7V-M<"AA+"!B*3L*(" @("!]"@``
`
end



In This Thread

Prev Next