RFR: 8186780: clang-4.0 fastdebug assertion failure in os_linux_x86:os::verify_stack_alignment() (original) (raw)

Martin Buchholz martinrb at google.com
Thu Jun 21 20:24:25 UTC 2018


I see:

Don't use // os::current_stack_pointer(), as its result can be slightly below current // stack pointer, causing us to not alloca enough to reach "bottom".

If you really really want to get the stack pointer of the current frame, you can't put it in a function! Use magic compiler extensions via a macro.

gcc and clang both have __builtin_frame_address(0).

gcc BUT not clang has register uint64_t rsp asm ("rsp"); BUT that gives a slightly different value from __builtin_frame_address(0) (different register? don't know much about x86 assembly)

On Thu, Jun 21, 2018 at 5:37 AM, Thomas Stüfe <thomas.stuefe at gmail.com> wrote:

On Thu, Jun 21, 2018 at 1:27 PM, David Holmes <david.holmes at oracle.com> wrote: > On 21/06/2018 10:05 AM, Martin Buchholz wrote: >> >> On Wed, Jun 20, 2018 at 4:03 PM, Martin Buchholz <martinrb at google.com_ _>> <mailto:martinrb at google.com>> wrote: >> >> Hi David and build-dev folk, >> >> After way too much build/hotspot hacking, I have a better fix: >> >> clang inlined os::currentstackpointer into its caller in the >> same translation unit (that could be fixed in a separate change) >> so of course in this case it didn't have to follow the ABI. Fix is >> obvious in hindsight: >> >> -address os::currentstackpointer() { >> +NOINLINE address os::currentstackpointer() { >> >> >> If y'all like the addition of NOINLINE, it should probably be added to all >> of the 14 variants of os::currentstackpointer. >> Gives me a chance to try out the submit repo. > > > I can't help but think other platforms actually rely on it being inlined so > that it really does return the stack pointer of the method calling > os::currentstackpointer! >

But we only inline today if caller is in the same translation unit and builds with optimization, no? ..Thomas > David



More information about the build-dev mailing list