Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation issues with RHEL8-arm64 and recent V8 #3595

Open
targos opened this issue Dec 18, 2023 · 11 comments
Open

Compilation issues with RHEL8-arm64 and recent V8 #3595

targos opened this issue Dec 18, 2023 · 11 comments

Comments

@targos
Copy link
Member

targos commented Dec 18, 2023

V8 11.9, on test-equinix-rhel8_container-arm64-1 (GCC 10.3.1): https://ci.nodejs.org/job/node-test-commit-arm/50511/nodes=rhel8-arm64/console

12:31:12   ccache g++ -o /home/iojs/build/workspace/node-test-commit-arm/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/heap/base/memory-tagging.o ../deps/v8/src/heap/base/memory-tagging.cc '-D_GLIBCXX_USE_CXX11_ABI=1' '-DNODE_OPENSSL_CONF_NAME=nodejs_conf' '-DNODE_OPENSSL_HAS_QUIC' '-DICU_NO_USER_DATA_OVERRIDE' '-DV8_GYP_BUILD' '-DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DV8_TARGET_ARCH_ARM64' '-DV8_HAVE_TARGET_OS' '-DV8_TARGET_OS_LINUX' '-DV8_EMBEDDER_STRING="-node.11"' '-DENABLE_DISASSEMBLER' '-DV8_PROMISE_INTERNAL_FIELD_COUNT=1' '-DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION' '-DOBJECT_PRINT' '-DV8_INTL_SUPPORT' '-DV8_ATOMIC_OBJECT_FIELD_WRITES' '-DV8_ENABLE_LAZY_SOURCE_POSITIONS' '-DV8_USE_SIPHASH' '-DV8_SHARED_RO_HEAP' '-DV8_WIN64_UNWINDING_INFO' '-DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH' '-DV8_USE_ZLIB' '-DV8_ENABLE_TURBOFAN' '-DV8_ENABLE_WEBASSEMBLY' '-DV8_ENABLE_JAVASCRIPT_PROMISE_HOOKS' '-DV8_ALLOCATION_FOLDING' '-DV8_ALLOCATION_SITE_TRACKING' '-DV8_ADVANCED_BIGINT_ALGORITHMS' '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' '-DUCONFIG_NO_SERVICE=1' '-DU_ENABLE_DYLOAD=0' '-DU_STATIC_IMPLEMENTATION=1' '-DU_HAVE_STD_STRING=1' '-DUCONFIG_NO_BREAK_ITERATION=0' -I../deps/v8 -I../deps/v8/include -I/home/iojs/build/workspace/node-test-commit-arm/out/Release/obj/gen/inspector-generated-output-root -I../deps/v8/third_party/inspector_protocol -I/home/iojs/build/workspace/node-test-commit-arm/out/Release/obj/gen -I/home/iojs/build/workspace/node-test-commit-arm/out/Release/obj/gen/generate-bytecode-output-root -I../deps/icu-small/source/i18n -I../deps/icu-small/source/common -I../deps/v8/third_party/zlib -I../deps/v8/third_party/zlib/google  -msign-return-address=all -pthread -Wno-unused-parameter -Wno-return-type -Wno-invalid-offsetof -fno-strict-aliasing -O3 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++17 -MMD -MF /home/iojs/build/workspace/node-test-commit-arm/out/Release/.deps//home/iojs/build/workspace/node-test-commit-arm/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/heap/base/memory-tagging.o.d.raw   -c
12:31:13 g++: warning: switch '-msign-return-address=all' is no longer supported
12:31:13 /tmp/ccxx9WKm.s: Assembler messages:
12:31:13 /tmp/ccxx9WKm.s:32: Error: unknown architectural extension `memtag'
12:31:13 /tmp/ccxx9WKm.s:32: Error: unknown or missing system register name at operand 1 -- `msr tco,#1'
12:31:13 /tmp/ccxx9WKm.s:81: Error: unknown architectural extension `memtag'
12:31:13 /tmp/ccxx9WKm.s:81: Error: unknown or missing system register name at operand 2 -- `mrs x1,tco'
12:31:13 /tmp/ccxx9WKm.s:89: Error: unknown architectural extension `memtag'
12:31:13 /tmp/ccxx9WKm.s:89: Error: unknown or missing system register name at operand 1 -- `msr tco,#0'
12:31:13 make[2]: *** [tools/v8_gypfiles/v8_base_without_compiler.target.mk:1096: /home/iojs/build/workspace/node-test-commit-arm/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/heap/base/memory-tagging.o] Error 1

