Next: Linking with foreign object files, Previous: Interfacing to other languages, Up: Interfacing to other languages
Any subprogram can be imported. GHDL puts no restrictions on foreign subprograms. However, the representation of a type or of an interface in a foreign language may be obscure. Most of non-composite types are easily imported:
int
for C
or Integer
for Ada
.
long long
for C
or Long_Long_Integer
for Ada
.
double
for C
or Long_Float
for Ada
.
Non-composite types are passed by value. For the in
mode, this
corresponds to the C
or Ada
mechanism. The out
and
inout
interfaces of non-composite types are gathered in a record
and this record is passed by reference as the first argument to the
subprogram. As a consequence, you shouldn't use in
and
inout
modes in foreign subprograms, since they are not portable.
Records are represented like a C
structure and are passed by reference
to subprograms.
Arrays with static bounds are represented like a C
array, whose
length is the number of elements, and are passed by reference to subprograms.
Unconstrained array are represented by a fat pointer. Do not use unconstrained arrays in foreign subprograms.
Accesses to an unconstrained array is a fat pointer. Other accesses correspond to an address and are passed to a subprogram like other non-composite types.
Files are represented by a 32 bits word, which corresponds to an index in a table.