@@ -865,12 +865,12 @@ elf_readlink (struct backtrace_state *state, const char *filename,
865865 when the build ID is known is in /usr/lib/debug/.build-id. */
866866
867867static 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 ,
869870 const char * buildid_data , size_t buildid_size ,
870871 backtrace_error_callback error_callback ,
871872 void * data )
872873{
873- const char * const prefix = SYSTEM_DEBUG_DIR BUILD_ID_DIR ;
874874 const size_t prefix_len = strlen (prefix );
875875 const char * const suffix = ".debug" ;
876876 const size_t suffix_len = strlen (suffix );
@@ -6936,27 +6936,42 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
69366936 if (buildid_data != NULL )
69376937 {
69386938 int d ;
6939+ char debug_directories [strlen (SYSTEM_DEBUG_DIR ) + 1 ];
6940+ char * debug_dir ;
69396941
6940- d = elf_open_debugfile_by_buildid (state , buildid_data , buildid_size ,
6941- error_callback , data );
6942- if (d >= 0 )
6943- {
6944- int ret ;
6942+ strcpy (debug_directories , SYSTEM_DEBUG_DIR );
69456943
6946- elf_release_view (state , & buildid_view , error_callback , data );
6947- if (debuglink_view_valid )
6948- elf_release_view (state , & debuglink_view , error_callback , data );
6949- if (debugaltlink_view_valid )
6950- elf_release_view (state , & debugaltlink_view , error_callback , data );
6951- ret = elf_add (state , "" , d , NULL , 0 , base_address , error_callback ,
6952- data , fileline_fn , found_sym , found_dwarf , NULL , 0 ,
6953- 1 , NULL , 0 );
6954- if (ret < 0 )
6955- backtrace_close (d , error_callback , data );
6956- else if (descriptor >= 0 )
6957- backtrace_close (descriptor , error_callback , data );
6958- return ret ;
6959- }
6944+ debug_dir = strtok (debug_directories , ":" );
6945+ while (debug_dir != NULL )
6946+ {
6947+ char prefix [strlen (debug_dir ) + strlen (BUILD_ID_DIR ) + 1 ];
6948+ strcpy (prefix , debug_dir );
6949+ strcat (prefix , BUILD_ID_DIR );
6950+
6951+ d = elf_open_debugfile_by_buildid (prefix , state , buildid_data , buildid_size ,
6952+ error_callback , data );
6953+
6954+ if (d >= 0 )
6955+ {
6956+ int ret ;
6957+
6958+ elf_release_view (state , & buildid_view , error_callback , data );
6959+ if (debuglink_view_valid )
6960+ elf_release_view (state , & debuglink_view , error_callback , data );
6961+ if (debugaltlink_view_valid )
6962+ elf_release_view (state , & debugaltlink_view , error_callback , data );
6963+ ret = elf_add (state , "" , d , NULL , 0 , base_address , error_callback ,
6964+ data , fileline_fn , found_sym , found_dwarf , NULL , 0 ,
6965+ 1 , NULL , 0 );
6966+ if (ret < 0 )
6967+ backtrace_close (d , error_callback , data );
6968+ else if (descriptor >= 0 )
6969+ backtrace_close (descriptor , error_callback , data );
6970+ return ret ;
6971+ }
6972+
6973+ debug_dir = strtok (NULL , ":" );
6974+ }
69606975 }
69616976
69626977 if (buildid_view_valid )
0 commit comments