V8 canary, on release-osuosl-rhel8-arm64-1 (GCC 10.3.1): https://ci-release.nodejs.org/job/iojs+release/9842/nodes=rhel8-arm64-release/console

11:08:41   ccache g++ -o /home/iojs/build/ws/out/Release/obj.target/v8_compiler/deps/v8/src/compiler/access-builder.o ../deps/v8/src/compiler/access-builder.cc '-D_GLIBCXX_USE_CXX11_ABI=1' '-DNODE_OPENSSL_CONF_NAME=nodejs_conf' '-DNODE_OPENSSL_HAS_QUIC' '-DICU_NO_USER_DATA_OVERRIDE' '-DV8_GYP_BUILD' '-DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DV8_TARGET_ARCH_ARM64' '-DV8_HAVE_TARGET_OS' '-DV8_TARGET_OS_LINUX' '-DV8_EMBEDDER_STRING="-node.6"' '-DENABLE_DISASSEMBLER' '-DV8_PROMISE_INTERNAL_FIELD_COUNT=1' '-DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION' '-DOBJECT_PRINT' '-DV8_INTL_SUPPORT' '-DV8_ATOMIC_OBJECT_FIELD_WRITES' '-DV8_ENABLE_LAZY_SOURCE_POSITIONS' '-DV8_USE_SIPHASH' '-DV8_SHARED_RO_HEAP' '-DNDEBUG' '-DV8_WIN64_UNWINDING_INFO' '-DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH' '-DV8_USE_ZLIB' '-DV8_ENABLE_SPARKPLUG' '-DV8_ENABLE_TURBOFAN' '-DV8_ENABLE_WEBASSEMBLY' '-DV8_ENABLE_JAVASCRIPT_PROMISE_HOOKS' '-DV8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA' '-DV8_ALLOCATION_FOLDING' '-DV8_ALLOCATION_SITE_TRACKING' '-DV8_ADVANCED_BIGINT_ALGORITHMS' '-DUCONFIG_NO_SERVICE=1' '-DU_ENABLE_DYLOAD=0' '-DU_STATIC_IMPLEMENTATION=1' '-DU_HAVE_STD_STRING=1' '-DUCONFIG_NO_BREAK_ITERATION=0' -I../deps/v8 -I../deps/v8/include -I/home/iojs/build/ws/out/Release/obj/gen/generate-bytecode-output-root -I/home/iojs/build/ws/out/Release/obj/gen -I../deps/icu-small/source/i18n -I../deps/icu-small/source/common -I../deps/v8/third_party/abseil-cpp  -msign-return-address=all -pthread -Wno-unused-parameter -Wno-return-type -Wno-invalid-offsetof -fno-strict-aliasing -O3 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++17 -MMD -MF /home/iojs/build/ws/out/Release/.deps//home/iojs/build/ws/out/Release/obj.target/v8_compiler/deps/v8/src/compiler/access-builder.o.d.raw   -c
11:09:14 g++: warning: switch ‘-msign-return-address=all’ is no longer supported
11:09:14 In file included from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
11:09:14                  from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
11:09:14                  from ../deps/v8/src/codegen/register-arch.h:15,
11:09:14                  from ../deps/v8/src/codegen/register.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/translated-state.h:11,
11:09:14                  from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-frames.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-evaluate.h:12,
11:09:14                  from ../deps/v8/src/init/setup-isolate-full.cc:6:
11:09:14 ../deps/v8/src/utils/utils.h: In instantiation of ‘bool v8::internal::SimdMemEqual(const Char*, const Char*, size_t) [with Char = unsigned char; size_t = long unsigned int]’:
11:09:14 ../deps/v8/src/utils/utils.h:400:26:   required from ‘bool v8::internal::CompareCharsEqualUnsigned(const lchar*, const rchar*, size_t) [with lchar = unsigned char; rchar = unsigned char; size_t = long unsigned int]’
11:09:14 ../deps/v8/src/utils/utils.h:418:35:   required from ‘bool v8::internal::CompareCharsEqual(const lchar*, const rchar*, size_t) [with lchar = unsigned char; rchar = char; size_t = long unsigned int]’
11:09:14 ../deps/v8/src/objects/string-inl.h:555:33:   required from ‘bool v8::internal::String::IsEqualToImpl(v8::base::Vector<const Char>, v8::internal::PtrComprCageBase, const v8::internal::SharedStringAccessGuardIfNeeded&) const [with v8::internal::String::EqualityType kEqType = v8::internal::String::EqualityType::kWholeString; Char = char]’
11:09:14 ../deps/v8/src/objects/string-inl.h:518:32:   required from ‘bool v8::internal::String::IsEqualTo(v8::base::Vector<const Char>) const [with v8::internal::String::EqualityType kEqType = v8::internal::String::EqualityType::kWholeString; Char = char]’
11:09:14 ../deps/v8/src/objects/string-inl.h:640:23:   required from here
11:09:14 ../deps/v8/src/utils/utils.h:368:47: note: use ‘-flax-vector-conversions’ to permit conversions between vectors with differing element types or numbers of subparts
11:09:14   368 |       return !static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(ored, ored), 0));
11:09:14       |                                 ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
11:09:14 ../deps/v8/src/utils/utils.h:368:57: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
11:09:14   368 |       return !static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(ored, ored), 0));
11:09:14       |                                                ~~~~~~~~~^~~~~~~~~~~~
11:09:14       |                                                         |
11:09:14       |                                                         uint8x16_t
11:09:14 In file included from ../deps/v8/src/utils/utils.h:35,
11:09:14                  from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
11:09:14                  from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
11:09:14                  from ../deps/v8/src/codegen/register-arch.h:15,
11:09:14                  from ../deps/v8/src/codegen/register.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/translated-state.h:11,
11:09:14                  from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-frames.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-evaluate.h:12,
11:09:14                  from ../deps/v8/src/init/setup-isolate-full.cc:6:
11:09:14 /opt/rh/gcc-toolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
11:09:14  3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
11:09:14       |                 ~~~~~~~~~~~^~~
11:09:14 In file included from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
11:09:14                  from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
11:09:14                  from ../deps/v8/src/codegen/register-arch.h:15,
11:09:14                  from ../deps/v8/src/codegen/register.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/translated-state.h:11,
11:09:14                  from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-frames.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-evaluate.h:12,
11:09:14                  from ../deps/v8/src/init/setup-isolate-full.cc:6:
11:09:14 ../deps/v8/src/utils/utils.h:375:53: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
11:09:14   375 |       if (static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(xored, xored), 0)))
11:09:14       |                                            ~~~~~~~~~^~~~~~~~~~~~~~
11:09:14       |                                                     |
11:09:14       |                                                     uint8x16_t
11:09:14 In file included from ../deps/v8/src/utils/utils.h:35,
11:09:14                  from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
11:09:14                  from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
11:09:14                  from ../deps/v8/src/codegen/register-arch.h:15,
11:09:14                  from ../deps/v8/src/codegen/register.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/translated-state.h:11,
11:09:14                  from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-frames.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-evaluate.h:12,
11:09:14                  from ../deps/v8/src/init/setup-isolate-full.cc:6:
11:09:14 /opt/rh/gcc-toolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
11:09:14  3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
11:09:14       |                 ~~~~~~~~~~~^~~
11:09:14 In file included from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
11:09:14                  from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
11:09:14                  from ../deps/v8/src/codegen/register-arch.h:15,
11:09:14                  from ../deps/v8/src/codegen/register.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/translated-state.h:11,
11:09:14                  from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-frames.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-evaluate.h:12,
11:09:14                  from ../deps/v8/src/init/setup-isolate-full.cc:6:
11:09:14 ../deps/v8/src/utils/utils.h:382:55: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
11:09:14   382 |         if (static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(xored, xored), 0)))
11:09:14       |                                              ~~~~~~~~~^~~~~~~~~~~~~~
11:09:14       |                                                       |
11:09:14       |                                                       uint8x16_t
11:09:14 In file included from ../deps/v8/src/utils/utils.h:35,
11:09:14                  from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
11:09:14                  from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
11:09:14                  from ../deps/v8/src/codegen/register-arch.h:15,
11:09:14                  from ../deps/v8/src/codegen/register.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
11:09:14                  from ../deps/v8/src/deoptimizer/translated-state.h:11,
11:09:14                  from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-frames.h:10,
11:09:14                  from ../deps/v8/src/debug/debug-evaluate.h:12,
11:09:14                  from ../deps/v8/src/init/setup-isolate-full.cc:6:
11:09:14 /opt/rh/gcc-toolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
11:09:14  3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
11:09:14       |                 ~~~~~~~~~~~^~~
11:09:14 make[2]: *** [tools/v8_gypfiles/v8_init.target.mk:175: /home/iojs/build/ws/out/Release/obj.target/v8_init/deps/v8/src/init/setup-isolate-full.o] Error 1
11:09:14 make[2]: *** Waiting for unfinished jobs....
11:09:18 g++: warning: switch ‘-msign-return-address=all’ is no longer supported
11:09:18 In file included from ../deps/v8/src/objects/field-index.h:11,
11:09:18                  from ../deps/v8/src/objects/objects.h:26,
11:09:18                  from ../deps/v8/src/objects/tagged-value.h:8,
11:09:18                  from ../deps/v8/src/objects/tagged-field.h:10,
11:09:18                  from ../deps/v8/src/objects/heap-object.h:11,
11:09:18                  from ../deps/v8/src/heap/marking.h:12,
11:09:18                  from ../deps/v8/src/heap/basic-memory-chunk.h:16,
11:09:18                  from ../deps/v8/src/heap/memory-chunk.h:14,
11:09:18                  from ../deps/v8/src/common/code-memory-access.h:15,
11:09:18                  from ../deps/v8/src/codegen/reloc-info.h:9,
11:09:18                  from ../deps/v8/src/compiler/common-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/js-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/access-builder.h:9,
11:09:18                  from ../deps/v8/src/compiler/access-builder.cc:5:
11:09:18 ../deps/v8/src/utils/utils.h: In instantiation of ‘bool v8::internal::SimdMemEqual(const Char*, const Char*, size_t) [with Char = unsigned char; size_t = long unsigned int]’:
11:09:18 ../deps/v8/src/utils/utils.h:400:26:   required from ‘bool v8::internal::CompareCharsEqualUnsigned(const lchar*, const rchar*, size_t) [with lchar = unsigned char; rchar = unsigned char; size_t = long unsigned int]’
11:09:18 ../deps/v8/src/utils/utils.h:418:35:   required from ‘bool v8::internal::CompareCharsEqual(const lchar*, const rchar*, size_t) [with lchar = unsigned char; rchar = char; size_t = long unsigned int]’
11:09:18 ../deps/v8/src/objects/string-inl.h:555:33:   required from ‘bool v8::internal::String::IsEqualToImpl(v8::base::Vector<const Char>, v8::internal::PtrComprCageBase, const v8::internal::SharedStringAccessGuardIfNeeded&) const [with v8::internal::String::EqualityType kEqType = v8::internal::String::EqualityType::kWholeString; Char = char]’
11:09:18 ../deps/v8/src/objects/string-inl.h:518:32:   required from ‘bool v8::internal::String::IsEqualTo(v8::base::Vector<const Char>) const [with v8::internal::String::EqualityType kEqType = v8::internal::String::EqualityType::kWholeString; Char = char]’
11:09:18 ../deps/v8/src/objects/string-inl.h:640:23:   required from here
11:09:18 ../deps/v8/src/utils/utils.h:368:47: note: use ‘-flax-vector-conversions’ to permit conversions between vectors with differing element types or numbers of subparts
11:09:18   368 |       return !static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(ored, ored), 0));
11:09:18       |                                 ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
11:09:18 ../deps/v8/src/utils/utils.h:368:57: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
11:09:18   368 |       return !static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(ored, ored), 0));
11:09:18       |                                                ~~~~~~~~~^~~~~~~~~~~~
11:09:18       |                                                         |
11:09:18       |                                                         uint8x16_t
11:09:18 In file included from ../deps/v8/src/utils/utils.h:35,
11:09:18                  from ../deps/v8/src/objects/field-index.h:11,
11:09:18                  from ../deps/v8/src/objects/objects.h:26,
11:09:18                  from ../deps/v8/src/objects/tagged-value.h:8,
11:09:18                  from ../deps/v8/src/objects/tagged-field.h:10,
11:09:18                  from ../deps/v8/src/objects/heap-object.h:11,
11:09:18                  from ../deps/v8/src/heap/marking.h:12,
11:09:18                  from ../deps/v8/src/heap/basic-memory-chunk.h:16,
11:09:18                  from ../deps/v8/src/heap/memory-chunk.h:14,
11:09:18                  from ../deps/v8/src/common/code-memory-access.h:15,
11:09:18                  from ../deps/v8/src/codegen/reloc-info.h:9,
11:09:18                  from ../deps/v8/src/compiler/common-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/js-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/access-builder.h:9,
11:09:18                  from ../deps/v8/src/compiler/access-builder.cc:5:
11:09:18 /opt/rh/gcc-toolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
11:09:18  3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
11:09:18       |                 ~~~~~~~~~~~^~~
11:09:18 In file included from ../deps/v8/src/objects/field-index.h:11,
11:09:18                  from ../deps/v8/src/objects/objects.h:26,
11:09:18                  from ../deps/v8/src/objects/tagged-value.h:8,
11:09:18                  from ../deps/v8/src/objects/tagged-field.h:10,
11:09:18                  from ../deps/v8/src/objects/heap-object.h:11,
11:09:18                  from ../deps/v8/src/heap/marking.h:12,
11:09:18                  from ../deps/v8/src/heap/basic-memory-chunk.h:16,
11:09:18                  from ../deps/v8/src/heap/memory-chunk.h:14,
11:09:18                  from ../deps/v8/src/common/code-memory-access.h:15,
11:09:18                  from ../deps/v8/src/codegen/reloc-info.h:9,
11:09:18                  from ../deps/v8/src/compiler/common-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/js-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/access-builder.h:9,
11:09:18                  from ../deps/v8/src/compiler/access-builder.cc:5:
11:09:18 ../deps/v8/src/utils/utils.h:375:53: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
11:09:18   375 |       if (static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(xored, xored), 0)))
11:09:18       |                                            ~~~~~~~~~^~~~~~~~~~~~~~
11:09:18       |                                                     |
11:09:18       |                                                     uint8x16_t
11:09:18 In file included from ../deps/v8/src/utils/utils.h:35,
11:09:18                  from ../deps/v8/src/objects/field-index.h:11,
11:09:18                  from ../deps/v8/src/objects/objects.h:26,
11:09:18                  from ../deps/v8/src/objects/tagged-value.h:8,
11:09:18                  from ../deps/v8/src/objects/tagged-field.h:10,
11:09:18                  from ../deps/v8/src/objects/heap-object.h:11,
11:09:18                  from ../deps/v8/src/heap/marking.h:12,
11:09:18                  from ../deps/v8/src/heap/basic-memory-chunk.h:16,
11:09:18                  from ../deps/v8/src/heap/memory-chunk.h:14,
11:09:18                  from ../deps/v8/src/common/code-memory-access.h:15,
11:09:18                  from ../deps/v8/src/codegen/reloc-info.h:9,
11:09:18                  from ../deps/v8/src/compiler/common-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/js-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/access-builder.h:9,
11:09:18                  from ../deps/v8/src/compiler/access-builder.cc:5:
11:09:18 /opt/rh/gcc-toolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
11:09:18  3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
11:09:18       |                 ~~~~~~~~~~~^~~
11:09:18 In file included from ../deps/v8/src/objects/field-index.h:11,
11:09:18                  from ../deps/v8/src/objects/objects.h:26,
11:09:18                  from ../deps/v8/src/objects/tagged-value.h:8,
11:09:18                  from ../deps/v8/src/objects/tagged-field.h:10,
11:09:18                  from ../deps/v8/src/objects/heap-object.h:11,
11:09:18                  from ../deps/v8/src/heap/marking.h:12,
11:09:18                  from ../deps/v8/src/heap/basic-memory-chunk.h:16,
11:09:18                  from ../deps/v8/src/heap/memory-chunk.h:14,
11:09:18                  from ../deps/v8/src/common/code-memory-access.h:15,
11:09:18                  from ../deps/v8/src/codegen/reloc-info.h:9,
11:09:18                  from ../deps/v8/src/compiler/common-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/js-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/access-builder.h:9,
11:09:18                  from ../deps/v8/src/compiler/access-builder.cc:5:
11:09:18 ../deps/v8/src/utils/utils.h:382:55: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
11:09:18   382 |         if (static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(xored, xored), 0)))
11:09:18       |                                              ~~~~~~~~~^~~~~~~~~~~~~~
11:09:18       |                                                       |
11:09:18       |                                                       uint8x16_t
11:09:18 In file included from ../deps/v8/src/utils/utils.h:35,
11:09:18                  from ../deps/v8/src/objects/field-index.h:11,
11:09:18                  from ../deps/v8/src/objects/objects.h:26,
11:09:18                  from ../deps/v8/src/objects/tagged-value.h:8,
11:09:18                  from ../deps/v8/src/objects/tagged-field.h:10,
11:09:18                  from ../deps/v8/src/objects/heap-object.h:11,
11:09:18                  from ../deps/v8/src/heap/marking.h:12,
11:09:18                  from ../deps/v8/src/heap/basic-memory-chunk.h:16,
11:09:18                  from ../deps/v8/src/heap/memory-chunk.h:14,
11:09:18                  from ../deps/v8/src/common/code-memory-access.h:15,
11:09:18                  from ../deps/v8/src/codegen/reloc-info.h:9,
11:09:18                  from ../deps/v8/src/compiler/common-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/js-operator.h:10,
11:09:18                  from ../deps/v8/src/compiler/access-builder.h:9,
11:09:18                  from ../deps/v8/src/compiler/access-builder.cc:5:
11:09:18 /opt/rh/gcc-toolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
11:09:18  3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
11:09:18       |                 ~~~~~~~~~~~^~~
11:09:18 make[2]: *** [tools/v8_gypfiles/v8_compiler.target.mk:313: /home/iojs/build/ws/out/Release/obj.target/v8_compiler/deps/v8/src/compiler/access-builder.o] Error 1
@richardlau
Copy link
Member

