Fix the --hash-style option when the target is MIPS as it is

incompatible with the MIPS ABI.

Patch by Simon Atanasyan.

llvm-svn: 146243
This commit is contained in:
Chandler Carruth 2011-12-09 04:45:18 +00:00
parent 79ea1d8877
commit 0b84291222
1 changed files with 17 additions and 6 deletions

View File

@ -1882,6 +1882,16 @@ Linux::Linux(const HostInfo &Host, const llvm::Triple &Triple)
if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)
ExtraOpts.push_back("-X");
const bool IsMips = Arch == llvm::Triple::mips ||
Arch == llvm::Triple::mipsel ||
Arch == llvm::Triple::mips64 ||
Arch == llvm::Triple::mips64el;
// Do not use 'gnu' hash style for Mips targets because .gnu.hash
// and the MIPS ABI require .dynsym to be sorted in different ways.
// .gnu.hash needs symbols to be grouped by hash code whereas the MIPS
// ABI requires a mapping between the GOT and the symbol table.
if (!IsMips) {
if (IsRedhat(Distro) || IsOpenSuse(Distro) || Distro == UbuntuMaverick ||
Distro == UbuntuNatty || Distro == UbuntuOneiric)
ExtraOpts.push_back("--hash-style=gnu");
@ -1889,6 +1899,7 @@ Linux::Linux(const HostInfo &Host, const llvm::Triple &Triple)
if (IsDebian(Distro) || IsOpenSuse(Distro) || Distro == UbuntuLucid ||
Distro == UbuntuJaunty || Distro == UbuntuKarmic)
ExtraOpts.push_back("--hash-style=both");
}
if (IsRedhat(Distro))
ExtraOpts.push_back("--no-add-needed");