From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id D079DBC6B for ; Thu, 24 Jan 2008 16:59:38 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAABpEmEdQDPIahWdsb2JhbACQJAEBAQgCCAcIEweeaYIT X-IronPort-AV: E=Sophos;i="4.25,244,1199660400"; d="scan'208";a="21754745" Received: from smtp20.orange.fr ([80.12.242.26]) by mail4-smtp-sop.national.inria.fr with ESMTP; 24 Jan 2008 16:59:38 +0100 Received: from me-wanadoo.net (localhost [127.0.0.1]) by mwinf2004.orange.fr (SMTP Server) with ESMTP id 182741C0007A for ; Thu, 24 Jan 2008 16:59:38 +0100 (CET) Received: from [192.168.1.5] (ASt-Lambert-152-1-21-136.w82-120.abo.wanadoo.fr [82.120.67.136]) by mwinf2004.orange.fr (SMTP Server) with ESMTP id DB55F1C00330 for ; Thu, 24 Jan 2008 16:59:37 +0100 (CET) X-ME-UUID: 20080124155937898.DB55F1C00330@mwinf2004.orange.fr Message-ID: <4798B72B.5060904@pragmadev.com> Date: Thu, 24 Jan 2008 17:04:59 +0100 From: David LONY Organization: PRAGMADEV User-Agent: Thunderbird 1.5.0.9 (Windows/20061207) MIME-Version: 1.0 To: caml-list@yquem.inria.fr Subject: Re: [Caml-list] Multiboot problem References: <478B335F.4050804@pragmadev.com> <478B6292.3030208@pragmadev.com> In-Reply-To: <478B6292.3030208@pragmadev.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Spam: no; 0.00; libc:01 pointer:01 ocaml:01 alloc:01 alloc:01 mlvalues:01 struct:01 struct:01 extern:01 argv:01 ocaml:01 sizeof:01 malloc:01 libc:01 pointer:01 Hi all, I continue my multiboot sector but I'm blocked...To do so, I have implemented a dummy libC like the Funk project (But all function return a NULL pointer or 0). I'm trying to call the caml_startup function but it freeze. So I look into Ocaml source to know on which function it relies. Then in my main I call (instead of caml_startup) caml_init_ieee_floats(), caml_stat_alloc(), caml_register_custom_operations()... I put debug information on all my functions to know which functions are called. Then the caml_stat_alloc work well but if I call the caml_register_custom_operations function it freeze... So I copy the code of the caml_register_custom_operations function and renamed it caml_register_custom_operations1...I removed all code of this function (so the function do nothing)... So if I call caml_stat_alloc() function it work... If I call the caml_register_custom_operations1 it work also But if I call the caml_stat_alloc() and the caml_register_custom_operations1 after... It freeze.... And I don't know why!!! There is the code... If someone has an idea.... Regards David LONY /* Include definitions of the multiboot standard */ #include #include #include #include struct custom_operations_list { struct custom_operations * ops; struct custom_operations_list * next; }; extern struct custom_operations caml_int32_ops; void caml_register_custom_operations1(struct custom_operations * ops) { sos_x86_videomem_putstring(1, 0, SOS_X86_VIDEO_FG_WHITE | SOS_X86_VIDEO_BG_BLACK,"caml_register_custom_operations1"); } /* The C entry point of our operating system */ void sos_main(unsigned long magic, unsigned long addr) { static char * argv[]={ "ocaml", NULL }; int test; int result=11; multiboot_info_t *mbi; mbi = (multiboot_info_t *) addr; sos_x86_videomem_setup(); sos_x86_videomem_cls(SOS_X86_VIDEO_BG_BLACK); if(result == 11) { sos_x86_videomem_putchar(1, 0, SOS_X86_VIDEO_FG_WHITE | SOS_X86_VIDEO_BG_BLACK,'A'); } else { sos_x86_videomem_putchar(1, 0, SOS_X86_VIDEO_FG_WHITE | SOS_X86_VIDEO_BG_BLACK,'B'); } caml_init_ieee_floats(); test = caml_stat_alloc(sizeof(int)); caml_register_custom_operations1(&caml_int32_ops); /* An operatig system never ends */ for (;;) continue; } David LONY a écrit : > Does anyone can explain to me how the function caml_startup works ? > Does it relies on malloc or free function or any functions of the C > library ? > I've tried to look for an explanation on the Ocaml manual but I found > nothing... > > Regards. > David LONY > > David LONY a écrit : >> Hi all, >> >> I'm currently trying to make a multiboot sector with ocaml code. >> Unfortunately, it doesn't work bu I don't know why... >> To do that, I made a small program in ocaml : >> >> let test_char a = a+1 >> let _ = Callback.register "caml_test_char" test_char;; >> >> I also made a dummy libc (all functions return 0 or NULL pointer) >> because I have to provide all these functions if a wants to >> statically link a C objects.. >> This is my main file with the entry point of the kernel : >> >> /* Include definitions of the multiboot standard */ >> #include >> #include >> #include >> #include >> >> /* This is the entry point of the kernel */ >> void sos_main(unsigned long magic, unsigned long addr) >> { >> static char * argv[]={ "ocaml", NULL }; >> >> multiboot_info_t *mbi; >> >> /* Retrieve grub information (memory...etc) */ >> mbi = (multiboot_info_t *) addr; >> >> caml_startup(argv); >> >> /* Clean the screen and put a 'A' on it */ >> sos_x86_videomem_setup(); >> sos_x86_videomem_cls(SOS_X86_VIDEO_BG_BLACK); >> sos_x86_videomem_putchar(1, 0, SOS_X86_VIDEO_FG_WHITE | >> SOS_X86_VIDEO_BG_BLACK,'A'); >> >> /* An operatig system never ends */ >> for (;;) >> continue; >> >> return; >> } >> >> >> But qemu freezes when I call the caml_startup function (If I removed >> it, it works well...)...Perhaps the caml_startup function relies on C >> function that I don't implements ? >> If someone have an idea.... Because I must call this function >> (caml_startup) in order to call my ocaml function (test_char)... >> >> >> Thanks a lot. >> Regards, >> David LONY >> >> >> _______________________________________________ >> Caml-list mailing list. Subscription management: >> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list >> Archives: http://caml.inria.fr >> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners >> Bug reports: http://caml.inria.fr/bin/caml-bugs >> >> > > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > >