Greg. I didn't realize how complicated this was. It sounds like there might be some major changes needed within the source to get this right. Should this be entered as a bug? I'll work with your suggested patch to see if it still works for me. Michael On Thu, Feb 5, 2009 at 1:25 AM, Greg Lewis <glewis@eyesbeyond.com> wrote:
G'day Michael,
On Wed, Feb 04, 2009 at 08:37:03PM -0500, Michael Franz wrote:
I have been working on compiling the bsd-port repo on linux and ran into the following issue. fdlibm.h includes machine/endian.h, this does not work on linux, there is no such file. I removed the include and it works find on OS X. Based on the limited research I did, including machine/endian.h should not be done. sys/types.h should be used instead.
I have included the patch to remove the un-necessary include. Can this someone test this on the other BSDs?
It will work, but it basically works by accident. Which is what it does now anyway. We did have more extensive patches to this file in an earlier port that made it work correctly, I'll see if I can dig them out.
If you look at what the code does, it basically checks for _LITTLE_ENDIAN being defined as an indicator that this is a little endian platform. This is incorrect on BSD (except for maybe OS X) since both _LITTLE_ENDIAN and _BIG_ENDIAN are defined on all architectures and to determine the endianness the correct thing to do is to check on BYTE_ORDER. It happens to work right now because there are no supported big endian platforms that Java has been ported to for BSD.
I'm not sure how this works on OS X either before or after your change since machine/endian.h on OS X (or rather i386/endian.h) doesn't appear to define _LITTLE_ENDIAN (but rather __DARWIN_LITTLE_ENDIAN).
I think the right thing probably looks something like
#ifdef _ALLBSD_SOURCE #include <machine/endian.h> #elif __linux__ #include <endian.h> #endif
And then where it currently does '#ifdef _LITTLE_ENDIAN' instead do
#if (defined(__solaris__) && defined(_LITTLE_ENDIAN)) || \ BYTE_ORDER == LITTLE_ENDIAN
but I haven't tried that or dug out our previous changes.
--- a/src/share/native/java/lang/fdlibm/include/fdlibm.h Tue Oct 28 20:35:48 2008 -0400 +++ b/src/share/native/java/lang/fdlibm/include/fdlibm.h Wed Feb 04 20:32:35 2009 -0500 @@ -27,7 +27,6 @@ #ifdef __OpenBSD__ #include <sys/types.h> #endif -#include <machine/endian.h> #include "jfdlibm.h"
-- Greg Lewis Email : glewis@eyesbeyond.com Eyes Beyond Web : http://www.eyesbeyond.com Information Technology FreeBSD : glewis@FreeBSD.org