[LLVMdev] Problems loading passes on Mac OS X

Michael McCracken mmccrack at cs.ucsd.edu
Sat Jun 19 17:08:01 PDT 2004


Unfortunately it's not that easy, although I'd love to fix it if I can 
figure out how.

OS X 10.3 does have dlfcn.h and dlopen() - for 10.3, they added the 
dlcompat library that uses the OS X NSLink* stuff to support dlopen and 
dlsym. configure seems to pick that up fine.

It seems like the code that's there already should work fine, so I'm 
not sure where else to look.
I'm not a C++ guru, so if there's C++ linking difficulties or something 
I'm not sure I'll be able to figure that out without help.

I used the following short code to test loading the .dylib, and dlopen 
works fine, but dlsym is less pretty - on OS X, it automatically 
prepends an underscore to the symbol, which means that if you are 
looking for main(), you ask for "main" and it looks for "_main", which 
is how the symbols are named in Mach-O.
This could be the source of a problem - how does GetAddressOfSymbol in 
DynamicLinker.cpp use dlsym?
Does it assume anything about the symbol names?

#include <dlfcn.h> // dlcompat
int main(int argc, const char **argv){
   void *obj = dlopen(argv[1], RTLD_NOW | RTLD_GLOBAL);
   void * sym = dlsym(obj,argv[2]);
   printf("done: obj was %x sym was %x %s\n", obj, sym , dlerror());
   return 0;
}

-mike


On Jun 19, 2004, at 2:07 PM, Chris Lattner wrote:

> On Sat, 19 Jun 2004, Michael McCracken wrote:
>
>> Hi, I can't get opt to list (in -help) passes that I load using -load.
>> I see in the list archives that a similar problem has been brought up
>> before but I didn't see whether it was resolved. Also, this is on Mac
>> OS X, and the previous question was about Linux.
>
> The problem is that this has not been implemented yet on Mac OSX.  If
> you're familiar with the OS/X interfaces for loading .so files, it 
> should
> be pretty easy.  Take a look at lib/Support/DynamicLinker.cpp.  I think
> that OS/X doesn't have windows.h :), and it also doesn't have dlopen.  
> If
> you can provide the necessary magic for your platform, it should just
> work.
>
> -Chris
>
>
>
>
>> This problem happens with the Hello pass, so I'll use that to
>> illustrate. I'm using LLVM 1.2.
>> The plugin loads with no complaints, so dlopen() is returning success,
>> and OS X's dlcompat probably isn't the problem.
>> However, it never gets registered. I've included a transcript below.
>>
>> I also included some info about the compiler versions, etc. - It's OS 
>> X
>> 10.3.4.
>> Note that on OS X, 'libtool' isn't gnu libtool - that's called
>> 'glibtool', if that matters.
>>
>> Does anyone have some hints on how to get this working? Thanks.
>>
>> transcript:
>>
>> % cd llvm/lib/Transforms/Hello/
>> % make
>> Compiling Hello.cpp
>> Linking hello dynamic debug library
>> ----------------------------------------------------------------------
>> Libraries have been installed in:
>>     /Users/mike/Documents/hpcl/LLVM/llvm/lib/Debug
>>
>> If you ever happen to want to link against installed libraries
>> in a given directory, LIBDIR, you must either use libtool, and
>> specify the full pathname of the library, or use the `-LLIBDIR'
>> flag during linking and do at least one of the following:
>>     - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
>>       during execution
>>
>> See any operating system documentation about shared libraries for
>> more information, such as the ld(1) and ld.so(8) manual pages.
>> ----------------------------------------------------------------------
>> ======= Finished building hello dynamic debug library =======
>> Linking hello.o
>>
>> % opt -load ../../Debug/libhello.dylib -hello
>> Unknown command line argument '-hello'.  Try: 'opt --help'
>>
>> % g++ -v
>> Reading specs from /usr/libexec/gcc/darwin/ppc/3.3/specs
>> Thread model: posix
>> gcc version 3.3 20030304 (Apple Computer, Inc. build 1495)
>>
>> % glibtool --version
>> ltmain.sh (GNU libtool) 1.5 (1.1220 2003/04/05 19:32:58)
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
> -Chris
>
> -- 
> http://llvm.cs.uiuc.edu/
> http://www.nondot.org/~sabre/Projects/
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list