// If the program doesn't define a main, try pulling one in from a .a file.
// This is needed for programs where the main function is defined in an
// archive, such f2c'd programs.
- Function *Main = M->getMainFunction();
- if (Main == 0 || Main->isExternal())
+ Function *Main = M->getFunction("main");
+ if (Main == 0 || Main->isDeclaration())
UndefinedSymbols.insert("main");
for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
if (I->hasName()) {
- if (I->isExternal())
+ if (I->isDeclaration())
UndefinedSymbols.insert(I->getName());
else if (!I->hasInternalLinkage()) {
assert(!I->hasDLLImportLinkage()
for (Module::global_iterator I = M->global_begin(), E = M->global_end();
I != E; ++I)
if (I->hasName()) {
- if (I->isExternal())
+ if (I->isDeclaration())
UndefinedSymbols.insert(I->getName());
else if (!I->hasInternalLinkage()) {
assert(!I->hasDLLImportLinkage()
/// TRUE - An error occurred.
/// FALSE - No errors.
bool
-Linker::LinkInArchive(const sys::Path &Filename) {
+Linker::LinkInArchive(const sys::Path &Filename, bool &is_native) {
// Make sure this is an archive file we're dealing with
if (!Filename.isArchive())
if (!arch)
return error("Cannot read archive '" + Filename.toString() +
"': " + ErrMsg);
+ if (!arch->isBytecodeArchive()) {
+ is_native = true;
+ return false;
+ }
+ is_native = false;
// Save a set of symbols that are not defined by the archive. Since we're
// entering a loop, there's no point searching for these multiple times. This
return error("Cannot link in module '" +
aModule->getModuleIdentifier() + "': " + moduleErrorMsg);
}
- } else {
- // (scottm) NOTE: For some reason, Modules.empty() isn't entirely
- // accurrate, least with gcc 4.1.2 on Debian and doesn't return true
- // when it ought. Consequently, aModule can be NULL -- ignore it for
- // the time being, since it seems relatively benign.
- }
+ }
}
// Get the undefined symbols from the aggregate module. This recomputes the