V8 11.9, on test-equinix-rhel8_container-arm64-1 (GCC 10.3.1): https://ci.nodejs.org/job/node-test-commit-arm/50511/nodes=rhel8-arm64/console

12:31:12   ccache g++ -o /home/iojs/build/workspace/node-test-commit-arm/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/heap/base/memory-tagging.o ../deps/v8/src/heap/base/memory-tagging.cc '-D_GLIBCXX_USE_CXX11_ABI=1' '-DNODE_OPENSSL_CONF_NAME=nodejs_conf' '-DNODE_OPENSSL_HAS_QUIC' '-DICU_NO_USER_DATA_OVERRIDE' '-DV8_GYP_BUILD' '-DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DV8_TARGET_ARCH_ARM64' '-DV8_HAVE_TARGET_OS' '-DV8_TARGET_OS_LINUX' '-DV8_EMBEDDER_STRING="-node.11"' '-DENABLE_DISASSEMBLER' '-DV8_PROMISE_INTERNAL_FIELD_COUNT=1' '-DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION' '-DOBJECT_PRINT' '-DV8_INTL_SUPPORT' '-DV8_ATOMIC_OBJECT_FIELD_WRITES' '-DV8_ENABLE_LAZY_SOURCE_POSITIONS' '-DV8_USE_SIPHASH' '-DV8_SHARED_RO_HEAP' '-DV8_WIN64_UNWINDING_INFO' '-DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH' '-DV8_USE_ZLIB' '-DV8_ENABLE_TURBOFAN' '-DV8_ENABLE_WEBASSEMBLY' '-DV8_ENABLE_JAVASCRIPT_PROMISE_HOOKS' '-DV8_ALLOCATION_FOLDING' '-DV8_ALLOCATION_SITE_TRACKING' '-DV8_ADVANCED_BIGINT_ALGORITHMS' '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' '-DUCONFIG_NO_SERVICE=1' '-DU_ENABLE_DYLOAD=0' '-DU_STATIC_IMPLEMENTATION=1' '-DU_HAVE_STD_STRING=1' '-DUCONFIG_NO_BREAK_ITERATION=0' -I../deps/v8 -I../deps/v8/include -I/home/iojs/build/workspace/node-test-commit-arm/out/Release/obj/gen/inspector-generated-output-root -I../deps/v8/third_party/inspector_protocol -I/home/iojs/build/workspace/node-test-commit-arm/out/Release/obj/gen -I/home/iojs/build/workspace/node-test-commit-arm/out/Release/obj/gen/generate-bytecode-output-root -I../deps/icu-small/source/i18n -I../deps/icu-small/source/common -I../deps/v8/third_party/zlib -I../deps/v8/third_party/zlib/google  -msign-return-address=all -pthread -Wno-unused-parameter -Wno-return-type -Wno-invalid-offsetof -fno-strict-aliasing -O3 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++17 -MMD -MF /home/iojs/build/workspace/node-test-commit-arm/out/Release/.deps//home/iojs/build/workspace/node-test-commit-arm/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/heap/base/memory-tagging.o.d.raw   -c
12:31:13 g++: warning: switch '-msign-return-address=all' is no longer supported
12:31:13 /tmp/ccxx9WKm.s: Assembler messages:
12:31:13 /tmp/ccxx9WKm.s:32: Error: unknown architectural extension `memtag'
12:31:13 /tmp/ccxx9WKm.s:32: Error: unknown or missing system register name at operand 1 -- `msr tco,#1'
12:31:13 /tmp/ccxx9WKm.s:81: Error: unknown architectural extension `memtag'
12:31:13 /tmp/ccxx9WKm.s:81: Error: unknown or missing system register name at operand 2 -- `mrs x1,tco'
12:31:13 /tmp/ccxx9WKm.s:89: Error: unknown architectural extension `memtag'
12:31:13 /tmp/ccxx9WKm.s:89: Error: unknown or missing system register name at operand 1 -- `msr tco,#0'
12:31:13 make[2]: *** [tools/v8_gypfiles/v8_base_without_compiler.target.mk:1096: /home/iojs/build/workspace/node-test-commit-arm/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/heap/base/memory-tagging.o] Error 1

