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 meador.inge
Recipients mancausoft, mark.dickinson, meador.inge
Date 2011-09-14.17:29:05
SpamBayes Score 1.8436002e-07
Marked as misclassified No
Message-id <1316021346.47.0.634499856637.issue7201@psf.upfronthosting.co.za>
In-reply-to
Content
OK, I got an OABI system setup.  I am seeing the 'test_struct_return_2H' 
failure, which actually segfaults in my setup.  The difference does, 
indeed, seem like an ABI mismatch.

The test code that is failing has a Python side like:

   def test_struct_return_2H(self):
        class S2H(Structure):
            _fields_ = [("x", c_short),
                        ("y", c_short)]
        dll.ret_2h_func.restype = S2H
        dll.ret_2h_func.argtypes = [S2H]
        inp = S2H(99, 88)
        s2h = dll.ret_2h_func(inp)
        self.assertEqual((s2h.x, s2h.y), (99*2, 88*3))

and a C code side that looks like:

   typedef struct {
      short x;
      short y;
   } S2H;

   S2H ret_2h_func(S2H inp)
   {
      inp.x *= 2;
      inp.y *= 3;
      return inp;
   }

The APCS Section 5.4 Result Return [1], says:

"""
A Composite Type not larger than 4 bytes is returned in r0.  The format 
is as if the result had been stored in memory at a word-aligned address 
and then loaded into r0 with an LDR instruction.  Any bits in r0 that 
lie outside the bounds of the result have unspecified values.
"""

The EABI implementation does exactly this and packs the structure into r0, where as the OABI implementation places the address of a structure in r0.  'ctypes' is assuming the former and on an OABI system the contents of r0 are treated as an address, where they are actually a value.  Boom goes the dynamite.

I am looking into 'test_endian_double' and 
'test_unaligned_native_struct_fields' now.

[1] http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf
History
Date User Action Args
2011-09-14 17:29:06meador.ingesetrecipients: + meador.inge, mark.dickinson, mancausoft
2011-09-14 17:29:06meador.ingesetmessageid: <1316021346.47.0.634499856637.issue7201@psf.upfronthosting.co.za>
2011-09-14 17:29:05meador.ingelinkissue7201 messages
2011-09-14 17:29:05meador.ingecreate