Peter Lawrence
2011-Jul-06 01:26 UTC
[LLVMdev] clang-llvm exceptions problem powerpc-apple-darwin
I am getting assembler errors on clang-llvm-2.9 output for a program with exceptions that I do not get when using the installed g++ Mac OS-X 10.4 powerpc-apple-darwin > as -version Apple Computer, Inc. version cctools-590.23.2.obj~17, GNU assembler version 1.38 the folks at gnu-binutils assure me this is an assembler bug, but also that this isn't a recognizable "gnu" version number for gas. 1) ---------- this has to be a well know problem with the apple powerpc assembler, is there an upgrade ? or is there a version of gnu-binutils that is consistent with Apple/MachO/OSX-10.4 that I can build myself ? 2) ---------- I still have not been able to figure out in detail how g++ avoids hitting this assembler bug. I am able to modifying by hand the clang-llvm output to work around the problem, doing this transformation Ltmp123 = Label1 - Label2 .long Ltmp123 gets turned into this .long Label1 - Label2 unfortunately always doing one or always doing the other causes either assembler errors or linker errors. the transformation has to be applied very selectively... 3) ---------- so far I am unsuccessful in modifying llvm to work around the problem, I have tried all the variations below, and always end up with either assembler or linker errors void AsmPrinter::EmitReference(const MCSymbol *Sym, unsigned Encoding) const { const TargetLoweringObjectFile &TLOF = getObjFileLowering(); const MCExpr *Exp TLOF.getExprForDwarfReference(Sym, Mang, MMI, Encoding, OutStreamer); const MCSectionMachO * SecCur = dyn_cast<MCSectionMachO> (getCurrentSection()); const MCSectionMachO * SecRef = dyn_cast<MCSectionMachO>(&Sym- >getSection()); #if 0 OutStreamer.EmitAbsValue(Exp, GetSizeOfEncodedValue(Encoding)); #elif 0 if (SecRef->getType() == MCSectionMachO::S_COALESCED) OutStreamer.EmitValue(Exp, GetSizeOfEncodedValue(Encoding)); else OutStreamer.EmitAbsValue(Exp, GetSizeOfEncodedValue(Encoding)); #else if (SecCur->getType() == MCSectionMachO::S_COALESCED || SecRef->getType() == MCSectionMachO::S_COALESCED) OutStreamer.EmitValue(Exp, GetSizeOfEncodedValue(Encoding)); else OutStreamer.EmitAbsValue(Exp, GetSizeOfEncodedValue(Encoding)); #endif } if anyone has any insight into g++'s selective use of ".set A-B" verses ".long A-B" I would appreciate hearing about it ? thanks, Peter Lawrence.
Eric Christopher
2011-Jul-06 01:32 UTC
[LLVMdev] clang-llvm exceptions problem powerpc-apple-darwin
On Jul 5, 2011, at 6:26 PM, Peter Lawrence wrote:> I am getting assembler errors on clang-llvm-2.9 output for a program > with > exceptions that I do not get when using the installed g++ > > Mac OS-X 10.4 powerpc-apple-darwin >There's zero work going into powerpc darwin these days. You may wish to try a newer version (out of top of tree clang/llvm), but there are no guarantees that it'll change the outcome.>> as -version > Apple Computer, Inc. version cctools-590.23.2.obj~17, GNU assembler > version 1.38 > > the folks at gnu-binutils assure me this is an assembler bug, but > also that this isn't > a recognizable "gnu" version number for gas.It isn't. It's a version of the apple tools. Your best bet is to install the last version of xcode shipped for powerpc 10.4 systems. -eric