LanguageKit on 64bit platforms

View: New views
3 Messages — Rating Filter:   Alert me  

LanguageKit on 64bit platforms

by Niels Grewe :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello guys,

after not having updated for a while, I checked out llvm (+clang) trunk
yesterday and was able to build LanguageKit with it so that it actually
seems to work on 64bit platforms. I've already added a 64bit version of
the small integer message bitcode to trunk so now people on 64bit
platforms can give LK a spin without installing clang and recompiling
MsgSendSmallint.m.
Unfortunately some kinks still need to be worked out: Quite a few tests
from the Smalltalk testsuite are failing for me (list attached) and need
further investigation...

Cheers,


Niels

------------------------------------------------------
Test: TestBlockAssignment
TestBlockAssignment: OK
------------------------------------------------------
Test: TestBlockReturn
TestBlockReturn: OK
------------------------------------------------------
Test: TestBlockReturningABlock
TestBlockReturningABlock: OK
------------------------------------------------------
Test: TestCascadedMessages
TestCascadedMessages: OK
------------------------------------------------------
Test: TestClassMethods1
TestClassMethods1: OK
------------------------------------------------------
Test: TestClassMethods2
TestClassMethods2: OK
------------------------------------------------------
Test: TestClassMethods3
TestClassMethods3: OK
------------------------------------------------------
Test: TestClassVariables
TestClassVariables: OK
------------------------------------------------------
Test: TestCommaOperator
TestCommaOperator: OK
------------------------------------------------------
Test: TestCountingWhileTrue
TestCountingWhileTrue: OK
------------------------------------------------------
Test: TestDeeplyNestedBlocks
TestDeeplyNestedBlocks: OK
------------------------------------------------------
Test: TestFloatBoxing
TestFloatBoxing: OK
------------------------------------------------------
Test: TestIntArithmetic
TestIntArithmetic: OK
------------------------------------------------------
Test: TestIntegerAddition
TestIntegerAddition: OK
------------------------------------------------------
Test: TestIntegerUpTo
TestIntegerUpTo: OK
------------------------------------------------------
Test: TestJustAnInteger
TestJustAnInteger: OK
------------------------------------------------------
Test: TestMutRecursiveClassDefs
TestMutRecursiveClassDefs: FAIL (crash)
==
2009-10-04 14:14:53.981 edlc[8362] ERROR: Unrecognised symbol: SuffixList
2009-10-04 14:14:53.982 edlc[8362] Warning: Selector 'objectAtIndex:' is polymorphic.  Assuming @20@0:8i16
2009-10-04 14:14:53.982 edlc[8362] Warning: Selector 'count' is polymorphic.  Assuming I8@0:4
2009-10-04 14:14:53.982 edlc[8362] Failed to compile input.
==
------------------------------------------------------
Test: TestNSPointBoxing
TestNSPointBoxing: FAIL
result | expected
Boxing:                                                         Boxing:
{x = 8.65376e-38; y = 0}                                      | {x = 1.1; y = 10.2}
Unboxing:                                                       Unboxing:
0                                                             | 1
------------------------------------------------------
Test: TestNSRangeBoxing
runtest.sh: line 25:  8293 Aborted                 ( edlc -f test.st > results.txt 2> /dev/null )
TestNSRangeBoxing: FAIL (crash)
==
(gdb) run
Starting program: /home/thebeing/GNUstep/Tools/x86_64/linux-gnu/gnu-gnu-gnu/edlc -f test.st
[Thread debugging using libthread_db enabled]
Create range:
{location=0, length=9}

Program received signal SIGABRT, Aborted.
0x00007ffff5aedd25 in raise () from /lib/libc.so.6
(gdb) bt
#0  0x00007ffff5aedd25 in raise () from /lib/libc.so.6
#1  0x00007ffff5af0de1 in abort () from /lib/libc.so.6
#2  0x00007ffff62bcdc0 in objc_exception_throw (value=0xbf2cc0) at /build/buildd/gcc-4.4-4.4.1/src/libobjc/exception.c:496
#3  0x00007ffff68cb4fb in -[NSException raise] (self=0xbf2cc0, _cmd=0x20ae) at NSException.m:342
#4  0x00007ffff68cba95 in +[NSException raise:format:] (self=0x7ffff6c9dc00, _cmd=<value optimized out>, name=0x7ffff6c9e400,
    format=0x7ffff6c70120) at NSException.m:261
#5  0x00007ffff684b58f in -[GSCString substringWithRange:] (self=0x7ffff7f715f0, _cmd=0x7ffff7f71300, aRange=<value optimized out>)
    at GSString.m:3150
