CTypes on a 64 bit machine truncates pointers to 32 bits?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Ron Garret

    CTypes on a 64 bit machine truncates pointers to 32 bits?

    CTypes on a 64-bit machine appears to be truncating pointers to 32 bits:

    [ron@monster1:~]$ uname -a
    Linux monster1 2.6.18-6-amd64 #1 SMP Mon Jun 16 22:30:01 UTC 2008 x86_64
    GNU/Linux
    [ron@monster1:~]$ cat foo.c
    void* foo(void* x) { return x; }
    [ron@monster1:~]$ gcc -fPIC -shared foo.c -o foo.so
    [ron@monster1:~]$ file foo.so
    foo.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not
    stripped
    [ron@monster1:~]$ python
    Python 2.5 (release25-maint, Jul 23 2008, 18:15:29)
    [GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
    Type "help", "copyright" , "credits" or "license" for more information.
    >>from ctypes import *
    >>foolib = cdll.LoadLibrar y('foo.so')
    >>foolib.foo(0x F00000000)
    0
    >>sizeof(c_void _p)
    8
    >>>
    I am aware of http://bugs.python.org/issue1703286 but I get the same
    result in Python2.5.2:

    [ron@monster1:~]$ py252/bin/python
    Python 2.5.2 (r252:60911, Sep 18 2008, 10:48:29)
    [GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
    Type "help", "copyright" , "credits" or "license" for more information.
    >>from ctypes import *
    >>foolib = cdll.LoadLibrar y('foo.so')
    >>foolib.foo(0x F00000000)
    0
    >>sizeof(c_void _p)
    8
    >>>
  • =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=

    #2
    Re: CTypes on a 64 bit machine truncates pointers to 32 bits?

    >>>foolib = cdll.LoadLibrar y('foo.so')
    >>>foolib.foo(0 xF00000000)
    0
    Shouldn't you tell ctypes that the argument and the result
    of foo is a pointer?

    Regards,
    Martin

    Comment

    • Ron Garret

      #3
      Re: CTypes on a 64 bit machine truncates pointers to 32 bits?

      In article <48d34449$0$236 3$9b622d9e@news .freenet.de>,
      "Martin v. Löwis" <martin@v.loewi s.dewrote:
      >>foolib = cdll.LoadLibrar y('foo.so')
      >>foolib.foo(0x F00000000)
      0
      >
      Shouldn't you tell ctypes that the argument and the result
      of foo is a pointer?
      Yeah... that's it. Default return type is int, which I assumed would be
      64 bits on a 64 bit machine, but turns out it's 32. Stupid.

      rg

      Comment

      • Lawrence D'Oliveiro

        #4
        Re: CTypes on a 64 bit machine truncates pointers to 32 bits?

        In message <rNOSPAMon-B959CC.23290518 092008@news.gha .chartermi.net> , Ron
        Garret wrote:
        Default return type is int, which I assumed would be
        64 bits on a 64 bit machine, but turns out it's 32. Stupid.
        I think preferred ABIs these days are LP64, not ILP64 or LLP64.

        Comment

        Working...