[Pixman] SIGBUS in pixman_composite_src_0565_0565_asm_neon

Siarhei Siamashka siarhei.siamashka at gmail.com
Tue Jan 31 05:03:10 PST 2012

On Tue, Jan 31, 2012 at 1:20 PM,  <hubert-b at gmx.de> wrote:
> Program received signal SIGBUS, Bus error.

SIGBUS usually means an unaligned memory access.

> 0x4023a130 in pixman_composite_src_0565_0565_asm_neon ()
>    at pixman-arm-neon-asm.h:692
> 692     pixman-arm-neon-asm.h: No such file or directory.
>        in pixman-arm-neon-asm.h
> Current language:  auto; currently asm
> (gdb) bt
> #0  0x4023a130 in pixman_composite_src_0565_0565_asm_neon ()
>    at pixman-arm-neon-asm.h:692
> #1  0x40236048 in arm_neon_blt (imp=<value optimized out>,
>    src_bits=0x40495000, dst_bits=0xa28ff0, src_stride=120, dst_stride=17,
>    src_bpp=17, dst_bpp=16, src_x=112, src_y=152, dest_x=0, dest_y=0,
>    width=17, height=17) at pixman-arm-neon.c:249

The argument values may be reported incorrectly at this place in the
backtrace (src_bpp=17 is definitely wrong), so it's hard to make any
conclusions. But it's a good idea to check if the buffers are 4 bytes
aligned and strides are 4 bytes aligned too. Strides are a bit
confusing, because in some places of code they are measured in bytes,
in some places of code in pixels and in some places in uint32_t sized
units. Violating alignment requirements may result in a SIGBUS.

> #2  0x402154ac in delegate_blt (imp=<value optimized out>, src_bits=0x10,
>    dst_bits=0xa29010, src_stride=18, dst_stride=9, src_bpp=16, dst_bpp=16,
>    src_x=112, src_y=152, dest_x=0, dest_y=0, width=17, height=17)
>    at pixman-implementation.c:225
> #3  0x4021564c in _pixman_implementation_blt (imp=0x11, src_bits=0x10,
>    dst_bits=0xa29010, src_stride=18, dst_stride=9, src_bpp=16, dst_bpp=16,
>    src_x=112, src_y=152, dest_x=0, dest_y=0, width=17, height=17)
>    at pixman-implementation.c:225
> #4  0x401c9544 in pixman_blt (src_bits=0x40495000,
>    dst_bits=<value optimized out>, src_stride=120,
>    dst_stride=<value optimized out>, src_bpp=16, dst_bpp=16, src_x=112,
>    src_y=152, dest_x=0, dest_y=0, width=17, height=17) at pixman.c:754
> #5  0x0007baa0 in fbCopyNtoN (pSrcDrawable=<value optimized out>,
>    pDstDrawable=<value optimized out>, pGC=<value optimized out>, pbox=0x0,
>    nbox=0, dx=112, dy=152, reverse=0, upsidedown=505812, bitplane=0,
>    closure=0x0) at fbcopy.c:97
> #6  0x00086354 in miCopyRegion (pSrcDrawable=0xa1e770, pDstDrawable=0x0,
>    pGC=0xa29258, pDstRegion=<value optimized out>, dx=112, dy=152,
>    copyProc=0x7b7d4 <fbCopyNtoN>, bitPlane=0, closure=0x0) at micopy.c:138
> #7  0x0008689c in miDoCopy (pSrcDrawable=0xa1e770, pDstDrawable=0xa28fc0,
>    pGC=0x0, xIn=112, yIn=152, widthSrc=1312032, heightSrc=10654296,
>    xOut=505812, yOut=10653632, copyProc=0x7b7d4 <fbCopyNtoN>, bitPlane=0,
>    closure=0x0) at micopy.c:338
> #8  0x0007aff8 in fbCopyArea (pSrcDrawable=<value optimized out>,
>    pDstDrawable=0xa28fc0, pGC=0xa29010, xIn=112, yIn=152, widthSrc=17,
>    heightSrc=17, xOut=0, yOut=0) at fbcopy.c:344
> #9  0x000d5ab0 in damageCopyArea (pSrc=0xa1e770, pDst=0xa28fc0, pGC=0xa29258,
>    srcx=112, srcy=152, width=17, height=17, dstx=0, dsty=0) at damage.c:949
> #10 0x00087560 in miDCSaveUnderCursor (pDev=<value optimized out>,
>    pScreen=0xa17498, x=112, y=152, w=17, h=17) at midispcur.c:558
> #11 0x000925ac in miSpriteSaveUnderCursor (pDev=0xa30978, pScreen=0xa17498)
>    at misprite.c:1039
> #12 0x00092888 in miSpriteSetCursor (pDev=0xa30978, pScreen=0xa17498,
>    pCursor=0xa1d660, x=120, y=160) at misprite.c:902
> #13 0x0008c564 in miPointerUpdateSprite (pDev=0xa30978) at mipointer.c:402
> #14 0x0008cd80 in miPointerDisplayCursor (pDev=0xa30978, pScreen=0xa17498,
>    pCursor=0xa1d660) at mipointer.c:197
> #15 0x0009e308 in CursorDisplayCursor (pDev=0xa30978, pScreen=0xa17498,
>    pCursor=0xa38918) at cursor.c:157
> #16 0x000d04ec in AnimCurDisplayCursor (pDev=0xa30978, pScreen=0xa17498,
>    pCursor=0xa38918) at animcur.c:247
> #17 0x0003ab78 in UpdateSpriteForScreen (pDev=0xa30978, pScreen=0xa17498)
>    at events.c:3112
> #18 0x0008c8ac in miPointerWarpCursor (pDev=0xa30978, pScreen=0xa17498, x=120,
>    y=160) at mipointer.c:343
> #19 0x00061760 in KdWarpCursor (pDev=0xa30978, pScreen=0xa17498, x=120, y=160)
>    at kinput.c:2166
> #20 0x0008c6ac in miPointerSetCursorPosition (pDev=0xa30978, pScreen=0xa17498,
>    x=120, y=160, generateEvent=0) at mipointer.c:239
> #21 0x000cfe60 in AnimCurSetCursorPosition (pDev=0xa30978, pScreen=0xa17498,
>    x=120, y=160, generateEvent=0) at animcur.c:266
> #22 0x0003ad0c in InitializeSprite (pDev=0xa30978, pWin=<value optimized out>)
>    at events.c:3044
> #23 0x0002b024 in EnableDevice (dev=0xa30978, sendevent=1 '\001')
>    at devices.c:299
> #24 0x0002b774 in InitCoreDevices () at devices.c:613
> #25 0x0002632c in main (argc=1, argv=0x14c, envp=<value optimized out>)
>    at main.c:257
> (gdb)

It usually also helps to get the output of "info registers" and
"disassemble" gdb commands.

Best regards,
Siarhei Siamashka

More information about the Pixman mailing list