Ciao!

I'm testing the __builtin_apply() to make a patch to GNUstep, but I'm getting
in troubles.

rey:/tmp/tmp> gcc -v
Using builtin specs.
gcc version 2.95.2 19991024 (release)

rey:/tmp/tmp> uname -a
FreeBSD rey.procom2.it 4.0-STABLE FreeBSD 4.0-STABLE #0: Fri Apr  7 01:02:03
CEST 2000    
[EMAIL PROTECTED]:/mnt/amy/lpub/freebsd/usr/obj/mnt/amy/lpub/freebsd/usr/src/sys/rey
 
i386

rey:/tmp/tmp> gcc -o test contest_i.c -Wall
contest_i.c: In function `main':
contest_i.c:37: warning: implicit declaration of function `printf'

rey:/tmp/tmp> ./test 
Segmentation fault (core dumped)

If the sizeof struct p is up to 8 bytes it returns the struct on the stack,
else it cores. But it dumps only with the __builtin_apply(), if you define
'pippo' it works.

Tested also on 3.4-stable with system gcc and it dumps.

I hope I'm wrong, since I need it.

Any hints ?


<-*- cut -*->
#include <sys/types.h>

struct p
{
        char p[10];
};

struct p p;
struct p *value = &p;

struct p floatValue()
{
        p.p[0] = 0x20;
        p.p[1] = 3;
        p.p[2] = 4;
        p.p[3] = 0x21;
        p.p[9] = 0xfe;
        return p;
}

int main()
{
        int i;
        char *(imp) = (char *)floatValue;
        void* retframe;
        void* frame = __builtin_apply_args(); //malloc(116);
        *(void**)frame = 0;
#ifdef pippo
        retframe=frame;
        floatValue();
#else
        retframe = __builtin_apply((void(*)(void))imp, frame, 0);
#endif
        for(i=0; i < 40; i++)
                printf("%02x ", ((unsigned char *)retframe)[i]);
        printf("\n");
        for(i=0; i < 4; i++)
                printf("%02x ", ((unsigned char *)&value)[i]);
        printf("\n");

        exit(0);
}
<-*- cut -*->

--
Bye,
Mirko  <[EMAIL PROTECTED]>




To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to