From 17eb9c07b0c8b23dddc9c8f58719d77a0e1e6763 Mon Sep 17 00:00:00 2001 From: chatham Date: Tue, 21 Aug 2007 21:29:12 +0000 Subject: [PATCH] Make relative references in linker scripts absolute and update a comment about relocate() being called. --- gold/script.cc | 15 ++++++++++++++- gold/target-reloc.h | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gold/script.cc b/gold/script.cc index f5584d9b01..44de551854 100644 --- a/gold/script.cc +++ b/gold/script.cc @@ -1141,7 +1141,20 @@ extern "C" void script_add_file(void* closurev, const char* name) { Parser_closure* closure = static_cast(closurev); - Input_file_argument file(name, false, closure->position_dependent_options()); + std::string absname; + if (name[0] == '/') + { + absname = name; + } + else + { + // Prepend `dirname closure->filename()` to make the path absolute. + char *slash = strrchr(closure->filename(), '/'); + absname.assign(closure->filename(), + slash ? slash - closure->filename() + 1 : 0); + absname += name; + } + Input_file_argument file(absname.c_str(), false, closure->position_dependent_options()); closure->inputs()->add_file(file); } diff --git a/gold/target-reloc.h b/gold/target-reloc.h index d282805dbe..1e9ecd03dc 100644 --- a/gold/target-reloc.h +++ b/gold/target-reloc.h @@ -91,7 +91,7 @@ scan_relocs( } // This function implements the generic part of relocation processing. -// This is an inline function which take a class whose operator() +// This is an inline function which take a class whose relocate() // implements the machine specific part of relocation. We do it this // way to avoid making a function call for each relocation, and to // avoid repeating the generic relocation handling code for each -- 2.11.0