Given that https://ci.nodejs.org/job/node-test-commit-arm/50511/nodes=ubuntu2004-arm64/ succeeded I'm wondering if this is an issue with gas (2.30 on rhel-arm64 vs 2.34 on ubuntu2004-arm64). Or if, for some reason, the arm architecture is being detected differently between the two environments -- according to https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html memtag is armv8.5-a.

@richardlau
Copy link
Member

We'll probably need to add at least the gcc-toolset-10 version of bintutils to

RUN dnf install --disableplugin=subscription-manager -y \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-gcc-10.3.1-1.2.el8_5.{{ ansible_architecture }}.rpm \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-gcc-c++-10.3.1-1.2.el8_5.{{ ansible_architecture }}.rpm \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-libstdc++-devel-10.3.1-1.2.el8_5.{{ ansible_architecture }}.rpm \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-runtime-10.1-0.el8.{{ ansible_architecture }}.rpm

which should bring us up to binutils 2.35.

@richardlau
Copy link
Member

We'll probably need to add at least the gcc-toolset-10 version of bintutils to

RUN dnf install --disableplugin=subscription-manager -y \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-gcc-10.3.1-1.2.el8_5.{{ ansible_architecture }}.rpm \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-gcc-c++-10.3.1-1.2.el8_5.{{ ansible_architecture }}.rpm \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-libstdc++-devel-10.3.1-1.2.el8_5.{{ ansible_architecture }}.rpm \
http://mirror.centos.org/centos/8-stream/AppStream/{{ ansible_architecture }}/os/Packages/gcc-toolset-10-runtime-10.1-0.el8.{{ ansible_architecture }}.rpm

