+
+ if (object::Archive *a = dyn_cast<object::Archive>(arch.get())) {
+ if (ArchiveMap) {
+ outs() << "Archive map" << "\n";
+ for (object::Archive::symbol_iterator i = a->begin_symbols(),
+ e = a->end_symbols(); i != e; ++i) {
+ object::Archive::child_iterator c;
+ StringRef symname;
+ StringRef filename;
+ if (error(i->getMember(c)))
+ return;
+ if (error(i->getName(symname)))
+ return;
+ if (error(c->getName(filename)))
+ return;
+ outs() << symname << " in " << filename << "\n";
+ }
+ outs() << "\n";
+ }
+
+ for (object::Archive::child_iterator i = a->begin_children(),
+ e = a->end_children(); i != e; ++i) {
+ OwningPtr<Binary> child;
+ if (i->getAsBinary(child)) {
+ // Try opening it as a bitcode file.
+ OwningPtr<MemoryBuffer> buff;
+ if (error(i->getMemoryBuffer(buff)))
+ return;
+ Module *Result = 0;
+ if (buff)
+ Result = ParseBitcodeFile(buff.get(), Context, &ErrorMessage);
+
+ if (Result) {
+ DumpSymbolNamesFromModule(Result);
+ delete Result;
+ }
+ continue;
+ }
+ if (object::ObjectFile *o = dyn_cast<ObjectFile>(child.get())) {
+ outs() << o->getFileName() << ":\n";
+ DumpSymbolNamesFromObject(o);
+ }
+ }