mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
btrace: do not return out of TRY/CATCH
In btrace_pt_readmem_callback, we read memory inside TRY/CATCH and return in case of an error return value. This corrupts the cleanup chain, which eventually results in a SEGV when doing or discarding cleanups later on. gdb/ * btrace.c (btrace_pt_readmem_callback): Do not return in TRY/CATCH. testsuite/ * gdb.btrace/dlopen.exp: New. * gdb.btrace/dlopen.c: New. * gdb.btrace/dlopen-dso.c: New.
This commit is contained in:
@ -842,21 +842,22 @@ btrace_pt_readmem_callback (gdb_byte *buffer, size_t size,
|
||||
const struct pt_asid *asid, uint64_t pc,
|
||||
void *context)
|
||||
{
|
||||
int errcode;
|
||||
int result, errcode;
|
||||
|
||||
result = (int) size;
|
||||
TRY
|
||||
{
|
||||
errcode = target_read_code ((CORE_ADDR) pc, buffer, size);
|
||||
if (errcode != 0)
|
||||
return -pte_nomap;
|
||||
result = -pte_nomap;
|
||||
}
|
||||
CATCH (error, RETURN_MASK_ERROR)
|
||||
{
|
||||
return -pte_nomap;
|
||||
result = -pte_nomap;
|
||||
}
|
||||
END_CATCH
|
||||
|
||||
return size;
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Translate the vendor from one enum to another. */
|
||||
|
Reference in New Issue
Block a user