Make relative references in linker scripts absolute and update a
authorchatham <chatham@sourceware.org>
Tue, 21 Aug 2007 21:29:12 +0000 (21:29 +0000)
committerchatham <chatham@sourceware.org>
Tue, 21 Aug 2007 21:29:12 +0000 (21:29 +0000)
comment about relocate() being called.

gold/script.cc
gold/target-reloc.h

index f5584d9b01eae9643e2dd4339cab2ba91fbefb9d..44de5518545e02b32e0ffb1dbaa16f4935f4da47 100644 (file)
@@ -1141,7 +1141,20 @@ extern "C" void
 script_add_file(void* closurev, const char* name)
 {
   Parser_closure* closure = static_cast<Parser_closure*>(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);
 }
 
index d282805dbebba9349389296216fac64e69f5139a..1e9ecd03dcff062292f9be981cbae53a6b9ec530 100644 (file)
@@ -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