All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Michael Felt <aixtools@felt.demon.nl>
Cc: "brian m. carlson" <sandals@crustytoothpaste.net>,
	git@vger.kernel.org, Dan Shumow <shumow@gmail.com>,
	Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>
Subject: Re: Is detecting endianness at compile-time unworkable?
Date: Tue, 31 Jul 2018 16:25:24 +0200	[thread overview]
Message-ID: <87sh3ztrcb.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <287cdba8-19c1-2fe8-4aff-d0385b38e92c@felt.demon.nl>


On Tue, Jul 31 2018, Michael Felt wrote:

> I hope a I have a "leap forward"
>
>
> On 7/30/2018 11:39 AM, Ævar Arnfjörð Bjarmason wrote:
>> Perhaps it's worth taking a step back here and thinking about whether
>> this whole thing is unworkable. It was hard enough to get this to work
>> on the combination of Linux, *BSD and Solaris, but I suspect we'll run
>> into increasingly obscure platforms where this is hard or impossible
>> (AIX, HP/UX etc.)
> While I still cannot say for HP/UX it does seem there is a potential
> solution based on the status for _LITTLE_ENDIAN and _BIG_ENDIAN. At
> least, gcc on POWER and xlc on POWER provides one or the other - and my
> hope is that gcc on other platforms also provides them.

Yeah with GCC this is relatively easy, see
https://github.com/cr-marcstevens/sha1collisiondetection/blame/c3e1304/lib/sha1.c#L29-L115

> For "other" compilers that do not provide them - a modification to
> CFLAGS to define one or the other should make "make" work.
>
> Details (note - I am not a programmer, so by definition at least one of
> my "macros" will be wrong :)
>
> AIX and xlc
> root@x066:[/]xlc -qshowmacros -E /dev/null | grep -i endi
> 1506-297 (S) Unable to open input file null. A file or directory in the
> path name does not exist..
> #define __HHW_BIG_ENDIAN__ 1
> #define __BIG_ENDIAN__ 1
> #define __THW_BIG_ENDIAN__ 1
> #define _BIG_ENDIAN 1
>
> On SLES12 (le) and xlc
> suse12test:~/images/littleEndian/sles # xlc -qshowmacros -dM -E x.c |
> grep -i endi
> #define _LITTLE_ENDIAN 1
> #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
> #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
> #define __LITTLE_ENDIAN__ 1
> #define __ORDER_BIG_ENDIAN__ 4321
> #define __ORDER_LITTLE_ENDIAN__ 1234
> #define __ORDER_PDP_ENDIAN__ 3412
> #define __VEC_ELEMENT_REG_ORDER__ __ORDER_LITTLE_ENDIAN__
>
>
> Based on what I can see on gcc on POWER and xlc on POWER I think an
> approach (simplified) can be:
>
> #if undefined(_BIG_ENDIAN) && undef(_LITTLE_ENDIAN)
> #error "one of _BIG_ENDIAN or _LITTLE_ENDIAN must be defined. Try adding
> the correct value to CFLAGS"
> #else defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN)
> #error "Only one of _BIG_ENDIAN and _LITTLE_ENDIAN may be defined, not both"
> #endif
>
> And then logic based on the value set.
> This should also make cross-compile possible by unsetting an incorrect
> default and setting the correct value.

...the real trick is using these macros outside of GCC / glibc and on
older GCC versions. See the github link above, you basically end up with
a whitelist of how it looks on different systems / compilers. Sometimes
both are defined, sometimes only both etc.

It can be done, but as that code shows it's somewhat complex macro soup
to get right.

> p.s. Is there a setting I need to set somewhere so I receive a copy of
> the email sent after it is received by the list. I could send myself a
> copy, but I much prefer it comes from the maillist - as verification it
> was received.

You should get that, but maybe your mailer ignores Message-Ids it
already has, but you can go to https://public-inbox.org/git/ and search
for the Message-Id or your name to see E-Mails you've sent that made it
to the list, e.g.:
https://public-inbox.org/git/?q=aixtools%40felt.demon.nl

  reply	other threads:[~2018-07-31 14:25 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-29 16:44 git broken for AIX somewhere between 2.13.2 and 2.13.3 Michael
2018-07-29 18:10 ` brian m. carlson
2018-07-29 19:46   ` Michael
2018-07-29 20:05     ` Ævar Arnfjörð Bjarmason
2018-07-29 21:40       ` Andreas Schwab
2018-07-30  6:22         ` Michael
     [not found]   ` <2309fa7f-c2d8-ee57-aff5-b9e32d2da609@felt.demon.nl>
     [not found]     ` <20180729192753.GD945730@genre.crustytoothpaste.net>
2018-07-29 19:48       ` Michael
2018-07-29 20:06         ` brian m. carlson
2018-07-29 20:50           ` Michael
2018-07-30  9:39             ` Is detecting endianness at compile-time unworkable? Ævar Arnfjörð Bjarmason
2018-07-30 14:54               ` Junio C Hamano
2018-07-30 18:32                 ` Junio C Hamano
2018-07-30 18:39                   ` Daniel Shumow
2018-07-31 10:06                     ` Michael Felt
2018-08-01  1:35                   ` Eric Wong
2018-08-01  7:16                 ` Ævar Arnfjörð Bjarmason
2018-07-31 10:39               ` Michael Felt
2018-08-01  7:31                 ` Ævar Arnfjörð Bjarmason
2018-08-02 20:50                   ` [PATCH] sha1dc: update from upstream Ævar Arnfjörð Bjarmason
2018-08-02 21:29                     ` Michael Felt (aixtools)
2018-08-02 21:32                     ` Stefan Beller
2018-07-31 12:32               ` Is detecting endianness at compile-time unworkable? Michael Felt
2018-07-31 14:01               ` Michael Felt
2018-07-31 14:25                 ` Ævar Arnfjörð Bjarmason [this message]
2018-07-31 20:06                   ` Michael

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87sh3ztrcb.fsf@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=aixtools@felt.demon.nl \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=sandals@crustytoothpaste.net \
    --cc=shumow@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.