Results 1 to 11 of 11

Thread: AV op LLVMPrintModuleToFile

  1. #1
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046

    AV op LLVMPrintModuleToFile

    Heeft iemand wat ervaring met LLVM? Meer bepaald de C API (niet de C++ API...)
    Nadat ik na wat zoeken een LLVM-3.9.dll heb kunnen laten maken, probeer ik daar wat uit te krijgen...
    Delphi Code:
    1. var
    2.   m:TLLVMModule;
    3.   x:PAnsiChar;
    4.   ft:TLLVMType;
    5.   pt:TLLVMType;
    6.   f:TLLVMValue;
    7.   b1:TLLVMBuilder;
    8.   bb:TLLVMBasicBlock;
    9. begin
    10.   m:=LLVMModuleCreateWithName('test');
    11.   pt:=LLVMInt32Type;
    12.   ft:=LLVMFunctionType(LLVMInt32Type,pt,1,false);
    13.   f:=LLVMAddFunction(m,'testFunction',ft);
    14.   bb:=LLVMAppendBasicBlock(f,'X1');
    15.   b1:=LLVMCreateBuilder;
    16.   LLVMPositionBuilderAtEnd(b1,bb);
    17.   LLVMBuildRet(b1,LLVMConstInt(LLVMInt32Type,222,false));
    18.   LLVMPrintModuleToFile(m,'test.bc',x);
    19.   Writeln(x);
    20.   LLVMDisposeMessage(x);
    21.   LLVMShutdown;
    22. end;

    tot voor LLVMPrintModuleToFile gaat het goed, maar die geeft me een access violation. Als ik deze goed gelezen heb, zou ik toch een geldige module moeten hebben. Ook LLVMVerifyModule geeft me geen fout. Ik heb al een paar keer de declaratie nagekeken (ik moet straks mijn volledige LLVM.pas ergens op github zetten). Dus ik vrees dat ik LLVM-3.9.dll dan maar eens in de Visual Studio debugger ga moeten openen (eurgh)... Tenzij jullie zo een fout spotten?

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Ik kan LLVMPrintModuleToFile daar niet vinden.

    Maar zonder enige LLVM kennis lijkt het mij dat je print naar x.

    Moet je

    1) een pointer naar x meegeven? (is LLVMPRINT* met een VAR of als pointer gedefinieerd?)
    2) of moet je die met een andere LLVM methode initializeren?

  3. #3
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Nee, LLVMPrintModuleToFile ziet er zo uit:
    Delphi Code:
    1. function LLVMPrintModuleToFile(M:TLLVMModule;Filename:PAnsiChar;var ErrorMessage:PAnsiChar):TLLVMBool;cdecl;
    en die moet je dan achteraf dan vrijgeven met LLVMDisposeMessage blijkbaar

  4. #4
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Gevonden! Ik dacht dat 'const' in deze wel het nodige intern met pointers zou doen:
    Delphi Code:
    1. function LLVMFunctionType(ReturnType:TLLVMType;const ParamTypes:TLLVMType;ParamCount:cardinal;IsVarArg:TLLVMBool):TLLVMType;cdecl;
    maar blijkbaar is het toch beter:
    Delphi Code:
    1. function LLVMFunctionType(ReturnType:TLLVMType;ParamTypes:PLLVMType;ParamCount:cardinal;IsVarArg:TLLVMBool):TLLVMType;cdecl;

  5. #5
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    of const ook "ref" ([ref] const op delphi of constref op FPC) impliceert hangt van het target en de grootte van het type af. Op x86 is dat meestal zo, op andere targets, x86_64 incluis, niet.

    Is het een 64-bit DLL, anders is het toch vreemd. Hmm, staat me ook vaag iets bij dat er ooit heibel bij FPC was om "const" in cdecl declaraties "C" const te laten dekken. (origineel voor Kylix headers iirc)

    Calling convention kan dus ook nog wat uitmaken.

  6. #6
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    hmm, ik had die 'opaque' TLLVM* types als "type TLLVMType=type pointer;" gezet, wat misschien ook die const in de war stuurt. Om dat tegen te gaan heb ik nu "type TLLVMType=type record _opaqueointer; end;" en dat werkt al iets beter. (met die extra 'type' na '=' hoop ik dat de verschillende TLLVM* onderling ongelijk zouden zijn, maar heb dat nog niet specifiek getest)

  7. #7
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Die extra type werkt maar amper in Borland derivaten (FPC incluis). Helaas IMHO.

  8. #8
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Tiens, hier kan ik "stack.nl" niet resolven...

  9. #9
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Geef je DNS een schop :-)

    Is gehost op een uni, kan soms zijn dat ze machines verplaatsen.

  10. #10
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Geen A-record:
    Code:
    C:\>nslookup -type=any stack.nl
    Server:  google-public-dns-a.google.com
    Address:  8.8.8.8
    
    Non-authoritative answer:
    stack.nl
            primary name server = zen.stack.nl
            responsible mail addr = hostmaster.stack.nl
            serial  = 2017010500
            refresh = 14400 (4 hours)
            retry   = 7200 (2 hours)
            expire  = 1209600 (14 days)
            default TTL = 900 (15 mins)
    stack.nl        nameserver = ns.gletsjer.org
    stack.nl        nameserver = tao.stack.nl
    stack.nl        nameserver = zen.stack.nl
    stack.nl        name = 5.8.0.1.1.0.1.6.0.1.0.0.2.ip6.arpa
    stack.nl        name = 0.141.155.131.in-addr.arpa
    stack.nl        name = 0.140.155.131.in-addr.arpa
    stack.nl        MX preference = 10, mail exchanger = mx1.stack.nl
    stack.nl        MX preference = 10, mail exchanger = mx0.stack.nl
    stack.nl        text =
    
            "STACK is the computer association of the Eindhoven University of Technology."
    stack.nl        text =
    
            "STACK's phone number: ++31-40-2473402"
    stack.nl        text =
    
            "STACK's address: MCGV STACK, SC 0.70, PO BOX 513, 5600 MB Eindhoven, The Netherlands"
    stack.nl        text =
    
            "v=spf1 redirect=spf.stack.nl"
    stack.nl        ??? unknown type 29 ???
    
    C:\>

  11. #11
    www.stack.nl resolved wel, naar toad.stack.nl (131.155.140.135). AAAA record is er ook gewoon.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •