宏扩展时的 Frama-c 语法错误
Frama-c syntax error on macro expansion
我收到以下语法错误:
../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
有什么想法吗?
我想出了解决办法。显然,/usr/local/share/frama-c/libc/__fc_define_stat.h
中的 frama-c header 缺少 struct stat
中的 nsec
粒度字段。我将以下字段添加到 struct stat
以解决问题:
unsigned long int st_atimensec;
unsigned long int st_mtimensec;
unsigned long int st_ctimensec;
此外,确保在配置时使用 frama-c header,例如 configure CPP='gcc -E -C -dD -nostdinc -I/usr/local/share/frama-c/libc
。如果没有,您将需要 取消定义 以下两个宏:
HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
、HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
和 定义 以下宏:HAVE_STRUCT_STAT_ST_ATIMENSEC
在 header 文件中,并将其包含在 config.h
或 __fc_define_stat.h
我收到以下语法错误:
../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
有什么想法吗?
我想出了解决办法。显然,/usr/local/share/frama-c/libc/__fc_define_stat.h
中的 frama-c header 缺少 struct stat
中的 nsec
粒度字段。我将以下字段添加到 struct stat
以解决问题:
unsigned long int st_atimensec; unsigned long int st_mtimensec; unsigned long int st_ctimensec;
此外,确保在配置时使用 frama-c header,例如 configure CPP='gcc -E -C -dD -nostdinc -I/usr/local/share/frama-c/libc
。如果没有,您将需要 取消定义 以下两个宏:
HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
、HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
和 定义 以下宏:HAVE_STRUCT_STAT_ST_ATIMENSEC
在 header 文件中,并将其包含在 config.h
或 __fc_define_stat.h