宏扩展时出现Frama-c语法错误

时间:2015-05-14 03:48:41

标签: frama-c

我收到以下语法错误:

../stat-time.h:58:[kernel] user error: Cannot find field st_atim

这是Paul Eggert的gnu stat-time.h。这是导致错误的片段:

#define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)

long int get_stat_atime_ns(struct stat const *st) {
  ...
  // 58:
  return STAT_TIMESPEC(st, st_atim).tv_nsec;
  ...
}

我首先尝试预处理文件,然后在预处理文件上运行frama-c,但这没有帮助。 Frama-c仍在同一位置报告相同的错误,即使文件已正确预处理并且宏已正确扩展!我按如下方式调用gcc进行预处理:

gcc -E -C -I. -dD -nostdinc -D__FC_MACHDEP_X86_32 -I/usr/local/share/frama-c/libc

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。显然,/usr/local/share/frama-c/libc/__fc_define_stat.h中的frama-c标头缺少nsec中的struct stat粒度字段。我将以下字段添加到struct stat以解决问题:


    unsigned long int st_atimensec;
    unsigned long int st_mtimensec;
    unsigned long int st_ctimensec;

另外,请确保在配置时使用frama-c标头,例如configure CPP='gcc -E -C -dD -nostdinc -I/usr/local/share/frama-c/libc。如果没有,您需要取消定义以下两个宏: HAVE_STRUCT_STAT_ST_ATIM_TV_NSECHAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC定义以下宏:HAVE_STRUCT_STAT_ST_ATIMENSEC在标头文件中,并将其包含在config.h__fc_define_stat.h中}