Your message dated Fri, 18 Jan 2008 20:50:35 +0100
with message-id <[EMAIL PROTECTED]>
has caused the Debian Bug report #461399,
regarding simgear_1.0.0-1 (alpha/unstable): FTBFS: Unrecognized CPU architecture
to be marked as having been forwarded to the upstream software
author(s) [EMAIL PROTECTED]

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Hi FlightGear developers.

It looks like there are some portability issues in the current code... I got this report on the Debian packages. I could patch the missing ifdefs I guess (though it'd be nice if you fixed them for a future release), but could you comment on the 64-bit issue?

Steve Langasek skrev:
Package: simgear
Version: 1.0.0-1
Severity: serious

simgear is now failing to build on alpha, hppa, and s390 with the following
error:

if gcc -DHAVE_CONFIG_H -I. -I. -I../../simgear -I../..  -fPIC -pipe  -g -O2 -D_REENTRANT 
-MT bitslib.o -MD -MP -MF ".deps/bitslib.Tpo" -c -o bitslib.o bitslib.c; \
        then mv -f ".deps/bitslib.Tpo" ".deps/bitslib.Po"; else rm -f
".deps/bitslib.Tpo"; exit 1; fi
In file included from nasal.h:7,
                 from data.h:4,
                 from bitslib.c:2:
naref.h:20:3: error: #error Unrecognized CPU architecture
[...]

A full build log can be found at
<http://buildd.debian.org/fetch.cgi?pkg=simgear&arch=alpha&ver=1.0.0-1&stamp=1198415406&file=log&as=raw>.

The reason for this is the following code in naref.h:

/* Rather than play elaborate and complicated games with
 * platform-dependent endianness headers, just detect the platforms we
 * support.  This list is simpler and smaller, yet still quite
 * complete. */
#if (defined(__x86_64) && defined(__linux__)) || defined(__sparcv9) || \
    defined(__powerpc64__)
/* Win64 and Irix should work with this too, but have not been
 * tested */
#   define NASAL_NAN64
#elif defined(_M_IX86)   || defined(i386)    || defined(__x86_64) || \
defined(__ia64__) || defined(_M_IA64) || defined(__ARMEL__) # define NASAL_LE
#elif defined(__sparc) || defined(__ppc__) ||defined(__PPC) || \
      defined(__mips) || defined(__ARMEB__)
# define NASAL_BE
#else
# error Unrecognized CPU architecture
#endif

... which is a cop-out, and a serious regression because the old code built
and ran fine on all architectures.

The above code should have __alpha__ added to the NASAL_LE list, and
__hppa__, __s390__, and __s390x__ added to the NASAL_BE list.

BTW, according to data.h, the NASAL_NAN64 option exists to support stupid
union tricks:

// On 64 bit systems, Nasal non-numeric references are stored with a
// bitmask that sets the top 16 bits.  As a double, this is a
// signalling NaN that cannot itself be produced by normal numerics
// code.  The pointer value can be reconstructed if (and only if) we
// are guaranteed that all memory that can be pointed to by a naRef
// (i.e. all memory returned by naAlloc) lives in the bottom 48 bits
// of memory.  Linux on x86_64, Win64, Solaris and Irix all have such
// policies with address spaces:

[...]  Linux doesn't document this rigorously, but testing
// shows that it allows 47 bits of address space (and current x86_64
// implementations are limited to 48 bits of virtual space anyway). So
// we choose 48 as the conservative compromise.

So this assumes the kernel will never expose more than 48bits of address
space to userspace processes --  a short-sighted and groundless assumption,
the reason Linux hasn't "documented this rigorously" is because there is no
such guarantee.  The NASAL_NAN64 option should be thrown out for all Linux
variants.





--- End Message ---

Reply via email to