#6  0x00007ffff7eb96f4 in ?? ()
#7  0x0000000000b50280 in ?? ()
#8  0x00007ffff7eb9698 in ?? ()
#9  0x0000000000000000 in ?? ()
(gdb) frame 3
#3  0x00007ffff68cb4fb in -[NSException raise] (self=0xbf2cc0, _cmd=0x20ae) at NSException.m:342
342       @throw self;
(gdb) print-object self
<NSException: 0xbf2cc0> NAME:NSRangeException REASON:in substringWithRange:, range { 11862656, 0 } extends beyond size (26) INFO:(nil)
=
------------------------------------------------------
Test: TestNSRectBoxing
TestNSRectBoxing: FAIL
result | expected
Boxing:                                                         Boxing:
{x = 8.30499e-38; y = 0; width = 0; height = 0}               | {x = 1.2; y = 2.7; width = 3.032; height = -5e+09}
Unboxing:                                                       Unboxing:
0                                                             | 1
------------------------------------------------------
Test: TestNSSizeBoxing
TestNSSizeBoxing: FAIL
result | expected
Boxing:                                                         Boxing:
{width = 9.99968e-38; height = 0}                             | {width = 13.1; height = 50.5}
Unboxing:                                                       Unboxing:
0                                                             | 1
------------------------------------------------------
Test: TestNestedBlocks
TestNestedBlocks: OK
------------------------------------------------------
Test: TestNonLocalReturn
TestNonLocalReturn: FAIL
result | expected
test failed                                                   | test succeeded
------------------------------------------------------
Test: TestNonLocalReturn2
TestNonLocalReturn2: FAIL
result | expected
test failed                                                   | test succeeded
------------------------------------------------------
Test: TestOperatorDefinition
TestOperatorDefinition: OK
------------------------------------------------------
Test: TestPolymorphicSelectors
TestPolymorphicSelectors: FAIL
result | expected
42                                                              42
31614112                                                      \ 12345
------------------------------------------------------
Test: TestPrototypes
TestPrototypes: OK
------------------------------------------------------
Test: TestRetainOnlyOnce
runtest.sh: line 25:  8332 Segmentation fault      ( edlc -f test.st > results.txt 2> /dev/null )
TestRetainOnlyOnce: FAIL (crash)
==
(Problem as described in test.st)
==
------------------------------------------------------
Test: TestSimpleSelect
TestSimpleSelect: OK
------------------------------------------------------
Test: TestTimesRepeat
TestTimesRepeat: OK
------------------------------------------------------
Test: TestTranscript
TestTranscript: OK
_______________________________________________
Etoile-dev mailing list
Etoile-dev@...
https://mail.gna.org/listinfo/etoile-dev

Re: LanguageKit on 64bit platforms

by David Chisnall :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Niels,

A few of these are expected fails.  Those that are not are the result  
of ABI mismatch (calling functions with the wrong calling  
convention).  You can fix this quite easily by adding the correct  
values for x86-64 to ABI.h in LanguageKit; the slight catch is that I  
have no idea what the correct values are, but hopefully you can work  
it out using the power of guesswork...

David

On 4 Oct 2009, at 13:26, Niels Grewe wrote:

> Hello guys,
>
> after not having updated for a while, I checked out llvm (+clang)  
> trunk
> yesterday and was able to build LanguageKit with it so that it  
> actually
> seems to work on 64bit platforms. I've already added a 64bit version  
> of
> the small integer message bitcode to trunk so now people on 64bit
> platforms can give LK a spin without installing clang and recompiling
> MsgSendSmallint.m.
> Unfortunately some kinks still need to be worked out: Quite a few  
> tests
> from the Smalltalk testsuite are failing for me (list attached) and  
> need
> further investigation...
>
> Cheers,
>
>
> Niels
> <st64.txt>_______________________________________________
> Etoile-dev mailing list
> Etoile-dev@...
> https://mail.gna.org/listinfo/etoile-dev


-- Sent from my Cray X1


_______________________________________________
Etoile-dev mailing list
Etoile-dev@...
https://mail.gna.org/listinfo/etoile-dev

Re: LanguageKit on 64bit platforms

by Niels Grewe :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Sun, Oct 04, 2009 at 03:31:57PM +0100, David Chisnall wrote:
> A few of these are expected fails.

Okay. Are the expected failures documented somewhere? I somehow figure
that the unexpected fails are at least the *Boxing tests.

> Those that are not are the result of ABI mismatch (calling functions
> with the wrong calling convention).  You can fix this quite easily by
> adding the correct values for x86-64 to ABI.h in LanguageKit; the
> slight catch is that I have no idea what the correct values are, but
> hopefully you can work it out using the power of guesswork...

The x86_64 ABI documentation is available online [0]. But the
conventions for passing arguments are a bit beyond me. (There is an
algorithm to be followed in order to determine whether you need to pass
a structure on the stack, but it's to late tonight for me to grok that.)
At least I think I could successfully determine that you use 6 registers
for passing integers and 8 for passing floats. Also setting
SMALL_FLOAT_STRUCTS_ON_STACK and PASS_STRUCTS_AS_POINTER to 'true' (just
guessing) seems to improve things, but still fails for some boxing tests
(i.e. NS(Range|Rect)).
Anyways: Thanks for the pointer. I think I know where I need to be
heading...

Cheers,


Niels

[0] http://www.x86-64.org/documentation.html

_______________________________________________
Etoile-dev mailing list
Etoile-dev@...
https://mail.gna.org/listinfo/etoile-dev