diff mbox

Don't issue errors on GDB Python files

Message ID CAMe9rOqFsJ09FfQj=z5OVuyWZgmAvNr6zB74wN0yyLG-_mJH7g@mail.gmail.com
State Committed
Headers show

Commit Message

H.J. Lu June 24, 2015, 2:34 p.m. UTC
On Wed, Jun 24, 2015 at 3:44 AM, Ondřej Bílka <neleai@seznam.cz> wrote:
> On Wed, Jun 24, 2015 at 03:30:58AM -0700, H.J. Lu wrote:
>> Many packages, including GCC, install Python files for GDB in library
>> diretory. ldconfig reads them and issue errors since they aren't ELF
>> files:
>>
>> ldconfig: /usr/gcc-5.1.1/lib/libstdc++.so.6.0.21-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
>>
>> ldconfig: /usr/gcc-5.1.1/libx32/libstdc++.so.6.0.21-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
>>
>> ldconfig: /usr/gcc-5.1.1/lib64/libstdc++.so.6.0.21-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
>>
>> This patch silences ldconfig on GDB Python files by checking filenames
>> with -gdb.py suffix.
>>
>> OK for master?
>>
>> H.J.
>> --
>>       [BZ #18585]
>>       * elf/readlib.c (is_gdb_python_file): New.
>>       (process_file): Don't issue errors on filenames with -gdb.py
>>       suffix.
>> ---
>>  elf/readlib.c | 20 +++++++++++++++-----
>>  1 file changed, 15 insertions(+), 5 deletions(-)
>>
>> diff --git a/elf/readlib.c b/elf/readlib.c
>> index 5c14a42..ad12da6 100644
>> --- a/elf/readlib.c
>> +++ b/elf/readlib.c
>> @@ -63,6 +63,13 @@ static struct known_names known_libs[] =
>>  };
>>
>>
>> +/* Check if string corresponds to a GDB Python file.  */
>> +static bool
>> +is_gdb_python_file (const char *name)
>> +{
>> +  size_t len = strlen (name);
>> +  return len > 7 && strcmp (name + len - 7, "-gdb.py") == 0;
>> +}
>>
>>  /* Returns 0 if everything is ok, != 0 in case of error.  */
>>  int
>> @@ -155,11 +162,14 @@ process_file (const char *real_file_name, const char *file_name,
>>        /* The file is neither ELF nor aout.  Check if it's a linker
>>        script, like libc.so - otherwise complain.  Only search the
>>        beginning of the file.  */
>> -      size_t len = MIN (statbuf.st_size, 512);
>> -      if (memmem (file_contents, len, "GROUP", 5) == NULL
>> -       && memmem (file_contents, len, "GNU ld script", 13) == NULL)
>> -     error (0, 0, _("%s is not an ELF file - it has the wrong magic bytes at the start.\n"),
>> -            file_name);
>> +      if (!is_gdb_python_file (file_name))
>> +     {
>> +       size_t len = MIN (statbuf.st_size, 512);
>> +       if (memmem (file_contents, len, "GROUP", 5) == NULL
>> +           && memmem (file_contents, len, "GNU ld script", 13) == NULL)
>> +         error (0, 0, _("%s is not an ELF file - it has the wrong magic bytes at the start.\n"),
>> +                file_name);
>> +     }
>>        ret = 1;
>>      }
>>    /* Libraries have to be shared object files.  */
>
> mostly ok, but just write that condition as
>
>  if (memmem (file_contents, len, "GROUP", 5) == NULL
>      && memmem (file_contents, len, "GNU ld script", 13) == NULL
>      && !is_gdb_python_file (file_name))
>

Updated.  I will check in this patch shortly.

Thanks.

Comments

Joseph Myers June 24, 2015, 8:02 p.m. UTC | #1
If your commit fully fixes the bug, please close it in Bugzilla.
diff mbox

Patch

From 7d0098927a0dc37a7636e773666789e56f35ca3b Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Wed, 24 Jun 2015 03:21:29 -0700
Subject: [PATCH] Don't issue errors on GDB Python files

Many packages, including GCC, install Python files for GDB in library
diretory. ldconfig reads them and issue errors since they aren't ELF
files:

ldconfig: /usr/gcc-5.1.1/lib/libstdc++.so.6.0.21-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

ldconfig: /usr/gcc-5.1.1/libx32/libstdc++.so.6.0.21-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

ldconfig: /usr/gcc-5.1.1/lib64/libstdc++.so.6.0.21-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

This patch silences ldconfig on GDB Python files by checking filenames
with -gdb.py suffix.

	[BZ #18585]
	* elf/readlib.c (is_gdb_python_file): New.
	(process_file): Don't issue errors on filenames with -gdb.py
	suffix.
---
 elf/readlib.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/elf/readlib.c b/elf/readlib.c
index 5c14a42..7fd5b8a 100644
--- a/elf/readlib.c
+++ b/elf/readlib.c
@@ -63,6 +63,13 @@  static struct known_names known_libs[] =
 };
 
 
+/* Check if string corresponds to a GDB Python file.  */
+static bool
+is_gdb_python_file (const char *name)
+{
+  size_t len = strlen (name);
+  return len > 7 && strcmp (name + len - 7, "-gdb.py") == 0;
+}
 
 /* Returns 0 if everything is ok, != 0 in case of error.  */
 int
@@ -157,7 +164,8 @@  process_file (const char *real_file_name, const char *file_name,
 	 beginning of the file.  */
       size_t len = MIN (statbuf.st_size, 512);
       if (memmem (file_contents, len, "GROUP", 5) == NULL
-	  && memmem (file_contents, len, "GNU ld script", 13) == NULL)
+	  && memmem (file_contents, len, "GNU ld script", 13) == NULL
+	  && !is_gdb_python_file (file_name))
 	error (0, 0, _("%s is not an ELF file - it has the wrong magic bytes at the start.\n"),
 	       file_name);
       ret = 1;
-- 
1.9.3