On Mon, 2016-06-13 at 11:04 -0700, Conrad Meyer wrote:
> I expect it's because:
> 
> 1. bitstr_size() is just bytes (doesn't round up to sizeof(bitstr_t ==
> unsigned long))

This might result in allocating too-few bytes, but that's something
you'd only notice if you have something like valgrind watching out for
accesses beyond the allocated size.

> 2. The userspace version of bit_alloc() uses calloc(bitstr_size(), 1)
> (an array of nmemb=bitstr_size() size=bytes, doesn't have to be
> 'unsigned long' sized or aligned).
> 3. Various bit_* functions access the result as if it's an array of
> 'unsigned long', when it was allocated as a single-byte array (no
> ulong alignment or size).

malloc and related functions (including calloc) always return memory
"...suitably aligned for storage of any type of object."  Last time I
checked that basically meant all allocations, even a single byte, are
aligned on a 16-byte boundary on arm.

> 4. ARM isn't as happy about unaligned accesses as x86.
> 

That's mostly not the case anymore.  Using load/store-doubleword or
load/store-multiple instructions requires 4-byte-aligned values (not a
typo: doubleword access requires word alignment).  Everything smaller
than doubleword access in userland these days can be unaligned.  The
optimizer can combine adjacent 32-bit accesses into doubleword
-instruction accesses, leading to alignment faults with unaligned data,
but that shouldn't be the case here because malloc'd memory is aligned.

-- Ian

