|
|
|
# Allocating space in the bss and data segment from haskell
|
|
|
|
|
|
|
|
|
|
|
|
One is forced to use an external C file to allocate data in the bss or data segment even though no code at all will be output and the object file will simply contain a linker directive to allocate some space. This is a deficiency in the current FFI spec.
|
|
|
|
|
|
|
|
## Proposal (experimental in jhc)
|
|
|
|
|
|
|
|
|
|
|
|
allow declarations of the form
|
|
|
|
|
|
|
|
```wiki
|
|
|
|
foreign space <n> :: Ptr <type>
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
where n is the number of elements to allocate (default 1) and type is a basic type or a renaming thereof.
|
|
|
|
|
|
|
|
|
|
|
|
the space allocated will be n\*sizeof type for the sizeof as specified by the Storable class. user defined types (other than simple newtype or type renaming of built in types) may not be used.
|
|
|
|
|
|
|
|
|
|
|
|
if the type is 'forall a . Ptr a' then the size will be assumed to be one byte.
|
|
|
|
|
|
|
|
### initialized data
|
|
|
|
|
|
|
|
|
|
|
|
initialized data is trickier, a possible syntax is
|
|
|
|
|
|
|
|
```wiki
|
|
|
|
|
|
|
|
foreign space <n> :: Ptr <type> = constant
|
|
|
|
|
|
|
|
where constant may be one of
|
|
|
|
|
|
|
|
|
|
|
|
an initialized list [ 0, 1, 2, ...]
|
|
|
|
|
|
|
|
a "string" to be interpreted as utf8 or unicode code points depending on what type of pointer it is assigned to.
|
|
|
|
|
|
|
|
``` |
|
|
\ No newline at end of file |