File: ctypes-arm

package info (click to toggle)
pypy 5.6.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 97,040 kB
  • ctags: 185,069
  • sloc: python: 1,147,862; ansic: 49,642; cpp: 5,245; asm: 5,169; makefile: 529; sh: 481; xml: 232; lisp: 45
file content (40 lines) | stat: -rw-r--r-- 1,648 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Description: armhf support
 Workaround the presentce of hard-float in ldconfig -p output
 Also, handle the wide variety of ARM unames
Author: Loïc Minier
Bug-Ubuntu: https://bugs.launchpad.net/bugs/898172
Bug-cpython: http://bugs.python.org/issue13508
Last-Update: 2011-12-19

--- a/lib-python/2.7/ctypes/util.py
+++ b/lib-python/2.7/ctypes/util.py
@@ -209,16 +209,27 @@
 
         def _findSoname_ldconfig(name):
             import struct
+            # XXX this code assumes that we know all unames and that a single
+            # ABI is supported per uname; instead we should find what the
+            # ABI is (e.g. check ABI of current process) or simply ask libc
+            # to load the library for us
+            uname = os.uname()[4]
+            # ARM has a variety of unames, e.g. armv7l
+            if uname.startswith("arm"):
+                uname = "arm"
             if struct.calcsize('l') == 4:
-                machine = os.uname()[4] + '-32'
+                machine = uname + '-32'
             else:
-                machine = os.uname()[4] + '-64'
+                machine = uname + '-64'
             mach_map = {
                 'x86_64-64': 'libc6,x86-64',
                 'ppc64-64': 'libc6,64bit',
                 'sparc64-64': 'libc6,64bit',
                 's390x-64': 'libc6,64bit',
                 'ia64-64': 'libc6,IA-64',
+                # this actually breaks on biarch or multiarch as the first
+                # library wins; uname doesn't tell us which ABI we're using
+                'arm-32': 'libc6(,hard-float)?',
                 }
             abi_type = mach_map.get(machine, 'libc6')