mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 01:50:34 +08:00
re PR go/65349 (go tool crashes, can't compile go code on 32bit linux systems)
PR go/65349 runtime: Don't call malloc from __go_file_line callback. When crashing, we call runtime_printcreatedby which calls __go_file_line which used to call the Go malloc. If we are crashing due to a signal due to heap corruption of some sort, the GO malloc lock might already be held, leading to a crash within a crash. Avoid that by assuming that the libbacktrace strings will stick around, as we already do in go-callers.c. From-SVN: r221291
This commit is contained in:
parent
864396ff9e
commit
4729d7726b
@ -37,36 +37,12 @@ callback (void *data, uintptr_t pc __attribute__ ((unused)),
|
||||
{
|
||||
struct caller *c = (struct caller *) data;
|
||||
|
||||
if (function == NULL)
|
||||
{
|
||||
c->fn.str = NULL;
|
||||
c->fn.len = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte *s;
|
||||
|
||||
c->fn.len = __builtin_strlen (function);
|
||||
s = runtime_malloc (c->fn.len);
|
||||
__builtin_memcpy (s, function, c->fn.len);
|
||||
c->fn.str = s;
|
||||
}
|
||||
|
||||
if (filename == NULL)
|
||||
{
|
||||
c->file.str = NULL;
|
||||
c->file.len = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte *s;
|
||||
|
||||
c->file.len = __builtin_strlen (filename);
|
||||
s = runtime_malloc (c->file.len);
|
||||
__builtin_memcpy (s, filename, c->file.len);
|
||||
c->file.str = s;
|
||||
}
|
||||
|
||||
/* The libbacktrace library says that these strings might disappear,
|
||||
but with the current implementation they won't. We can't easily
|
||||
allocate memory here, so for now assume that we can save a
|
||||
pointer to the strings. */
|
||||
c->fn = runtime_gostringnocopy ((const byte *) function);
|
||||
c->file = runtime_gostringnocopy ((const byte *) filename);
|
||||
c->line = lineno;
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user