which should bring us up to binutils 2.35.

PR (untested): #3596

@richardlau
Copy link
Member

Given that https://ci.nodejs.org/job/node-test-commit-arm/50511/nodes=ubuntu2004-arm64/ succeeded I'm wondering if this is an issue with gas (2.30 on rhel-arm64 vs 2.34 on ubuntu2004-arm64).

Looks very much likely to be the version of binutils. Compare:

It appears that memtag was added in binutils 2.32: https://sourceware.org/binutils/docs-2.32/as/AArch64-Extensions.html

@targos
Copy link
Member Author

targos commented Dec 20, 2023

For the second issue, I tried to force gcc-11 on the release machine and rebuild. The error is still here:

/opt/rh/gcc-toolset-11/root/usr/lib/gcc/aarch64-redhat-linux/11/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
 3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
      |                 ~~~~~~~~~~~^~~
In file included from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
                 from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
                 from ../deps/v8/src/codegen/register-arch.h:15,
                 from ../deps/v8/src/codegen/register.h:8,
                 from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
                 from ../deps/v8/src/deoptimizer/translated-state.h:11,
                 from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
                 from ../deps/v8/src/debug/debug-frames.h:10,
                 from ../deps/v8/src/debug/debug-evaluate.h:12,
                 from ../deps/v8/src/init/setup-isolate-full.cc:6:
