digitalmars.D.ldc - Dlang LLVM ERROR: Program used external function which could not be
- BARRE KEVIN (9/9) Jun 14 2017 https://stackoverflow.com/questions/44550353/dlang-llvm-error-program-us...
- David Nadlinger via digitalmars-d-ldc (17/22) Jun 14 2017 `_d_throw_exception` is a function in the D standard library (druntime,
- BARRE KEVIN (6/11) Jun 15 2017 I want try llvm tools :)
- David Nadlinger via digitalmars-d-ldc (19/23) Jun 15 2017 Using the LLVM tools is definitely possible – in fact, this is a large...
- Kagamin (9/9) Jun 15 2017 Try this:
- BARRE KEVIN (3/12) Jun 15 2017 lli -load /usr/lib/libphobos2.so foo.ll
- BARRE KEVIN (5/22) Jun 15 2017 lli -load /usr/lib/libdruntime-ldc-debug.so.72 -load
- BARRE KEVIN (2/6) Jun 15 2017 LLVM ERROR: Program used external function '__start___minfo'
- David Nadlinger via digitalmars-d-ldc (11/13) Jun 15 2017 lli's error message is slightly misleading; __start___minfo is not a
- BARRE KEVIN (6/21) Jun 15 2017 ldc2 -output-ll -betterC main.d
https://stackoverflow.com/questions/44550353/dlang-llvm-error-program-used-external-function-which-could-not-be-resolved I try to compile d code to llvm IR but when i compile or execute .ll i have error LLVM ERROR: Program used external function '_d_throw_exception' which could not be resolved! Why in c or c++ with clang -S -emit-llvm foo.c lli foo.ll It is work normaly.
Jun 14 2017
Hi Kevin, On 14 Jun 2017, at 17:48, BARRE KEVIN via digitalmars-d-ldc wrote:LLVM ERROR: Program used external function '_d_throw_exception' which could not be resolved! Why in c or c++ with clang -S -emit-llvm foo.c lli foo.ll`_d_throw_exception` is a function in the D standard library (druntime, to be precise). As such, even though the LLVM IR produced by LDC is well-formed (i.e. LDC is not at fault here), when lli tries to interpret the IR in question, it isn't able to find the address of the function ("could not be resolved"), because it doesn't know anything about druntime or how to load it. lli has the necessary provisions for C/C++, so it works there (I don't remember off the top of my head whether they hardcode the C runtime functions or simply use the symbols from the lli executable itself, which is of course written in C++). You could, for instance, work around this by compiling druntime into bitcode and linking that with your .ll files before trying to execute them. Why do you want to use lli in the first place, though? Best, David
Jun 14 2017
On Wednesday, 14 June 2017 at 17:05:00 UTC, David Nadlinger wrote:Hi Kevin, On 14 Jun 2017, at 17:48, BARRE KEVIN via digitalmars-d-ldc wrote:I want try llvm tools :) for example compile D source in llvm source (.bc, .ll) and compile later with llc or execute with lli. it is possible ?? Thanks[...][...]
Jun 15 2017
Hi Kevin, On 15 Jun 2017, at 16:17, BARRE KEVIN via digitalmars-d-ldc wrote:I want try llvm tools :) for example compile D source in llvm source (.bc, .ll) and compile later with llc or execute with lli. it is possible ??Using the LLVM tools is definitely possible – in fact, this is a large part of what makes LLVM development so much easier than for the DMD backend (and to some extent, also than GCC). Using llc should always work just fine. What LDC does to produce an executable is more or less equivalent to "llc -filetype=obj …", followed by a call to the system linker which you can see using "ldc2 -v". I also regularly use the opt tool to look at what individual optimizer passes do to a given piece of code, and bugpoint for debugging LLVM crashes/miscompilations. lli is a bit different to the usual compilation workflow in that it literally executes the IR inside an interpreter. Thus, all the code that relies on the program image (executable file)/globals/… as a concept won't work. This includes the central druntime mechanics for module registration and (probably) also garbage collection. Thus, lli might not be the easiest thing to get started with, although it can definitely be made to work if you work without druntime. Best, David
Jun 15 2017
Try this: --- import core.stdc.stdio; int main() { puts("Hello World !!!"); return 0; } ---
Jun 15 2017
On Wednesday, 14 June 2017 at 16:48:31 UTC, BARRE KEVIN wrote:https://stackoverflow.com/questions/44550353/dlang-llvm-error-program-used-external-function-which-could-not-be-resolved I try to compile d code to llvm IR but when i compile or execute .ll i have error LLVM ERROR: Program used external function '_d_throw_exception' which could not be resolved! Why in c or c++ with clang -S -emit-llvm foo.c lli foo.ll It is work normaly.lli -load /usr/lib/libphobos2.so foo.ll I forgot link the library
Jun 15 2017
On Thursday, 15 June 2017 at 13:30:21 UTC, BARRE KEVIN wrote:On Wednesday, 14 June 2017 at 16:48:31 UTC, BARRE KEVIN wrote:lli -load /usr/lib/libdruntime-ldc-debug.so.72 -load /usr/lib/libphobos2-ldc-debug.so.72 main.ll no work :( i forgot something ?https://stackoverflow.com/questions/44550353/dlang-llvm-error-program-used-external-function-which-could-not-be-resolved I try to compile d code to llvm IR but when i compile or execute .ll i have error LLVM ERROR: Program used external function '_d_throw_exception' which could not be resolved! Why in c or c++ with clang -S -emit-llvm foo.c lli foo.ll It is work normaly.lli -load /usr/lib/libphobos2.so foo.ll I forgot link the library
Jun 15 2017
lli -load /usr/lib/libdruntime-ldc-debug.so.72 -load /usr/lib/libphobos2-ldc-debug.so.72 main.ll no work :( i forgot something ?LLVM ERROR: Program used external function '__start___minfo' which could not be resolved!
Jun 15 2017
On 15 Jun 2017, at 15:50, BARRE KEVIN via digitalmars-d-ldc wrote:LLVM ERROR: Program used external function '__start___minfo' which could not be resolved!lli's error message is slightly misleading; __start___minfo is not a function, but a special symbol usually "created" by the linker while producing the main executable. It is used to register the D modules from your executable with druntime, so that static constructors, etc. can be invoked. You'd need to disable all the functionality requiring runtime support to make D code work within lli, for example using `-betterC` or `pragma(LDC_no_moduleinfo)`/…. Still not sure why you would want to use `lli` with LDC-compiled code in the first place, though. — David
Jun 15 2017
On Thursday, 15 June 2017 at 14:59:48 UTC, David Nadlinger wrote:On 15 Jun 2017, at 15:50, BARRE KEVIN via digitalmars-d-ldc wrote:ldc2 -output-ll -betterC main.d lli -load /usr/lib/libphobos2-ldc.so.72 main.ll output -> Hello World !!! Thanks David You are ninjaLLVM ERROR: Program used external function '__start___minfo' which could not be resolved!lli's error message is slightly misleading; __start___minfo is not a function, but a special symbol usually "created" by the linker while producing the main executable. It is used to register the D modules from your executable with druntime, so that static constructors, etc. can be invoked. You'd need to disable all the functionality requiring runtime support to make D code work within lli, for example using `-betterC` or `pragma(LDC_no_moduleinfo)`/…. Still not sure why you would want to use `lli` with LDC-compiled code in the first place, though. — David
Jun 15 2017