Browse thread
Caml interface with C on x86_64
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Li-Thiao-Té_Sébastien <sayan@c...> |
| Subject: | Re: [Caml-list] Allocating caml lists from C : possible bug on amd64 |
Xavier Leroy wrote:
>>I have already tried to be GC-friendly, and use the "standard" way to do
>>things. For example the following function also works using a 32-bit
>>chroot, but also fails with the 64-bit compiler. The question is : why
>>does it fail with the 64-bit compiler?
>
> Because your C code is wrong. gcc -Wall is your friend.
>
>>#include <stdio.h>
>>#include <caml/mlvalues.h>
>>#include <caml/memory.h>
>>#include <caml/bigarray.h>
>>
>>test_liste (value str) {
>
> Should be "value test_list(value str)".
>
Indeed, but my previous mail to this list read "value test_liste (value
str)". No problem noticed without it.
>> // test function to return a list to caml
>>// value cons;
>>// cons = caml_alloc_small (2,0);
>>// caml_modify(&Field(cons,0),Val_int(0));
>>// caml_modify(&Field(cons,1),Val_int(0));
>>
>> CAMLparam1(str);
>> CAMLlocal1(cons);
>> cons = caml_alloc (2,0);
>
> You haven't declared caml_alloc (include <caml/alloc.h>), so the C
> compiler assumes it returns an int instead of a value, and generates
> wrong code.
>
That was the main problem.
>> Store_field(cons,0, Val_int(1));
>> Store_field(cons,1, Val_int(0));
>>
>> printf("This is test_liste.\n");
>> printf(String_val(str));
>
> Should be: printf("%s", String_val(str));
>
> (Hint: what happens if str contains "%s" ?)
>
Well, that one was rather a non-production-ready test anyway. I was
blocked before even reaching that point.
Thanks very much for the help and the -Wall flag. I should have known :)
--
Li-Thiao-Té Sébastien