[PING][PATCH] Segfault while unwinding an invalid function pointer
Pete Eberlein
eberlein@linux.vnet.ibm.com
Mon Oct 29 23:54:00 GMT 2007
Jakub Jelinek wrote on 10/29/2007 03:41:53 PM:
>> This should only happen for a signal frame or a garbage address.
>
> Or a function without unwind info. Something that happens quite often.
> E.g. even with -fasynchronous-unwind-tables built glibc, the outermost
> stack frame is always without unwind info and so every backtrace(3)
> will hit your tmpfile/write/fclose at least once. This is too costly.
Would a single call to tmpfile be acceptable for the duration of the
program? I'm thinking something like this:
static FILE* tmp_file = NULL;
static int tmp_offset = 0;
if (!tmp_file) {
tmp_file = tmpfile();
}
if (tmp_file)
{
if (tmp_offset + len > 4096)
{
rewind(tmp_file);
tmp_offset = 0;
}
rc = write (fileno(tmp_file), addr, len);
tmp_offset += rc;
result = (rc == len);
}
This way tmp_file is only called once, write is called each time, and
rewind is called when the file would exceed 4k.
Is this still too costly? Or should I stop asking?
--
Pete Eberlein
IBM Linux Technology Center
Linux on Power Toolchain
More information about the Gcc-patches
mailing list