Re: [PATCH] sha1dc: fix for compiling on AIX using IBM XLC compiler
(cc-ing Marc Stevens for real this time. Sorry for the noise) Ævar Arnfjörð Bjarmason wrote: > On Wed, May 09 2018, jens persson wrote: >> Hello, first patch. I'm having trouble compiling on AIX using IBMs >> compiler, leading to >> unusable binaries. The following patch solved the problem for 2.17.0. >> The patch below is cut via gmail to allow for firewalls, but >> exists in an unmolested form on github: >> https://github.com/MrShark/git/commit/44bfcaca6637e24548ec06f46fb6035a846b14af >> >> Best regards >> /jp Thanks for the patch. >> Building on AIX using XLC every checkout gives an error: >> fatal: pack is corrupted (SHA1 mismatch) >> fatal: index-pack failed >> >> Back tracking it was introduced in 2.13.2, most likely in [1] >> >> Add a #ifdef guard based on macros defined at [2] and [3]. >> >> Should perhaps __xlc__ should should be changed to or combined with _AIX >> based on the behavour of GCC on AIX or XL C on Linux. >> >> 1. https://github.com/git/git/commit/6b851e536b05e0c8c61f77b9e4c3e7cedea39ff8 >> 2. >> https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/macros_platform.html >> 3. >> https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/xlmacros.html >> >> Signed-off-by: jens persson>> --- >> sha1dc/sha1.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c >> index 25eded139..68a8a0180 100644 >> --- a/sha1dc/sha1.c >> +++ b/sha1dc/sha1.c >> @@ -84,7 +84,7 @@ >> /* Not under GCC-alike or glibc or *BSD or newlib */ >> #elif (defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) >> || \ >> defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ >> - defined(__sparc)) >> + defined(__sparc) || (defined(__powerpc) && defined(__xlc__))) I wonder if there's a simpler way to detect this. __powerpc seems orthogonal to the goal, since there are little-endian powerpc machines. It appears that XLC defines _BIG_ENDIAN on big-endian machines. I wonder if we should do #elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) ... as today ... #elif !defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) # define SHA1DC_BIGENDIAN #elif !defined(_BYTE_ORDER) && !defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) /* little endian. */ #else ... It also seems to me that Git should enable the #error in the fallthrough case. The test suite would catch this kind of problem but it does not seem that everyone runs the test suite, so a compiler error is more robust. Is there a #define we can set to enable that? >> /* >> * Should define Big Endian for a whitelist of known processors. See >> * https://sourceforge.net/p/predef/wiki/Endianness/ and > > This patch looks sane to me, but we don't manage this software but > instead try to pull it as-is from upstream at > https://github.com/cr-marcstevens/sha1collisiondetection > > Which we could apply this, it would be much better if you could submit a > pull request with this to upstream, and then we can update our copy as I > did in e.g. 9936c1b52a ("sha1dc: update from upstream", 2017-07-01). Thanks, Jonathan
Re: [PATCH] sha1dc: fix for compiling on AIX using IBM XLC compiler
(+cc: Marc Stevens) Ævar Arnfjörð Bjarmason wrote: > On Wed, May 09 2018, jens persson wrote: >> Hello, first patch. I'm having trouble compiling on AIX using IBMs >> compiler, leading to >> unusable binaries. The following patch solved the problem for 2.17.0. >> The patch below is cut via gmail to allow for firewalls, but >> exists in an unmolested form on github: >> https://github.com/MrShark/git/commit/44bfcaca6637e24548ec06f46fb6035a846b14af >> >> Best regards >> /jp Thanks for the patch. >> Building on AIX using XLC every checkout gives an error: >> fatal: pack is corrupted (SHA1 mismatch) >> fatal: index-pack failed >> >> Back tracking it was introduced in 2.13.2, most likely in [1] >> >> Add a #ifdef guard based on macros defined at [2] and [3]. >> >> Should perhaps __xlc__ should should be changed to or combined with _AIX >> based on the behavour of GCC on AIX or XL C on Linux. >> >> 1. https://github.com/git/git/commit/6b851e536b05e0c8c61f77b9e4c3e7cedea39ff8 >> 2. >> https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/macros_platform.html >> 3. >> https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/xlmacros.html >> >> Signed-off-by: jens persson>> --- >> sha1dc/sha1.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c >> index 25eded139..68a8a0180 100644 >> --- a/sha1dc/sha1.c >> +++ b/sha1dc/sha1.c >> @@ -84,7 +84,7 @@ >> /* Not under GCC-alike or glibc or *BSD or newlib */ >> #elif (defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) >> || \ >> defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ >> - defined(__sparc)) >> + defined(__sparc) || (defined(__powerpc) && defined(__xlc__))) I wonder if there's a simpler way to detect this. __powerpc seems orthogonal to the goal, since there are little-endian powerpc machines. It appears that XLC defines _BIG_ENDIAN on big-endian machines. I wonder if we should do #elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) ... as today ... #elif !defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) # define SHA1DC_BIGENDIAN #elif !defined(_BYTE_ORDER) && !defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) /* little endian. */ #else ... It also seems to me that Git should enable the #error in the fallthrough case. The test suite would catch this kind of problem but it does not seem that everyone runs the test suite, so a compiler error is more robust. Is there a #define we can set to enable that? >> /* >> * Should define Big Endian for a whitelist of known processors. See >> * https://sourceforge.net/p/predef/wiki/Endianness/ and > > This patch looks sane to me, but we don't manage this software but > instead try to pull it as-is from upstream at > https://github.com/cr-marcstevens/sha1collisiondetection > > Which we could apply this, it would be much better if you could submit a > pull request with this to upstream, and then we can update our copy as I > did in e.g. 9936c1b52a ("sha1dc: update from upstream", 2017-07-01). Thanks, Jonathan
Re: [PATCH] sha1dc: fix for compiling on AIX using IBM XLC compiler
On Wed, May 09 2018, jens persson wrote: > Hello, first patch. I'm having trouble compiling on AIX using IBMs > compiler, leading to > unusable binaries. The following patch solved the problem for 2.17.0. > The patch below is cut via gmail to allow for firewalls, but > exists in an unmolested form on github: > https://github.com/MrShark/git/commit/44bfcaca6637e24548ec06f46fb6035a846b14af > > Best regards > /jp > > Building on AIX using XLC every checkout gives an error: > fatal: pack is corrupted (SHA1 mismatch) > fatal: index-pack failed > > Back tracking it was introduced in 2.13.2, most likely in [1] > > Add a #ifdef guard based on macros defined at [2] and [3]. > > Should perhaps __xlc__ should should be changed to or combined with _AIX > based on the behavour of GCC on AIX or XL C on Linux. > > 1. https://github.com/git/git/commit/6b851e536b05e0c8c61f77b9e4c3e7cedea39ff8 > 2. > https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/macros_platform.html > 3. > https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/xlmacros.html > > Signed-off-by: jens persson> --- > sha1dc/sha1.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c > index 25eded139..68a8a0180 100644 > --- a/sha1dc/sha1.c > +++ b/sha1dc/sha1.c > @@ -84,7 +84,7 @@ > /* Not under GCC-alike or glibc or *BSD or newlib */ > #elif (defined(__ARMEB__) || defined(__THUMBEB__) || > defined(__AARCH64EB__) || \ > defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ > - defined(__sparc)) > + defined(__sparc) || (defined(__powerpc) && defined(__xlc__))) > /* > * Should define Big Endian for a whitelist of known processors. See > * https://sourceforge.net/p/predef/wiki/Endianness/ and This patch looks sane to me, but we don't manage this software but instead try to pull it as-is from upstream at https://github.com/cr-marcstevens/sha1collisiondetection Which we could apply this, it would be much better if you could submit a pull request with this to upstream, and then we can update our copy as I did in e.g. 9936c1b52a ("sha1dc: update from upstream", 2017-07-01).
[PATCH] sha1dc: fix for compiling on AIX using IBM XLC compiler
Hello, first patch. I'm having trouble compiling on AIX using IBMs compiler, leading to unusable binaries. The following patch solved the problem for 2.17.0. The patch below is cut via gmail to allow for firewalls, but exists in an unmolested form on github: https://github.com/MrShark/git/commit/44bfcaca6637e24548ec06f46fb6035a846b14af Best regards /jp Building on AIX using XLC every checkout gives an error: fatal: pack is corrupted (SHA1 mismatch) fatal: index-pack failed Back tracking it was introduced in 2.13.2, most likely in [1] Add a #ifdef guard based on macros defined at [2] and [3]. Should perhaps __xlc__ should should be changed to or combined with _AIX based on the behavour of GCC on AIX or XL C on Linux. 1. https://github.com/git/git/commit/6b851e536b05e0c8c61f77b9e4c3e7cedea39ff8 2. https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/macros_platform.html 3. https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/xlmacros.html Signed-off-by: jens persson--- sha1dc/sha1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c index 25eded139..68a8a0180 100644 --- a/sha1dc/sha1.c +++ b/sha1dc/sha1.c @@ -84,7 +84,7 @@ /* Not under GCC-alike or glibc or *BSD or newlib */ #elif (defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ - defined(__sparc)) + defined(__sparc) || (defined(__powerpc) && defined(__xlc__))) /* * Should define Big Endian for a whitelist of known processors. See * https://sourceforge.net/p/predef/wiki/Endianness/ and -- 2.11.0 -- jens persson Mäster Olofsväg 24 S-224 66 LUND;SWEDEN