mirror of
https://github.com/intel/llvm.git
synced 2026-01-22 15:41:35 +08:00
[lld-macho] Implement -dependency_info (partially - more opcodes needed)
Bug: https://bugs.llvm.org/show_bug.cgi?id=49278 The flag is not well documented, so this implementation is based on observed behaviour. When specified, `-dependency_info <path>` produced a text file containing information pertaining to the current linkage, such as input files, output file, linker version, etc. This file's layout is also not documented, but it seems to be a series of null ('\0') terminated strings in the form `<op code><path>` `<op code>` could be: `0x00` : linker version `0x10` : input `0x11` : files not found(??) `0x40` : output `<path>` : is the file path, except for the linker-version case. (??) This part is a bit unclear. I think it means all the files the linker attempted to look at, but could not find. Differential Revision: https://reviews.llvm.org/D98559
This commit is contained in:
@@ -54,7 +54,8 @@ using namespace llvm::sys;
|
||||
using namespace lld;
|
||||
using namespace lld::macho;
|
||||
|
||||
Configuration *lld::macho::config;
|
||||
Configuration *macho::config;
|
||||
DependencyTracker *macho::depTracker;
|
||||
|
||||
static HeaderFileType getOutputType(const InputArgList &args) {
|
||||
// TODO: -r, -dylinker, -preload...
|
||||
@@ -84,6 +85,8 @@ findAlongPathsWithExtensions(StringRef name, ArrayRef<StringRef> extensions) {
|
||||
Twine location = base + ext;
|
||||
if (fs::exists(location))
|
||||
return location.str();
|
||||
else
|
||||
depTracker->logFileNotFound(location);
|
||||
}
|
||||
}
|
||||
return {};
|
||||
@@ -815,6 +818,9 @@ bool macho::link(ArrayRef<const char *> argsArr, bool canExitEarly,
|
||||
symtab = make<SymbolTable>();
|
||||
target = createTargetInfo(args);
|
||||
|
||||
depTracker =
|
||||
make<DependencyTracker>(args.getLastArgValue(OPT_dependency_info, ""));
|
||||
|
||||
config->entry = symtab->addUndefined(args.getLastArgValue(OPT_e, "_main"),
|
||||
/*file=*/nullptr,
|
||||
/*isWeakRef=*/false);
|
||||
@@ -1066,6 +1072,8 @@ bool macho::link(ArrayRef<const char *> argsArr, bool canExitEarly,
|
||||
|
||||
// Write to an output file.
|
||||
writeResult();
|
||||
|
||||
depTracker->write(getLLDVersion(), inputFiles, config->outputFile);
|
||||
}
|
||||
|
||||
if (config->timeTraceEnabled) {
|
||||
|
||||
Reference in New Issue
Block a user