Many programs crash with `Illegal instruction (core dumped)`

I followed what you suggested but didn’t solve the problem.
sudo dnf repolist:

repo id                                                                  repo name
copr:copr.fedorainfracloud.org:g3tchoo:prismlauncher                     Copr repo for prismlauncher owned by g3tchoo
fedora                                                                   Fedora 40 - x86_64
fedora-cisco-openh264                                                    Fedora 40 openh264 (From Cisco) - x86_64
updates                                                                  Fedora 40 - x86_64 - Updates
updates-testing                                                          Fedora 40 - x86_64 - Test Updates

Post the output of the remaining commands except the last two, so we can isolate the issue.

kada49@laptop ~ % sudo dnf check all
kada49@laptop ~ % 
kada49@laptop ~ % sudo dnf repoquery --duplicates
Last metadata expiration check: 0:47:33 ago on Tue 02 Apr 2024 14:21:47 CEST.
kada49@laptop ~ % 
kada49@laptop ~ % sudo dnf repoquery --unsatisfied
Last metadata expiration check: 0:48:14 ago on Tue 02 Apr 2024 14:21:47 CEST.
kada49@laptop ~ % 
kada49@laptop ~ % sudo dnf repoquery --extras
Last metadata expiration check: 0:48:37 ago on Tue 02 Apr 2024 14:21:47 CEST.
kada49@laptop ~ % 
kada49@laptop ~ % sudo rpm -V -a
.....UG..  g /var/run/avahi-daemon
.M.......  g /boot/System.map-6.8.1-300.fc40.x86_64
.......T.    /usr/bin/ld.bfd
.M.......  c /etc/audit/rules.d/audit.rules
missing     /run/gluster/metrics
.M.......    /var/lib/gssproxy/clients
.M.......    /var/lib/gssproxy/rcache
......G..  g /run/openvpn-client
......G..  g /run/openvpn-server
.M.......  g /var/lib/selinux/targeted/active/modules/200/container
.M.......  g /var/lib/colord/mapping.db
.M.......  g /var/lib/colord/storage.db
.M.......  g /run/libvirt/common
.....UG..  g /run/libvirt/qemu
.M...UG..  g /run/libvirt/qemu/dbus
.....UG..  g /run/libvirt/qemu/passt
.....UG..  g /run/libvirt/qemu/slirp
.M.......  g /run/thermald/thermald.pid
.M.......  c /boot/grub2/grub.cfg
.M.......  c /boot/grub2/grub.cfg
.M.......  c /boot/grub2/grub.cfg
.M.......    /boot/efi/System
.M.......    /boot/efi/System/Library
.M.......    /boot/efi/System/Library/CoreServices
.M.......    /boot/efi/System/Library/CoreServices/SystemVersion.plist
.M.......    /boot/efi/mach_kernel
S.5....T.  c /etc/sysconfig/livesys
.M.......  g /var/lib/selinux/targeted/active/modules/400/extra_varrun
SM5....T.  c /var/lib/unbound/root.key
1 kada49@laptop ~ %  
1 Like

I have two computers with the same issue (node illegal instruction), one fresh install workstation f40 beta, the other a server f40 beta, both with fresh updates. Bug reported for the former; I didn’t need nodejs on the server but did dnf install nodejs and replicated issue there this morning. Since npm is in the same package, I didn’t bother checking it for the same behavior, but I do see the SIGILL for npm on the workstation. So the workstation tag can have the server tag join it.

1 Like

I think I cannot add that tag back because my trust level here is too low. (Or it is a skill issue of mine)

This needs to be escalated. I have two systems which are effectively unusable now, after updating. I did try downgrading glibc, but the problem still occurs. (F40 updated April 1, 2024. X86_64, Intel)
For some reason, grub-customizer does not throw an ‘Illegal instruction (core dumped)’ error, and runs successfully…

1 Like

More info:
$ kwrite
Illegal instruction (core dumped)
gdb:
Program received signal SIGILL, Illegal instruction.
0x00007ffff630ea9c in aeshash128(unsigned char const*, unsigned long, unsigned long, unsigned long) () from /lib64/libQt6Core.so.6

Since multiple people are reporting illegal instruction errors in libQtCore, I opened a bug: 2272758 – Illegal instruction errors in libQt6Core. For those affected, please add yourself to the CC field of that bug.

