[PATCH] makekeys: Fix build/target word size mismatch when cross-compiling

Alan Coopersmith alan.coopersmith at oracle.com
Fri May 27 21:17:31 PDT 2011


I was going to push this patch, but something appears to have gotten mangled
in the e-mailing, and it can't be applied.   Can you resend with a
non-whitespace mangling mailer like git send-email or as an attachment?

Also, sticking the new CHECK_SIZEOF right in the middle of the loadable module
checks seems like poor placement.

Perhaps down after the:
  # Checks for typedefs, structures, and compiler characteristics.
would be better?

-- 
	-Alan Coopersmith-        alan.coopersmith at oracle.com
	 Oracle Solaris Platform Engineering: X Window System

On 05/20/11 08:05 AM, Derek Buitenhuis wrote:
> Since makekeys is built using build environment's gcc and
> run natively, we have to make sure that the size of the
> Signature type is the same on both the native build environment
> and the host, otherwise we get mismatches upon running X,
> and some LSB test failures (xts5).
> 
> Have configure check the size of the host's unsigned long
> and typedef Signature in makekeys.c accordingly.
> ---
>  configure.ac        |    3 +++
>  src/util/makekeys.c |   13 ++++++++++---
>  2 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index a39ab8d..16108a5 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -192,6 +192,9 @@ else
>  fi
>  AC_MSG_RESULT($HAVE_LOADABLE_MODULES)
> 
> +#Check the size of unsigned long for use in makekeys
> +AC_CHECK_SIZEOF([unsigned long])
> +
>  AC_MSG_CHECKING([if loadable i18n module support should be enabled])
>  AC_ARG_ENABLE(loadable-i18n,
>            AS_HELP_STRING([--enable-loadable-i18n],
> diff --git a/src/util/makekeys.c b/src/util/makekeys.c
> index 8f88beb..6022f3b 100644
> --- a/src/util/makekeys.c
> +++ b/src/util/makekeys.c
> @@ -31,10 +31,17 @@ from The Open Group.
>  #include <X11/X.h>
>  #include <X11/Xos.h>
>  #include <X11/keysymdef.h>
> +#include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> 
> -typedef unsigned long Signature;
> +#include "../config.h"
> +
> +#if SIZEOF_UNSIGNED_LONG == 4
> +typedef uint32_t Signature;
> +#else
> +typedef uint64_t Signature;
> +#endif
> 
>  #define KTNUM 4000
> 
> @@ -212,8 +219,8 @@ next1:    ;
>      offsets[j] = k;
>      indexes[i] = k;
>      val = info[i].val;
> -    printf("0x%.2lx, 0x%.2lx, 0x%.2lx, 0x%.2lx, 0x%.2lx, 0x%.2lx, ",
> -           (sig >> 8) & 0xff, sig & 0xff,
> +    printf("0x%.2jx, 0x%.2jx, 0x%.2lx, 0x%.2lx, 0x%.2lx, 0x%.2lx, ",
> +           (uintmax_t)((sig >> 8) & 0xff), (uintmax_t)(sig & 0xff),
>             (val >> 24) & 0xff, (val >> 16) & 0xff,
>             (val >> 8) & 0xff, val & 0xff);
>      for (name = info[i].name, k += 7; (c = *name++); k++)





More information about the xorg-devel mailing list