Repository navigation
Building 8.4beta1 fail with clang on x86(64) #15384
Copy link
Copy link
Closed
Description
Description
Attempted to build for Alpine fresh beta and it fails on x86 and x86_64
As I can find it was fixed earlier in #2975
Logs x86_64
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:149:2: error: always_inline function '_mm_sha256rnds2_epu32' requires target feature 'sha', but would be inlined into function 'SHA256_Transform_shani' that is compiled without support for 'sha'
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:103:2: note: expanded from macro 'RNDMSG'
103 | RND4(S, W[i % 4], K0, K1, K2, K3); \
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:90:9: note: expanded from macro 'RND4'
90 | S[0] = _mm_sha256rnds2_epu32(S[0], S[1], M); \
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:149:2: error: always_inline function '_mm_sha256msg1_epu32' requires target feature 'sha', but would be inlined into function 'SHA256_Transform_shani' that is compiled without support for 'sha'
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:105:3: note: expanded from macro 'RNDMSG'
105 | MSG4(W, i + 4); \
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:95:19: note: expanded from macro 'MSG4'
95 | W[(i + 0) % 4] = _mm_sha256msg1_epu32(W[(i + 0) % 4], W[(i + 1) % 4]); \
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:149:2: error: '__builtin_ia32_palignr128' needs target feature ssse3
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:105:3: note: expanded from macro 'RNDMSG'
105 | MSG4(W, i + 4); \
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/hash/hash_sha_ni.c:97:6: note: expanded from macro 'MSG4'
97 | _mm_alignr_epi8(W[(i + 3) % 4], W[(i + 2) % 4], 4)); \
| ^
/usr/lib/llvm18/lib/clang/18/include/tmmintrin.h:157:13: note: expanded from macro '_mm_alignr_epi8'
157 | ((__m128i)__builtin_ia32_palignr128((__v16qi)(__m128i)(a), \
| ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
and x86
In file included from /builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/spl/spl_fixedarray.c:22:
In file included from /builds/alpine/aports/testing/php84/src/php-8.4.0beta1/main/php.h:31:
In file included from /builds/alpine/aports/testing/php84/src/php-8.4.0beta1/Zend/zend.h:34:
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/Zend/zend_ast.h:252:21: warning: fastcall calling convention is not supported on variadic function [-Wignored-attributes]
252 | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_n(unsigned kind, ...);
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/Zend/zend_portability.h:306:39: note: expanded from macro 'ZEND_FASTCALL'
306 | # define ZEND_FASTCALL __attribute__((fastcall))
| ^
In file included from /builds/alpine/aports/testing/php84/src/php-8.4.0beta1/ext/spl/spl_fixedarray.c:22:
In file included from /builds/alpine/aports/testing/php84/src/php-8.4.0beta1/main/php.h:31:
In file included from /builds/alpine/aports/testing/php84/src/php-8.4.0beta1/Zend/zend.h:34:
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/Zend/zend_ast.h:253:21: warning: fastcall calling convention is not supported on variadic function [-Wignored-attributes]
253 | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_ex_n(zend_ast_kind kind, unsigned attr, ...);
| ^
/builds/alpine/aports/testing/php84/src/php-8.4.0beta1/Zend/zend_portability.h:306:39: note: expanded from macro 'ZEND_FASTCALL'
306 | # define ZEND_FASTCALL __attribute__((fastcall))
| ^
2 warnings generated.
PHP Version
PHP 8.4.0beta1
Operating System
Alpinelinux
Reactions are currently unavailable
Activity
TimWolla commentedon Aug 13, 2024
The first one is related to #15152.
petk commentedon Aug 13, 2024
Here, for the SHA-NI related errors, setting some additional CFLAGS like
-march=nativeor-msha -mssse3resolves the error.For example:
But we probably need to add that also to the build system files somewhere appropriately. Basically, only hash_sha_ni.c file needs additional compile options (was quickly tested in CMake and works ok).
As for the 2nd error on 32-bit build, attributes are not defined properly in zend_portability.h. This check is a bit basic if you ask me:
cmb69 commentedon Aug 13, 2024
Yeah, but dynamic detection of the CPU features is supposed to be supported. Might be able to solve this with #15312 (when finished).
I don't think FASTCALL makes sense for variadic functions. See #15389.
petk commentedon Aug 13, 2024
Ok. I see. Better, yes. Thanks.
cmb69 commentedon Aug 13, 2024
@andypost, can you please retry the x86 build with latest master (having 65c6d72)?
arnaud-lb commentedon Aug 13, 2024
I confirm the problem on Alpine. Unfortunately, 65c6d72 doesn't solve the first error.
It seems the issue is that
PHP_HASH_INTRIN_SHA_RESOLVERis not defined so we don't declareSHA256_Transform_shaniwith__attribute__((target("ssse3,sha")))inphp-src/ext/hash/hash_sha_ni.c
Lines 34 to 36 in bf1b0eb
PHP_HASH_INTRIN_SHA_RESOLVERis not defined becauseHAVE_FUNC_ATTRIBUTE_TARGETis not defined, because we explicitly exclude musl inphp-src/configure.ac
Lines 524 to 527 in bf1b0eb
Removing the musl exclusion fixes the problem for me (after 65c6d72). I don't know if ifuncs are well supported by musl, but I assume that
__attribute__((target))doesn't rely on the libc, so we may check it on all hosts?I think we should not compile
SHA256_Transform_shaniat all whenPHP_HASH_INTRIN_SHA_RESOLVERis not defined.cmb69 commentedon Aug 13, 2024
@arnaud-lb, please see #15312, which is work in progress. Originally meant to support dynamic SHANI detection for MSVC, but may be extended. Especially see #15312 (comment) what might solve the problem (I hadn't had time to address that yet).
PS: oh, and feel free to commit fixes to that PR. :)
arnaud-lb commentedon Aug 13, 2024
Oh nice. #15312 fixes the Alpine issue for me 👍 I will take a closer look tomorrow
andypost commentedon Aug 13, 2024
Used patch with variadics and gonna add #15312 next, meantime build using gcc14 fails on x86 as well
7 remaining items
NattyNarwhal commentedon Aug 14, 2024
FWIW I've been using clang on Mac, but breaking on x86 is obviously pretty bad.
If things are in a good state right now, I'll build a beta2.
TimWolla commentedon Aug 14, 2024
To clarify: This is not a clang issue, but a non-glibc issue.
petk commentedon Aug 14, 2024
It's safe to tag a beta2, yes, with what is in master branch. Not ideal like a final release, but a nice beta2 state.
andypost commentedon Aug 14, 2024
Confirm, that 2 patches in enough to pass for 8 arches
petk commentedon Aug 14, 2024
@NattyNarwhal can you just recheck if correct patches are in the current beta 2 tag? Because it seems that this one isn't added yet.
TimWolla commentedon Aug 14, 2024
Indeed. It appears that the
php-8.4.0beta2tag effectively is a copy of thephp-8.4.0beta1tag.Edit: Not quite a copy, because of the commit Ilija snuck in during the release procedure, but definitely not up to date.
NattyNarwhal commentedon Aug 14, 2024
Ugh, I had a git incident and it branched from the wrong point. I can push beta2 again, or would it be better to just call it beta3?
TimWolla commentedon Aug 14, 2024
Tag replacement is a no-no, because folks might already have the broken tag. It (unfortunately) should be a Beta 3.
andypost commentedon Aug 14, 2024
Oh, yep, looks beta3 is better option
NattyNarwhal commentedon Aug 14, 2024
I'm pushing beta3, which should have the actual fix. Sorry for the embarrassing git mistake.
andypost commentedon Aug 14, 2024
Thank you! Awaiting announce to start fixing Drupal for compatibility) Meantime all arches passed on Alpinelinux
petk commentedon Aug 15, 2024
I've just remembered and sorry about polluting this PR here. Should the API numbers like ZEND_MODULE_API_NO, PHP_API_VERSION, ZEND_VERSION and similar be also bumped or does this happen in RC phase?
EDIT: Ah, ok! That is done in the RC1 (noted in the release-process.md file). All good then.
NattyNarwhal commentedon Aug 15, 2024
Yeah, I have to keep double-checking, but: