diff --git a/binutils-filename-in-readelf-messages.patch b/binutils-filename-in-readelf-messages.patch new file mode 100644 index 0000000..eb2f98b --- /dev/null +++ b/binutils-filename-in-readelf-messages.patch @@ -0,0 +1,127 @@ +diff -rup binutils.orig/binutils/readelf.c binutils-2.40/binutils/readelf.c +--- binutils.orig/binutils/readelf.c 2023-02-13 14:38:44.081029276 +0000 ++++ binutils-2.40/binutils/readelf.c 2023-02-13 14:38:56.201022315 +0000 +@@ -22858,46 +22858,53 @@ process_file (char * file_name) + Filedata * filedata = NULL; + struct stat statbuf; + char armag[SARMAG]; +- bool ret = true; ++ bool ret = false; ++ char * name; ++ char * saved_program_name; ++ ++ /* Overload program_name to include file_name. Doing this means ++ that warning/error messages will positively identify the file ++ concerned even when multiple instances of readelf are running. */ ++ name = xmalloc (strlen (program_name) + strlen (file_name) + 3); ++ sprintf (name, "%s: %s", program_name, file_name); ++ saved_program_name = program_name; ++ program_name = name; + + if (stat (file_name, &statbuf) < 0) + { + if (errno == ENOENT) +- error (_("'%s': No such file\n"), file_name); ++ error (_("No such file\n")); + else +- error (_("Could not locate '%s'. System error message: %s\n"), +- file_name, strerror (errno)); +- return false; ++ error (_("Could not locate file. System error message: %s\n"), ++ strerror (errno)); ++ goto done; + } + + if (! S_ISREG (statbuf.st_mode)) + { +- error (_("'%s' is not an ordinary file\n"), file_name); +- return false; ++ error (_("Not an ordinary file\n")); ++ goto done; + } + + filedata = calloc (1, sizeof * filedata); + if (filedata == NULL) + { + error (_("Out of memory allocating file data structure\n")); +- return false; ++ goto done; + } + + filedata->file_name = file_name; + filedata->handle = fopen (file_name, "rb"); + if (filedata->handle == NULL) + { +- error (_("Input file '%s' is not readable.\n"), file_name); +- free (filedata); +- return false; ++ error (_("Not readable\n")); ++ goto done; + } + + if (fread (armag, SARMAG, 1, filedata->handle) != 1) + { +- error (_("%s: Failed to read file's magic number\n"), file_name); +- fclose (filedata->handle); +- free (filedata); +- return false; ++ error (_("Failed to read file's magic number\n")); ++ goto done; + } + + filedata->file_size = statbuf.st_size; +@@ -22905,33 +22912,39 @@ process_file (char * file_name) + + if (memcmp (armag, ARMAG, SARMAG) == 0) + { +- if (! process_archive (filedata, false)) +- ret = false; ++ if (process_archive (filedata, false)) ++ ret = true; + } + else if (memcmp (armag, ARMAGT, SARMAG) == 0) + { +- if ( ! process_archive (filedata, true)) +- ret = false; ++ if (process_archive (filedata, true)) ++ ret = true; + } + else + { + if (do_archive_index && !check_all) +- error (_("File %s is not an archive so its index cannot be displayed.\n"), +- file_name); ++ error (_("Not an archive so its index cannot be displayed.\n")); + + rewind (filedata->handle); + filedata->archive_file_size = filedata->archive_file_offset = 0; + +- if (! process_object (filedata)) +- ret = false; ++ if (process_object (filedata)) ++ ret = true; + } + +- fclose (filedata->handle); +- free (filedata->section_headers); +- free (filedata->program_headers); +- free (filedata->string_table); +- free (filedata->dump.dump_sects); +- free (filedata); ++ done: ++ if (filedata) ++ { ++ if (filedata->handle != NULL) ++ fclose (filedata->handle); ++ free (filedata->section_headers); ++ free (filedata->program_headers); ++ free (filedata->string_table); ++ free (filedata->dump.dump_sects); ++ free (filedata); ++ } ++ free (program_name); ++ program_name = saved_program_name; + + free (ba_cache.strtab); + ba_cache.strtab = NULL; +Only in binutils-2.40/binutils: readelf.c.orig