mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 17:29:19 +00:00
If an archive is not recognized as an LLVM bytecode archive then declare
that it is native so that the linker will pass it on downstream. This avoids a problem where the native link line fails because there is both a .so and a .a file. The .a file gets processed as bytecode and then dropped from the command line. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36584 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0a1817392d
commit
c9a83e4f19
@ -229,7 +229,8 @@ class Linker {
|
|||||||
/// @returns true if an error occurs, otherwise false.
|
/// @returns true if an error occurs, otherwise false.
|
||||||
/// @brief Link in one archive.
|
/// @brief Link in one archive.
|
||||||
bool LinkInArchive(
|
bool LinkInArchive(
|
||||||
const sys::Path& Filename ///< Filename of the archive to link
|
const sys::Path& Filename, ///< Filename of the archive to link
|
||||||
|
bool& is_native ///< Indicates if archive is a native archive
|
||||||
);
|
);
|
||||||
|
|
||||||
/// This method links the \p Src module into the Linker's Composite module
|
/// This method links the \p Src module into the Linker's Composite module
|
||||||
|
@ -88,7 +88,7 @@ GetAllUndefinedSymbols(Module *M, std::set<std::string> &UndefinedSymbols) {
|
|||||||
/// TRUE - An error occurred.
|
/// TRUE - An error occurred.
|
||||||
/// FALSE - No errors.
|
/// FALSE - No errors.
|
||||||
bool
|
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
|
// Make sure this is an archive file we're dealing with
|
||||||
if (!Filename.isArchive())
|
if (!Filename.isArchive())
|
||||||
@ -118,6 +118,11 @@ Linker::LinkInArchive(const sys::Path &Filename) {
|
|||||||
if (!arch)
|
if (!arch)
|
||||||
return error("Cannot read archive '" + Filename.toString() +
|
return error("Cannot read archive '" + Filename.toString() +
|
||||||
"': " + ErrMsg);
|
"': " + 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
|
// 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
|
// entering a loop, there's no point searching for these multiple times. This
|
||||||
|
@ -90,7 +90,7 @@ bool Linker::LinkInLibrary(const std::string& Lib, bool& is_native) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case sys::Archive_FileType:
|
case sys::Archive_FileType:
|
||||||
if (LinkInArchive(Pathname))
|
if (LinkInArchive(Pathname, is_native))
|
||||||
return error("Cannot link archive '" + Pathname.toString() + "'");
|
return error("Cannot link archive '" + Pathname.toString() + "'");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ bool Linker::LinkInFile(const sys::Path &File, bool &is_native) {
|
|||||||
// A user may specify an ar archive without -l, perhaps because it
|
// A user may specify an ar archive without -l, perhaps because it
|
||||||
// is not installed as a library. Detect that and link the archive.
|
// is not installed as a library. Detect that and link the archive.
|
||||||
verbose("Linking archive file '" + File.toString() + "'");
|
verbose("Linking archive file '" + File.toString() + "'");
|
||||||
if (LinkInArchive(File))
|
if (LinkInArchive(File, is_native))
|
||||||
return error("Cannot link archive '" + File.toString() + "'");
|
return error("Cannot link archive '" + File.toString() + "'");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user