Re: [RFA] Check solib bfd arch

Joel Brobecker
2009-09-17T22:56:50Z

[-- Attachment #1: Type: text/plain, Size: 1119 bytes --]

Hello,

The following patch is causing trouble on sparc-solaris:

> 2009-07-08 Hui Zhu <teawater@gmail.com>
>
> * solib.c (solib_bfd_open): Output a warning if solib's
> architecture is not compatible with inferior's architecture.

I now see:

(gdb) run
Starting program: /[...]/sparc64/ex/task_switch
warning: `/usr/platform/SUNW,Sun-Fire-V440/lib/sparcv9/libc_psr.so.1': Shared library architecture sparc:v9a is not compatible with target architecture sparc:v9.

> + if (b->compatible (b, bfd_get_arch_info (abfd)) != b)

In my case, b->compatible is bfd_default_compatible. the architecture
is set to sparc:v9, and the shared library's architecture is sparc:v9a.
The problem is that b->compatible is returning the architecture that
is "more featureful" of the two, which in this case is sparc:v9a.
As a result, we emit the warning.

Looks to me like the check is too aggressive and should be changed
to == 0. Would that be correct?

2009-09-16 Joel Brobecker <brobecker@adacore.com>

* solib.c (solib_bfd_open): Relax a bit the compatibility check.

Tested on sparc64-solaris.

--
Joel

[-- Attachment #2: solib.diff --]
[-- Type: text/x-diff, Size: 557 bytes --]

diff --git a/gdb/solib.c b/gdb/solib.c
index c7fd0fc..a2ad0c4 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -310,7 +310,7 @@ solib_bfd_open (char *pathname)

/* Check bfd arch. */
b = gdbarch_bfd_arch_info (target_gdbarch);
- if (b->compatible (b, bfd_get_arch_info (abfd)) != b)
+ if (!b->compatible (b, bfd_get_arch_info (abfd)))
warning (_("`%s': Shared library architecture %s is not compatible "
"with target architecture %s."), found_pathname,
bfd_get_arch_info (abfd)->printable_name, b->printable_name);