Skip to content

Commit 6fdedbc

Browse files
obdevfootkaLINxiansheng
authored andcommitted
fix trigger error handling on Mac
Co-authored-by: footka <672528926@qq.com> Co-authored-by: LINxiansheng <wangzelin19961202@gmail.com>
1 parent 42c0d19 commit 6fdedbc

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

src/pl/ob_pl_exception_handling.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,8 @@ uintptr_t ObPLEH::readEncodedPointer(const uint8_t **data, uint8_t encoding)
330330
case DW_EH_PE_funcrel:
331331
case DW_EH_PE_aligned:
332332
default:
333-
// not supported
333+
LOG_ERROR_RET(OB_ERR_UNEXPECTED, "unsupported DWARF relative encoding in readEncodedPointer",
334+
K(encoding), "rel_encoding", encoding & 0x70);
334335
ob_abort();
335336
break;
336337
}
@@ -536,6 +537,12 @@ _Unwind_Reason_Code ObPLEH::handleLsda(int version,
536537
uint8_t lpStartEncoding = *lsda++;
537538

538539
if (lpStartEncoding != DW_EH_PE_omit) {
540+
uint8_t relEnc = lpStartEncoding & 0x70;
541+
if (relEnc != DW_EH_PE_absptr && relEnc != DW_EH_PE_pcrel) {
542+
LOG_WARN_RET(OB_ERR_UNEXPECTED, "unsupported lpStart encoding in LSDA, skip frame",
543+
K(lpStartEncoding), K(pc), K(funcStart));
544+
return _URC_CONTINUE_UNWIND;
545+
}
539546
readEncodedPointer(&lsda, lpStartEncoding);
540547
}
541548

@@ -548,6 +555,16 @@ _Unwind_Reason_Code ObPLEH::handleLsda(int version,
548555
}
549556

550557
uint8_t callSiteEncoding = *lsda++;
558+
559+
if (callSiteEncoding != DW_EH_PE_omit) {
560+
uint8_t relEnc = callSiteEncoding & 0x70;
561+
if (relEnc != DW_EH_PE_absptr && relEnc != DW_EH_PE_pcrel) {
562+
LOG_WARN_RET(OB_ERR_UNEXPECTED, "unsupported call site encoding in LSDA, skip frame",
563+
K(callSiteEncoding), K(pc), K(funcStart));
564+
return _URC_CONTINUE_UNWIND;
565+
}
566+
}
567+
551568
uint32_t callSiteTableLength = static_cast<uint32_t>(readULEB128(&lsda));
552569
const uint8_t *callSiteTableStart = lsda;
553570
const uint8_t *callSiteTableEnd = callSiteTableStart + callSiteTableLength;

0 commit comments

Comments
 (0)