[OmniOS-discuss] PowerDNS recursor SIGSEGV

Josef 'Jeff' Sipek jeffpc at josefsipek.net
Sun Dec 6 14:45:14 UTC 2015


I compiled powerdns recursor [1] on 016, but I'm running into an occasional
SIGSEGV.  The SIGSEGV is because of insufficiently aligned memory operand to an
instruction.  (See the powerdns bug I filed for this [2].) The SIGSEGV actually
happens in the deque code which comes from boost (1.58.0 in this case).

Now, the weird thing... I compiled the same powerdns source with the same
version of boost on OI Hipster and OmniOS 016.  Hipster uses gcc 4.9.3,
OmniOS 016 uses 5.1.  The function that causes the SEGV on 016 looks totally
different between the two distros so I haven't see it die on my laptop.

Has anyone seen any strange SIGSEGVs in boost using software?  I hope it isn't
some sort of gcc bug.

Thanks,

Jeff.

P.S. PowerDNS uses {get,set,swap}context, so I haven't ruled out a stack
     alignment bug on their end.

[1] https://www.powerdns.com/
[2] https://github.com/PowerDNS/pdns/issues/3002


OmniOS 016:

_ZNKSt15_Deque_iteratorIcRcPcEmiEi:     pushl  %ebp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+1:   movl   %esp,%ebp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+3:   pushl  %ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+4:   subl   $0x1c,%esp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+7:   movl   0xc(%ebp),%eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0xa: movl   0x8(%ebp),%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0xd: movdqu (%eax),%xmm0
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x11:movl   0x10(%ebp),%eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x14:movaps %xmm0,-0x18(%ebp)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x18:negl   %eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x1a:pushl  %eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x1b:leal   -0x18(%ebp),%eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x1e:pushl  %eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x1f:call   -0x94    <_ZNSt15_Deque_iteratorIcRcPcEpLEi>
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x24:movl   (%eax),%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x26:addl   $0x10,%esp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x29:movl   %edx,(%ebx)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x2b:movl   0x4(%eax),%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x2e:movl   %edx,0x4(%ebx)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x31:movl   0x8(%eax),%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x34:movl   0xc(%eax),%eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x37:movl   %edx,0x8(%ebx)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x3a:movl   %eax,0xc(%ebx)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x3d:movl   %ebx,%eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x3f:movl   -0x4(%ebp),%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x42:leave  
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x43:ret    $0x4


OI Hipster:

_ZNKSt15_Deque_iteratorIcRcPcEmiEi:     pushl  %ebp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+1:   pushl  %edi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+2:   pushl  %esi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+3:   pushl  %ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+4:   subl   $0x14,%esp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+7:   movl   0x2c(%esp),%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0xb: movl   0x30(%esp),%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0xf: movl   0x28(%esp),%eax
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x13:movl   (%edx),%esi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x15:movl   0x4(%edx),%ecx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x18:movl   0x8(%edx),%edi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x1b:movl   0xc(%edx),%ebp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x1e:movl   %esi,%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x20:subl   %ebx,%esi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x22:subl   %ecx,%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x24:subl   %ebx,%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x26:cmpl   $0x1ff,%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x2c:movl   %esi,(%esp)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x2f:jbe    +0x21    <_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x52>
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x31:movl   %edx,%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x33:sarl   $0x9,%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x36:testl  %edx,%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x38:jle    +0x56    <_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x90>
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x3a:leal   0x0(%ebp,%ebx,4),%ebp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x3e:movl   0x0(%ebp),%ecx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x41:shll   $0x9,%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x44:subl   %ebx,%edx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x46:leal   (%ecx,%edx),%esi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x49:leal   0x200(%ecx),%edi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x4f:movl   %esi,(%esp)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x52:movl   %edi,0x4(%esp)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x56:movd   (%esp),%xmm0
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x5b:movl   %ecx,(%esp)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x5e:movd   0x4(%esp),%xmm1
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x64:movl   %ebp,0x4(%esp)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x68:movd   (%esp),%xmm3
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x6d:punpckldq %xmm3,%xmm0
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x71:movd   0x4(%esp),%xmm2
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x77:punpckldq %xmm2,%xmm1
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x7b:punpcklqdq %xmm1,%xmm0
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x7f:movdqu %xmm0,(%eax)
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x83:addl   $0x14,%esp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x86:popl   %ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x87:popl   %esi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x88:popl   %edi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x89:popl   %ebp
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x8a:ret    $0x4
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x8d:leal   0x0(%esi),%esi
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x90:movl   %edx,%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x92:shrl   $0x9,%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x95:orl    $0xff800000,%ebx
_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x9b:jmp    -0x63    <_ZNKSt15_Deque_iteratorIcRcPcEmiEi+0x3a>

-- 
I'm somewhere between geek and normal.
		- Linus Torvalds


More information about the OmniOS-discuss mailing list