mirror of git://gcc.gnu.org/git/gcc.git
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;
|
struct caller *c = (struct caller *) data;
|
||||||
|
|
||||||
if (function == NULL)
|
/* The libbacktrace library says that these strings might disappear,
|
||||||
{
|
but with the current implementation they won't. We can't easily
|
||||||
c->fn.str = NULL;
|
allocate memory here, so for now assume that we can save a
|
||||||
c->fn.len = 0;
|
pointer to the strings. */
|
||||||
}
|
c->fn = runtime_gostringnocopy ((const byte *) function);
|
||||||
else
|
c->file = runtime_gostringnocopy ((const byte *) filename);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->line = lineno;
|
c->line = lineno;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue