[LLVMdev] memcpy and bootstrapping

james woodyatt jhw at conjury.org
Mon May 12 21:21:19 PDT 2008


everyone--

I don't know whether this is a bug or not.

I'm trying to bootstrap an embedded application and using LLVM tools  
to generate the assembly code, which I then assemble and link with  
traditional tools.  The bootstrap loader, of course, runs in a very  
limited environment, and I have to roll my own memcpy() function for  
it, i.e. there is no kernel, nothing at all, this stuff runs because  
the hard reset vectors into it.

Sadly, memcpy() doesn't get linked into my binary.  Why?  Because I  
wrote it in C, and I'm using the LLVM tools to link everything  
together before piping it all into llc and generating one big assembly  
file for the bootstrap loader.  All the bitcode files that expect to  
be able to call memcpy() have LLVM.memcpy intrinsics in them instead  
of function calls, and LLVM-LD refuses to link the bitcode file with  
my hand-rolled function in it because it doesn't actually see any  
references.  The result: an object file with an undefined reference to  
memcpy().

It seems to me like I shouldn't be surprised that LLVM-LD doesn't look  
for my hand-rolled memcpy().  I'm using -link-as-library with - 
internalize-public-api-list=_start.  I suppose I'll end up ripping off  
bcopy.s for ARM from the obvious place, and assembling that for use in  
the final link.  That should solve my problem.

I mention it here because it was a little surprising when my memcpy()  
didn't show up where I expected.


—
j h woodyatt <jhw at conjury.org>
http://jhw.vox.com/





More information about the llvm-dev mailing list