../deps/v8/src/utils/utils.h:382:55: error: cannot convert ‘uint8x16_t’ to ‘uint64x2_t’
  382 |         if (static_cast<bool>(vgetq_lane_u64(vpmaxq_u8(xored, xored), 0)))
      |                                              ~~~~~~~~~^~~~~~~~~~~~~~
      |                                                       |
      |                                                       uint8x16_t
In file included from ../deps/v8/src/utils/utils.h:35,
                 from ../deps/v8/src/codegen/arm64/utils-arm64.h:11,
                 from ../deps/v8/src/codegen/arm64/register-arm64.h:8,
                 from ../deps/v8/src/codegen/register-arch.h:15,
                 from ../deps/v8/src/codegen/register.h:8,
                 from ../deps/v8/src/deoptimizer/frame-translation-builder.h:8,
                 from ../deps/v8/src/deoptimizer/translated-state.h:11,
                 from ../deps/v8/src/deoptimizer/deoptimized-frame-info.h:10,
                 from ../deps/v8/src/debug/debug-frames.h:10,
                 from ../deps/v8/src/debug/debug-evaluate.h:12,
                 from ../deps/v8/src/init/setup-isolate-full.cc:6:
/opt/rh/gcc-toolset-11/root/usr/lib/gcc/aarch64-redhat-linux/11/include/arm_neon.h:3353:28: note:   initializing argument 1 of ‘uint64_t vgetq_lane_u64(uint64x2_t, int)’
 3353 | vgetq_lane_u64 (uint64x2_t __a, const int __b)
      |                 ~~~~~~~~~~~^~~
