Re: [Patch] arch recognition fix for osabi.c

Daniel Jacobowitz
2003-06-17T15:51:56Z

On Tue, Jun 17, 2003 at 11:40:37AM -0400, Kris Warkentin wrote:
> Here are some changes to osabi.c that allow gdb to recognize QNX binaries
> properly. The arch check change in gdbarch_init_osabi() allows the backend
> abi_init handlers to run. I believe the comment still stand - we will
> probably want to do something smarter in the future.
>
> The sniff change is only temporary. It works reasonably well for now and
> will probably stay for backwards compatability but we are also going to add
> a special .note section like others OSes in the future. Then we can check
> for both.
>
> cheers,
>
> Kris
>
> Changelog:
> * osabi.c (gdbarch_init_osabi): Just check arch for compatability rather
> identicality.

Your mailer is eating indentation again...

This half I'm not convinced by. From our previous exchange I don't
think you've fully justified it. Not approved without more discussion.

> (generic_elf_osabi_sniff_abi_tag_sections): Add check for QNX Neutrino
> binaries.

This bit looks fine, except for two things: you've missed the coding
standards by four space characters (before left parens), and your
"safety first" check overruns the buffer (missing +1 in the alloca).

> Index: osabi.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/osabi.c,v
> retrieving revision 1.15
> diff -u -r1.15 osabi.c
> --- osabi.c 8 Jun 2003 18:27:14 -0000 1.15
> +++ osabi.c 17 Jun 2003 15:32:53 -0000
> @@ -311,8 +311,7 @@
> type that is compatible with the desired machine type. Right
> now we simply return the first match, which is fine for now.
> However, we might want to do something smarter in the future. */
> - compatible = arch_info->compatible (arch_info, handler->arch_info);
> - if (compatible == handler->arch_info)
> + if(arch_info->compatible (arch_info, handler->arch_info))
> {
> (*handler->init_osabi) (info, gdbarch);
> return;
> @@ -430,6 +429,17 @@
> necessary yet. */
> *os_ident_ptr = GDB_OSABI_NETBSD_ELF;
> }
> + return;
> + }
> +
> + /* QNX Neutrino has ldqnx.so as its linker. */
> + if (strcmp (name, ".interp") == 0 && sectsize > 0)
> + {
> + char *buf = alloca(sectsize);
> + bfd_get_section_contents(abfd, sect, buf, 0, sectsize);
> + buf[sectsize] = '\0'; /* Safety first boys and girls. */
> + if(strstr(buf, "ldqnx.so"))
> + *os_ident_ptr = GDB_OSABI_QNXNTO;
> return;
> }
> }
>
>
>

--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer