bug-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bugs #9382] mframe vs. gcc/libobjc selector types


From: David Ayers
Subject: [bugs #9382] mframe vs. gcc/libobjc selector types
Date: Fri, 30 Jul 2004 13:35:47 -0400
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.1) Gecko/20040707

This mail is an automated notification from the bugs tracker
 of the project: GNUstep.

/**************************************************************************/
[bugs #9382] Latest Modifications:

Changes by: 
                David Ayers <d.ayers@inode.at>
'Date: 
                Fri 07/30/2004 at 17:32 (Europe/Vienna)

------------------ Additional Follow-up Comments ----------------------------
It seems that this patch will cause problems when communicating to GNUstep 
processes that haven't been updated.  I'm uncertain whether this can be 
resolved.

The issue again:  GCC encodes the signature in a "relatively" platform 
indepenent way.It seems that this patch will cause problems when communicating 
to GNUstep processes that haven't been updated.  I'm uncertain whether this can 
be resolved.

The issue again:  GCC encodes the signature in a "relatively" platform 
independent way.  I say "relatively" as it does mark arguments that it assumes 
are passed in registers with '+'.  Yet it also assumes that every signature has 
*@0:* (see gcc/gcc/objc/objc-act.c).  Yet the mframe code knows better.  On 
some systems (like Solaris this produces warnings like:

2004-07-30 15:33:54.000 nsnotification[22083] File GSFFCallInvocation.m: 856.
In GSInvocationCallback Changed type signature 
'Vv28@0:4@8@12@16C20@24' to 
'Vv0@+8:+12@+16@+20@+24C+25@+28' for 
'postNotificationName:object:userInfo:deliverImmediately:for:'

On other platforms (hppa) the the mframe code produces signatures with '-' to 
signalize parameters on the stack.  Those would get registered with the runtime 
yet libobjc does not recognize those characters and once these signatures get 
registered, will abort.

So this is why I meant to differentiate between the libobjc/GCC signatures used 
within the process and the mframe signatures used for the FFI/FFCall code.  Yet 
this seem to break callframe.m's assertion in 

callframe_do_call():
  NSCParameterAssert (sel_types_match(encoded_types, type));

on some platforms when DO is used with unpatched versions.  I personally can't 
reproduce this but maybe Richard can help out on this.







/**************************************************************************/
[bugs #9382] Full Item Snapshot:

URL: <http://savannah.gnu.org/bugs/?func=detailitem&item_id=9382>
Project: GNUstep
Submitted by: David Ayers
On: Fri 06/18/2004 at 17:08

Category:  Base/Foundation
Severity:  5 - Average
Item Group:  Bug
Resolution:  None
Assigned to:  ayers
Status:  Open


Summary:  mframe vs. gcc/libobjc selector types

Original Submission:  We use the platform dependent mframe code to implement 
NSMethodSignature's method types while gcc/libobjc uses a platform independent 
encoding scheme (well in pre 3.4 version it wasn't fully platform independent 
as it marked where registers were used depending on the platform but the "ObjC 
improvements" merge broke that.)  Unfortunately we use these mframe signatures 
to register selectors for DO (see Testing/nsnotification).  Yet the mframe 
encoding "dialects" cannot be handled by libobjc which causes objc_error aborts 
on some platforms (e.g. linux/hppa but potentially others) when selectors are 
registered with those types.  I believe we need to reorganize NSMethodSignature 
to use the "gcc/libobjc" encoding dialect instead of the mframe dialects which 
should be resrced for DO processing.  I haven't looked into how this could be 
done yet.  Maybe someone a bit more familiar with this code may want to jump in 
and have a look at it.  Riccardo
Mottola can provide information (if I'm not available) and test.  Otherwise 
I'll drop it on my TODO list.

Follow-up Comments
------------------


-------------------------------------------------------
Date: Fri 07/30/2004 at 17:32       By: ayers
It seems that this patch will cause problems when communicating to GNUstep 
processes that haven't been updated.  I'm uncertain whether this can be 
resolved.

The issue again:  GCC encodes the signature in a "relatively" platform 
indepenent way.It seems that this patch will cause problems when communicating 
to GNUstep processes that haven't been updated.  I'm uncertain whether this can 
be resolved.

The issue again:  GCC encodes the signature in a "relatively" platform 
independent way.  I say "relatively" as it does mark arguments that it assumes 
are passed in registers with '+'.  Yet it also assumes that every signature has 
*@0:* (see gcc/gcc/objc/objc-act.c).  Yet the mframe code knows better.  On 
some systems (like Solaris this produces warnings like:

2004-07-30 15:33:54.000 nsnotification[22083] File GSFFCallInvocation.m: 856.
In GSInvocationCallback Changed type signature 
'Vv28@0:4@8@12@16C20@24' to 
'Vv0@+8:+12@+16@+20@+24C+25@+28' for 
'postNotificationName:object:userInfo:deliverImmediately:for:'

On other platforms (hppa) the the mframe code produces signatures with '-' to 
signalize parameters on the stack.  Those would get registered with the runtime 
yet libobjc does not recognize those characters and once these signatures get 
registered, will abort.

So this is why I meant to differentiate between the libobjc/GCC signatures used 
within the process and the mframe signatures used for the FFI/FFCall code.  Yet 
this seem to break callframe.m's assertion in 

callframe_do_call():
  NSCParameterAssert (sel_types_match(encoded_types, type));

on some platforms when DO is used with unpatched versions.  I personally can't 
reproduce this but maybe Richard can help out on this.


-------------------------------------------------------
Date: Fri 07/02/2004 at 08:20       By: ayers
Patch reverted due to problems on other platforms.

-------------------------------------------------------
Date: Thu 07/01/2004 at 11:42       By: ayers
Patch commited.

-------------------------------------------------------
Date: Sat 06/19/2004 at 19:00       By: ayers
I've attached a patch that fixes the problem.  There still may be some 
underlaying cleanup needed.  (Check why the GSInvocationCallback functions get 
a selector with platform specific types and fix that).  But I'll leave that for 
later (or someone else to pickup) because I'm out of time now.  It would be 
nice if those of you who use DO intensively (maybe even cross platform DO) 
could take it for a spin.






File Attachments
-------------------

-------------------------------------------------------
Date: Fri 07/30/2004 at 17:32  Name: base.patch  Size: 5.69KB   By: ayers
NSMethodSignature/GSInvocationCallback patch
http://savannah.gnu.org/bugs/download.php?item_id=9382&amp;item_file_id=1544






For detailed info, follow this link:
<http://savannah.gnu.org/bugs/?func=detailitem&item_id=9382>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/







reply via email to

[Prev in Thread] Current Thread [Next in Thread]