mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 12:40:53 +07:00
Revert "ARC: dw2 unwind: Ignore CIE version !=1 gracefully instead of bailing"
Blingly ignoring CIE.version != 1 was a bad idea.
It still leaves "desirability" when running perf with callgraphing where libgcc
symbols might show in hotspot.
More importantly, basic CIE.version == 3 support already exists in code:
|
| retAddrReg = state.version <= 1 ? *ptr++ : get_uleb128(&ptr, end);
|
Next commit with simply add continue-not-bail for CIE.version != 1
This reverts commit 323f41f9e7
.
This commit is contained in:
parent
07fd7d4bbc
commit
2d64affc92
@ -293,13 +293,13 @@ static void init_unwind_hdr(struct unwind_table *table,
|
|||||||
const u32 *cie = cie_for_fde(fde, table);
|
const u32 *cie = cie_for_fde(fde, table);
|
||||||
signed ptrType;
|
signed ptrType;
|
||||||
|
|
||||||
if (cie == ¬_fde) /* only process FDE here */
|
if (cie == ¬_fde)
|
||||||
continue;
|
continue;
|
||||||
if (cie == NULL || cie == &bad_cie)
|
if (cie == NULL || cie == &bad_cie)
|
||||||
continue; /* say FDE->CIE.version != 1 */
|
return;
|
||||||
ptrType = fde_pointer_type(cie);
|
ptrType = fde_pointer_type(cie);
|
||||||
if (ptrType < 0)
|
if (ptrType < 0)
|
||||||
continue;
|
return;
|
||||||
|
|
||||||
ptr = (const u8 *)(fde + 2);
|
ptr = (const u8 *)(fde + 2);
|
||||||
if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde,
|
if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde,
|
||||||
@ -343,10 +343,6 @@ static void init_unwind_hdr(struct unwind_table *table,
|
|||||||
|
|
||||||
if (fde[1] == 0xffffffff)
|
if (fde[1] == 0xffffffff)
|
||||||
continue; /* this is a CIE */
|
continue; /* this is a CIE */
|
||||||
|
|
||||||
if (*(u8 *)(cie + 2) != 1)
|
|
||||||
continue; /* FDE->CIE.version not supported */
|
|
||||||
|
|
||||||
ptr = (const u8 *)(fde + 2);
|
ptr = (const u8 *)(fde + 2);
|
||||||
header->table[n].start = read_pointer(&ptr,
|
header->table[n].start = read_pointer(&ptr,
|
||||||
(const u8 *)(fde + 1) +
|
(const u8 *)(fde + 1) +
|
||||||
@ -523,8 +519,7 @@ static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *table)
|
|||||||
|
|
||||||
if (*cie <= sizeof(*cie) + 4 || *cie >= fde[1] - sizeof(*fde)
|
if (*cie <= sizeof(*cie) + 4 || *cie >= fde[1] - sizeof(*fde)
|
||||||
|| (*cie & (sizeof(*cie) - 1))
|
|| (*cie & (sizeof(*cie) - 1))
|
||||||
|| (cie[1] != 0xffffffff)
|
|| (cie[1] != 0xffffffff))
|
||||||
|| ( *(u8 *)(cie + 2) != 1)) /* version 1 supported */
|
|
||||||
return NULL; /* this is not a (valid) CIE */
|
return NULL; /* this is not a (valid) CIE */
|
||||||
return cie;
|
return cie;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user