make[2]: *** [tools/v8_gypfiles/v8_init.target.mk:175: /home/iojs/build/ws/out/Release/obj.target/v8_init/deps/v8/src/init/setup-isolate-full.o] Error 1
make[2]: *** Waiting for unfinished jobs....
rm e7ac66b173ee32d531dfaec321cef4818b3e57e7.intermediate 97b3b35c0261bedd03bbbab54f6b138f20a11b4f.intermediate 0d2ce10ea44d84275198a857d5f920d0af8bab0c.intermediate
make[1]: *** [Makefile:134: node] Error 2
make: *** [Makefile:1248: node-v22.0.0-v8-canary20231219736a807b7a-linux-arm64.tar] Error 2
[iojs@release-osuosl-rhel8-arm64-1 ws]$ gcc --version

We're also experiencing an issue on GitHub actions with today's canary build (GCC 11 is the default compiler on GH runners too): https://github.com/nodejs/node-v8/actions/runs/7271603973?check_suite_focus=true

In file included from /usr/include/unistd.h:226,
                 from ../deps/v8/third_party/abseil-cpp/absl/base/internal/thread_identity.h:27,
                 from ../deps/v8/third_party/abseil-cpp/absl/synchronization/mutex.h:71,
                 from ../deps/v8/third_party/abseil-cpp/absl/strings/internal/cordz_info.h:31,
                 from ../deps/v8/third_party/abseil-cpp/absl/strings/cord.h:91,
                 from ../deps/v8/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h:56,
                 from ../deps/v8/third_party/abseil-cpp/absl/container/flat_hash_map.h:41,
                 from ../deps/v8/src/zone/zone-containers.h:20,
                 from ../deps/v8/src/compiler/code-assembler.h:30,
                 from ../deps/v8/src/codegen/code-stub-assembler.h:15,
                 from ../deps/v8/src/builtins/builtins-iterator-gen.h:8,
                 from ../deps/v8/src/builtins/builtins-intl-gen.cc:9:
