aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <tstellar@redhat.com>2019-06-06 21:04:17 +0000
committerTom Stellard <tstellar@redhat.com>2019-06-06 21:04:17 +0000
commit3b803b0120eddb9f096bd1c904a6e9e88af4ae55 (patch)
treec6ec1b959262c5d914ee11398aafae2461f4a788
parent91bd292f63e43034c435bf0677fdb5059157fd54 (diff)
Merging r357986:
------------------------------------------------------------------------ r357986 | jyknight | 2019-04-09 02:21:45 -0700 (Tue, 09 Apr 2019) | 22 lines Fix siod's gc implementation when used with GLIBC. Patch from LuoYuanke -- In the siod gc, it depends on setjmp(...) to get the value of callee saved register value, and traverse those register to get the possible local object pointer. Also it traverse current stack to get the possible local object pointer. For setjmp(...) on glibc X86-64, the rbp register (callee saved register) is NOT saved in the setjmp buffer, so object that pointed by rbp is NOT considered as local object variable and its memory is collected as garbage. This patch is to use getcontext(...) to get more register value of current context and traverse those register to protect object from garbage collection. This bug is not easy to expose, because usually rbp has been saved in stack when do garbage collection, so the object pointer can be scanned from stack. However when compiler do some optimization on register allocation or licm, the rbp live in gc_mark_and_sweep(...) and rbp is pointing to an object. In such situation, siod failed to run test.scm because object is collected as garbage unexpectedly. Differential Revision: D60039 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/test-suite/branches/release_80@362747 91177308-0d34-0410-b5e6-96231b3b80d8
0 files changed, 0 insertions, 0 deletions