> I'd make the following change (needs sys/param.h, not compile tested)
> and see if it fixes it:
> 
> --- sys/bitstring.h     (revision 301805)
> +++ sys/bitstring.h     (working copy)
> @@ -119,7 +119,8 @@
>  static inline bitstr_t *
>  bit_alloc(int _nbits)
>  {
> -       return ((bitstr_t *)calloc(bitstr_size(_nbits), 1));
> +       return (calloc(howmany(bitstr_size(_nbits),
> sizeof(bitstr_t)),
> +           sizeof(bitstr_t)));
>  }
>  #endif
> 
> 
> 
> 
> 
> 
> On Mon, Jun 13, 2016 at 10:49 AM, Alan Somers <asom...@freebsd.org>
> wrote:
> > Please open a bug for the bitstring test failures and assign it to
> > me.
> > Also, since I don't have any arm hardware, please provide
> > instructions
> > on how to run this code in a VM, or where I can get access to the
> > hardware.
> > 
> > -Alan
> > 
> > On Mon, Jun 13, 2016 at 11:29 AM, Mark Millard <mar...@dsl-only.net
> > > wrote:
> > > With the newly less strict alignment requirements "kyua test -k
> > > /usr/tests/Kyuafile" runs to completion, unlike before.
> > > 
> > > > ===> Summary
> > > > Results read from /root/.kyua/store/results.usr_tests.20160613
> > > > -080302-120731.db
> > > > Test cases: 5694 total, 54 skipped, 21 expected failures, 24
> > > > broken, 59 failed
> > > > Total time: 8723.243s
> > > 
> > > 
> > > I only list the one line summaries below. Then I list various
> > > context details.
> > > 
> > > > ===> Broken tests
> > > > lib/msun/cexp_test:main  ->  broken: Received signal 6 
> > > >  [1.054s]
> > > > lib/msun/ctrig_test:main  ->  broken: Received signal 6 
> > > >  [1.074s]
> > > > lib/msun/exponential_test:main  ->  broken: Received signal 6 
> > > >  [1.045s]
> > > > lib/msun/fenv_test:main  ->  broken: Received signal 6 
> > > >  [1.048s]
> > > > lib/msun/fma_test:main  ->  broken: Received signal 6  [1.080s]
> > > > lib/msun/invctrig_test:main  ->  broken: Received signal 6 
> > > >  [1.091s]
> > > > lib/msun/invtrig_test:main  ->  broken: Received signal 6 
> > > >  [1.086s]
> > > > lib/msun/logarithm_test:main  ->  broken: Received signal 6 
> > > >  [1.054s]
> > > > lib/msun/lrint_test:main  ->  broken: Received signal 6 
> > > >  [1.069s]
> > > > lib/msun/nearbyint_test:main  ->  broken: Received signal 6 
> > > >  [1.066s]
> > > > lib/msun/rem_test:main  ->  broken: Received signal 6  [1.069s]
> > > > lib/msun/trig_test:main  ->  broken: Received signal 6 
> > > >  [1.070s]
> > > > sbin/growfs/legacy_test:main  ->  broken: Reported plan differs
> > > > from actual executed tests  [0.459s]
> > > > sys/geom/class/eli/integrity_copy_test:main  ->  broken: Test
> > > > case timed out  [1200.082s]
> > > > sys/geom/class/eli/integrity_hmac_test:main  ->  broken: Test
> > > > case timed out  [600.138s]
> > > > sys/geom/class/eli/onetime_a_test:main  ->  broken: Test case
> > > > timed out  [600.044s]
> > > > sys/sys/bitstring_test:bit_clear  ->  broken: Test case body
> > > > timed out  [300.032s]
> > > > sys/sys/bitstring_test:bit_count  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.080s]
> > > > sys/sys/bitstring_test:bit_ffc  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.077s]
> > > > sys/sys/bitstring_test:bit_ffc_at  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.081s]
> > > > sys/sys/bitstring_test:bit_ffs  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.082s]
> > > > sys/sys/bitstring_test:bit_ffs_at  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.077s]
> > > > sys/sys/bitstring_test:bit_nclear  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.083s]
> > > > sys/sys/bitstring_test:bit_nset  ->  broken: Premature exit;
> > > > test case received signal 11 (core dumped)  [1.079s]
> > > 
> > > 
> > > > ===> Failed tests
> > > > lib/libc/c063/fstatat_test:fstatat_fd  ->  failed:
> > > > /usr/src/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c:74:
> > > > memcmp(&st1, &st2, sizeof(st1)) == 0 not met  [0.
> > > > 027s]
> > > > lib/libc/nss/gethostby_test:getipnodebyname_getaddrinfo_ipv4  
> > > > ->  failed: /usr/src/lib/libc/tests/nss/gethostby_test.c:1335:
> > > > run_tests(_hostlist_file, _snapshot
> > > > _file, 2, TEST_GETHOSTBYNAME2_GETADDRINFO, 0) == 0 not met 
> > > >  [15.315s]
> > > > lib/libc/ssp/ssp_test:fgets  ->  failed: Test case body
> > > > returned a non-ok exit code, but this is not allowed  [0.153s]
> > > > lib/libc/ssp/ssp_test:gets  ->  failed: Test case body returned
> > > > a non-ok exit code, but this is not allowed  [0.158s]
> > > > lib/libc/ssp/ssp_test:memcpy  ->  failed: atf-check failed; see
> > > > the output of the test for details  [0.148s]
> > > > lib/libc/ssp/ssp_test:memmove  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.147s]
> > > > lib/libc/ssp/ssp_test:memset  ->  failed: atf-check failed; see
> > > > the output of the test for details  [0.147s]
> > > > lib/libc/ssp/ssp_test:read  ->  failed: Test case body returned
> > > > a non-ok exit code, but this is not allowed  [0.154s]
> > > > lib/libc/ssp/ssp_test:readlink  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.155s]
> > > > lib/libc/ssp/ssp_test:snprintf  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.149s]
> > > > lib/libc/ssp/ssp_test:sprintf  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.149s]
> > > > lib/libc/ssp/ssp_test:stpcpy  ->  failed: atf-check failed; see
> > > > the output of the test for details  [0.149s]
> > > > lib/libc/ssp/ssp_test:stpncpy  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.147s]
> > > > lib/libc/ssp/ssp_test:strcat  ->  failed: atf-check failed; see
> > > > the output of the test for details  [0.147s]
> > > > lib/libc/ssp/ssp_test:strcpy  ->  failed: atf-check failed; see
> > > > the output of the test for details  [0.147s]
> > > > lib/libc/ssp/ssp_test:strncat  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.147s]
> > > > lib/libc/ssp/ssp_test:strncpy  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.146s]
> > > > lib/libc/ssp/ssp_test:vsnprintf  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.150s]
> > > > lib/libc/ssp/ssp_test:vsprintf  ->  failed: atf-check failed;
> > > > see the output of the test for details  [0.148s]
> > > > lib/libc/stdio/printbasic_test:int_within_limits  ->  failed:
> > > > printf("%tu", (size_t)-1) ==> [18446744073709551615], expected
> > > > [4294967295]<<NEWLINE>>  [0.030s]
> > > > lib/libc/stdio/scanfloat_test:infinities_and_nans  ->  failed:
> > > > /usr/src/lib/libc/tests/stdio/scanfloat_test.c:191:
> > > > fetestexcept(FE_INVALID) == 0 not met  [0.031
> > > > s]
> > > > lib/libc/sys/mincore_test:mincore_resid  ->  failed:
> > > > /usr/src/contrib/netbsd-tests/lib/libc/sys/t_mincore.c:225:
> > > > check_residency(addr, npgs) == 0 not met  [0.04
> > > > 0s]
> > > > lib/libc/sys/mincore_test:mincore_shmseg  ->  failed:
> > > > /usr/src/contrib/netbsd-tests/lib/libc/sys/t_mincore.c:298:
> > > > check_residency(addr, npgs) == 0 not met  [0.0
> > > > 29s]
> > > > lib/libc/tls/tls_dynamic_test:t_tls_dynamic  ->  failed: 15
> > > > checks failed; see output for more details  [0.035s]
> > > > lib/libproc/proc_test:symbol_lookup  ->  failed:
> > > > /usr/src/lib/libproc/tests/proc_test.c:116: state != PS_STOP:
> > > > process has state 4  [0.177s]
> > > > lib/libxo/functional_test:test_02__E  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.166s]
> > > > lib/libxo/functional_test:test_02__H  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.168s]
> > > > lib/libxo/functional_test:test_02__HIPx  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.170s]
> > > > lib/libxo/functional_test:test_02__HP  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.164s]
> > > > lib/libxo/functional_test:test_02__J  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.169s]
> > > > lib/libxo/functional_test:test_02__JP  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.166s]
> > > > lib/libxo/functional_test:test_02__T  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.168s]
> > > > lib/libxo/functional_test:test_02__X  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.169s]
> > > > lib/libxo/functional_test:test_02__XP  ->  failed: atf-check
> > > > failed; see the output of the test for details  [0.168s]
> > > > lib/msun/conj_test:main  ->  failed: 9 tests of 42 failed 
> > > >  [0.034s]
> > > > lib/msun/ldexp_test:ldexp_denormal  ->  failed: 4 checks
> > > > failed; see output for more details  [0.034s]
> > > > local/kyua/model/metadata_test:override_all_with_set_string  ->
> > > >   failed: Line 253: disk_space != md.required_disk_space()
> > > > (16777216.00T != 2.00G)  [0.047s]
> > > > local/kyua/testers/stacktrace_test:dump__cannot_find_gdb  -> 
> > > >  failed: testers/stacktrace_test.c:281:
> > > > atf_utils_grep_file("execvp failed", "stacktrace") not met
> > > >  [0.611s]
> > > > local/kyua/testers/stacktrace_test:dump__gdb_fail  ->  failed:
> > > > testers/stacktrace_test.c:294: atf_utils_grep_file("foo",
> > > > "stacktrace") not met  [0.610s]
> > > > local/kyua/testers/stacktrace_test:dump__gdb_times_out  -> 
> > > >  failed: testers/stacktrace_test.c:311:
> > > > atf_utils_grep_file("foo", "stacktrace") not met  [0.614s]
> > > > local/kyua/testers/stacktrace_test:dump__integration  -> 
> > > >  failed: testers/stacktrace_test.c:233:
> > > > atf_utils_grep_file("#0", "stacktrace") not met  [0.613s]
> > > > local/kyua/testers/stacktrace_test:dump__ok  ->  failed:
> > > > testers/stacktrace_test.c:249: atf_utils_grep_file("frame 1",
> > > > "stacktrace") not met  [0.614s]
> > > > local/kyua/testers/stacktrace_test:find_core__found__long  -> 
> > > >  failed: Core dumped, but no candidates found  [0.606s]
> > > > local/kyua/testers/stacktrace_test:find_core__found__short  -> 
> > > >  failed: Core dumped, but no candidates found  [0.603s]
> > > > local/kyua/testers/tap_parser_test:try_parse_plan__insane  -> 
> > > >  failed: testers/tap_parser_test.c:135: 'too long' not matched
> > > > in 'Plan line includes out of range
> > > >  numbers'  [0.032s]
> > > > sys/geom/class/eli/resize_test:main  ->  failed: 15 tests of 27
> > > > failed  [1.292s]
> > > > sys/kern/pipe/pipe_fstat_bug_test:main  ->  failed: Returned
> > > > non-success exit status 1  [0.044s]
> > > > usr.bin/lastcomm/legacy_test:main  ->  failed: 4 tests of 6
> > > > failed  [0.151s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_bindip  ->  failed: 1
> > > > checks failed; see output for more details  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_bindip_rev  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_localhost_only  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.034s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_one_addr_on_each_subn
> > > > et  ->  failed: 1 checks failed; see output for more details 
> > > >  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_one_addr_on_each_subn
> > > > et_rev  ->  failed: 1 checks failed; see output for more
> > > > details  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_point2point  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_point2point_rev  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.033s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_recvdstaddr  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_recvdstaddr_rev  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.035s]
> > > > usr.sbin/rpcbind/addrmerge_test:addrmerge_singlehomed  -> 
> > > >  failed: 1 checks failed; see output for more details  [0.032s]
> > > > usr.sbin/sa/legacy_test:main  ->  failed: 12 tests of 13 failed
> > > >   [0.340s]
> > > 
> > > 
> > > 
> > > Context details:
> > > 
> > > > # uname -apKU
> > > > FreeBSD rpi2 11.0-ALPHA3 FreeBSD 11.0-ALPHA3 #0 r301815M: Sat
> > > > Jun 11 23:43:48 PDT 2016     markmi@FreeBSDx64:/usr/obj/clang/a
> > > > rm.armv6/usr/src/sys/RPI2-NODBG  ar
> > > > m armv6 1100116 1100116
> > > 
> > > In use for the system build was:
> > > 
> > > > XCFLAGS+= -march=armv7-a -mcpu=cortex-a7
> > > > XCXXFLAGS+= -march=armv7-a -mcpu=cortex-a7
> > > 
> > > I do have a few local /usr/src changes/additions, but nearly all
> > > are only for powerpc and/or powerpc64 contexts:
> > > 
> > > > # svnlite status /usr/src/
> > > > M      
> > > >  /usr/src/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBui
> > > > lder.cpp
> > > > M       /usr/src/lib/csu/powerpc64/Makefile
> > > > ?       /usr/src/sys/amd64/include/include
> > > > ?       /usr/src/sys/arm/conf/RPI2-NODBG
> > > > ?       /usr/src/sys/arm/include/include
> > > > M       /usr/src/sys/boot/ofw/Makefile.inc
> > > > M       /usr/src/sys/boot/powerpc/Makefile
> > > > M       /usr/src/sys/boot/powerpc/Makefile.inc
> > > > M       /usr/src/sys/boot/uboot/Makefile.inc
> > > > M       /usr/src/sys/conf/Makefile.powerpc
> > > > M       /usr/src/sys/conf/kern.mk
> > > > M       /usr/src/sys/conf/kmod.mk
> > > > M       /usr/src/sys/dev/cxgb/ulp/tom/cxgb_listen.c
> > > > M       /usr/src/sys/dev/cxgbe/tom/t4_listen.c
> > > > ?       /usr/src/sys/powerpc/conf/GENERIC64-NODBG
> > > > ?       /usr/src/sys/powerpc/conf/GENERIC64vtsc
> > > > ?       /usr/src/sys/powerpc/conf/GENERIC64vtsc-NODEBUG
> > > > ?       /usr/src/sys/powerpc/conf/GENERICvtsc
> > > > ?       /usr/src/sys/powerpc/conf/GENERICvtsc-NODEBUG
> > > > ?       /usr/src/sys/powerpc/include/include
> > > > M       /usr/src/sys/powerpc/ofw/ofw_machdep.c
> > > > M       /usr/src/sys/powerpc/powerpc/exec_machdep.c
> > > > ?       /usr/src/sys/x86/include/include
> > > 
> > > [The cxbg and cxbge changes just remove redundant declarations
> > > that stopped a amd64-gcc based build. But other areas have such
> > > issues and I quit trying eliminating such blocks to that tool
> > > chain. The include/include's are from something making symbolic
> > > links back to the parent include.]
> > > 
> > > The kernel configuration was via:
> > > 
> > > > # more /usr/src/sys/arm/conf/RPI2-NODBG
> > > > #
> > > > # RPI2 -- Custom configuration for the Raspberry Pi 2
> > > > #
> > > > # For more information on this file, please read the config(5)
> > > > manual page,
> > > > # and/or the handbook section on Kernel Configuration Files:
> > > > #
> > > > #    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/
> > > > kernelconfig-config.html
> > > > #
> > > > # The handbook is also available locally in
> > > > /usr/share/doc/handbook
> > > > # if you've installed the doc distribution, otherwise always
> > > > see the
> > > > # FreeBSD World Wide Web server (http://www.FreeBSD.org/) for
> > > > the
> > > > # latest information.
> > > > #
> > > > # An exhaustive list of options and more detailed explanations
> > > > of the
> > > > # device lines is also present in the ../../conf/NOTES and
> > > > NOTES files.
> > > > # If you are in doubt as to the purpose or necessity of a line,
> > > > check first
> > > > # in NOTES.
> > > > #
> > > > 
> > > > ident           RPI2-NODBG
> > > > 
> > > > include         "RPI2"
> > > > 
> > > > makeoptions     DEBUG=-g                # Build kernel with
> > > > gdb(1) debug symbols
> > > > options         ALT_BREAK_TO_DEBUGGER
> > > > #options        VERBOSE_SYSINIT         # Enable verbose
> > > > sysinit messages
> > > > 
> > > > options         KDB                     # Enable kernel
> > > > debugger support
> > > > 
> > > > # For minimum debugger support (stable branch) use:
> > > > #options        KDB_TRACE               # Print a stack trace
> > > > for a panic
> > > > options         DDB                     # Enable the kernel
> > > > debugger
> > > > 
> > > > nooptions       INVARIANTS              # Enable calls of extra
> > > > sanity checking
> > > > nooptions       INVARIANT_SUPPORT       # Extra sanity checks
> > > > of internal structures, required by INVARIANTS
> > > > nooptions       WITNESS                 # Enable checks to
> > > > detect deadlocks and cycles
> > > > nooptions       WITNESS_SKIPSPIN        # Don't run witness on
> > > > spinlocks for speed
> > > > nooptions       DIAGNOSTIC
> > > 
> > > 
> > > The armv6 11.0 -r301815 system was cross built from amd64, built
> > > using src.conf:
> > > 
> > > > # more ~/src.configs/src.conf.rpi2-clang-bootstrap.amd64-host
> > > > TO_TYPE=armv6
> > > > #
> > > > KERNCONF=RPI2-NODBG
> > > > TARGET=arm
> > > > .if ${.MAKE.LEVEL} == 0
> > > > TARGET_ARCH=${TO_TYPE}
> > > > .export TARGET_ARCH
> > > > .endif
> > > > #
> > > > WITH_CROSS_COMPILER=
> > > > WITHOUT_SYSTEM_COMPILER=
> > > > #
> > > > #CPUTYPE=soft
> > > > WITH_LIBSOFT=
> > > > WITH_LIBCPLUSPLUS=
> > > > WITH_BINUTILS_BOOTSTRAP=
> > > > WITH_CLANG_BOOTSTRAP=
> > > > WITH_CLANG=
> > > > WITH_CLANG_IS_CC=
> > > > WITH_CLANG_FULL=
> > > > WITH_CLANG_EXTRAS=
> > > > WITH_LLDB=
> > > > #
> > > > WITH_BOOT=
> > > > WITHOUT_LIB32=
> > > > #
> > > > WITHOUT_ELFTOOLCHAIN_BOOTSTRAP=
> > > > WITHOUT_GCC_BOOTSTRAP=
> > > > WITHOUT_GCC=
> > > > WITHOUT_GCC_IS_CC=
> > > > WITHOUT_GNUCXX=
> > > > #
> > > > NO_WERROR=
> > > > #WERROR=
> > > > MALLOC_PRODUCTION=
> > > > #
> > > > WITH_DEBUG_FILES=
> > > > #
> > > > XCFLAGS+= -march=armv7-a -mcpu=cortex-a7
> > > > XCXXFLAGS+= -march=armv7-a -mcpu=cortex-a7
> > > > # There is no XCPPFLAGS but XCPP ets XCFLAGS content.
> > > 
> > > and with the make.conf for the system build being empty:
> > > 
> > > > # more ~/src.configs/make.conf
> > > > #
> > > 
> > > ===
> > > Mark Millard
> > > markmi at dsl-only.net
> > > 
> > > _______________________________________________
> > > freebsd-current@freebsd.org mailing list
> > > https://lists.freebsd.org/mailman/listinfo/freebsd-current
> > > To unsubscribe, send any mail to "
> > > freebsd-current-unsubscr...@freebsd.org"
> > _______________________________________________
> > freebsd-current@freebsd.org mailing list
> > https://lists.freebsd.org/mailman/listinfo/freebsd-current
> > To unsubscribe, send any mail to "
> > freebsd-current-unsubscr...@freebsd.org"
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "
> freebsd-current-unsubscr...@freebsd.org"
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to