Package: btrfs-tools Version: 3.14.1-1 Usertags: goto-cc During a rebuild of all packages in a clean sid chroot (and cowbuilder+pbuilder) the build failed with the following error. Please note that we use our research compiler tool-chain (using tools from the cbmc package), which permits extended reporting on type inconsistencies at link time.
[...]
gcc -g -Os -fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security -o btrfs btrfs.o help.o cmds-subvolume.o
cmds-filesystem.o cmds-device.o cmds-scrub.o cmds-inspect.o cmds-balance.o
cmds-send.o cmds-receive.o cmds-quota.o cmds-qgroup.o cmds-replace.o
cmds-check.o cmds-restore.o cmds-rescue.o chunk-recover.o super-recover.o
cmds-property.o \
ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o root-tree.o
dir-item.o file-item.o inode-item.o inode-map.o extent-cache.o extent_io.o
volumes.o utils.o repair.o qgroup.o raid6.o free-space-cache.o list_sort.o
props.o -Wl,-z,relro -luuid -lblkid -lm -lz -llzo2 -lcom_err -L. libbtrfs.a
-lpthread
error: conflicting function declarations "fstat"
old definition in module cmds-filesystem file
/usr/include/x86_64-linux-gnu/sys/stat.h line 220
signed int (signed int, struct stat *)
new definition in module cmds-replace file
/usr/include/x86_64-linux-gnu/sys/stat.h line 220
signed int (signed int, struct stat *)
Makefile:179: recipe for target 'btrfs' failed
make[2]: *** [btrfs] Error 64
While these declarations appear to be perfectly consistent, the extended
diagnostics produced by our tool explain the difference:
reason for conflict in types listed below (struct/struct):
composite type component counts differ (18/15)
struct stat {
unsigned long int st_dev;
unsigned long int st_ino;
unsigned long int st_nlink;
unsigned int st_mode;
unsigned int st_uid;
unsigned int st_gid;
signed int __pad0;
unsigned long int st_rdev;
signed long int st_size;
signed long int st_blksize;
signed long int st_blocks;
signed long int st_atime;
unsigned long int st_atimensec;
signed long int st_mtime;
unsigned long int st_mtimensec;
signed long int st_ctime;
unsigned long int st_ctimensec;
signed long int [3l] __unused;
}
struct stat {
unsigned long int st_dev;
unsigned long int st_ino;
unsigned long int st_nlink;
unsigned int st_mode;
unsigned int st_uid;
unsigned int st_gid;
signed int __pad0;
unsigned long int st_rdev;
signed long int st_size;
signed long int st_blksize;
signed long int st_blocks;
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
signed long int [3l] __unused;
}
This difference is caused by #define _XOPEN_SOURCE 500 being present in
cmds-filesystem.c, while this is missing (at least) from cmds-replace.c. It
would likely be best to specify this define on the compiler command line to
ensure consistency across all files.
Best,
Michael
pgpXUvVFZBCM3.pgp
Description: PGP signature

