Re: [PATCH 2/2] [nto] Improve ABI sniffing.

Aleksandar Ristovski
2015-10-21T14:45:19Z

On 15-10-21 10:23 AM, Pedro Alves wrote:
> On 10/21/2015 03:14 PM, Aleksandar Ristovski wrote:
>> + name = note + sizeof_Elf_Nhdr;
>> + if (sectsize < namelen + sizeof_Elf_Nhdr
>> + || namelen > sizeof (QNX_NOTE_NAME))
>> + {
>> + /* Can not be QNX note. */
>> + XDELETEVEC (note);
>> + return;
>> + }
>> +
>> + if (namelen == sizeof (QNX_NOTE_NAME)
>> + && 0 == strcmp (name, QNX_NOTE_NAME))
>> + *(enum gdb_osabi *) obj = GDB_OSABI_QNXNTO;
>> +
>> + XDELETEVEC (note);
>
> Looks like these two ifs are now the same as the simpler:
>
> name = note + sizeof_Elf_Nhdr;
> if (sectsize >= namelen + sizeof_Elf_Nhdr
> && namelen == sizeof (QNX_NOTE_NAME)
> && 0 == strcmp (name, QNX_NOTE_NAME))
> *(enum gdb_osabi *) obj = GDB_OSABI_QNXNTO;
>
> XDELETEVEC (note);
>
> OK with that change.
>
> Thanks,
> Pedro Alves
>

Pushed d7161de46af80e460d432d8dbb1c42f8cbacf6dc

With the following fixup:
--- a/gdb/nto-tdep.c
+++ b/gdb/nto-tdep.c
@@ -361,15 +361,8 @@ nto_sniff_abi_note_section (bfd *abfd, asection
*sect, void *obj)
bfd_get_section_contents (abfd, sect, note, 0, sectsize);
namelen = (unsigned int) bfd_h_get_32 (abfd, note);
name = note + sizeof_Elf_Nhdr;
- if (sectsize < namelen + sizeof_Elf_Nhdr
- || namelen > sizeof (QNX_NOTE_NAME))
- {
- /* Can not be QNX note. */
- XDELETEVEC (note);
- return;
- }
-
- if (namelen == sizeof (QNX_NOTE_NAME)
+ if (sectsize >= namelen + sizeof_Elf_Nhdr
+ && namelen == sizeof (QNX_NOTE_NAME)
&& 0 == strcmp (name, QNX_NOTE_NAME))
*(enum gdb_osabi *) obj = GDB_OSABI_QNXNTO;

Thank you,

Aleksandar Ristovski