This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Nicolas Dessart
Recipients Nicolas Dessart
Date 2020-02-14.10:03:27
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1581674608.19.0.403543141988.issue39632@roundup.psfhosted.org>
In-reply-to
Content
On armhf and for variadic functions (and contrary to non-variadic functions), the VFP co-processor registers are not used for float argument parameter passing. This specificity is apparently completely disregarded by ctypes which always uses `ffi_prep_cif` to prepare the parameter passing of a function while it should most probably use `ffi_prep_cif_var` for variadic functions.

As such variadic function call with float arguments through ctypes
is currently broken on armhf targets.

I think that ctypes API should be updated to let the user specify if a function is variadic.

I've attached a patch to the ctypes unit tests that I'm using to reproduce this bug.


pi@raspberrypi:~/code/cpython $ ./python -m test test_ctypes    
0:00:00 load avg: 0.00 Run tests sequentially
0:00:00 load avg: 0.00 [1/1] test_ctypes
_testfunc_d_bhilfd_var got 2 3 4 -1242230680 -0.000000 -0.000000
test test_ctypes failed -- Traceback (most recent call last):
  File "/home/pi/code/cpython/Lib/ctypes/test/test_functions.py", line 146, in test_doubleresult_var
    self.assertEqual(result, 21)
AssertionError: -7.086855952261741e-44 != 21

test_ctypes failed

== Tests result: FAILURE ==

1 test failed:
    test_ctypes

Total duration: 3.8 sec
Tests result: FAILURE
History
Date User Action Args
2020-02-14 10:03:28Nicolas Dessartsetrecipients: + Nicolas Dessart
2020-02-14 10:03:28Nicolas Dessartsetmessageid: <1581674608.19.0.403543141988.issue39632@roundup.psfhosted.org>
2020-02-14 10:03:28Nicolas Dessartlinkissue39632 messages
2020-02-14 10:03:27Nicolas Dessartcreate