See SDDM not starting after rebase to Kinoite 40 for another thread with similar symptoms.

3 Likes

Thank you very much for the analysis and reporting and links!

I’ve proposed the bug as blocker/freeze exception for F40 final.

I also created a proposal for the “Common issues” category: On old CPUs, many applications are crashing, especially Qt6 based applications

1 Like

Can anyone who is affected by this please post info on their CPU (e.g. /proc/cpuinfo)? It seems pretty important to know as best as possible what CPUs are affected by this. Our working theory is that it’s CPUs without AVX support, but it would be good to check. Thanks.

Sure, and thanks for the follow-up. I tried node --version on three systems, all running F40 and refreshed as of this morning. Two of three fail with illegal instruction, the other succeeds. The one that succeeds has the avx flag:

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core™ i7-3770 CPU @ 3.40GHz
stepping : 9
microcode : 0x21
cpu MHz : 1600.000
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts vnmi md_clear flush_l1d
vmx flags : vnmi preemption_timer invvpid ept_x_only flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips : 6784.49
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core™ i7-3770 CPU @ 3.40GHz
stepping : 9
microcode : 0x21
cpu MHz : 1600.000
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 1
cpu cores : 4
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts vnmi md_clear flush_l1d
vmx flags : vnmi preemption_timer invvpid ept_x_only flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips : 6784.49
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:


Here’s the first failing system:

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU E5300 @ 2.60GHz
stepping : 10
microcode : 0xa0b
cpu MHz : 1199.924
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm pti dtherm
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown
bogomips : 5199.72
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

And the second failing:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core™2 Duo CPU E8400 @ 3.00GHz
stepping : 10
microcode : 0xa0c
cpu MHz : 1995.067
cache size : 6144 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm pti tpr_shadow flexpriority vpid dtherm vnmi
vmx flags : vnmi flexpriority tsc_offset vtpr vapic
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown
bogomips : 5985.17
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

Let me know if you’d like more systems and less detail …

My Core i5-650 is affected by this bug.

output of `/proc/cpuinfo` on Intel Core i5-650
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 37
model name	: Intel(R) Core(TM) i5 CPU         650  @ 3.20GHz
stepping	: 2
microcode	: 0x11
cpu MHz		: 3421.549
cache size	: 4096 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 11
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid dtherm ida arat vnmi flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown
bogomips	: 6422.61
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 37
model name	: Intel(R) Core(TM) i5 CPU         650  @ 3.20GHz
stepping	: 2
microcode	: 0x11
cpu MHz		: 3345.473
cache size	: 4096 KB
physical id	: 0
siblings	: 2
core id		: 2
cpu cores	: 2
apicid		: 4
initial apicid	: 4
fpu		: yes
fpu_exception	: yes
cpuid level	: 11
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid dtherm ida arat vnmi flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown
bogomips	: 6422.61
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

@mhdave thanks for the info. It actually turns out we are dealing with two separate bugs here (crazy coincidence, I know). The node one was not caused by the gcc miscompilation bug that’s affecting qt6, but by a bug in node itself. See https://bugzilla.redhat.com/show_bug.cgi?id=2273542 . So the node case does, I think, affect all systems without AVX.

It seems our current call (by Jakub, who ought to know) is that the gcc miscompilation case affects only systems which do have AES-NI (flag aes) but do not have AVX (flag avx), which is a tighter set still, and includes the known-affected CPUs so far (the Pentium Silver N5000 and the Core i5-650).

