[LLVMdev] possible MachObjectWriter bug (powerpc-darwin8)

David Fang fang at csl.cornell.edu
Sun Mar 10 22:40:39 PDT 2013


Hi,
 	I've been slowly but steadily working towards enabling the 
Mach-O/PPC backend for MC, starting with the mach-o relocation entry 
translation.
patches/logs: http://www.csl.cornell.edu/~fang/sw/llvm/
git: http://github.com/fangism/llvm/tree/powerpc-darwin8
git: http://github.com/fangism/clang/tree/powerpc-darwin8

I've managed to get the simplest single-function-call hello-world program 
to produce a valid PIC object file, validated by comparison against 
/usr/bin/as.  However, as soon as my translation unit contains two 
function calls to extern symbols, the object file looks incorrect.

example program, reduced test case:
extern void foo(void);
extern void goo(void);
extern void bar(void);
void bar(void) { foo(); }
extern void baz(void);
void baz(void) { goo(); }
extern void ick(void);
void ick(void) { bar(); baz(); }

Please see details shown at
http://llvm.org/bugs/show_bug.cgi?id=14636
from comment 26 to 32+.

Basically, the index into the indirect table for the symbol stubs section 
looks suspect (IndirectSymBase).  I've shown some stack traces that show 
where the wrong(?) value came from, 
MachObjectWriter::BindIndirectSymbols(). Can any mach-o experts comment on 
this finding?  Is there some assumption about the order of symbols or 
sections seen by BindIndirectSymbols()?


Fang

-- 
David Fang
http://www.csl.cornell.edu/~fang/




More information about the llvm-dev mailing list