[LLVMdev] Problems loading passes on Mac OS X

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


OK, seems like I've got some more looking to do.
 From what I can find, the only difference with OS X and dynamic  
libraries is that you can't depend on the order of calling static  
constructors, but not that you can't depend on them getting called. :)

If I find that library handling in LLVM needs changes to work with OS  
X, I'll send a patch.

Thanks,
-mike

On Jun 19, 2004, at 3:25 PM, Chris Lattner wrote:

> On Sat, 19 Jun 2004, Michael McCracken wrote:
>> 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?
>
> I believe that GetAddressOfSymbol is only used by the JIT.  The -load
> mechanism just dlopens a shared object.  Shared objects for plugins  
> have
> static constructors (".init" section) that are supposed to autoregister
> the pass when the plugin is loaded.
>
> I don't know anything about how dynamic object loading works on OS/X
> (obviously), but it sounds like it's not running the static  
> constructor.
>
>> Does it assume anything about the symbol names?
>
> I don't know what it will take to get the JIT working on OS/X: it might
> have to autoprepend an _.  Since we don't (yet) have a PPC JIT, this  
> isn't
> an issue though.
>
> -Chris
>
>
>
>> 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
>>>
>>
>> _______________________________________________
>> 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