I am affected by this bug too. I have an Intel Celeron N4120.

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 122
model name      : Intel(R) Celeron(R) N4120 CPU @ 1.10GHz
stepping        : 8
microcode       : 0x22
cpu MHz         : 1703.849
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 24
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts vnmi umip rdpid md_clear arch_capabilities
vmx flags       : vnmi preemption_timer posted_intr invvpid ept_x_only ept_ad ept_1gb flexpriority apicv tsc_offset vtpr mtf vapic ept vpid unrestricted_guest vapic_reg vid ple shadow_vmcs ept_mode_based_exec tsc_scaling
bugs            : spectre_v1 spectre_v2 spec_store_bypass rfds
bogomips        : 2188.80
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 122
model name      : Intel(R) Celeron(R) N4120 CPU @ 1.10GHz
stepping        : 8
microcode       : 0x22
cpu MHz         : 1734.855
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 4
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 24
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts vnmi umip rdpid md_clear arch_capabilities
vmx flags       : vnmi preemption_timer posted_intr invvpid ept_x_only ept_ad ept_1gb flexpriority apicv tsc_offset vtpr mtf vapic ept vpid unrestricted_guest vapic_reg vid ple shadow_vmcs ept_mode_based_exec tsc_scaling
bugs            : spectre_v1 spectre_v2 spec_store_bypass rfds
bogomips        : 2188.80
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 122
model name      : Intel(R) Celeron(R) N4120 CPU @ 1.10GHz
stepping        : 8
microcode       : 0x22
cpu MHz         : 1676.416
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 2
cpu cores       : 4
apicid          : 4
initial apicid  : 4
fpu             : yes
fpu_exception   : yes
cpuid level     : 24
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts vnmi umip rdpid md_clear arch_capabilities
vmx flags       : vnmi preemption_timer posted_intr invvpid ept_x_only ept_ad ept_1gb flexpriority apicv tsc_offset vtpr mtf vapic ept vpid unrestricted_guest vapic_reg vid ple shadow_vmcs ept_mode_based_exec tsc_scaling
bugs            : spectre_v1 spectre_v2 spec_store_bypass rfds
bogomips        : 2188.80
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 122
model name      : Intel(R) Celeron(R) N4120 CPU @ 1.10GHz
stepping        : 8
microcode       : 0x22
cpu MHz         : 795.920
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 6
initial apicid  : 6
fpu             : yes
fpu_exception   : yes
cpuid level     : 24
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts vnmi umip rdpid md_clear arch_capabilities
vmx flags       : vnmi preemption_timer posted_intr invvpid ept_x_only ept_ad ept_1gb flexpriority apicv tsc_offset vtpr mtf vapic ept vpid unrestricted_guest vapic_reg vid ple shadow_vmcs ept_mode_based_exec tsc_scaling
bugs            : spectre_v1 spectre_v2 spec_store_bypass rfds
bogomips        : 2188.80
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
1 Like

Thanks. Yup, I see ‘aes’ but no ‘avx’, so that matches the theory.

Is this bug going to be fixed before F40 release ? If not it will impact a lot of users with old PCs or with low end celeron and pentium cpus.

3 old systems failing with F40

Node in gdb:

(gdb) s
simdutf::implementation::implementation () at …/…/deps/simdutf/simdutf.h:3296
3296 _required_instruction_sets(required_instruction_sets)
(gdb) s
3294 _name(name),
(gdb) s
std::__cxx11::basic_string<char, std::char_traits, std::allocator >::basic_string () at /usr/include/c++/14/bits/basic_string.h:556
556 _M_construct(__str._M_data(), __str._M_data() + __str.length(),
(gdb) s
simdutf::implementation::implementation () at …/…/deps/simdutf/simdutf.h:3296
3296 _required_instruction_sets(required_instruction_sets)
(gdb) s

Program received signal SIGILL, Illegal instruction.
simdutf::implementation::implementation () at …/…/deps/simdutf/simdutf.h:3296
3296 _required_instruction_sets(required_instruction_sets)
(gdb) s

Search on internet to simdutf leads to

About

Unicode routines (UTF8, UTF16, UTF32) and Base64: billions of characters per second using SSE2, AVX2, NEON, AVX-512, RISC-V Vector Extension. Part of Node.js and Bun.

GitHub - simdutf/simdutf: Unicode routines (UTF8, UTF16, UTF32) and Base64: billions of characters per second using SSE2, AVX2, NEON, AVX-512, RISC-V Vector Extension. Part of Node.js and Bun..

this looks residing in /usr/lib64/libnode.so.115, part of nodejs-libs.

As I said above, there are two bugs. The node bug is one thing. The qt bug is another thing. The node bug is already fixed in this update. The qt bug is waiting on a gcc rebuild.

We are discussing that here. At this point it is basically a judgment call whether fixing Plasma (mostly, plus the tracker-miners crash which is annoying but not fatal) for a small amount of unusual systems is worth delaying a week. To fix it we have to rebuild gcc, which takes 15-23 hours (that’s in progress now), then build qt6 (another hour), then do a new compose (about 9 hours), and the go/no-go meeting is in about 20 hours.