Luke Evans
2009-Mar-16 20:51 UTC
[LLVMdev] Bit-code file input to ld (was: ...From module/bitcode to Mach-O dylib file directly)
> It is simpler. There is not any Mach-O envelope. The platform linker > can directly read Mach-O files as well as llvm bit-code file (using > llvm bit-code file reader). > > > Not sure if/where the exact form of the Mach-O file that carries bit > > code is documented.Thanks for that. Yes, I see what you mean (no Mach-O envelope), yet there seems to be something fundamentally different between a bit-code file I create from Apple's llvm-gcc-4.2, and one created from the LLVM APIs. Particularly: - ld won't consume the/a bit-code file that is directly generated by the LLVM APIs: "ld warning: in foo.bc, file is not of required architecture" - The bit-code file I have from LLVM differs from ones generated by Apple's llvm-gcc-4.2. The latter has a "DE C0 17 0B" magic introducer, and there seems to be another 16 bytes before the "BC Code" (42 43 C0 DE) magic appears. Whereas, the file generated from the LLVM APIs starts immediately with the "BC Code" magic number. There's a really good chance that this is just a case of 'user error'. At the very least it seems to me that I'm not doing something that's required to emit bit-code files in the format that they are consumable by ld. Alternatively, there is some kind of wrapper that the llvm-gcc-4.2 tool produces around the basic bit-code, though not as you've pointed out, a Mach-O format. FWIW, here are the first 24 bytes, up to and including what I recognise as the LLVM bit-code magic number: DE C0 17 0B 00 00 00 00 14 00 00 00 AC 01 00 00 07 00 00 00 42 43 C0 DE... The 'file' util identifies this as "Compiled PSI (v1) data", though that's probably not relevant/useful, as it just comes from the DE C0, which could be any number of things. Anyway, I guess my simple question is: What do I need to do to get home-brew bit-code output from the LLVM bit-code writer to conform to whatever requirements that ld has for input? -- lwe -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090316/8146a964/attachment.html>
Luke Evans
2009-Mar-17 05:18 UTC
[LLVMdev] Bit-code file input to ld (was: ...From module/bitcode to Mach-O dylib file directly)
On 16-Mar-09, at 9:50 PM, Luke Evans wrote:> ...which I did - though I had to ensure I had the target triple set > in the module just right: "x86_64-apple-darwin"D'oh. Spoke too soon (sort of). I have apparently managed to create a bit-code file that will happily be ingested by ld. The dylib that comes out has my symbol in it (according to nm). However, my call to dlsym, which used to work happily with my earlier pipeline (using default arch and llc-as-ld to get the dylib) now returns NULL. Is there anything special about symbol names generated by ld with x86_64 arch? -- lwe
Maybe Matching Threads
- [LLVMdev] Bit-code file input to ld (was: ...From module/bitcode to Mach-O dylib file directly)
- [LLVMdev] Bit-code file input to ld (was: ...From module/bitcode to Mach-O dylib file directly)
- [LLVMdev] n00b question: From module/bitcode to Mach-O dylib file directly?
- [LLVMdev] n00b question: From module/bitcode to Mach-O dylib file directly?
- [LLVMdev] n00b question: From module/bitcode to Mach-O dylib file directly?