[Bug 205602] arm (rpi2) context: issue identified for Bus Errors from some software (such as ar). . .

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Fri Dec 25 16:56:46 UTC 2015


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=205602

            Bug ID: 205602
           Summary: arm (rpi2) context: issue identified for Bus Errors
                    from some software (such as ar). . .
           Product: Base System
           Version: 11.0-CURRENT
          Hardware: arm
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: arm
          Assignee: freebsd-arm at FreeBSD.org
          Reporter: markmi at dsl-only.net

I was getting Bus Errors during attempts to build ports on a rpi2, such as
during /usr/local/arm-gnueabi-freebsd/bin/ar activity.

That example traced back to _fseeko use and the memset use at line 299 of
/usr/src/lib/libc/stdio/fseek.c that was in use via
/usr/lib/debug/lib/libc.so.7 :

#0  0x2033adcc in _fseeko (fp=0x20651dcc, offset=<value optimized out>,
whence=<value optimized out>, ltest=<value optimized out>) at
/usr/src/lib/libc/stdio/fseek.c:299
299        memset(&fp->_mbstate, 0, sizeof(mbstate_t));
. . .
(gdb) x/24i 0x2033adb0
0x2033adb0 <_fseeko+836>:    vmov.i32    q8, #0    ; 0x00000000
0x2033adb4 <_fseeko+840>:    movw    r1, #65503    ; 0xffdf
0x2033adb8 <_fseeko+844>:    stm    r4, {r0, r7}
0x2033adbc <_fseeko+848>:    ldrh    r0, [r4, #12]
0x2033adc0 <_fseeko+852>:    and    r0, r0, r1
0x2033adc4 <_fseeko+856>:    strh    r0, [r4, #12]
0x2033adc8 <_fseeko+860>:    add    r0, r4, #216    ; 0xd8
0x2033adcc <_fseeko+864>:    vst1.64    {d16-d17}, [r0]
0x2033add0 <_fseeko+868>:    add    r0, r4, #200    ; 0xc8
0x2033add4 <_fseeko+872>:    vst1.64    {d16-d17}, [r0]
0x2033add8 <_fseeko+876>:    add    r0, r4, #184    ; 0xb8
0x2033addc <_fseeko+880>:    vst1.64    {d16-d17}, [r0]
0x2033ade0 <_fseeko+884>:    add    r0, r4, #168    ; 0xa8
0x2033ade4 <_fseeko+888>:    vst1.64    {d16-d17}, [r0]
0x2033ade8 <_fseeko+892>:    add    r0, r4, #152    ; 0x98
0x2033adec <_fseeko+896>:    vst1.64    {d16-d17}, [r0]
0x2033adf0 <_fseeko+900>:    add    r0, r4, #136    ; 0x88
0x2033adf4 <_fseeko+904>:    vst1.64    {d16-d17}, [r0]
0x2033adf8 <_fseeko+908>:    add    r0, r4, #120    ; 0x78
0x2033adfc <_fseeko+912>:    vst1.64    {d16-d17}, [r0]
0x2033ae00 <_fseeko+916>:    add    r0, r4, #104    ; 0x68
0x2033ae04 <_fseeko+920>:    vst1.64    {d16-d17}, [r0]
0x2033ae08 <_fseeko+924>:    b    0x2033b070 <_fseeko+1540>
0x2033ae0c <_fseeko+928>:    cmp    r5, #0    ; 0x0
(gdb) info all-registers
r0             0x20651ea4    543497892
. . .

When SCTLR bit[1] == 1 the vst1.64 instructions require 8 byte alignment but
the address in r0 is only 4 byte aligned (as was the address of the start of
the containing FILE structure). (FILE start address probably from a memory
allocator?)

I did another build/install world/kernel with "-fmax-type-align=4" added and
the same port now builds fine on the rpi2, no tools getting Bus Errors.
(make.conf on the rpi2 also causing -fmax-type-align=4 to be used.)

So if SCTLR bit[1]==1 is supposed to be true/possible and if various memory
allocator alignments are not to be to sufficiently big figures, then it appears
that the standard clang 3.7 compile options for armv6/armv7a need to prevent
presuming bigger alignment figures than 4 for pointers of unknown origin (or
from memory allocators).

Note: My experiments were with -march=armv7a explicitly in use, not just
-target armv6--freebsd11.0-gnueabi .

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-arm mailing list