[bug #23709] NSProxy test fails on Ubuntu with ffcall

View: New views
4 Messages — Rating Filter:   Alert me  

[bug #23709] NSProxy test fails on Ubuntu with ffcall

by anonymous-98 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


URL:
  <http://savannah.gnu.org/bugs/?23709>

                 Summary: NSProxy test fails on Ubuntu with ffcall
                 Project: GNUstep
            Submitted by: FredKiefer
            Submitted on: Mittwoch 25.06.2008 um 23:20
                Category: Base/Foundation
                Severity: 3 - Normal
              Item Group: Bug
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any

    _______________________________________________________

Details:

I am using Ubuntu 8.04 (32-bit) in a VMWareFusion environment. I jsut update
to this release and also updated GNUstep to latest SVN. Now an application
that use to work give segmentation faults for both ffi and ffcall.

When trying to trac down the problem for ffcall further I ran the testsuite
for base and got the following problem there (This works fine on my desktop
computer):

ubuntu@ubuntu:/usr/src/gnustep/modules/tests/testsuite/base/NSProxy$ gdb
obj/test01
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) r
Starting program:
/usr/src/gnustep/modules/tests/testsuite/base/NSProxy/obj/test01
[Thread debugging using libthread_db enabled]
[New Thread 0xb77bb6b0 (LWP 895)]
PASS: Proxy signed char
PASS: Proxy unsigned char
PASS: Proxy signed short
PASS: Proxy unsigned short
PASS: Proxy singed int
PASS: Proxy unsigned int
PASS: Proxy signed long
PASS: Proxy unsigned long
PASS: Proxy signed long long
PASS: Proxy unsigned long long
PASS: Proxy float
PASS: Proxy float
PASS: Proxy id
PASS: Proxy enum
PASS: Proxy NSRange
PASS: Proxy NSPoint
PASS: Proxy NSDecimal
FAIL: Proxy GSFinePoint

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb77bb6b0 (LWP 895)]
0xb7c4c0f8 in mframe_next_arg (typePtr=0x0, info=0x809f1b0,
    outTypes=0x809f1f9 "") at mframe.m:229
229      switch (*typePtr)
(gdb) bt
#0  0xb7c4c0f8 in mframe_next_arg (typePtr=0x0, info=0x809f1b0,
    outTypes=0x809f1f9 "") at mframe.m:229
#1  0xb7d3e06e in -[NSMethodSignature(GNUstep) methodInfo] (self=0x809f108,
    _cmd=0xb7f86658) at NSMethodSignature.m:189
#2  0xb7e00b08 in -[GSFFCallInvocation initWithMethodSignature:] (
    self=0x809f170, _cmd=0xb7f866a8, aSignature=0x809f108)
    at GSFFCallInvocation.m:547
#3  0xb7e0270a in GSInvocationCallback (callback_data=0x80710b8,
    args=0xbfe52c94) at GSFFCallInvocation.m:957
#4  0xb785d6d5 in __vacall_r () from /usr/lib/libcallback.so.0
#5  0x080710b8 in ?? ()
#6  0xb7a3f450 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
#7  0x08048ba1 in _start ()




The config.log for ffi and ffcall reads like this:
configure:16312: checking ffi.h presence
configure:16327: gcc -E  -I/usr/GNUstep/System/Library/Headers conftest.c
configure:16333: $? = 0
configure:16347: result: yes
configure:16375: checking for ffi.h
configure:16382: result: yes
configure:16408: checking callback.h usability
configure:16425: gcc -c -g -O2  -I/usr/GNUstep/System/Library/Headers
conftest.c >&5
configure:16431: $? = 0
configure:16445: result: yes
configure:16449: checking callback.h presence
configure:16464: gcc -E  -I/usr/GNUstep/System/Library/Headers conftest.c
configure:16470: $? = 0
configure:16484: result: yes
configure:16512: checking for callback.h
configure:16520: result: yes
configure:16549: checking for forwarding callback in runtime
configure:16560: gcc -c -g -O2  -I/usr/GNUstep/System/Library/Headers
-fgnu-runtime -x objective-c conftest.c >&5
In file included from conftest.c:1:
./config/config.forward2.m: In function 'main':
./config/config.forward2.m:5: error: '__objc_msg_forward2' undeclared (first
use in this function)
./config/config.forward2.m:5: error: (Each undeclared identifier is reported
only once
./config/config.forward2.m:5: error: for each function it appears in.)
configure:16566: $? = 1
configure: failed program was:
| #include "./config/config.forward2.m"
configure:16596: gcc -c -g -O2  -I/usr/GNUstep/System/Library/Headers
-fgnu-runtime -x objective-c conftest.c >&5
configure:16602: $? = 0
configure:16617: result: yes
configure:16625: checking FFI library usage
configure:16716: gcc -o conftest -g -O2
-I/usr/GNUstep/System/Library/Headers  -L/usr/GNUstep/System/Library/Libraries
conftest.c -lcallback -lavcall -lnsl -ldl  -lz >&5
configure:16722: $? = 0
configure:16739: result: ffcall
configure:16751: checking if ffcall trampolines work
configure:16765: gcc -o conftest -g -O2
-I/usr/GNUstep/System/Library/Headers  -L/usr/GNUstep/System/Library/Libraries
conftest.c -lcallback -lavcall -lnsl -ldl  -lz >&5
configure:16768: $? = 0
configure:16774: ./conftest
configure:16777: $? = 0
configure:16792: result: yes


