Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Toplevel crashes when trying to call external functions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Gerd Stolpmann <info@g...>
Subject: Re: [Caml-list] Toplevel crashes when trying to call external functions
Of course, the problem can be anywhere, we don't see the code you are
calling. The stubs look reasonable, and it is very likely that your
problem is an unlucky interference with the C++ part.

Am Son, 2004-07-11 um 20.58 schrieb Andy Yang:
> Hi, 
> 
> Since at this point, I am not concerning much about
> codes' portability, so I just assume the program run 
> on x86 machines, on which 32 bits pointers are
> allowed.I modified code as follows:
> 
> value zchaff_InitManager(void)
> {
>   CAMLparam0();  
>   CAMLlocal1(val);
>   void* solver = SAT_InitManager();
>   val = copy_int32((int)solver);
>   cout<<"solver = "<<hex<<solver<<endl;
>   CAMLreturn ( val );
> }
> 
> void zchaff_ReadCnf(value mng, value filename)
> {
>   CAMLparam2(mng, filename);
>   SAT_Manager solver = (void*)Int32_val(mng);
>   cout<<"solver = "<<hex <<solver <<endl;
>   assert(solver != NULL);  
>   char * fn = String_val(filename);  

For example, this line can be problematic if fn is modified by read_cnf.

>   cout<<"file = "<<fn <<endl;
>   read_cnf(solver, fn);
>   CAMLreturn0;
> }
> 
> 
> Thus I should follows ocaml's Tag rules. However, the
> problem still exists. Tracing with gdb, I noticed that
> the toplevel still crashes in function obj_tag.
> However, I cannot find the obj_tag 's sourcecode in
> Ocaml's source. There is only a mapping table in
> ocaml_dir/byterun/prims.c, in which obj_tag is one of
> the primitives.
> 
> Thanks a lot!
> 
> Andy
> 
> > 
> > > Hi, all
> > > 
> > > I am relatively new to Ocaml. Sorry about the spam
> > if
> > > this is a trivial problem. I am trying to give
> > call
> > > some external functions. 
> > > 
> > > Some codes are as follows:
> > > 
> > > value zchaff_InitManager(void)
> > > {
> > >   CAMLparam0();  
> > >   void * solver = SAT_InitManager();
> > >   value val = alloc(1, Custom_tag);
> > >   Int32_val(val) = (int) solver;
> > >   CAMLreturn ( val );
> > > }
> > > 
> > > }
> > > 
> > 
> > These may not solve this specific problem but I
> > think they are good
> > advice:
> > 
> > First:
> > 17.9.2. Custom blocks must be allocated via the
> > alloc_custom function.
> > (And remember that the custom block size argument is
> > in bytes).
> > 
> > Second:
> > Passing 1 as the block size to alloc allocates a
> > block with one word
> > as a tail (at offset 0), but Data_custom_val
> > accesses a value in the
> > tail at offset 1.  This is probably the error you're
> > looking for.
> > 
> > Third:
> > I don't understand why you're going through
> > Int32_val and Val_int32
> > to get and set your pointer.  You probably want to
> > write a new macro
> > that will access the custom area as a pointer-sized
> > chunk on every
> > architecture.  Assuming pointers to be 32-bits
> > really is a bad idea.
> > -- 
> > Hey, Adam Smith, keep your invisible hands to
> > yourself!
> > 
> 
> 
> 
> 
> 
> 		
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail is new and improved - Check it out!
> http://promotions.yahoo.com/new_mail
> 
> -------------------
> To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
> Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> 
> 
-- 
------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
------------------------------------------------------------

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners