--- binutils-2.17.50.0.3/bfd/opncls.c.orig 2006-07-15 20:23:49.000000000 +0200 +++ binutils-2.17.50.0.3/bfd/opncls.c 2006-09-02 19:50:45.155718000 +0200 @@ -1215,6 +1215,10 @@ return NULL; } + /* PLD: check the possible absolute debuginfo path (e.g. /tmp/.../usr/lib/debug/... */ + if (separate_debug_file_exists (basename, crc32)) + return basename; + dir = strdup (abfd->filename); if (dir == NULL) { @@ -1322,6 +1326,15 @@ return find_separate_debug_file (abfd, dir); } +static char const* +relaxed_filename (char const* filename) +{ + char const* relaxed = strstr (filename, "/usr/lib/debug/"); + if ( relaxed != NULL ) + return relaxed; + return filename; +} + /* FUNCTION bfd_create_gnu_debuglink_section @@ -1353,8 +1366,7 @@ return NULL; } - /* Strip off any path components in filename. */ - filename = lbasename (filename); + filename = relaxed_filename (filename); sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK); if (sect) @@ -1439,9 +1451,7 @@ crc32 = bfd_calc_gnu_debuglink_crc32 (crc32, buffer, count); fclose (handle); - /* Strip off any path components in filename, - now that we no longer need them. */ - filename = lbasename (filename); + filename = relaxed_filename (filename); debuglink_size = strlen (filename) + 1; debuglink_size += 3;