And to make it complete. My original error was:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb713a6c0 (LWP 27073)]
0xb77965c4 in objc_msg_lookup () from /usr/lib/libobjc.so.2
(gdb) bt
#0  0xb77965c4 in objc_msg_lookup () from /usr/lib/libobjc.so.2
#1  0xb79ec040 in GSInvocationCallback (callback_data=0xb7b87330,
    args=0xbff89694) at GSFFCallInvocation.m:1050
#2  0xb72bb6d5 in __vacall_r () from /usr/lib/libcallback.so.0
#3  0xb7b87330 in returnTypeInfo ()
   from /usr/GNUstep/System/Library/Libraries/libgnustep-base.so.1.17
#4  0xbff89694 in ?? ()
#5  0x0805c376 in -[MainController awakeFromNib] (self=0x8562e28,
    _cmd=0xb7f3e508) at Source/MainController.m:199






    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?23709>

_______________________________________________
  Nachricht geschickt von/durch Savannah
  http://savannah.gnu.org/



_______________________________________________
Bug-gnustep mailing list
Bug-gnustep@...
http://lists.gnu.org/mailman/listinfo/bug-gnustep

[bug #23709] NSProxy test fails on Ubuntu with ffcall

by anonymous-98 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Follow-up Comment #1, bug #23709 (project gnustep):

I added these tests just recently, with the main intention to compare ffcall
with libffi.

These tests to test boarder line yet to my understanding valid cases.  The
attempt to pass structs as parameters:

GSFinePoint:
typedef struct _GSFinePoint GSFinePoint;
struct _GSFinePoint
{
  double x;
  double y;
};
GSFinePoint

typedef struct _GSBitField GSBitField;
struct _GSBitField
{
  unsigned int first:1;
  unsigned int unused:1;
  unsigned int second:1;
};
GSBitField


I'm not sure if those cases ever worked.  Most of the time such structs are
passed by reference and not by value.  Yet I do believe that a correctly
working implementation should pass.  But I can verify that when I started
testing them on different platforms that the last test segfaulted on the
64-bit case.

IIRC, this failure is the result of incorrect/missing layout information
provided by the runtime which we are not ready to handle.  I'm not sure if it
may have been correct with very old versions of the GNU runtime before the new
ObjC features were added and the encoding signatures of GCC changed.

IOW, we have real bugs here but they should not be considered regressions (in
GNUstep) per se.  If you say that your Ubuntu used to work with ffcall and now
it doesn't, then that is a regression.  Yet these tests are not necessarily
related.


    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?23709>

_______________________________________________
  Nachricht geschickt von/durch Savannah
  http://savannah.gnu.org/



_______________________________________________
Bug-gnustep mailing list
Bug-gnustep@...
http://lists.gnu.org/mailman/listinfo/bug-gnustep

[bug #23709] NSProxy test fails on Ubuntu with ffcall

by anonymous-98 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Follow-up Comment #2, bug #23709 (project gnustep):

I did some more debugging of where the problem in the original code comes
from. It happens when an NSInvovation started as a separate thread tries to
return a boolean value. This works sometimes (mostly the first time) but fails
later.

In my last tests this failed just the same for ffi and ffcall, but then I am
not that sure how much my NSLog() calls interact with the invocation handling.
For example if the issue was caused by the usage of uninitialized memory then
this calls could make a difference.

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?23709>

_______________________________________________
  Nachricht geschickt von/durch Savannah
  http://savannah.gnu.org/



_______________________________________________
Bug-gnustep mailing list
Bug-gnustep@...
http://lists.gnu.org/mailman/listinfo/bug-gnustep

[bug #23709] NSProxy test fails on Ubuntu with ffcall

by anonymous-98 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Update of bug #23709 (project gnustep):

             Open/Closed:                    Open => In Test                

    _______________________________________________________

Follow-up Comment #3:

I think the recent changes to ffi should have fixed this ... please could you
retest.

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?23709>

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



_______________________________________________
Bug-gnustep mailing list
Bug-gnustep@...
http://lists.gnu.org/mailman/listinfo/bug-gnustep