On 10 February 2017 at 13:30, Xiao-Yong Jin <jinxiaoy...@gmail.com> wrote:

> I believe passing/returning struct is actually compiler dependent (man gcc
> and /struct-return).
>

In C++ it's compiler-dependent, I think. The C ABI however is stable in
this respect, at least on Linux.


> What you are talking about implementation dependent type and alignment is
> a real problem.
> Actually without fully preprocessing the headerfiles, we can never be sure
> about system/architecture dependent types.
>
> In <sys/time.h>, we have
>            struct timeval {
>                time_t      tv_sec;     /* seconds */
>                suseconds_t tv_usec;    /* microseconds */
>            };
> the size of time_t and suseconds_t are architecture dependent.  The only
> reliable way that I
> know of is,
>       gcc -x c -include stdio.h -include sys/time.h -o /tmp/tt - <<<'int
> main()
>       {printf("%d %d %d\n",sizeof(struct 
> timeval),sizeof(time_t),sizeof(suseconds_t));}'
> && /tmp/tt && rm /tmp/tt
>

And this is exactly how the CFFI Groveller works. As you say, it's the only
way to reliably get this information and the groveller achieves this
automatically behind the scenes.

This would, of course, be possible in GNU APL too, but just as the
groveller is a tool built on top of CFFI, the same should be the case for
the GNU APL FFI. In other words, I think it makes sense to build it by
assuming hardcoded offsets at first, and later, if someone feels up to it,
that person can build a groveller on top of the GNU APL FFI.

Regards,
Elias

Reply via email to