-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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
modprobe zfs: Exec format error on ARMv7 (32-bit) #9957
Comments
When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue openzfs#9957
Thanks for opening a new issue for this and referencing @jsrlabs proposed fix. I've created PR #9967 with a slightly updated of the patch for ARM and Thumb-2 so we can get it reviewed and merged. Unfortunately, I don't have access to the required hardware to test the fix so if you're able to do so that would be exceptionally helpful. Internally ZFS uses this code for the |
Wow, that was quick! Thanks @behlendorf for addressing this issue right away. I will look into testing this on my system. |
I'll also try this sometime this weekend. Thanks for the fix! |
When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue openzfs#9957
When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Reviewed-by: @awehrfritz Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes openzfs#7408 Closes openzfs#9957 Closes openzfs#9967
When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Reviewed-by: @awehrfritz Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #7408 Closes #9957 Closes #9967
When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Reviewed-by: @awehrfritz Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes openzfs#7408 Closes openzfs#9957 Closes openzfs#9967
When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Reviewed-by: @awehrfritz Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes openzfs#7408 Closes openzfs#9957 Closes openzfs#9967
System information
Describe the problem you're observing
When loading the zfs kernel model on a Helios4 NAS with a Marvell Armada 388 SoC (ARM Cortex-A9), modprob fails with the following error:
ERROR: could not insert 'zfs': Exec format error
The dmesg output seems to indicate that there is some CPU
instruction/function is missing:
zlua: section 4 reloc 44 sym 'longjmp': unsupported interworking call (Thumb -> ARM)
This is essentially a duplicate of issue #7408, which was however closed without addressing the underlying issue. As far as I can tell, the issue boils down to missing support for the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. The Thumb-2 instruction set is present, e.g., in ARM Cortex-A CPUs and the Armbian kernel for the Helios4 is all Thumb-2. @jsrlabs debugged this issue and found a workaround, and provided a patch to fix the issue.
Describe how to reproduce the problem
The issue can be reproduced by installing the zfs-dkms from the Debian buster-backports repository on a ARMv7 (32-bit) platform. Tested on a Helios4 NAS with a Marvell Armada 388 SoC (ARM Cortex-A9). This issue only occurs with ZFS version 0.8.2, version 0.7.12 works without problems on otherwise the exact same system.
The text was updated successfully, but these errors were encountered: