NTPsec on MIPSbe

Hal Murray hmurray at megapathdsl.net
Tue May 23 19:49:41 UTC 2017


>> #define WORDS_BIGENDIAN 1

>Did waf's endian-ness test not detect this properly?

waf's detection worked fine.

The above #define is from config.h on a PowerPC indicating what it did.

---------

> ISTR years ago seeing some C magic, where in a compile time declaration, one
> packs bytes into a struct union with an integer, and then at runtime looks
> at the integer value to determine the endianess on the fly. Downside: it has
> to be tested at runtime, which means the compile time optimizer is less
> likely to remove the unused code paths.

I've seen that sort of code.  It wouldn't take me long to make something 
similar.

> Is it the case that the C standard or the POSIX standard do not define a
> standard #define that tells the current endianess?  That seems like just the
> sort of thing that the standard should do... 

Fedora has a /usr/include/endian.h
I don't know if that's part of POSIX.  Our code just includes it, no #ifdefs, 
so I assume it is.

waf has a builtin.
    if ctx.check_endianness() == "big":
        ctx.define("WORDS_BIGENDIAN", 1)

-----------

There are 2 places in our code that know about endianness.

Several refclocks check WORDS_BIGENDIAN and do their own thing.  It's used 
for things like binary ints/floats sent over a serial port.

The packet format on the internet is big endian.  There is code that swaps 
when necessary in ntpd/ntp_proto.c via libntp/ntp_endian.c  We could probably 
clean up both areas by using endian.h

Eric: looks like an item for your list.


-- 
These are my opinions.  I hate spam.





More information about the devel mailing list