summaryrefslogtreecommitdiffstats
path: root/source/d/binutils/patches/binutils-filename-in-error-messages.patch
blob: e23d3eccaa4ba917509d064e0a7bda0a63b8216d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
--- binutils.orig/binutils/readelf.c	2021-07-19 12:39:14.206556025 +0100
+++ binutils-2.37/binutils/readelf.c	2021-07-19 12:44:37.712728732 +0100
@@ -21873,45 +21873,52 @@ process_file (char * file_name)
   struct stat statbuf;
   char armag[SARMAG];
   bool ret = true;
+  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 = (bfd_size_type) statbuf.st_size;
@@ -21919,33 +21926,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;
--- binutils.orig/binutils/readelf.c	2021-08-10 10:15:22.088016072 +0100
+++ binutils-2.37/binutils/readelf.c	2021-08-10 10:15:55.567907891 +0100
@@ -21884,7 +21884,7 @@ 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;