Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ASSERT(1.5.0 r242 gcc on Ubuntu 9.10 x86 and x64) is_dynamo_address((app_pc) xsp)) core/linux/signal.c:986 #229

Closed
derekbruening opened this issue Nov 27, 2014 · 2 comments

Comments

@derekbruening
Copy link
Contributor

From derek.br...@gmail.com on November 23, 2009 15:29:57

I suspect a problem with the feature added in issue #149 .
In addition to the assert reported below, issue #149 also has two other
issues discovered post-commit. That issue can be re-opened instead if this
assert is unrelated to the first issue:

  • to investigate whether the arg to the initial thread func is being passed
    properly since we're not copying whatever the kernel puts on the
    dstack onto the app stack
  • the vfork handling is incorrect. it was added post-review. it was
    incorrectly
    pasted from the clone handling and uses syscall args that do not exist
    for vfork.
    the vfork test must only pass for coincidental reasons.

The assert, along with a subsequent hang which is not surprising if the
child died due to the assert:

Date: Mon, 23 Nov 2009 13:51:28 -0500
From: Peter Feiner

I also reran gcc (version 4.4) under DynamoRIO debug builds using no client
at all. Both my 32-bit and 64-bit system fail the same assertion on line 986
of core/linux/signal.c:

ASSERT(is_dynamo_address((app_pc) xsp));

Here's the 32-bit output

<Application gcc (9744). Internal Error Internal DynamoRIO Error:
/home/peter/dynamorio-read-only/core/linux/signal.c:986
version 1.5.0, build 18

0xbfcfbeec 0x0035e791
0xbfcfc04c 0x0044ca5a
0xbfcfc06c 0x0042f849
0xbfcfc0bc 0x1f5528e4
0xbfcfc198 0x0805fcfe
0xbfcfc218 0x0805ff03
0xbfcfc248 0x0804d8b0
0xbfcfc2f8 0x0804df29
0xbfcfc3d8 0x0804feb5
0xbfcfc448 0x0804eafd
0xbfcfc528 0x0804edbd>
<Stopping application gcc (9744)>

Here's the 64-bit output:

<Application gcc (21734). Internal Error Internal DynamoRIO Error:
/home/peter/ece1724/dynamorio-read-only/core/linux/signal.c:986
version 1.5.0, build 18

0x00007fff498d54b0 0x000000007109ed93
0x00007fff498d5600 0x00000000711801f1
0x00007fff498d5620 0x000000007116645b
0x00007fff498d5660 0x0000000071f0fa44>
<Stopping application gcc (21734)>

In both cases, the application hangs and is unresponsive to signals issued
via ctrl-| and ctrl-c. To kill the hung processes, I have to issue kill -9.
I generated stack dumps for each hung process before killing it. Here's the
32-bit dump:

$ gdb program 9744
(gdb) bt
#0 0x0043398e in syscall_0args () from
/home/peter/dynamorio-read-only/exports-debug/lib32/debug/libdynamorio.so
#1 0x1f5950a8 in ?? ()
#2 0x0044ded3 in signal_thread_exit (dcontext=0x1f53d800) at
/home/peter/dynamorio-read-only/core/linux/signal.c:1248
#3 0x00444098 in os_thread_exit (dcontext=0x1f53d800) at
/home/peter/dynamorio-read-only/core/linux/os.c:1397
#4 0x002f94dc in dynamo_thread_exit_common (dcontext=0x1f53d800, id=, other_thread=0) at
/home/peter/dynamorio-read-only/core/dynamo.c:2067
#5 0x002f9a99 in dynamo_thread_exit () at
/home/peter/dynamorio-read-only/core/dynamo.c:2157
#6 0x002faaf6 in dynamo_process_exit_cleanup () at
/home/peter/dynamorio-read-only/core/dynamo.c:1091
#7 dynamo_process_exit () at
/home/peter/dynamorio-read-only/core/dynamo.c:1160
#8 0x004338d8 in cat_done_saving_dstack () from
/home/peter/dynamorio-read-only/exports-debug/lib32/debug/libdynamorio.so
#9 0x00433937 in cat_have_lock () from
/home/peter/dynamorio-read-only/exports-debug/lib32/debug/libdynamorio.so
#10 0x1f590000 in ?? ()
#11 0x1f53d800 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Here's the 64-bit dump:

