[PATCH] D52050: WIP: [Driver] Fix architecture triplets and search paths for Linux x32

Harald van Dijk via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 30 13:08:10 PDT 2021


hvdijk added a comment.

I am testing the below, on top of c8e56f394af0b9e32c413d62a0e7aebbba3e6b70 <https://reviews.llvm.org/rGc8e56f394af0b9e32c413d62a0e7aebbba3e6b70>, both in a Debian chroot and in my non-Debian system. Initial testing in the Debian chroot suggests that this works for simple cases, clang has no problem finding /usr/lib/gcc/x86_64-linux-gnux32/10, and also picks up the right crt*.o files when using -m32 or -m64. Will do more extensive testing.

  --- a/clang/lib/Driver/ToolChains/Gnu.cpp
  +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
  @@ -2106,7 +2106,10 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
         "x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
         "x86_64-slackware-linux", "x86_64-unknown-linux",
         "x86_64-amazon-linux",    "x86_64-linux-android"};
  -  static const char *const X32LibDirs[] = {"/libx32"};
  +  static const char *const X32Triples[] = {
  +      "x86_64-linux-gnux32",    "x86_64-unknown-linux-gnux32",
  +      "x86_64-pc-linux-gnux32"};
  +  static const char *const X32LibDirs[] = {"/libx32", "/lib"};
     static const char *const X86LibDirs[] = {"/lib32", "/lib"};
     static const char *const X86Triples[] = {
         "i586-linux-gnu",     "i686-linux-gnu",
  @@ -2337,17 +2340,19 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
       TripleAliases.append(begin(AVRTriples), end(AVRTriples));
       break;
     case llvm::Triple::x86_64:
  -    LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
  -    TripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
  -    // x32 is always available when x86_64 is available, so adding it as
  -    // secondary arch with x86_64 triples
       if (TargetTriple.getEnvironment() == llvm::Triple::GNUX32) {
  -      BiarchLibDirs.append(begin(X32LibDirs), end(X32LibDirs));
  +      LibDirs.append(begin(X32LibDirs), end(X32LibDirs));
  +      TripleAliases.append(begin(X32Triples), end(X32Triples));
  +      BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
         BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
       } else {
  -      BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
  -      BiarchTripleAliases.append(begin(X86Triples), end(X86Triples));
  +      LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
  +      TripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
  +      BiarchLibDirs.append(begin(X32LibDirs), end(X32LibDirs));
  +      BiarchTripleAliases.append(begin(X32Triples), end(X32Triples));
       }
  +    BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs));
  +    BiarchTripleAliases.append(begin(X86Triples), end(X86Triples));
       break;
     case llvm::Triple::x86:
       LibDirs.append(begin(X86LibDirs), end(X86LibDirs));
  @@ -2357,6 +2362,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
         TripleAliases.append(begin(X86Triples), end(X86Triples));
         BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs));
         BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples));
  +      BiarchLibDirs.append(begin(X32LibDirs), end(X32LibDirs));
  +      BiarchTripleAliases.append(begin(X32Triples), end(X32Triples));
       }
       break;
     case llvm::Triple::m68k:


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D52050/new/

https://reviews.llvm.org/D52050



More information about the cfe-commits mailing list