[LLVMdev] Possible change to ExecutionEngine::create()

Daniel Dunbar daniel at zuster.org
Thu Jul 23 17:49:58 PDT 2009


I probably shouldn't have weighed in on this thread, since I have
limited knowledge on the JIT.

If the current behavior is to enumerate all those modules, however,
adding a flag to the constructor doesn't seem so bad -- especially now
that we have the builder. I'll defer to Evan though.

 - Daniel

On Thu, Jul 23, 2009 at 2:10 PM, Rob Grapes<Rob.Grapes at ur.co.nz> wrote:
> Hi Daniel,
>
> In my case ExecutionEngine::create() loads 40 modules, then each time I try to resolve a symbol that I know is in a DLL that I supply, it looks through all 40 modules first.  This is on Windows, so I get the following modules loaded:
>
> ntdll.dll, kernel32.dll, USER32.dll, GDI32.dll, SHELL32.dll, ADVAPI32.dll, RPCRT4.dll,
> Secur32.dll, msvcrt.dll, SHLWAPI.dll, ole32.dll, OLEAUT32.dll, WS2_32.dll, WS2HELP.dll,
> PSAPI.DLL, VERSION.dll, MSACM32.dll, WINMM.dll, WININET.dll, Normaliz.dll, urlmon.dll,
> iertutil.dll, IPHLPAPI.DLL, IMM32.dll, HID.DLL, SETUPAPI.dll, OPENGL32.dll, GLU32.dll,
> DDRAW.dll, DCIMAN32.dll, dbghelp.dll, LPK.DLL, USP10.dll, comctl32.dll, comctl32.dll,
> rsaenh.dll, uxtheme.dll, MSCTF.dll, USERENV.dll, as well as the exe.
>
> It wouldn't be so bad if it looked through the modules in reverse order, so mine were searched
> first.
>
> So, as an alternative can the order be changed, or, can it be set up so that the user must explicitly enumerate and add modules.
>
> Rob.
>
> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Daniel Dunbar
> Sent: Thursday, 23 July 2009 6:35 p.m.
> To: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] Possible change to ExecutionEngine::create()
>
> Hi Rob,
>
> Can you comment on exactly what the problem is you want to solve? Is
> it a performance issue with LoadLibraryPermanently, or do you simply
> not want the external symbols to be resolved from within the JIT?
>
>  - Daniel
>
> On Wed, Jul 22, 2009 at 11:22 PM, Evan Cheng<evan.cheng at apple.com> wrote:
>>
>> On Jul 22, 2009, at 9:43 PM, Rob Grapes wrote:
>>
>>> Hi,
>>>
>>> Would it be possible to make the following slight change to
>>> ExecutionEngine::create()?
>>>
>>> I would like to be able to disable the automatic enumeration of
>>> loaded modules, and the subsequent searching for undefined symbols
>>> (using SearchForAddressOfSymbol).
>>>
>>> I propose adding an extra parameter to the function definition,
>>> defaulting to true.
>>
>> I'd rather not. The current API is messy enough already. Is there not
>> another way to solve the problem?
>>
>> Evan
>>
>>>
>>>  static ExecutionEngine *create(ModuleProvider *MP,
>>>                                 bool ForceInterpreter = false,
>>>                                 std::string *ErrorStr = 0,
>>>                                 bool Fast = false,
>>>                                 bool EnumModules = true);
>>>
>>> And corresponding change to the function.
>>>
>>> ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,
>>>                                         bool ForceInterpreter,
>>>                                         std::string *ErrorStr,
>>>                                         bool Fast,
>>>                                         bool EnumModules) {
>>>  ExecutionEngine *EE = 0;
>>>  if (EnumModules) {
>>>    // Make sure we can resolve symbols in the program as well. The
>>> zero arg
>>>    // to the function tells DynamicLibrary to load the program, not
>>> a library.
>>>    if (sys::DynamicLibrary::LoadLibraryPermanently(0, ErrorStr))
>>>      return 0;
>>>  }
>>>  ...
>>>
>>> Your help would be appreciated.
>>>
>>> Rob.
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list