../deps/v8/src/builtins/builtins-intl-gen.cc: In member function ‘v8::internal::TNode<v8::internal::Uint8T> v8::internal::IntlBuiltinsAssembler::GetChar(v8::internal::TNode<v8::internal::SeqOneByteString>, int)’:
../deps/v8/src/builtins/builtins-intl-gen.cc:43:43: error: ‘index’ is not a constant expression
   43 |         offsetof(SeqOneByteString, chars_[index]) - kHeapObjectTag;
      |                                           ^~~~~
make[1]: *** [tools/v8_gypfiles/v8_initializers.target.mk:468: /home/runner/work/node-v8/node-v8/node-v8/out/Release/obj.target/v8_initializers/deps/v8/src/builtins/builtins-intl-gen.o] Error 1

We'll probably have to bump GCC to 12 or 13 for the next major.

@targos
Copy link
Member Author

targos commented Dec 22, 2023

I wonder if the solution may be to add -flax-vector-conversions as suggested by the error message. Maybe Clang doesn't have this requirement.

@targos
Copy link
Member Author

targos commented Dec 22, 2023

Here's a full CI to get more info: https://ci.nodejs.org/job/node-test-commit/67540/

targos pushed a commit that referenced this issue Dec 22, 2023
Add the `gcc-toolset-10` version of `binutils` to all RHEL 8 based
containers.

Refs: #3595 (comment)
@targos
Copy link
Member Author

targos commented Dec 22, 2023

@targos
Copy link
Member Author

targos commented Dec 22, 2023

@targos
Copy link
Member Author

targos commented Dec 22, 2023

@targos
Copy link
Member Author

targos commented Dec 22, 2023

First issue fixed by #3596
Second issue fixed by nodejs/node#51257

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants