Re: BUG #15653: pg_detoast_datum_packed problem

Поиск
Список
Период
Сортировка
От gmail Vladimir Koković
Тема Re: BUG #15653: pg_detoast_datum_packed problem
Дата
Msg-id 5236e747-2107-35f8-6741-99298f0bd6a4@gmail.com
обсуждение исходный текст
Ответ на Re: BUG #15653: pg_detoast_datum_packed problem  (Andrew Gierth <andrew@tao11.riddles.org.uk>)
Ответы Re: BUG #15653: pg_detoast_datum_packed problem
Список pgsql-bugs

Hi Andrew.

I changed VARSIZE to VARSIZE_ANY_EXHDR and VARDATA in VARDATA_ANY as you said, but there is still a problem I can not understand !

124	Datum pg_bvarchar(PG_FUNCTION_ARGS) {
125	  VarChar *arg = PG_GETARG_VARCHAR_PP(0);0x7f5b4adb1380	<pg_bvarchar>:		push   r13
-	0x7f5b4adb1382	<pg_bvarchar+2>:		push   r12
-	0x7f5b4adb1384	<pg_bvarchar+4>:		push   rbp
-	0x7f5b4adb1385	<pg_bvarchar+5>:		push   rbx
-	0x7f5b4adb1386	<pg_bvarchar+6>:		sub    rsp,0x8
-	0x7f5b4adb138a	<pg_bvarchar+10>:		mov    rdi,QWORD PTR [rdi+0x20]
-	0x7f5b4adb138e	<pg_bvarchar+14>:		call   0x7f5b4adb1030 <pg_detoast_datum_packed@plt>
-	0x7f5b4adb1393	<pg_bvarchar+19>:		mov    rbx,rax
126	  unsigned len;
127	  bytea *res;
128	
129	  len = VARSIZE_ANY_EXHDR(arg) - VARHDRSZ;
-	0x7f5b4adb1396	<pg_bvarchar+22>:		movzx  eax,BYTE PTR [rax]
-	0x7f5b4adb1399	<pg_bvarchar+25>:		cmp    al,0x1
-	0x7f5b4adb139b	<pg_bvarchar+27>:		je     0x7f5b4adb1408 <pg_bvarchar+136>
-	0x7f5b4adb139d	<pg_bvarchar+29>:		test   al,0x1
-	0x7f5b4adb139f	<pg_bvarchar+31>:		jne    0x7f5b4adb13f0 <pg_bvarchar+112>
-	0x7f5b4adb13a1	<pg_bvarchar+33>:		mov    eax,DWORD PTR [rbx]
-	0x7f5b4adb13a3	<pg_bvarchar+35>:		shr    eax,0x2
-	0x7f5b4adb13a6	<pg_bvarchar+38>:		lea    edi,[rax-0x4]
-	0x7f5b4adb13a9	<pg_bvarchar+41>:		lea    r13d,[rax-0x8]
-	0x7f5b4adb13ad	<pg_bvarchar+45>:		mov    r12,rdi
-	0x7f5b4adb13b0	<pg_bvarchar+48>:		shl    r12d,0x2
130	  res = (text *) palloc(len + VARHDRSZ);
-	0x7f5b4adb13b4	<pg_bvarchar+52>:		call   0x7f5b4adb1050 <palloc@plt>
-	0x7f5b4adb13b9	<pg_bvarchar+57>:		lea    rsi,[rbx+0x4]
-	0x7f5b4adb13bd	<pg_bvarchar+61>:		mov    rdx,r13
-	0x7f5b4adb13c0	<pg_bvarchar+64>:		mov    rbp,rax
131	  SET_VARSIZE(res, len + VARHDRSZ);
-	0x7f5b4adb13c3	<pg_bvarchar+67>:		mov    DWORD PTR [rax],r12d
132	  memcpy(VARDATA(res), VARDATA_ANY(arg), len);
-	0x7f5b4adb13c6	<pg_bvarchar+70>:		lea    rax,[rbx+0x1]
-	0x7f5b4adb13ca	<pg_bvarchar+74>:		test   BYTE PTR [rbx],0x1
-	0x7f5b4adb13cd	<pg_bvarchar+77>:		cmovne rsi,rax
-	0x7f5b4adb13d1	<pg_bvarchar+81>:		lea    rdi,[rbp+0x4]
-	0x7f5b4adb13d5	<pg_bvarchar+85>:		call   0x7f5b4adb1040 <memcpy@plt>   Program terminated with signal SIGSEGV, Segmentation fault. 
133	  PG_RETURN_BYTEA_P(res);
-	0x7f5b4adb13da	<pg_bvarchar+90>:		add    rsp,0x8
-	0x7f5b4adb13de	<pg_bvarchar+94>:		mov    rax,rbp
-	0x7f5b4adb13e1	<pg_bvarchar+97>:		pop    rbx
-	0x7f5b4adb13e2	<pg_bvarchar+98>:		pop    rbp
-	0x7f5b4adb13e3	<pg_bvarchar+99>:		pop    r12
-	0x7f5b4adb13e5	<pg_bvarchar+101>:		pop    r13
-	0x7f5b4adb13e7	<pg_bvarchar+103>:		ret    
-	0x7f5b4adb13e8	<pg_bvarchar+104>:		nop    DWORD PTR [rax+rax*1+0x0]
-	0x7f5b4adb13f0	<pg_bvarchar+112>:		shr    al,1
-	0x7f5b4adb13f2	<pg_bvarchar+114>:		movzx  eax,al
-	0x7f5b4adb13f5	<pg_bvarchar+117>:		lea    edi,[rax-0x1]
-	0x7f5b4adb13f8	<pg_bvarchar+120>:		lea    r13d,[rax-0x5]
-	0x7f5b4adb13fc	<pg_bvarchar+124>:		mov    r12,rdi
-	0x7f5b4adb13ff	<pg_bvarchar+127>:		shl    r12d,0x2
-	0x7f5b4adb1403	<pg_bvarchar+131>:		jmp    0x7f5b4adb13b4 <pg_bvarchar+52>
-	0x7f5b4adb1405	<pg_bvarchar+133>:		nop    DWORD PTR [rax]
-	0x7f5b4adb1408	<pg_bvarchar+136>:		movzx  eax,BYTE PTR [rbx+0x1]
-	0x7f5b4adb140c	<pg_bvarchar+140>:		cmp    al,0x1
-	0x7f5b4adb140e	<pg_bvarchar+142>:		je     0x7f5b4adb1438 <pg_bvarchar+184>
-	0x7f5b4adb1410	<pg_bvarchar+144>:		mov    edx,eax
-	0x7f5b4adb1412	<pg_bvarchar+146>:		and    edx,0xfe
-	0x7f5b4adb1418	<pg_bvarchar+152>:		cmp    edx,0x2
-	0x7f5b4adb141b	<pg_bvarchar+155>:		je     0x7f5b4adb1438 <pg_bvarchar+184>
-	0x7f5b4adb141d	<pg_bvarchar+157>:		cmp    al,0x12
-	0x7f5b4adb141f	<pg_bvarchar+159>:		jne    0x7f5b4adb144e <pg_bvarchar+206>
-	0x7f5b4adb1421	<pg_bvarchar+161>:		mov    r13d,0xc
-	0x7f5b4adb1427	<pg_bvarchar+167>:		mov    r12d,0x40
-	0x7f5b4adb142d	<pg_bvarchar+173>:		mov    edi,0x10
-	0x7f5b4adb1432	<pg_bvarchar+178>:		jmp    0x7f5b4adb13b4 <pg_bvarchar+52>
-	0x7f5b4adb1434	<pg_bvarchar+180>:		nop    DWORD PTR [rax+0x0]
-	0x7f5b4adb1438	<pg_bvarchar+184>:		mov    r13d,0x4
-	0x7f5b4adb143e	<pg_bvarchar+190>:		mov    r12d,0x20
-	0x7f5b4adb1444	<pg_bvarchar+196>:		mov    edi,0x8
-	0x7f5b4adb1449	<pg_bvarchar+201>:		jmp    0x7f5b4adb13b4 <pg_bvarchar+52>
-	0x7f5b4adb144e	<pg_bvarchar+206>:		mov    ecx,0x81
-	0x7f5b4adb1453	<pg_bvarchar+211>:		lea    rdx,[rip+0xba6]        # 0x7f5b4adb2000
-	0x7f5b4adb145a	<pg_bvarchar+218>:		lea    rsi,[rip+0xba9]        # 0x7f5b4adb200a
-	0x7f5b4adb1461	<pg_bvarchar+225>:		lea    rdi,[rip+0xbbc]        # 0x7f5b4adb2024
-	0x7f5b4adb1468	<pg_bvarchar+232>:		call   0x7f5b4adb1060 <ExceptionalCondition@plt>
-	0x7f5b4adb146d:		nop    DWORD PTR [rax]

































On 8.3.19. 20:15, Andrew Gierth wrote:
"gmail" == gmail Vladimir Koković <vladimir.kokovic@gmail.com> writes:
gmail>   VarChar *arg = PG_GETARG_VARCHAR_PP(0);

The _PP there means that this is allowed to return either a packed
(short) varlena or a normal one...
gmail>     len = VARSIZE( arg ) - VARHDRSZ;

...but VARSIZE is only allowed on unpacked varlenas, you need to use
VARSIZE_ANY_EXHDR instead (and VARDATA_ANY rather than VARDATA).

В списке pgsql-bugs по дате отправления:

Предыдущее
От: PG Bug reporting form
Дата:
Сообщение: BUG #15682: Change default value of checkpoint_completion_target to 0.9 for better performance?
Следующее
От: Andrew Gierth
Дата:
Сообщение: Re: BUG #15653: pg_detoast_datum_packed problem