libarchive: fix mismatch between library and test configuration
I was investigating libarchive test failures on CheriBSD and it turns out we get a reproducible SIGBUS for test_archive_m5, etc. Debugging this shows that libarchive and the tests disagree when it comes to the definition of archive_md5_ctx: libarchive assumes it's the OpenSSL type whereas the test use the libmd type. The latter is not necessarily aligned enough to store a pointer (16 bytes for CHERI RISC-V), so we were crashing when storing EVP_MD_CTX* to an 8-byte-aligned archive_md5_ctx. To avoid problems like this in the future, factor out the common compiler flags into a Makefile.inc and include that from the tests Makefile. Reviewed By: lwhsu Differential Revision: https://reviews.freebsd.org/D26469
This commit is contained in:
parent
16694347a9
commit
72f97a2d09
@ -6,29 +6,13 @@ _LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
|
|||||||
|
|
||||||
LIB= archive
|
LIB= archive
|
||||||
|
|
||||||
LIBADD= z bz2 lzma bsdxml zstd
|
|
||||||
CFLAGS+= -DHAVE_BZLIB_H=1 -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1 -DHAVE_ZSTD_H=1 -DHAVE_LIBZSTD=1
|
|
||||||
|
|
||||||
# FreeBSD SHLIB_MAJOR value is managed as part of the FreeBSD system.
|
# FreeBSD SHLIB_MAJOR value is managed as part of the FreeBSD system.
|
||||||
# It has no real relation to the libarchive version number.
|
# It has no real relation to the libarchive version number.
|
||||||
SHLIB_MAJOR= 7
|
SHLIB_MAJOR= 7
|
||||||
|
|
||||||
CFLAGS+= -DPLATFORM_CONFIG_H=\"${.CURDIR}/config_freebsd.h\"
|
|
||||||
CFLAGS+= -I${.OBJDIR}
|
CFLAGS+= -I${.OBJDIR}
|
||||||
CFLAGS+= -I${SRCTOP}/sys/contrib/zstd/lib
|
CFLAGS+= -I${SRCTOP}/sys/contrib/zstd/lib
|
||||||
|
.include "Makefile.inc"
|
||||||
.if ${MK_OPENSSL} != "no"
|
|
||||||
CFLAGS+= -DWITH_OPENSSL
|
|
||||||
LIBADD+= crypto
|
|
||||||
.else
|
|
||||||
LIBADD+= md
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.if ${MK_ICONV} != "no"
|
|
||||||
# TODO: This can be changed back to CFLAGS once iconv works correctly
|
|
||||||
# with statically linked binaries.
|
|
||||||
SHARED_CFLAGS+= -DHAVE_ICONV=1 -DHAVE_ICONV_H=1 -DICONV_CONST=
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.if ${MACHINE_ARCH:Marm*} != "" || ${MACHINE_ARCH:Mmips*} != "" || \
|
.if ${MACHINE_ARCH:Marm*} != "" || ${MACHINE_ARCH:Mmips*} != "" || \
|
||||||
${MACHINE_ARCH:Mpowerpc*} != ""
|
${MACHINE_ARCH:Mpowerpc*} != ""
|
||||||
|
21
lib/libarchive/Makefile.inc
Normal file
21
lib/libarchive/Makefile.inc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# $FreeBSD$
|
||||||
|
# These defines are needed for both libarchive and the tests. If we don't keep
|
||||||
|
# them in sync we can get run-time crashes while running tests due to mismatches
|
||||||
|
# between structures such as archive_md5_ctx, etc.
|
||||||
|
|
||||||
|
LIBADD= z bz2 lzma bsdxml zstd
|
||||||
|
CFLAGS+= -DHAVE_BZLIB_H=1 -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1 -DHAVE_ZSTD_H=1 -DHAVE_LIBZSTD=1
|
||||||
|
CFLAGS+= -DPLATFORM_CONFIG_H=\"${.CURDIR}/config_freebsd.h\"
|
||||||
|
|
||||||
|
.if ${MK_OPENSSL} != "no"
|
||||||
|
CFLAGS+= -DWITH_OPENSSL
|
||||||
|
LIBADD+= crypto
|
||||||
|
.else
|
||||||
|
LIBADD+= md
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.if ${MK_ICONV} != "no"
|
||||||
|
# TODO: This can be changed back to CFLAGS once iconv works correctly
|
||||||
|
# with statically linked binaries.
|
||||||
|
SHARED_CFLAGS+= -DHAVE_ICONV=1 -DHAVE_ICONV_H=1 -DICONV_CONST=
|
||||||
|
.endif
|
@ -1,4 +1,5 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
.include <src.opts.mk>
|
||||||
|
|
||||||
PACKAGE= tests
|
PACKAGE= tests
|
||||||
|
|
||||||
@ -15,7 +16,7 @@ PROGS+= libarchive_test
|
|||||||
CFLAGS+= -I${.CURDIR} -I${.CURDIR:H} -I${.OBJDIR}
|
CFLAGS+= -I${.CURDIR} -I${.CURDIR:H} -I${.OBJDIR}
|
||||||
CFLAGS+= -I${_LIBARCHIVEDIR}/libarchive -I${_LIBARCHIVEDIR}/libarchive/test
|
CFLAGS+= -I${_LIBARCHIVEDIR}/libarchive -I${_LIBARCHIVEDIR}/libarchive/test
|
||||||
CFLAGS+= -I${_LIBARCHIVEDIR}/test_utils
|
CFLAGS+= -I${_LIBARCHIVEDIR}/test_utils
|
||||||
CFLAGS+= -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1
|
.include "../Makefile.inc"
|
||||||
|
|
||||||
# Uncomment to link against dmalloc
|
# Uncomment to link against dmalloc
|
||||||
#LDADD+= -L/usr/local/lib -ldmalloc
|
#LDADD+= -L/usr/local/lib -ldmalloc
|
||||||
@ -298,10 +299,6 @@ TESTS_SRCS= \
|
|||||||
test_zip_filename_encoding.c
|
test_zip_filename_encoding.c
|
||||||
|
|
||||||
# Deterministic failures:
|
# Deterministic failures:
|
||||||
# Crashes with SIGBUS
|
|
||||||
BROKEN_TESTS+= test_archive_rmd160
|
|
||||||
# Fails with `libarchive/test/test_archive_crypto.c:121: md != actualmd`
|
|
||||||
BROKEN_TESTS+= test_archive_sha384
|
|
||||||
# Fails with `test_read_disk_directory_traversals.c:1094: File at has atime 886622, 1443306049 seconds ago`
|
# Fails with `test_read_disk_directory_traversals.c:1094: File at has atime 886622, 1443306049 seconds ago`
|
||||||
BROKEN_TESTS+= test_read_disk_directory_traversals
|
BROKEN_TESTS+= test_read_disk_directory_traversals
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user