Re: BUG #14897: Segfault on statitics SQL request

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Dmitry Dolgov <9erthalion6@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Michael Paquier <michael.paquier@gmail.com>, Vincent Lachenal <vincent.lachenal@gmail.com>, PostgreSQL mailing lists <pgsql-bugs@postgresql.org>
Date: 2017-11-11T17:16:20Z
Lists: pgsql-bugs
On 2017-11-11 17:52:34 +0100, Dmitry Dolgov wrote:
> > On 11 November 2017 at 17:36, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >
> > Would you guys who are seeing the problem note whether the address of
> > the int128 field is 16-aligned, or only 8-aligned?
> 
> __alignof__(__int128) returns 16 on my machine.
> 
> > Also, it'd be real useful to see some disassembly around the point of
> > the crash, so that we can check whether the compiler is using SIMD
> > instructions.  (Or just get the compiler to generate a numeric.s file
> > with -S.)
> 
> Here is the disassembly section I've got in my case:
> 
>     0x00000000007fc474 numericvar_to_int128+458 je     0x7fc48c
> <numericvar_to_int128+482>
>     0x00000000007fc476 numericvar_to_int128+460 mov    -0x88(%rbp),%rax
>     0x00000000007fc47d numericvar_to_int128+467 movdqa -0x60(%rbp),%xmm0
> --> 0x00000000007fc482 numericvar_to_int128+472 movaps %xmm0,(%rax)
>     0x00000000007fc485 numericvar_to_int128+475 mov    $0x1,%eax
>     0x00000000007fc48a numericvar_to_int128+480 jmp    0x7fc455
> <numericvar_to_int128+427>
>     0x00000000007fc48c numericvar_to_int128+482 negq   -0x60(%rbp)

That's using SSE, which requires 16byte alignment IIRC.  I think we need
a function that properly allocate int128 vars with the right alignment -
don't think we want to go for full 16byte alignment for everything.

Greetings,

Andres Freund


Commits

  1. Prevent int128 from requiring more than MAXALIGN alignment.

  2. Rearrange c.h to create a "compiler characteristics" section.