Software-artifact Infrastructure Repository 学习笔记 1 :C Object Directory Specification

来源:互联网 发布:女装淘宝销量排行榜 编辑:程序博客网 时间:2024/06/01 19:26

有两种目录模式,一种是早先的 siemens 程序和 space,有一个单一的基准版本 v0,其他不同的版本都是从 v0 派生出的;另一种的新的组织方式,vK+1是由vK派生出的。

一般的,任一目录或子目录如果它的功能不是很显而易见,或者不合命名约定,会包含一个 CONTENTS 文件来描述。

一个 object 一般会包含如下子目录:

1. source

空目录,在实验过程中,我们把使用的版本放这里,结束后删掉。

2. versions.alt

包含不同版本变体的源码,当我们必须要修改源码来容纳一些工具时,我们就需要变体。

基本的变体在 versions.orig 子目录下,里面包含 v0, v1, ... , vK 子目录。v0 是最早的版本,其他 vJ 包含按顺序排列的下个版本。

每个 vK 包含 .c 文件和头文件,附加的 Makefile,还有一些非系统库的子目录。(历史上非库代码都会被合并到一个 .c 文件中,用于促进特殊的程序分析工具集,但是这在将来的 object 可能不会再出现了)

Makefile包含3个目标:

build:生成 <program>.exe 可执行文件

build-st:生成 <program>.st.int.exe 是一个 statement 插桩的可执行文件

build-bt:生成 <program>.bt.int.exe 是一个 branch 插桩的可执行文件

并且,编译一个文件的命令必须包含 $(COMPILE_PARAMETERS) flag, 例如: gcc -c $(COMPILE_PARAMETERS) grep.c 或 gcc -o grep.exe $(COMPILE_PARAMETERS) grep.c 

这可能会被环境脚本使用来制作这次编译。例如,它被一些脚本使用来实例程序错误版本(参见 C object handbook 的 Section 8)可能存在的第二个子目录是 versions.seeded ,它包含 v1, ..., vK, 可能存在 v0。versions.seeded 目录除了源码和头文件,也会有一些其他用于植入错误的文件。

如果我们把所有的错误关掉,.orgi 和 .seeded 效果应该是一样的。

3. versions

空目录,在实验中用到,可能会保持一个或多个版本。

4. testplans.alt

Object 的测试信息。

它也包含子目录 v0, ... , vK, 包含对应版本的测试信息。testplans.alt 可能包含一个 testscript 子目录。

为了避免对同一个文件的多份拷贝,我们把子目录 vJ 组织成两种类型的文件:

General Files:.tsl, .frame 和 .universe 文件

Link Files: 这是一些 link 到之前版本的 general file 的文件。这些允许从前一版本继承相似的测试数据,从而避免多次拷贝。

5. testplans

空目录,实验中保存测试集

6. traces

空目录,实验中保存test trace

7. traces.alt

子目录 v0,...,vK,保存各版本的 test trace 信息。

8. inputs

测试中使用的输入文件或者子目录

9. outputs

空目录,实验中保存测试输出

10. outputs.alt

永久的存放测试输出。在回归测试中能用来与之前的测试结果对比。

11. docs

object 的文档。

12. originals

13. scripts

14. info

程序的其他信息,特别是分析工具收集的信息以及实验需要保存的信息。

在版本区分出的目录中,最重要的信息是 fault matrix 数据。






0 0