Re: pgsql: Remove "fmgr.h" include in cube contrib --- caused crash on a Ge
От | Bruce Momjian |
---|---|
Тема | Re: pgsql: Remove "fmgr.h" include in cube contrib --- caused crash on a Ge |
Дата | |
Msg-id | 201109031435.p83EZfm18481@momjian.us обсуждение исходный текст |
Ответ на | Re: pgsql: Remove "fmgr.h" include in cube contrib --- caused crash on a Ge (Jeremy Drake <pgsql@jdrake.com>) |
Список | pgsql-committers |
Did you test with a lower optimization level? Gentoo is notorious for buggy/bleeding edge tools. --------------------------------------------------------------------------- Jeremy Drake wrote: > On Fri, 2 Sep 2011, Tom Lane wrote: > > > Yeah, so the next question would be why those other ones aren't showing > > problems. But at least now we have a potential mechanism for getting > > from "the include list changed" to "cube is crashing on an offsetof", > > namely that something is affecting the expansion of the offsetof macro. > > Up to now it's been black magic, and I don't like patching around > > problems we don't understand any better than that. > > > I'm going to try answering about 3 emails at once here, so I apologize for > the confusion. > > Checking preprocessor output on cube_f8_f8 between working and broken, the > output was identical for that function. > > Changing offsetof(NDBOX, x[0]) to offsetof(NDBOX, x), no change in > behavior. > > Then I started investigating the disassembly. The PIC disassembly was > making my head hurt (why is the compiler calling the next instruction, > popping the return address into a register, and using it as a pointer? > Oh yeah, PIC, duh!), but I'm pretty sure that what it crashed on was > attempting to access the global external variable CurrentMemoryContext. > The odd thing is, that the disassembly code between the working and > non-working was the same, except for the offsets. > > Here's the disassembly output from the core dump: > Program terminated with signal 11, Segmentation fault. > #0 cube_f8_f8 () at cube.c:1435 > 1435 size = offsetof(NDBOX, x) +sizeof(double) * 2; > (gdb) set disassembly-flavor intel > (gdb) disass > Dump of assembler code for function cube_f8_f8: > 0xb776ab50 <+0>: push ebp > 0xb776ab51 <+1>: mov ebp,esp > 0xb776ab53 <+3>: and esp,0xfffffff8 > 0xb776ab56 <+6>: push ebx > 0xb776ab57 <+7>: sub esp,0x14 > 0xb776ab5a <+10>: mov ecx,DWORD PTR [ebp+0x8] > 0xb776ab5d <+13>: mov DWORD PTR [esp+0x10],ebx > 0xb776ab61 <+17>: mov edx,DWORD PTR [ecx+0x14] > 0xb776ab64 <+20>: movsd xmm0,QWORD PTR [edx] > 0xb776ab68 <+24>: mov edx,DWORD PTR [ecx+0x18] > 0xb776ab6b <+27>: movsd xmm1,QWORD PTR [edx] > 0xb776ab6f <+31>: movsd QWORD PTR [esp],xmm0 > 0xb776ab74 <+36>: movsd QWORD PTR [esp+0x8],xmm1 > 0xb776ab7a <+42>: push 0x18 > 0xb776ab7c <+44>: call 0xb776ab81 <cube_f8_f8+49> > 0xb776ab81 <+49>: pop eax > 0xb776ab82 <+50>: add eax,0x9472 > 0xb776ab87 <+55>: mov edx,DWORD PTR [eax-0x58] > => 0xb776ab8d <+61>: push DWORD PTR [edx] > 0xb776ab8f <+63>: mov DWORD PTR [esp+0x18],ebx > 0xb776ab93 <+67>: mov ebx,eax > 0xb776ab95 <+69>: call 0xb776745c <MemoryContextAllocZero@plt> > > > > With this knowledge, I thought maybe cube wasn't the actual problem, but > just happened to be early in the list of contrib modules being tested. So > I arbitrarily picked another contrib module to test, intarray. > > ============== running regression test queries ============== > test _int ... FAILED (test process exited with exit > code 2) > > Program terminated with signal 11, Segmentation fault. > #0 0xb785a1fa in g_intbig_union () > from > /buildfarm/test/pgsql_test/contrib/intarray/tmp_check/install/usr/local/pgsql/lib/_int.so > (gdb) set disassembly-flavor intel > (gdb) disass > Dump of assembler code for function g_intbig_union: > <SNIP UNRELATED ASSEMBLY CODE> > 0xb785a087 <+31>: call 0xb785a08c <g_intbig_union+36> > 0xb785a08c <+36>: pop eax > 0xb785a08d <+37>: add eax,0x6f67 > 0xb785a092 <+42>: mov DWORD PTR [esp+0x104],eax > <SNIP MORE UNRELATED ASSEMBLY CODE (this is a much longer function)> > 0xb785a1e5 <+381>: mov eax,DWORD PTR [esp+0x104] > 0xb785a1ec <+388>: mov esi,DWORD PTR [eax-0x24] > 0xb785a1f2 <+394>: mov DWORD PTR [esp+0x108],ebx > 0xb785a1f9 <+401>: push ebx > => 0xb785a1fa <+402>: push DWORD PTR [esi] > 0xb785a1fc <+404>: mov DWORD PTR [esp+0x104],ebx > 0xb785a203 <+411>: mov ebx,eax > 0xb785a205 <+413>: call 0xb7853ef0 <MemoryContextAlloc@plt> > > > Looks pretty familiar, right? > > Still, I have no idea why adding an include would cause issues accessing > CurrentMemoryContext. But at least we're not blaming offsetof or cube > anymore... > -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. +
В списке pgsql-committers по дате отправления:
Предыдущее
От: Tom LaneДата:
Сообщение: Re: pgsql: Remove "fmgr.h" include in cube contrib --- caused crash on a Ge
Следующее
От: Bruce MomjianДата:
Сообщение: Re: pgsql: Remove "fmgr.h" include in cube contrib --- caused crash on a Ge