@@ -865,12 +865,12 @@ elf_readlink (struct backtrace_state *state, const char *filename,
865
865
when the build ID is known is in /usr/lib/debug/.build-id. */
866
866
867
867
static int
868
- elf_open_debugfile_by_buildid (struct backtrace_state * state ,
868
+ elf_open_debugfile_by_buildid (const char * const prefix ,
869
+ struct backtrace_state * state ,
869
870
const char * buildid_data , size_t buildid_size ,
870
871
backtrace_error_callback error_callback ,
871
872
void * data )
872
873
{
873
- const char * const prefix = SYSTEM_DEBUG_DIR BUILD_ID_DIR ;
874
874
const size_t prefix_len = strlen (prefix );
875
875
const char * const suffix = ".debug" ;
876
876
const size_t suffix_len = strlen (suffix );
@@ -6947,27 +6947,42 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
6947
6947
if (buildid_data != NULL )
6948
6948
{
6949
6949
int d ;
6950
+ char debug_directories [strlen (SYSTEM_DEBUG_DIR ) + 1 ];
6951
+ char * debug_dir ;
6950
6952
6951
- d = elf_open_debugfile_by_buildid (state , buildid_data , buildid_size ,
6952
- error_callback , data );
6953
- if (d >= 0 )
6954
- {
6955
- int ret ;
6953
+ strcpy (debug_directories , SYSTEM_DEBUG_DIR );
6956
6954
6957
- elf_release_view (state , & buildid_view , error_callback , data );
6958
- if (debuglink_view_valid )
6959
- elf_release_view (state , & debuglink_view , error_callback , data );
6960
- if (debugaltlink_view_valid )
6961
- elf_release_view (state , & debugaltlink_view , error_callback , data );
6962
- ret = elf_add (state , "" , d , NULL , 0 , base_address , opd ,
6963
- error_callback , data , fileline_fn , found_sym ,
6964
- found_dwarf , NULL , 0 , 1 , NULL , 0 );
6965
- if (ret < 0 )
6966
- backtrace_close (d , error_callback , data );
6967
- else if (descriptor >= 0 )
6968
- backtrace_close (descriptor , error_callback , data );
6969
- return ret ;
6970
- }
6955
+ debug_dir = strtok (debug_directories , ":" );
6956
+ while (debug_dir != NULL )
6957
+ {
6958
+ char prefix [strlen (debug_dir ) + strlen (BUILD_ID_DIR ) + 1 ];
6959
+ strcpy (prefix , debug_dir );
6960
+ strcat (prefix , BUILD_ID_DIR );
6961
+
6962
+ d = elf_open_debugfile_by_buildid (prefix , state , buildid_data , buildid_size ,
6963
+ error_callback , data );
6964
+
6965
+ if (d >= 0 )
6966
+ {
6967
+ int ret ;
6968
+
6969
+ elf_release_view (state , & buildid_view , error_callback , data );
6970
+ if (debuglink_view_valid )
6971
+ elf_release_view (state , & debuglink_view , error_callback , data );
6972
+ if (debugaltlink_view_valid )
6973
+ elf_release_view (state , & debugaltlink_view , error_callback , data );
6974
+ ret = elf_add (state , "" , d , NULL , 0 , base_address , opd ,
6975
+ error_callback , data , fileline_fn , found_sym ,
6976
+ found_dwarf , NULL , 0 , 1 , NULL , 0 );
6977
+ if (ret < 0 )
6978
+ backtrace_close (d , error_callback , data );
6979
+ else if (descriptor >= 0 )
6980
+ backtrace_close (descriptor , error_callback , data );
6981
+ return ret ;
6982
+ }
6983
+
6984
+ debug_dir = strtok (NULL , ":" );
6985
+ }
6971
6986
}
6972
6987
6973
6988
if (buildid_view_valid )
0 commit comments