Rodney,

JavaScriptCore assumes that the stack is 16 byte aligned.  This may be more 
restrictive than some OS / ABIs, but there is code to pad appropriately for 
some platforms. You didn’t say what OS you are running on, but maybe there 
needs to be a code added for your OS.  Turning on C++ exceptions could be 
responsible, as that could be changing stack layout.  I don’t know of any 
platform that turns on C++ exceptions, so you may be in uncharted waters.

Your build is 2 months old, the current revision is 187434.  You could also try 
a more recent build.

- Michael

> On Jul 27, 2015, at 8:07 AM, Rodney Dowdall <rdowd...@cranksoftware.com> 
> wrote:
> 
> Hello
> 
> I am seeing a SIGTRAP generated in the LLINT code when I try and load up a 
> page.  It happens as soon as the page tries to execute JavaScript.  The 
> target is an 32 bit x86 machine.  The SIGTRAP appears to happen when it is 
> checking the stack alignment.  I have tried compiling the code with the gcc 
> option -mstackrealign and without it.  The SIGTRAP is generated in the same 
> spot with or without the option.  C++ exceptions are turned on (they have to 
> be with this particular compiler.  The compiler is gcc based).  The version 
> of Webkit that I am building from is 184845.
> 
> 
> Here is the assembly execution that causes the SIGTRAP:
> 
>          vmEntryToJavaScript:
> b9a80ef7:   push %ebp
> b9a80ef8:   mov %esp,%ebp
> b9a80efa:   push %esi
> b9a80efb:   push %edi
> b9a80efc:   push %ebx
> b9a80efd:   mov 0xc(%ebp),%ebx
> b9a80f00:   mov 0x8(%ebp),%edi
> b9a80f03:   mov %ebp,%esp
> b9a80f05:   sub $0x20,%esp
> b9a80f08:   mov %ebx,(%esp)
> b9a80f0b:   mov 0x1498(%ebx),%edx
> b9a80f11:   mov %edx,0x4(%esp)
> b9a80f15:   mov 0x1494(%ebx),%edx
> b9a80f1b:   mov %edx,0x8(%esp)
> b9a80f1f:   mov 0x10(%ebp),%esi
> b9a80f22:   mov 0x20(%esi),%edx
> b9a80f25:   add $0x4,%edx
> b9a80f28:   shl $0x3,%edx
> b9a80f2b:   mov %esp,%eax
> b9a80f2d:   sub %edx,%eax
> b9a80f2f:   cmp 0x2384(%ebx),%eax
> b9a80f35:   jae 0xb9a80f71 <vmEntryToJavaScript+122>
> 
> b9a80f71:   mov %eax,%esp
> b9a80f73:   mov $0x4,%eax
> b9a80f78:   sub $0x1,%eax
> b9a80f7b:   mov 0x4(%esi,%eax,8),%ecx
> b9a80f7f:   mov %ecx,0xc(%esp,%eax,8)
> b9a80f83:   mov (%esi,%eax,8),%ecx
> b9a80f86:   mov %ecx,0x8(%esp,%eax,8)
> b9a80f8a:   test %eax,%eax
> b9a80f8c:   jne 0xb9a80f78 <vmEntryToJavaScript+129>
> 
> b9a80f9e:   sub $0x1,%ecx
> b9a80fa1:   movl $0xfffffffc,0x2c(%esp,%ecx,8)
> b9a80fa9:   movl $0x0,0x28(%esp,%ecx,8)
> b9a80fb1:   cmp %ecx,%edx
> b9a80fb3:   jne 0xb9a80f9e <vmEntryToJavaScript+167>
> b9a80fb5:   mov 0x28(%esi),%eax
> b9a80fb8:   test %edx,%edx
> b9a80fba:   je 0xb9a80fd0 <vmEntryToJavaScript+217>
> 
> b9a80f78:   sub $0x1,%eax
> b9a80f7b:   mov 0x4(%esi,%eax,8),%ecx
> b9a80f7f:   mov %ecx,0xc(%esp,%eax,8)
> b9a80f83:   mov (%esi,%eax,8),%ecx
> b9a80f86:   mov %ecx,0x8(%esp,%eax,8)
> b9a80f8a:   test %eax,%eax
> b9a80f8c:   jne 0xb9a80f78 <vmEntryToJavaScript+129>
> 
> b9a80f78:   sub $0x1,%eax
> b9a80f7b:   mov 0x4(%esi,%eax,8),%ecx
> b9a80f7f:   mov %ecx,0xc(%esp,%eax,8)
> b9a80f83:   mov (%esi,%eax,8),%ecx
> b9a80f86:   mov %ecx,0x8(%esp,%eax,8)
> b9a80f8a:   test %eax,%eax
> b9a80f8c:   jne 0xb9a80f78 <vmEntryToJavaScript+129>
> 
> b9a80f78:   sub $0x1,%eax
> b9a80f7b:   mov 0x4(%esi,%eax,8),%ecx
> b9a80f7f:   mov %ecx,0xc(%esp,%eax,8)
> b9a80f83:   mov (%esi,%eax,8),%ecx
> b9a80f86:   mov %ecx,0x8(%esp,%eax,8)
> b9a80f8a:   test %eax,%eax
> b9a80f8c:   jne 0xb9a80f78 <vmEntryToJavaScript+129>
> b9a80f8e:   mov 0x10(%esi),%edx
> b9a80f91:   sub $0x1,%edx
> b9a80f94:   mov 0x20(%esi),%ecx
> b9a80f97:   sub $0x1,%ecx
> b9a80f9a:   cmp %ecx,%edx
> b9a80f9c:   je 0xb9a80fb5 <vmEntryToJavaScript+190>
> 
> b9a80fd0:   mov %esp,0x1498(%ebx)
> b9a80fd6:   mov %ebp,0x1494(%ebx)
> b9a80fdc:   add $0x8,%esp
> b9a80fdf:   mov %esp,%ecx
> b9a80fe1:   and $0xf,%ecx
> b9a80fe4:   test %ecx,%ecx
> b9a80fe6:   je 0xb9a80fee <vmEntryToJavaScript+247>
> b9a80fe8:   mov $0xbad0dc02,%ecx
> b9a80fed:   int3
> 
> So using the LLintAssembly.h I tracked this too:
> 
>    "\tjz " 
> LOCAL_LABEL_STRING(_offlineasm_doVMEntry__makeCall__checkStackPointerAlignment__stackPointerOkay
> 
> Which leads me to believe that the alignment on my stack is wrong. The value 
> of esp is 0x7db9284.  The value of ecx after the and is 4, so that looks 
> right.
> 
> I don't have a lot of experience with the LLINT, so I was wondering if there 
> was a specific place I should start to look to see why this error is beign 
> generated.
> 
> Thanks,
> Rodney
> 
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to