$ gdb program 21734
(gdb) bt
#0 0x000000007116a2a0 in syscall_ready () from
/home/peter/ece1724/dynamorio-read-only/exports-gcc4.4-64bit-debug/lib64/debug/libdynamorio.so
#1 0x0000000071f27700 in ?? ()
#2 0x0000000071174d69 in thread_yield () at
/home/peter/ece1724/dynamorio-read-only/core/linux/os.c:1930
#3 0x0000000071182328 in signal_thread_exit (dcontext=0x18) at
/home/peter/ece1724/dynamorio-read-only/core/linux/signal.c:1248
#4 0x0000000071178fab in os_thread_exit (dcontext=0x71f27700) at
/home/peter/ece1724/dynamorio-read-only/core/linux/os.c:1397
#5 0x0000000071041499 in dynamo_thread_exit_common (dcontext=0x71f27700,
id=21734, other_thread=0) at
/home/peter/ece1724/dynamorio-read-only/core/dynamo.c:2067
#6 0x0000000071041972 in dynamo_thread_exit () at
/home/peter/ece1724/dynamorio-read-only/core/dynamo.c:2157
#7 0x00000000710428aa in dynamo_process_exit_cleanup () at
/home/peter/ece1724/dynamorio-read-only/core/dynamo.c:1091
#8 dynamo_process_exit () at
/home/peter/ece1724/dynamorio-read-only/core/dynamo.c:1160
#9 0x000000007116a1ea in cat_done_saving_dstack () from
/home/peter/ece1724/dynamorio-read-only/exports-gcc4.4-64bit-debug/lib64/debug/libdynamorio.so
#10 0x000000007116a24b in global_do_syscall_sysenter () from
/home/peter/ece1724/dynamorio-read-only/exports-gcc4.4-64bit-debug/lib64/debug/libdynamorio.so
#11 0x0000000071f76000 in ?? ()
#12 0x0000000071f27700 in ?? ()
#13 0x00000000000000e7 in ?? ()
#14 0x0000000000000001 in ?? ()
#15 0x000000000000003c in ?? ()
#16 0x0000000000000001 in ?? ()
#17 0x000000007117b5ad in handle_exit (dcontext=0x71f27700) at
/home/peter/ece1724/dynamorio-read-only/core/linux/os.c:3349
#18 pre_system_call (dcontext=0x71f27700) at
/home/peter/ece1724/dynamorio-read-only/core/linux/os.c:3427
#19 0x0000000071f27700 in ?? ()
#20 0x00000000000000e7 in ?? ()
#21 0x0000000000000001 in ?? ()
#22 0x000000000000003c in ?? ()
#23 0x0000000000000001 in ?? ()
#24 0x000000007117b5ad in handle_exit (dcontext=0x71f76000) at
/home/peter/ece1724/dynamorio-read-only/core/linux/os.c:3349
#25 pre_system_call (dcontext=0x71f76000) at
/home/peter/ece1724/dynamorio-read-only/core/linux/os.c:3427
#26 0x0000000000000000 in ?? ()

These dumps do not change over time. That is, I requested a backtrace from
gdb, waited 10 seconds, and requested another.

Original issue: http://code.google.com/p/dynamorio/issues/detail?id=229

@derekbruening
Copy link
Contributor Author

From derek.br...@gmail.com on November 23, 2009 12:34:33

Summary: ASSERT(1.5.0 r242 gcc on Ubuntu 9.10 x86 and x64) is_dynamo_address((app_pc) xsp)) core/linux/signal.c:986

@derekbruening
Copy link
Contributor Author

From derek.br...@gmail.com on December 01, 2009 09:45:50

fixed in r249

Status: Verified

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant