×

经过正式验证的编译器后端。 (英语) Zbl 1185.68215号

摘要:本文描述了从Cminor(一种简单的命令式中间语言)到PowerPC汇编代码的编译器后端的开发和形式验证(语义保留证明),使用Coq证明助手来编写编译器并证明其合理性。这种经过验证的编译器在应用于关键软件认证的形式化方法的上下文中是有用的:编译器的验证保证了在源代码上证明的安全属性也适用于可执行的编译代码。

MSC公司:

68N20型 编译与解释理论
60年第68季度 规范和验证(程序逻辑、模型检查等)
68吨15 定理证明(演绎、解析等)(MSC2010)
PDF格式BibTeX公司 XML格式引用

参考文献:

[1] Appel,A.W.:《现代编译器在美国的实现》,剑桥大学出版社,剑桥(1998)·Zbl 0888.68035号
[2] Appel,A.W.:基础校对代码。收录于:《2001年计算机科学中的逻辑》,第247-258页。IEEE计算机学会出版社,银泉出版社(2001)
[3] Appel,A.W.,Blazy,S.:小步Cminor的分离逻辑。在:《高阶逻辑中的定理证明》,第20届国际会议,TPHOLs,2007年。计算机科学课堂讲稿,第4732卷,第5-21页。施普林格,纽约(2007)·Zbl 1144.68351号
[4] Barrett,C.W.、Fang,Y.、Goldberg,B.、Hu,Y.,Pnueli,A、Zuck,L.D.:TVOC:优化编译器的翻译验证器。In:计算机辅助验证,第17届国际会议,CAV 2005。计算机科学课堂讲稿,第3576卷,第291-295页。施普林格,纽约(2005)·兹比尔1081.68606
[5] Barthe,G.、Courtieu,P.、Dufay,G.和Melo de Sousa,S.:JavaCard平台的工具辅助规范和验证。摘自:AMAST’02会议记录。计算机科学课堂讲稿,第2422卷,第41-59页。斯普林格,纽约(2002)
[6] Barthe,G.,Forest,J.,Pichardie,D.,Rusu,V.:递归函数的定义和推理:Coq证明助手的实用工具。收录:《函数和逻辑编程》,第八国际交响乐团。FLOPS 2006年。计算机科学课堂讲稿,第3945卷,第114-129页。施普林格,纽约(2006)·Zbl 1185.68616号
[7] Barthe,G.、Grégoire,B.、Kunz,C.、Rezk,T.:优化编译器的证书翻译。In:静态分析,第13国际交响乐团。,SAS 2006。计算机科学课堂讲稿,第4134卷,第301-317页。施普林格,纽约(2006)·Zbl 1225.68062号
[8] Barthe,G.,Kunz,C.:抽象解释中的证书翻译。摘自:《编程语言与系统》,第17届欧洲编程研讨会,ESOP 2008。计算机科学课堂讲稿,第4960卷,第368-382页。施普林格,纽约(2008)·Zbl 1133.68315号
[9] Benton,N.、Hur,C.-K.:双正交性、阶跃诱导和编译器正确性。摘自:2009年函数式编程国际会议,第97-108页。ACM,纽约(2009)·Zbl 1302.68083号
[10] Beringer,L.:phi-instructions的功能消除。In:程序。第五期编译器优化与编译器验证研讨会(COCV 2006)。《理论计算机科学电子笔记》,第176卷,第3期,第3-20页。Elsevier,阿姆斯特丹(2007)
[11] Bertot,Y.,Casteéran,P.:交互式定理证明和程序开发——Coq'Art:归纳构造的微积分。EATCS理论计算机科学课文。施普林格,纽约(2004)·Zbl 1069.68095号
[12] Bertot,Y.,Grégoire,B.,Leroy,X.:基于数据流分析证明编译器优化的结构化方法。In:校对和课程类型,2004年研讨会类型。计算机科学课堂讲稿,第3839卷,第66-81页。施普林格,纽约(2006)·Zbl 1172.68414号
[13] Bertot,Y.,Komendantsky,V.:Coq中的不动点语义和部分递归。摘自:第十届国际声明性编程原则与实践大会(PPDP 2008),第89-96页。ACM,纽约(2008)
[14] Beyer,S.,Jacobi,C.,Kröning,D.,Leinenbach,D.,Paul,W.:把所有的东西放在一起?VAMP的正式验证。国际期刊软件。技术工具。Transf公司。8, 411–430 (2006) ·Zbl 05075105号 ·doi:10.1007/s10009-006-0204-6
[15] Blazy,S.、Dargaye,Z.、Leroy,X.:C编译器前端的形式验证。收录:FM 2006:国际交响乐团。形式方法。计算机科学课堂讲稿,第4085卷,第460-475页。施普林格,纽约(2006)
[16] Blazy,S.,Leroy,X.:C语言Clight子集的机械化语义。J.汽车。原因。43(3), 263–288 (2009) ·Zbl 1185.68136号 ·doi:10.1007/s10817-009-9148-3
[17] Blech,J.O.,Glesner,S.,Leitner,J.,Mülling,S.:优化SSA形式的代码生成:Isabelle/HOL中两种形式正确性证明的比较。In:程序。COCV研讨会(编译器优化与编译器验证)。《理论计算机科学电子笔记》,第141卷,第2期,第33-51页。Elsevier,阿姆斯特丹(2005)
[18] Boehm,H.-J.:线程不能作为库实现。摘自:《编程语言设计与实现2005》,第261-268页。ACM,纽约(2005)
[19] Cachera,D.,Jensen,T.P.,Pichardie,D.,Rusu,V.:在构造逻辑中提取数据流分析器。西奥。压缩机。科学。342(1), 56–78 (2005) ·Zbl 1077.68051号 ·doi:10.1016/j.tcs.2005.06.004
[20] Chaitin,G.J.:通过图着色实现寄存器分配和溢出。摘自:编译器构造研讨会。SIGPLAN通知,第17卷,第6期,第98–105页。ACM,纽约(1982年)
[21] Chen,J.、Hawblitzel,C.、Perry,F.、Emmi,M.、Condit,J.,Coetzee,D.、Pratikaki,P.:用于大规模优化面向对象编译器的类型保护编译。摘自:《2008年编程语言设计与实现》,第183-192页。ACM,纽约(2008)
[22] Chirica,L.,Martin,A.:编译器实现正确性证明。ACM事务处理。程序。语言系统。8(2), 185–214 (1986) ·Zbl 0591.68014号 ·doi:10.1145/5397.30847
[23] Chlipala,A.J.:从lambda演算到汇编语言的认证类型保护编译器。摘自:《2007年编程语言设计与实现》,第54–65页。ACM,纽约(2007)
[24] Clemmensen,G.,Oest,O.:Ada编译器的形式化规范和开发。In:IEEE软件会议。《工程学》,第430–440页。IEEE计算机学会出版社,银泉出版社(1984)
[25] Coq开发团队:Coq证明助理。http://coq.inia.fr/ (1989–2009)
[26] Coupet-Grimal,S.,Delobel,W.:两种静态分析的统一认证方法。In:校对和课程类型,2004年研讨会类型。计算机科学课堂讲稿,第3839卷,第115-137页。施普林格,纽约(2006)·Zbl 1172.68399号
[27] Dargaye,Z.:《Vérification formelle d’un compilater pour langages fonctionnels》。巴黎第七大学丹尼斯·迪德罗博士论文(2009)
[28] Dave,M.A.:编译器验证:参考书目。SIGSOFT软件。工程注释28(6),2(2003)·doi:10.1145/966221.966235
[29] Dold,A.,Gaul,T.,Zimmermann,W.:编译器后端的机械化验证。摘自:1998年STTT国际技术转让软件工具研讨会。金砖五国注释,第NS-98-4卷,第13-24页。奥胡斯大学(1998年)
[30] Dold,A.,Vialard,V.:一种经过机械验证的Lisp编译器编译规范。In:程序。FST TCS 2001。计算机科学讲义,第2245卷,第144-155页。施普林格,纽约(2001)·Zbl 1052.68584号
[31] Eide,E.,Regehr,J.:Volatiles被错误编译,以及如何应对。摘自:《第八届ACM&IEEE嵌入式软件国际会议论文集》,EMSOFT 2008,第255-264页。ACM,纽约(2008)
[32] Ellis,J.R.:斗牛犬:VLSI架构的编译器。ACM博士论文奖系列。麻省理工学院出版社,剑桥(1986)
[33] Feng,X.、Ni,Z.、Shao,Z.和Guo,Y.:一个用于基础校对代码的开放框架。摘自:《语言设计与实现中的类型国际研讨会》(TLDI’07),第67-78页。ACM,纽约(2007)
[34] Fox,A.C.J.:ARM6的正式规范和验证。在:《高阶逻辑中的定理证明》,第16届国际会议,TPHOLs 2003。计算机科学课堂讲稿,第2758卷,第25-40页。施普林格,纽约(2003)
[35] George,L.,Appel,A.W.:迭代寄存器合并。ACM事务处理。程序。语言系统。18(3), 300–324 (1996) ·数字对象标识代码:10.1145/229542.229546
[36] Goos,G.,Zimmermann,W.:编译器的验证。内容:正确的系统设计、最新见解和进展。计算机科学课堂讲稿,第1710卷,第201–230页。施普林格,纽约(1999年)
[37] Grégoire,B.:preuves术语汇编:un(nouveau)mariage entre Coq et OCaml。巴黎第七大学博士论文(2003)
[38] Gulwani,S.,Necula,G.C.:用于全局值编号的多项式时间算法。摘自:《静态分析》,第11届国际研讨会,SAS 2004。计算机科学课堂讲稿,第3148卷,第212-227页。施普林格,纽约(2004)·Zbl 1104.68414号
[39] Guttman,J.、Monk,L.、Ramsdell,J.,Farmer,W.、Swarup,V.:VLISP验证方案系统。LISP符号。计算。8(1–2), 33–110 (1995) ·Zbl 05480233号 ·doi:10.1007/BF01128407
[40] Hales,T.C.:形式证明。不是。美国数学。Soc.55(11),1370-1380(2008)·Zbl 1188.68002号
[41] Hartel,P.H.,Moreau,L.A.V.:规范化Java、Java虚拟机和Java卡的安全。ACM计算。Surv公司。33(4), 517–558 (2001) ·doi:10.1145/503112.503115
[42] Henderson,F.:在不合作的环境中准确收集垃圾。2002年记忆管理国际研讨会。SIGPLAN通知,第38卷,第2期,第150–156页。ACM,纽约(2003)
[43] Hobor,A.,Appel,A.W.,Zappa Nardelli,F.:并发分离逻辑的Oracle语义。摘自:《编程语言与系统》,第17届欧洲编程研讨会,ESOP 2008。计算机科学课堂讲稿,第4960卷,第353–367页。施普林格,纽约(2008)·兹比尔1133.68371
[44] Huang,Q.,Childers,B.R.,Soffa,M.L.:捕捉和识别寄存器分配中的错误。In:静态分析,第13国际交响乐团。,SAS 2006。计算机科学课堂讲稿,第4134卷,第281-300页。施普林格,纽约(2006)
[45] Huet,G.P.:拉链。J.功能。程序。7(5), 549–554 (1997) ·Zbl 0893.68014号 ·doi:10.1017/S0956796897002864
[46] Huisman,M.,Jacobs,B.:通过带有突然终止的Hoare逻辑验证Java程序。在:软件工程基本方法,第三届国际会议FASE 2000。计算机科学课堂讲稿,第1783卷,第284-303页。施普林格,纽约(2000年)
[47] IBM公司:PowerPC体系结构。Morgan Kaufmann,旧金山(1994)
[48] Kildall,G.A.:全球程序优化的统一方法。摘自:第一届程序设计语言原理研讨会,第194-206页。ACM,纽约(1973)·Zbl 0309.68020号
[49] Klein,G.,Nipkow,T.:类Java语言、虚拟机和编译器的机器选择模型。ACM事务处理。程序。语言系统。28(4), 619–695 (2006) ·数字对象标识代码:10.1145/1146809.1146811
[50] Knoop,J.,Koschützki,D.,Steffen,B.:基本块图:活恐龙?In:程序。编译器构造'98。计算机科学课堂讲稿,第1383卷,第65-79页。施普林格,纽约(1998年)
[51] Knoop,J.,Rüthing,O.,Steffen,B.:最佳代码运动:理论与实践。ACM事务处理。程序。语言系统。16(4),1117-1155(1994)·数字对象标识代码:10.1145/183432.183443
[52] Lacey,D.,Jones,N.D.,Van Wyk,E.,Frederiksen,C.C.:通过时序逻辑证明编译器优化的正确性。摘自:第29届程序设计语言原理研讨会,第283-294页。ACM,纽约(2002)·Zbl 1323.68380号
[53] Leinenbach,D.,Paul,W.,Petrova,E.:面向C0编译器的形式验证:代码生成和实现正确性。摘自:软件工程与形式化方法国际会议(SEFM 2005),第2-11页。IEEE计算机学会出版社,银泉出版社(2005)
[54] Leinenbach,D.,Petrova,E.:普遍的编译器验证。摘自:第三届系统软件验证国际研讨会(SSV 2008)。《理论计算机科学电子笔记》,第217卷,第21期,第23-40页。爱思唯尔,阿姆斯特丹(2008)
[55] Lerner,S.,Millstein,T.,Rice,E.,Chambers,C.:通过局部规则进行数据流分析和转换的自动稳健性证明。摘自:第32届程序设计语言原理研讨会,第364-377页。ACM,纽约(2005)·Zbl 1369.68145号
[56] Leroy,X.:Java字节码验证:算法和形式化。J.汽车。原因。30(3–4), 235–269 (2003) ·Zbl 1031.68041号 ·doi:10.1023/A:1025055424017
[57] Leroy,X.:编译器后端的正式认证,或者:使用校对助手对编译器进行编程。摘自:第33届程序设计语言原理研讨会,第42-54页。ACM,纽约(2006)·Zbl 1369.68124号
[58] Leroy,X.:Compcert验证了编译器、软件和评论证明。http://compcert.inria.fr/ (2009)
[59] Leroy,X.,Blazy,S.:类C内存模型的形式化验证及其用于验证程序转换。J.汽车。原因。41(1),1-31(2008)·Zbl 1154.68039号 ·doi:10.1007/s10817-008-9099-0
[60] Leroy,X.,Grall,H.:共同的大步骤操作语义。Inf.计算。207(2), 284–304 (2009) ·Zbl 1165.68044号 ·doi:10.1016/j.ic.2007.12.004
[61] Letouzey,P.:一种新的辅酶q提取方法。In:校对和课程类型,2002年研讨会类型。计算机科学课堂讲稿,第2646卷,第200-219页。施普林格,纽约(2003)·Zbl 1023.68516号
[62] Letouzey,P.:辅酶提取:概述。摘自:《逻辑与算法理论》,第四届欧洲可计算性会议,CiE 2008。计算机科学课堂讲稿,第5028卷,第359-369页。施普林格,纽约(2008)·Zbl 1142.68498号
[63] Li,G.,Owens,S.,Slind,K.:高阶逻辑子集的证明编译器结构。摘自:《编程语言与系统》,第16届欧洲编程研讨会,ESOP 2007。计算机科学课堂讲稿,第4421卷,第205-219页。施普林格,纽约(2007)·Zbl 1187.68141号
[64] Li,G.,Slind,K.:编译是高阶逻辑中的重写。In:自动扣除,CADE-21。计算机科学课堂讲稿,第4603卷,第19-34页。施普林格,纽约(2007年)·Zbl 1213.68194号
[65] Lindig,C.:C调用约定的随机测试。摘自:第六届自动调试国际研讨会论文集,AADEBUG 2005,第3-12页。ACM,纽约(2005)
[66] McCarthy,J.,Painter,J.:算术表达式编译器的正确性。在:计算机科学的数学方面。程序。《应用数学专题讨论会》,第19卷,第33-41页。美国数学学会,普罗维登斯(1967)·Zbl 0183.19201号
[67] McKeeman,W.M.:软件的差异测试。数字。《技术期刊》10(1),100–107(1998)
[68] Milner,R.,Weyhrauch,R.:在机械化逻辑中证明编译器的正确性。In:Meltzer,B.,Michie,D.(编辑)Proc。第七届年度机器智能研讨会。《机器智能》,第7卷,第51-72页。爱丁堡大学出版社(1972)·Zbl 0259.68008号
[69] Moore,J.S.:一种经过机械验证的语言实现。J.汽车。原因。5(4), 461–492 (1989)
[70] Moore,J.S.:《Piton:机械验证的汇编语言》。Kluwer,Dordrecht(1996)
[71] Morrisett,G.,Crary,K.,Glew,N.,Walker,D.:基于堆栈的类型化汇编语言。J.功能。程序。12(1), 43–88 (2002) ·Zbl 0998.68037号 ·doi:10.1017/S095679680104178
[72] Morrisett,G.,Walker,D.,Crary,K.,Glew,N.:从系统F到类型化汇编语言。ACM事务处理。程序。语言系统。21(3), 528–569 (1999) ·兹比尔1110.68361 ·doi:10.145/319301.3193345
[73] Muchnick,S.S.:高级编译器设计与实现。Morgan Kaufmann,旧金山(1997)
[74] Müller-Olm,M.:模块化编译器验证:提倡逐步抽象的改进代数方法。计算机科学讲义,第1283卷。施普林格,纽约(1997)·Zbl 1293.68013号
[75] 内库拉,G.C.:携带代码的证明。摘自:第24届程序设计语言原理研讨会,第106-119页。ACM,纽约(1997)
[76] Necula,G.C.:优化编译器的翻译验证。摘自:《程序设计语言设计与实现2000》,第83-95页。ACM,纽约(2000年)
[77] Necula,G.C.,McPeak,S.,Rahul,S.P.,Weimer,W.:CIL:用于分析和转换C程序的中间语言和工具。摘自:编译器构造,第11届国际会议,CC 2002。《计算机科学讲义》,第2304卷,第213–228页。斯普林格,纽约(2002)·Zbl 1051.68756号
[78] Necula,G.C.,Rahul,S.P.:基于Oracle的不可信软件检查。摘自:第28届程序设计语言原理研讨会,第142-154页。ACM,纽约(2001)·Zbl 1323.68222号
[79] O'Hearn,P.W.:资源、并发和局部推理。西奥。压缩机。科学。375(1–3), 271–307 (2007) ·Zbl 1111.68023号 ·doi:10.1016/j.tcs.2006.12.035
[80] Paul,W.等人:Verisoft项目。网址:http://www.verisoft.de/ (2003–2008)
[81] Peyton Jones,S.L.,Ramsey,N.,Reig,F.:C-:支持垃圾收集的可移植汇编语言。在:PPDP'99:关于声明式编程的原理和实践的国际会议。计算机科学课堂讲稿,第1702卷,第1-28页。纽约施普林格出版社(1999年)
[82] Pichardie,D.:解释抽象逻辑直觉主义:提取分析Java证书。雷恩1大学博士论文(2005)
[83] Pnueli,A.,Siegel,M.,Singerman,E.:翻译验证。收录:《系统构建和分析的工具和算法》,TACAS’98。计算机科学课堂讲稿,第1384卷,第151-166页。施普林格,纽约(1998年)
[84] Pop,S.:SSA表示框架:语义、分析和GCC实现。巴黎矿业大学博士论文(2006年)
[85] Rideau,L.,Serpette,B.P.,Leroy,X.:使用Coq在风车上倾斜:并行移动编译算法的形式验证。J.汽车。原因。40(4), 307–326 (2008) ·兹比尔1140.68491 ·doi:10.1007/s10817-007-9096-8
[86] Rinard,M.,Marinov,D.:可靠的指针编译。In:程序。FLoC运行时结果验证研讨会(1999年)
[87] 对手X:基于符号传递函数的认证编译方法。摘自:第31届程序设计语言原理研讨会,第1-13页。ACM,纽约(2004)·Zbl 1325.68070号
[88] Rosen,B.K.、Wegman,M.N.、Zadeck,F.K.:全球值数字和冗余计算。摘自:第15届程序设计语言原理研讨会,第12-27页。ACM,纽约(1988)
[89] Shao,Z.,Trifonov,V.,Saha,B.,Papaspyrou,N.:认证二进制文件的类型系统。ACM事务处理。程序。语言系统。27(1), 1–45 (2005) ·兹伯利05459336 ·doi:10.1145/1053468.10534469
[90] Stärk,R.,Schmid,J.,Börger,E.:Java和Java虚拟机。施普林格,纽约(2001)·Zbl 0978.68033号
[91] Strecker,M.:Isabelle中Java编译器的形式验证。In:程序。自动扣除会议(CADE)。计算机科学课堂讲稿,第2392卷,第63-77页。斯普林格,纽约(2002)
[92] Strecker,M.:C0编译器验证(中间报告)。技术报告,图卢兹保罗·萨巴蒂尔大学(2005年)
[93] Tristan,J.-B.,Leroy,X.:翻译验证器的形式验证:指令调度优化的案例研究。摘自:第35届程序设计语言原理研讨会,第17-27页。ACM,纽约(2008)·兹比尔1295.68074
[94] Tristan,J.-B.,Leroy,X.:验证了Lazy Code Motion的有效性。摘自:《编程语言设计与实现2009》,第316-326页。ACM,纽约(2009)
[95] Zuck,L.D.,Pnueli,A.,Fang,Y.,Goldberg,B.:VOC:优化编译器的翻译验证器。COCV'02,编译器优化满足编译器验证。《理论计算机科学电子笔记》,第65卷,第2期,第2-18页。Elsevier,阿姆斯特丹(2002)
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。