Hi David

Okay, really, really stupid me didn't realise that replacing 
sel_get_any_typed_uid() with sel_getUid() would not be a good idea to get rid 
of the "method deprecated" warnings. Changing it back and suppressing the 
deprecated-declarations warnings solved the problem: most unit tests except 
some interpreted ones pass for me now.

How can I fix this bit of code (TypesForMethodName() in LKModule.m) so that it 
works with the new runtime and doesn't use a deprecated function?

Thanks
Chris

On 15/12/2010, at 21:50 PM, Christopher Armstrong wrote:

> Hi David
> 
> I upgraded llvm/clang to the latest version. I also had to patch LanguageKit 
> with the following diff to get it to compile:
> ch...@debian:~/etoile/Etoile/Languages$ svn diff
> Index: LanguageKit/LKModule.m
> ===================================================================
> --- LanguageKit/LKModule.m      (revision 6652)
> +++ LanguageKit/LKModule.m      (working copy)
> @@ -18,7 +18,7 @@
> #if defined(GNU_RUNTIME)
> static const char *TypesForMethodName(NSString *methodName)
> {
> -       return sel_getType_np(sel_get_any_typed_uid([methodName UTF8String]));
> +       return sel_getType_np(sel_getUid([methodName UTF8String]));
> }
> #else
> static const char *TypesForMethodName(NSString *methodName)
> Index: LanguageKit/CodeGen/CodeGenModule.cpp
> ===================================================================
> --- LanguageKit/CodeGen/CodeGenModule.cpp       (revision 6652)
> +++ LanguageKit/CodeGen/CodeGenModule.cpp       (working copy)
> @@ -16,6 +16,8 @@
> #include "llvm/Analysis/Verifier.h"
> #include <llvm/Support/IRBuilder.h>
> #include <llvm/Support/MemoryBuffer.h>
> +#include <llvm/Support/system_error.h>
> +#include <llvm/System/system_error.h>
> #include <llvm/Target/TargetData.h>
> 
> #include <string>
> @@ -82,8 +84,9 @@
>        // inline them.
>        if (NULL == SmallIntMessages)
>        {
> +               llvm::error_code ec;
>                SmallIntMessages = ParseBitcodeFile(
> -                               
> MemoryBuffer::getFile(MsgSendSmallIntFilename), 
> +                               
> MemoryBuffer::getFile(MsgSendSmallIntFilename, ec), 
>                                Context);
>        }
> 
> @@ -413,9 +416,10 @@
> void CodeGenModule::compile(void)
> {
>        EndModule();
> +       error_code ec;
>        llvm::Linker::LinkModules(TheModule, 
>                ParseBitcodeFile(
> -                               
> MemoryBuffer::getFile(MsgSendSmallIntFilename), 
> +                               
> MemoryBuffer::getFile(MsgSendSmallIntFilename, ec), 
>                                Context), 0);
>        DUMP(TheModule);
>        LOG("\n\n\n Optimises to:\n\n\n");
> 
> 
> The output of valgrind is:
> ch...@debian:~/etoile/Etoile/Languages/Smalltalk/Tests/TestKVC$ valgrind edlc 
> -f test.st
> ==22403== Memcheck, a memory error detector.
> ==22403== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
> ==22403== Using LibVEX rev 1854, a library for dynamic binary translation.
> ==22403== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
> ==22403== Using valgrind-3.3.1-Debian, a dynamic binary instrumentation 
> framework.
> ==22403== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
> ==22403== For more details, rerun with: -v
> ==22403== 
> vex x86->IR: unhandled instruction bytes: 0x66 0x66 0x66 0x66
> ==22403== valgrind: Unrecognised instruction at address 0x70A51E3.
> ==22403== Your program just tried to execute an instruction that Valgrind
> ==22403== did not recognise.  There are two possible reasons for this.
> ==22403== 1. Your program has a bug and erroneously jumped to a non-code
> ==22403==    location.  If you are running Memcheck and you just saw a
> ==22403==    warning about a bad jump, it's probably your program's fault.
> ==22403== 2. The instruction is legitimate but Valgrind doesn't handle it,
> ==22403==    i.e. it's Valgrind's fault.  If you think this is the case or
> ==22403==    you are not sure, please let us know and we'll try to fix it.
> ==22403== Either way, Valgrind will now raise a SIGILL signal which will
> ==22403== probably kill your program.
> ==22403== 
> ==22403== Process terminating with default action of signal 4 (SIGILL)
> ==22403==  Illegal opcode at address 0x70A51E3
> ==22403==    at 0x70A51E3: CodeGenModule::LLVMFunctionTypeFromString(char 
> const*, bool&, llvm::Type const*&) (in 
> /usr/local/GNUstep/Local/Library/Frameworks/LanguageKitCodeGen.framework/Versions/0/libLanguageKitCodeGen.so.0.6)
> ==22403==    by 0x6CCF843: ???
> ==22403== 
> ==22403== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 310 from 2)
> ==22403== malloc/free: in use at exit: 6,682,010 bytes in 110,027 blocks.
> ==22403== malloc/free: 137,042 allocs, 27,015 frees, 11,820,498 bytes 
> allocated.
> ==22403== For counts of detected errors, rerun with: -v
> ==22403== searching for pointers to 110,027 not-freed blocks.
> ==22403== checked 17,325,184 bytes.
> ==22403== 
> ==22403== LEAK SUMMARY:
> ==22403==    definitely lost: 204,221 bytes in 1,056 blocks.
> ==22403==      possibly lost: 1,365,021 bytes in 48,002 blocks.
> ==22403==    still reachable: 5,112,768 bytes in 60,969 blocks.
> ==22403==         suppressed: 0 bytes in 0 blocks.
> ==22403== Rerun with --leak-check=full to see details of leaked memory.
> 
> I'm not sure if any of this helps:
> 
> Cheers
> Chris
> 
> On 15/12/2010, at 09:05 AM, Christopher Armstrong wrote:
> 
>> Hi David
>> 
>> Sorry, I should be more diligent in chasing this up. I'll try with
>> valgrind tonight. I've never used it before. Is there a particular
>> configuration or set of options that you know will detect the issue
>> quickly?
>> 
>> Thanks
>> Chris
>> 
>> On Tue, 14 Dec 2010 21:18 +0000, "David Chisnall" <[email protected]>
>> wrote:
>>> Looking more carefully, this is a bit weird...
>>> 
>>> The pthread_getspecific call seems to be failing, which makes it seem
>>> that the call that created the corresponding key has not been called (can
>>> you check that?).  Even that shouldn't be causing a crash here.  This
>>> doesn't look like it's anywhere near any LanguageKit code, so my guess is
>>> some memory corruption elsewhere (possibly due to LanguageKit).  
>>> 
>>> Can you try running it in valgrind and seeing if you can find some
>>> invalid writes?
>>> 
>>> David
>>> 
>>> On 11 Dec 2010, at 05:37, Christopher Armstrong wrote:
>>> 
>>>> #0  0xb6f40ed0 in pthread_getspecific () from 
>>>> /lib/i686/cmov/libpthread.so.0
>>>> #1  0xb78c3034 in GSCurrentThread () at NSThread.m:344
>>>> #2  0xb77ad63d in +[NSAutoreleasePool addObject:] (self=0xb7a50500, 
>>>> _cmd=0xb7a7cf48, anObj=0x8ec31e8) at NSAutoreleasePool.m:232
>>>> #3  0xb7855ba7 in -[NSObject autorelease] (self=0x8ec31e8, 
>>>> _cmd=0xb5854660) at NSObject.m:1601
>>>> #4  0xb58547f7 in ?? ()
>>>> #5  0x08ec31e8 in ?? ()
>>>> #6  0xb5854660 in ?? ()
>>>> #7  0xb77ad624 in +[NSAutoreleasePool currentPool] (self=0x8ec31e8, 
>>>> _cmd=0xb5854678) at NSAutoreleasePool.m:228
>>> 
>>> --
>>> This email complies with ISO 3103
>>> 
>>> 
>>> _______________________________________________
>>> Etoile-discuss mailing list
>>> [email protected]
>>> https://mail.gna.org/listinfo/etoile-discuss
>>> 
>> -- 
>> Christopher Armstrong
>> carmstrong ^^AT^ fastmail dOT com /Dot/ au
>> 
>> 
>> _______________________________________________
>> Etoile-discuss mailing list
>> [email protected]
>> https://mail.gna.org/listinfo/etoile-discuss
> 
> --------
> Christopher Armstrong
> [email protected]
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Etoile-discuss mailing list
> [email protected]
> https://mail.gna.org/listinfo/etoile-discuss

--------
Christopher Armstrong
[email protected]






_______________________________________________
Etoile-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-discuss

Répondre à