[PATCH] Call powerpc-darwin external tools with -arch ppc

Stephen Drake steve at synergyconsultingnz.com
Fri Jul 25 01:32:36 PDT 2014


Hi Rafael,

Thanks for having a look at this.  I've updated my patch to add some tests to Driver/darwin-arch-default.c, which I hope is an appropriate place for them.

After posting the initial patch, I had a go at resolving the FIXME code instead of just copy-pasting it.  I'm also attaching the resulting alternative patch that uses getDefaultUniversalArchName() instead of getArchName() as the starting point for MachO::getMachOArchName().  Having checked the history, I don't think that I'm subverting the intent of either function, but since I'm both an LLVM and C++ noob, it could use some fairly strenuous scrutiny.  In particular, I changed the return type of getDefaultUniversalArchName() from std::string to StringRef, and I'm not sure if that's allowed.

Cheers,
Steve

Original patch updated to add tests:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: macho-arch-trivial.patch
Type: application/octet-stream
Size: 2727 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140725/bd735d0e/attachment.obj>
-------------- next part --------------


More comprehensive alternative patch:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: macho-arch-broad.patch
Type: application/octet-stream
Size: 4610 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140725/bd735d0e/attachment-0001.obj>
-------------- next part --------------



On 23/07/2014, at 7:40 AM, Rafael EspĂ­ndola <rafael.espindola at gmail.com> wrote:

> can you add a testcase to the patch?
> 
> On 16 July 2014 04:29, Stephen Drake <steve at synergyconsultingnz.com> wrote:
>> Hi,
>> 
>> I'm attaching a patch to call external tools for powerpc-darwin with "-arch ppc" instead of "-arch powerpc", so as to be compatible with the cctools assembler and ld64 linker.
>> 
>> This bug report describing the case has been closed, but I see the same behaviour now:
>> http://llvm.org/bugs/show_bug.cgi?id=3830
>> 
>> The bug report also contains a patch, which along with similar code further up at lib/Driver/Tools.cpp:4721, forms the basis for this patch.  The existing code is marked "FIXME", which I have carried over - if someone can explain the problem and/or suggest a better way to implement this I'll be happy to give it a shot.  Perhaps ToolChain::getDefaultUniversalArchName() is the correct way to find the arch name here?
>> 
>> Cheers,
>> Steve
>> 
>> 
>> Index: lib/Driver/Tools.cpp
>> ===================================================================
>> --- lib/Driver/Tools.cpp        (revision 213105)
>> +++ lib/Driver/Tools.cpp        (working copy)
>> @@ -5313,12 +5313,22 @@
>> 
>> void darwin::MachOTool::AddMachOArch(const ArgList &Args,
>>                                      ArgStringList &CmdArgs) const {
>> +  llvm::Triple::ArchType Arch = getToolChain().getArch();
>>   StringRef ArchName = getMachOToolChain().getMachOArchName(Args);
>> 
>>   // Derived from darwin_arch spec.
>>   CmdArgs.push_back("-arch");
>> -  CmdArgs.push_back(Args.MakeArgString(ArchName));
>> 
>> +  // FIXME: Remove these special cases.
>> +  if (Arch == llvm::Triple::ppc)
>> +    CmdArgs.push_back("ppc");
>> +  else if (Arch == llvm::Triple::ppc64)
>> +    CmdArgs.push_back("ppc64");
>> +  else if (Arch == llvm::Triple::ppc64le)
>> +    CmdArgs.push_back("ppc64le");
>> +  else
>> +    CmdArgs.push_back(Args.MakeArgString(ArchName));
>> +
>>   // FIXME: Is this needed anymore?
>>   if (ArchName == "arm")
>>     CmdArgs.push_back("-force_cpusubtype_ALL");
>> 
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>> 



More information about the cfe-commits mailing list