This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Libffi problem on darwin (MacOSX)



On Saturday, May 17, 2003, at 17:21 Europe/Amsterdam, Andreas Tobler wrote:


I just noticed that this might well be stupidity on my part, I tried to write a minimal program that demonstrates the problem and that runs without problems. Our real code builds ffi_cifs and ffi_closures at runtime, and maybe that code is bogus.

Could be, but if I remember right, I didn't complete the structure passings. Maybe it works, but if not, then I certainly have to check again. Well, I'll do that anyway.

The following hack seems to work for the limited tests that I've done. Note that this is *not* based on any understanding of the PPC calling conventions, and therefore likely incorrect.


Ronald

*** /Volumes/Data/Users/ronald/Python-CVS/gcc/libffi/src/powerpc/ ffi_darwin.c Sat Feb 22 20:10:14 2003
--- ffi_darwin.c Sat May 24 22:02:44 2003
***************
*** 612,619 ****
--- 612,633 ----
case FFI_TYPE_SINT32:
case FFI_TYPE_UINT32:
case FFI_TYPE_POINTER:
+ // case FFI_TYPE_STRUCT:
+ /* there are 8 gpr registers used to pass values */
+ if (ng < 8) {
+ avalue[i] = pgr;
+ ng++;
+ pgr++;
+ } else {
+ avalue[i] = pst;
+ pst++;
+ }
+ break;
+
case FFI_TYPE_STRUCT:
/* there are 8 gpr registers used to pass values */
+ {
+ int left = (arg_types[i]->size);
if (ng < 8) {
avalue[i] = pgr;
ng++;
***************
*** 622,627 ****
--- 636,654 ----
avalue[i] = pst;
pst++;
}
+
+ /* Structs are in registers, skip values */
+ left -= sizeof(long);
+ while (left > 0) {
+ if (ng < 8) {
+ ng++;
+ pgr++;
+ } else {
+ pst++;
+ }
+ left -= sizeof(long);
+ }
+ }
break;


case FFI_TYPE_SINT64:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]