the c standard formalized in coq what s next
play

The C standard formalized in Coq, whats next? Robbert Krebbers - PowerPoint PPT Presentation

The C standard formalized in Coq, whats next? Robbert Krebbers Aarhus University, Denmark May 13, 2016 @ Cambridge Computer Laboratory, UK 1 What is this program supposed to do? The C quiz, question 1 int main() { int x; int y = (x = 3)


  1. The C standard formalized in Coq, what’s next? Robbert Krebbers Aarhus University, Denmark May 13, 2016 @ Cambridge Computer Laboratory, UK 1

  2. What is this program supposed to do? The C quiz, question 1 int main() { int x; int y = (x = 3) + (x = 4); printf("x=%d,y=%d\n", x, y); } 2

  3. What is this program supposed to do? The C quiz, question 1 int main() { int x; int y = (x = 3) + (x = 4); printf("x=%d,y=%d\n", x, y); } Let us try some compilers ◮ Clang prints x=4,y=7 , seems just left-right 2

  4. What is this program supposed to do? The C quiz, question 1 int main() { int x; int y = (x = 3) + (x = 4); printf("x=%d,y=%d\n", x, y); } Let us try some compilers ◮ Clang prints x=4,y=7 , seems just left-right ◮ GCC prints x=4,y=8 , does not correspond to any order 2

  5. What is this program supposed to do? The C quiz, question 1 int main() { int x; int y = (x = 3) + (x = 4); printf("x=%d,y=%d\n", x, y); } Let us try some compilers ◮ Clang prints x=4,y=7 , seems just left-right ◮ GCC prints x=4,y=8 , does not correspond to any order This program violates the sequence point restriction ◮ due to two unsequenced writes to x ◮ resulting in undefined behavior ◮ thus both compilers are right 2

  6. Underspecification in C11 ◮ Unspecified behavior : two or more behaviors are allowed For example: order of evaluation in expressions (+57 more) ◮ Implementation defined behavior : like unspecified behavior, but the compiler has to document its choice For example: size and endianness of integers (+118 more) ◮ Undefined behavior: the standard imposes no requirements at all, the program is even allowed to crash For example: dereferencing a NULL or dangling pointer, signed integer overflow, . . . (+201 more) 3

  7. Underspecification in C11 ◮ Unspecified behavior : two or more behaviors are allowed For example: order of evaluation in expressions (+57 more) Non-determinism ◮ Implementation defined behavior : like unspecified behavior, but the compiler has to document its choice For example: size and endianness of integers (+118 more) Parametrization ◮ Undefined behavior: the standard imposes no requirements at all, the program is even allowed to crash For example: dereferencing a NULL or dangling pointer, signed integer overflow, . . . (+201 more) No semantics/crash state 3

  8. Why does C use underspecification that heavily? Pros for optimizing compilers: ◮ More optimizations are possible ◮ High run-time efficiency ◮ Easy to support multiple architectures 4

  9. Why does C use underspecification that heavily? Pros for optimizing compilers: ◮ More optimizations are possible ◮ High run-time efficiency ◮ Easy to support multiple architectures Cons for programmers/formal methods people: ◮ Portability and maintenance problems ◮ Hard to capture precisely in a semantics ◮ Hard to formally reason about 4

  10. Approaches to underspecification CompCert (Leroy et al. ) / VST (Appel et al. ) ◮ Main goal: verification of/w.r.t. CompCert compiler in Coq ◮ Semantics only needs to be correct for CompCert compiler For example: integer overflow and aliasing violations not UB KCC (Ellison & Rosu, Hathhorn et al. ) ◮ Main goal: compiler independent C11 semantics in K ◮ Describes most unspecified and undefined behavior ◮ No proof assistant support CH 2 O (Krebbers & Wiedijk) ◮ Main goal: compiler independent C11 semantics in Coq ◮ Describes all unspecified and undefined behavior ◮ Describes some implementation-defined behavior For example: no legacy architectures with 1s’ complement Cerberus (Sewell et al. ) ◮ Main goal: ‘ defacto ’ C11 semantics in LEM ◮ Improve standard to match the way C is used in practice 5

  11. The CH 2 O project OCaml part Coq part C sources CH 2 O CH 2 O core C abstract C 6

  12. The CH 2 O project OCaml part Coq part C sources Operational CH 2 O semantics CH 2 O core C abstract C Γ , δ ⊢ S 1 � S 2 6

  13. The CH 2 O project OCaml part Coq part Typing judgment Γ ⊢ S : f main Type preservation C sources Type soundness & progress Operational CH 2 O semantics CH 2 O core C abstract C Γ , δ ⊢ S 1 � S 2 6

  14. The CH 2 O project OCaml part Coq part Typing judgment Γ ⊢ S : f main Type preservation C sources Type soundness & progress Operational CH 2 O semantics CH 2 O core C abstract C Γ , δ ⊢ S 1 � S 2 Soundness & Completeness Executable semantics S 2 ∈ exec Γ ,δ S 1 6

  15. The CH 2 O project OCaml part Coq part Typing judgment Γ ⊢ S : f main Type preservation C sources Type soundness & progress Operational CH 2 O semantics CH 2 O core C abstract C Γ , δ ⊢ S 1 � S 2 Soundness & Soundness & Completeness Completeness Pure expression Executable evaluation semantics [ [ e ] ] Γ ,ρ, m = ν S 2 ∈ exec Γ ,δ S 1 6

  16. The CH 2 O project OCaml part Coq part Typing judgment Γ ⊢ S : f main Type preservation C sources Type soundness & progress Axiomatic Operational semantics Soundness CH 2 O semantics CH 2 O core C abstract C R , J , T ⊢ Γ ,δ Γ , δ ⊢ S 1 � S 2 { P } s { Q } Soundness & Soundness & Completeness Completeness Pure expression Executable evaluation semantics [ [ e ] ] Γ ,ρ, m = ν S 2 ∈ exec Γ ,δ S 1 6

  17. The CH 2 O project OCaml part Coq part Refinement Typing judgment judgment S 1 ⊑ f Γ ⊢ S : f main Γ S 2 : f main Type preservation C sources Invariance Type soundness & progress Axiomatic Operational semantics Soundness CH 2 O semantics CH 2 O core C abstract C R , J , T ⊢ Γ ,δ Γ , δ ⊢ S 1 � S 2 { P } s { Q } Soundness & Soundness & Completeness Completeness Pure expression Executable evaluation semantics [ [ e ] ] Γ ,ρ, m = ν S 2 ∈ exec Γ ,δ S 1 6

  18. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; l: if (p) { return (*p); } else { int j = 17; p = &j; goto l; } 7

  19. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p return (*p); } else { NULL int j = 17; p = &j; goto l; } 7

  20. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p return (*p); } else { NULL int j = 17; p = &j; goto l; } 7

  21. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p j return (*p); } else { NULL 17 int j = 17; p = &j; goto l; } 7

  22. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p j return (*p); } else { • 17 int j = 17; p = &j; goto l; } 7

  23. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p j return (*p); } else { • 17 int j = 17; p = &j; goto l; } 7

  24. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p return (*p); } else { • int j = 17; p = &j; goto l; } 7

  25. Non-local control flow and block scope variables The C quiz, question 2 int *p = NULL; memory: l: if (p) { p return (*p); } else { • int j = 17; p = &j; goto l; } C11, 6.2.4p2: the value of a pointer becomes indeterminate when the object it points to (or just past) reaches the end of its lifetime. = ⇒ Undefined behavior 7

  26. Non-local control flow and block scope variables Goto considered harmful? http://xkcd.com/292/ 8

  27. Non-local control flow and block scope variables Goto considered harmful? http://xkcd.com/292/ Not necessarily: ⊢ { P } . . . goto main_sub3; . . . { Q } 8

  28. Non-local control flow and block scope variables Separation logic for non-local control Statement judgment: R , J , T ⊢ { P } s { Q } 9

  29. Non-local control flow and block scope variables Separation logic for non-local control Statement judgment: R , J , T ⊢ { P } s { Q } where: ◮ { P } s { Q } is a Hoare triple, as usual 9

  30. Non-local control flow and block scope variables Separation logic for non-local control Statement judgment: R , J , T ⊢ { P } s { Q } where: ◮ { P } s { Q } is a Hoare triple, as usual ◮ R has to hold to execute a return 9

  31. Non-local control flow and block scope variables Separation logic for non-local control Statement judgment: R , J , T ⊢ { P } s { Q } where: ◮ { P } s { Q } is a Hoare triple, as usual ◮ R has to hold to execute a return ◮ J maps labels to their jumping condition When executing a goto l , the assertion J l has to hold 9

  32. Non-local control flow and block scope variables Separation logic for non-local control Statement judgment: R , J , T ⊢ { P } s { Q } where: ◮ { P } s { Q } is a Hoare triple, as usual ◮ R has to hold to execute a return ◮ J maps labels to their jumping condition When executing a goto l , the assertion J l has to hold ◮ T maps break s/ continue s to their jumping condition 9

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend