diff options
author | Kevin Enderby <enderby@apple.com> | 2016-12-16 22:54:02 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2016-12-16 22:54:02 +0000 |
commit | 59343a9429f67617e6a601767eda98dfc41e46bf (patch) | |
tree | a835619c7daf9fa49f700d6b2221bf517ac2ec44 /llvm/tools/llvm-nm/llvm-nm.cpp | |
parent | 46225b193fd956545be97a83cecb4a3b6d3d6f17 (diff) | |
download | bcm5719-llvm-59343a9429f67617e6a601767eda98dfc41e46bf.tar.gz bcm5719-llvm-59343a9429f67617e6a601767eda98dfc41e46bf.zip |
Fix a bugs with using some Mach-O command line flags like "-arch armv7m".
The Mach-O command line flag like "-arch armv7m" does not match the
arch name part of its llvm Triple which is "thumbv7m-apple-darwin”.
I think the best way to fix this is to have
llvm::object::MachOObjectFile::getArchTriple() optionally return the
name of the Mach-O arch flag that would be used with -arch that
matches the CPUType and CPUSubType. Then change
llvm::object::MachOUniversalBinary::ObjectForArch::getArchTypeName()
to use that and change it to getArchFlagName() as the type name is
really part of the Triple and the -arch flag name is a Mach-O thing
for a specific Triple with a specific Mcpu value.
rdar://29663637
llvm-svn: 290001
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 381bca4514e..aa89f89c31d 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -1148,7 +1148,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { for (MachOUniversalBinary::object_iterator I = UB->begin_objects(), E = UB->end_objects(); I != E; ++I) { - if (ArchFlags[i] == I->getArchTypeName()) { + if (ArchFlags[i] == I->getArchFlagName()) { ArchFound = true; Expected<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile(); @@ -1160,10 +1160,10 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { ObjectFile &Obj = *ObjOrErr.get(); if (ArchFlags.size() > 1) { if (PrintFileName) - ArchitectureName = I->getArchTypeName(); + ArchitectureName = I->getArchFlagName(); else outs() << "\n" << Obj.getFileName() << " (for architecture " - << I->getArchTypeName() << ")" + << I->getArchFlagName() << ")" << ":\n"; } dumpSymbolNamesFromObject(Obj, false, ArchiveName, @@ -1171,7 +1171,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { } else if (auto E = isNotObjectErrorInvalidFileType( ObjOrErr.takeError())) { error(std::move(E), Filename, ArchFlags.size() > 1 ? - StringRef(I->getArchTypeName()) : StringRef()); + StringRef(I->getArchFlagName()) : StringRef()); continue; } else if (Expected<std::unique_ptr<Archive>> AOrErr = I->getAsArchive()) { @@ -1184,7 +1184,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { if (auto E = isNotObjectErrorInvalidFileType( ChildOrErr.takeError())) { error(std::move(E), Filename, C, ArchFlags.size() > 1 ? - StringRef(I->getArchTypeName()) : StringRef()); + StringRef(I->getArchFlagName()) : StringRef()); } continue; } @@ -1193,12 +1193,12 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { if (PrintFileName) { ArchiveName = A->getFileName(); if (ArchFlags.size() > 1) - ArchitectureName = I->getArchTypeName(); + ArchitectureName = I->getArchFlagName(); } else { outs() << "\n" << A->getFileName(); outs() << "(" << O->getFileName() << ")"; if (ArchFlags.size() > 1) { - outs() << " (for architecture " << I->getArchTypeName() + outs() << " (for architecture " << I->getArchFlagName() << ")"; } outs() << ":\n"; @@ -1212,7 +1212,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { } else { consumeError(AOrErr.takeError()); error(Filename + " for architecture " + - StringRef(I->getArchTypeName()) + + StringRef(I->getArchFlagName()) + " is not a Mach-O file or an archive file", "Mach-O universal file"); } @@ -1233,7 +1233,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { for (MachOUniversalBinary::object_iterator I = UB->begin_objects(), E = UB->end_objects(); I != E; ++I) { - if (HostArchName == I->getArchTypeName()) { + if (HostArchName == I->getArchFlagName()) { Expected<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile(); std::string ArchiveName; ArchiveName.clear(); @@ -1273,7 +1273,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { } else { consumeError(AOrErr.takeError()); error(Filename + " for architecture " + - StringRef(I->getArchTypeName()) + + StringRef(I->getArchFlagName()) + " is not a Mach-O file or an archive file", "Mach-O universal file"); } @@ -1296,20 +1296,20 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { ObjectFile &Obj = *ObjOrErr.get(); if (PrintFileName) { if (isa<MachOObjectFile>(Obj) && moreThanOneArch) - ArchitectureName = I->getArchTypeName(); + ArchitectureName = I->getArchFlagName(); } else { if (moreThanOneArch) outs() << "\n"; outs() << Obj.getFileName(); if (isa<MachOObjectFile>(Obj) && moreThanOneArch) - outs() << " (for architecture " << I->getArchTypeName() << ")"; + outs() << " (for architecture " << I->getArchFlagName() << ")"; outs() << ":\n"; } dumpSymbolNamesFromObject(Obj, false, ArchiveName, ArchitectureName); } else if (auto E = isNotObjectErrorInvalidFileType( ObjOrErr.takeError())) { error(std::move(E), Filename, moreThanOneArch ? - StringRef(I->getArchTypeName()) : StringRef()); + StringRef(I->getArchFlagName()) : StringRef()); continue; } else if (Expected<std::unique_ptr<Archive>> AOrErr = I->getAsArchive()) { @@ -1329,13 +1329,13 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { if (PrintFileName) { ArchiveName = A->getFileName(); if (isa<MachOObjectFile>(O) && moreThanOneArch) - ArchitectureName = I->getArchTypeName(); + ArchitectureName = I->getArchFlagName(); } else { outs() << "\n" << A->getFileName(); if (isa<MachOObjectFile>(O)) { outs() << "(" << O->getFileName() << ")"; if (moreThanOneArch) - outs() << " (for architecture " << I->getArchTypeName() + outs() << " (for architecture " << I->getArchFlagName() << ")"; } else outs() << ":" << O->getFileName(); @@ -1349,7 +1349,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { } else { consumeError(AOrErr.takeError()); error(Filename + " for architecture " + - StringRef(I->getArchTypeName()) + + StringRef(I->getArchFlagName()) + " is not a Mach-O file or an archive file", "Mach-O universal file"); } |