Build errors on AIX

Pedro Alves
2010-02-24T13:35:17Z

[removing bug-gdb@]

On Wednesday 24 February 2010 12:51:36, Harald Koenig wrote:
> On Feb 23, Harald Koenig wrote:
>
> > right now I'm trying to build gdb on AIX 6.1 which right now fails here
> >
> > "gdb-CVS-20100222/gdb/aix-thread.c", line 352.46: 1506-280 (W) Function argument assignment between types "int*" and "unsigned int*" is not allowed.
^^^^^^

How does one read that? line 352, column 46? On my sources,
352 has:

352: if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
353: memset (gprs32, 0, sizeof (gprs32));

> > where the source reads like this -- hmmmmm....
> >
> > /* getthrds(3) isn't prototyped in any AIX 4.3.3 #include file. */
> > extern int getthrds (pid_t, struct thrdsinfo64 *,
> > int, pthdb_tid_t *, int);
>

Anyway, ignoring line numbers, what's the compiler complaining about?
Is it the signness of pthdb_tid_t that is wrong?

> with the attached patch AIX 6.1 builds fine, and 5.1 still does so....
> (_AIX51 is defined in 5.2/5.3 too! I've not tested 5.0 though which is
> why I don't check _AIX50 which is defined in 5.1-5.3 too).

It would perhaps be better to autoconf the getthrds declaration being
present, here, in gdb/configure.ac:

aix*)
AC_MSG_CHECKING(for AiX thread debugging library)
AC_CACHE_VAL(gdb_cv_have_aix_thread_debug,
[AC_TRY_COMPILE([#include <sys/pthdebug.h>],
[#ifndef PTHDB_VERSION_3
#error
#endif],
gdb_cv_have_aix_thread_debug=yes,
gdb_cv_have_aix_thread_debug=no)])
AC_MSG_RESULT($gdb_cv_have_aix_thread_debug)
if test $gdb_cv_have_aix_thread_debug = yes; then
CONFIG_SRCS="${CONFIG_SRCS} aix-thread.c"
CONFIG_OBS="${CONFIG_OBS} aix-thread.o"
CONFIG_LDFLAGS="${CONFIG_LDFLAGS} -lpthdebug"
fi
;;
esac

But I really don't know much about AIX. Joel? What do you
think? You seem to be one of that last that touched
this `getthrds' bit of code. :-)

> but: 6.1 has the same break point problems as 5.3:
>
> - with no breakpoint before 1st run, break points can't be set later at all
>
> - otherwise break points seem to work

I can't really guess exactly what's going on here. AIX/RS6000
is probably the port that most needs love of all the supported
ports. E.g, I wouldn't be surprised if recent changes like PIE
or multi-program support and the revamping around these broke
this port, for it does things in non-standard ways. These
commands may offer some clues:

"(gdb) maint info breakpoints"
"(gdb) set debug infrun 1"
"(gdb) set target infrun 1"

If you have an older gdb that works, I think we get to
debug the new gdb to try to track this down.

--
Pedro Alves