Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] [Extern]Re: Interfacing C with code synthesised by CertiCoq

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] [Extern]Re: Interfacing C with code synthesised by CertiCoq


Chronological Thread 
  • From: Mario Frank <mafrank AT uni-potsdam.de>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] [Extern]Re: Interfacing C with code synthesised by CertiCoq
  • Date: Fri, 6 Oct 2023 15:10:22 +0200
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mafrank AT uni-potsdam.de; spf=Pass smtp.mailfrom=mafrank AT uni-potsdam.de; spf=None smtp.helo=postmaster AT cl-mail.uni-potsdam.de
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:2nz9tqhU9H9NTeTzD/ga6BgvunBQXvgji2hC6mlwRA09TyXqra CTdZUgvyMc5wx8ZJhNo6HkBEDEewK5yXcX2+Ys1NWZMTUO0VHAROpfBMnZsl/d8kbFl9K1u5 0QEJSWROefMXFKyeL75RS1CNosqeP3l5yAtKPci31tTwVja6QlwwBnBgOcC1R7LTM2Y6YEKA ==
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 6520073f_AB6bMc32AvtceRbZ/Z6FDFjz477MP2a5c8fEOPEvGJy+sry /QEQR7Lm6IeYjX/R/wZbigf/EuoFM7fbki6i+SQ==

Dear Andrew,

in fact, I already stumbled over VeriFFI yesterday. But nevertheless I want to thank you for
confirming that I found the right spot to search for a solution for my use case.

Sadly, the examples did not enlighten me, since the main.c files in the respective folders
do not provide args to the thread_info. In my use case, I do not have a main. Rather,
I catch some event with some integral parameters which I need to pass to the Coq code.
So, I hope someone of the VeriFFI team can enlighten me a bit.

Best regards,
Mario
---
Dipl.-Inform Mario Frank
Wissenschaftlicher Mitarbeiter
Universität Potsdam
Institut für Informatik und Computational Science
 - Lehrstuhl Theoretische Informatik -
 - Konsortialprojekt VERSECLOUD -
eMail: mario.frank AT uni-potsdam.de
fon: 0331 977 3069
Am 06.10.23 um 14:16 schrieb Andrew Appel:
Dear Mario:

The Verified Foreign Function Interface for CertiCoq, or VeriFFI for short, addresses exactly these issues:
How to interface Coq code (compiled by CertiCoq) to C code, and how to connect Coq proofs of the Coq code to VST proofs of the C code (and the garbage collector) across the interface.

https://github.com/CertiCoq/VeriFFI#readme

Two of the VeriFFI research team are traveling or otherwise unavailable this week, but I hope someone can respond to you about this in the next week or two.

Sincerely,

Andrew Appel


On Oct 6, 2023, at 5:15 AM, Mario Frank <mafrank AT uni-potsdam.de> wrote:

Dear Coq community,

I am working on integrating a synthesised portion of CLight code into a
C application.
Namely, I do have the following C and Coq function definitions :

int my_fun(unsigned int val1, unsigned int val2, int val3, unsigned int
val4)

Definition coq_fun (val1  : nat) (val2  : nat) (val3  : Z) (val4  : nat)
: Z := ...

my_fun shall call coq_fun, providing the parameters and return either
an error value or success.

The Coq function was compiled with

CertiCoq Compile -args 4 "my_fun" my_fun ...

and I use the following implementation for my_fun.

int my_fun(unsigned int val1, unsigned int val2, int val3, unsigned int
val4)
{
  struct thread_info *ti;
  ti = make_tinfo();
  if (ti == 0)
    return -1;

  ti->args[1]=val1; // Wrapping val into Val_int does not change anything
  ti->args[2]=val2; // Wrapping val into Val_int does not change anything
  ti->args[3]=val3; // Wrapping val into Val_int does not change anything
  ti->args[4]=val4; // Wrapping val into Val_int does not change anything

  value ret_val = body(ti);

  if (Int_val(ret_val) == -1)
  {
    return -1;
  }
  else
  {
    return 0;
  }
}

The conglomerate of native C code and synthesised C code compiles fine,
apart from some.
Also, the body function is called, but always returns 0, even when being
called
with invalid values. First it seemed that the parameters were not
properly handed over
to the function. But after tracing what happens in the CLight code, I
found out, that
the body function indeed is entered and left. But the closure to coq_fun
seemingly is not called.
At least, the tracing output does not show up.
But I am not able to find a resource or example describing how to
provide arguments from C to
synthesised code.

Does anyone have experience with this use case or a pointer to some example?

Best regards,
Mario






Archive powered by MHonArc 2.6.19+.

Top of Page