Including machine/endian.h
Michael Franz
mvfranz at gmail.com
Thu Feb 5 16:35:37 PST 2009
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 at 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 at eyesbeyond.com
> Eyes Beyond Web : http://www.eyesbeyond.com
> Information Technology FreeBSD : glewis at FreeBSD.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20090205/fa42435f/attachment.html
More information about the bsd-port-dev
mailing list