[llvm-commits] [PATCH] Look up symbols in a specific library with DynamicLibrary

Jordy Rose jediknil at belkadan.com
Wed Aug 10 23:52:51 PDT 2011


On Aug 10, 2011, at 22:08, Jordy Rose wrote:

> My bad. I kept thinking of this only in Clang terms, where libraries are loaded once by -load way ahead of time. Which is silly. I guess I shouldn't be worrying about the future case where we start paying attention to refcounting libraries.
> 
> On the other hand, I'm slightly worried about what happens if we do an infinite number of dlopens without any dlcloses. I would then leave the RTTI but use your API (and make sure to hide the copy constructor). That should make it easy to eventually allow getTemporaryLibrary.
> 
>> DynamicLibrary dylib = DynamicLibrary::getPermanentLibrary("mylib.dylib");  // will be added to permanent libraries if it is not already
>> void *p = dylib.getAddressOfSymbol("mysymbol");
> 

Hm...I take it back. It's not possible to do this without using "new" (otherwise you need a copy constructor, which doesn't play well with ref-counted items). Wishing for C++11's move constructors now!

On the other hand, this looks bad:

  void *handle = dlopen(filename, [options]);
  if (OpenedHandles.contains(handle)) {
    dlclose(handle);
  }
  return DynamicLibrary(handle);

And so does never balancing the dlopen. So, new proposal is to make the constructor load the library permanently for now.

  DynamicLibrary dylib("mylib.dylib"); // will be added to permanent libraries if not already
  void *p = ...

What do you think? It seems like the least of all the evils to me.
Jordy





More information about the llvm-commits mailing list