diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-12-11 23:43:16 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-12-11 23:43:16 +0000 |
commit | b1d137cf582d6923cd6182752551f5046912c016 (patch) | |
tree | 958f4d3468ed91fa20d17ed4c61877af6f98a89a /libgo/go/reflect | |
parent | de04d95e64c39dbc5475361146260aed6db02faa (diff) | |
download | gcc-b1d137cf582d6923cd6182752551f5046912c016.zip gcc-b1d137cf582d6923cd6182752551f5046912c016.tar.gz gcc-b1d137cf582d6923cd6182752551f5046912c016.tar.bz2 |
reflect, runtime: Let reflect.MakeFunc functions call recover.
From-SVN: r205908
Diffstat (limited to 'libgo/go/reflect')
-rw-r--r-- | libgo/go/reflect/makefunc_386.S | 16 | ||||
-rw-r--r-- | libgo/go/reflect/makefunc_amd64.S | 15 |
2 files changed, 31 insertions, 0 deletions
diff --git a/libgo/go/reflect/makefunc_386.S b/libgo/go/reflect/makefunc_386.S index 3f10cba..d51115b 100644 --- a/libgo/go/reflect/makefunc_386.S +++ b/libgo/go/reflect/makefunc_386.S @@ -48,6 +48,15 @@ reflect.makeFuncStub: leal 8(%ebp), %eax /* Set esp field in struct. */ movl %eax, -24(%ebp) + /* For MakeFunc functions that call recover. */ + movl 4(%ebp), %eax + movl %eax, (%esp) +#ifdef __PIC__ + call __go_makefunc_can_recover@PLT +#else + call __go_makefunc_can_recover +#endif + #ifdef __PIC__ call __go_get_closure@PLT #else @@ -65,6 +74,13 @@ reflect.makeFuncStub: call reflect.MakeFuncStubGo #endif + /* MakeFunc functions can no longer call recover. */ +#ifdef __PIC__ + call __go_makefunc_returning@PLT +#else + call __go_makefunc_returning +#endif + /* Set return registers. */ movl -20(%ebp), %eax diff --git a/libgo/go/reflect/makefunc_amd64.S b/libgo/go/reflect/makefunc_amd64.S index 9d12f19..88302ee 100644 --- a/libgo/go/reflect/makefunc_amd64.S +++ b/libgo/go/reflect/makefunc_amd64.S @@ -61,6 +61,14 @@ reflect.makeFuncStub: movdqa %xmm6, 0xa0(%rsp) movdqa %xmm7, 0xb0(%rsp) + /* For MakeFunc functions that call recover. */ + movq 8(%rbp), %rdi +#ifdef __PIC__ + call __go_makefunc_can_recover@PLT +#else + call __go_makefunc_can_recover +#endif + # Get function type. #ifdef __PIC__ call __go_get_closure@PLT @@ -77,6 +85,13 @@ reflect.makeFuncStub: call reflect.MakeFuncStubGo #endif + /* MakeFunc functions can no longer call recover. */ +#ifdef __PIC__ + call __go_makefunc_returning@PLT +#else + call __go_makefunc_returning +#endif + # The structure will be updated with any return values. Load # all possible return registers before returning to the caller. |