Mercurial > hg > release > heapstats-1.1
changeset 73:63b7632cf097 default tip
Bug 3421: Override functions might crash on Fedora 26
Reviewed-by: ykubota
https://github.com/HeapStats/heapstats/pull/110
author | Yasumasa Suenaga <yasuenag@gmail.com> |
---|---|
date | Tue, 18 Jul 2017 11:54:21 +0900 |
parents | 842b6988ed87 |
children | |
files | agent/ChangeLog agent/src/overrideFunc.S |
diffstat | 2 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/agent/ChangeLog Wed Jul 05 14:07:40 2017 +0900 +++ b/agent/ChangeLog Tue Jul 18 11:54:21 2017 +0900 @@ -1,3 +1,7 @@ +2017-07-18 Yasumasa Suenaga <yasuenag@gmail.com> + + * Bug 3421: Override functions might crash on Fedora 26 + 2017-07-05 KUBOTA Yuji <kubota.yuji@lab.ntt.co.jp> * Bump to 1.1.7
--- a/agent/src/overrideFunc.S Wed Jul 05 14:07:40 2017 +0900 +++ b/agent/src/overrideFunc.S Tue Jul 18 11:54:21 2017 +0900 @@ -27,7 +27,9 @@ #define OVERRIDE_FUNC_DEFINE(header, ary_idx) \ .global header##_override_func_##ary_idx ; \ .type header##_override_func_##ary_idx, @function; \ - header##_override_func_##ary_idx: ; + header##_override_func_##ary_idx: ; \ + push %rbp; \ + mov %rsp, %rbp; #if defined(__amd64__) @@ -79,7 +81,7 @@ pop %r11; \ test %r11, %r11; \ jz nextFunc; \ - call *%r11; + call *%r11; /* Macro for override function define. */ @@ -166,6 +168,8 @@ #define OVERRIDE_CALLBACK_DEFINE(header, ary_idx, func, paramCnt) \ OVERRIDE_FUNC_DEFINE(header, ary_idx) \ + /* Stack alignment */ \ + sub $8, %rsp; \ \ /* Get all override info. */ ; \ GET_ALL_FUNC_ADDR(header, ary_idx) \ @@ -469,6 +473,10 @@ #if defined(__amd64__) pop %r11; DO_LOAD_REG + /* Restore stack pointer */ + mov %rbp, %rsp; + /* Restore base pointer */ + pop %rbp; jmp *%r11; #elif defined(__i386__) addl $0x4, %esp; @@ -479,6 +487,11 @@ .RETURN_CALLER_FUNC:; #if defined(__amd64__) + /* Restore stack pointer */ + mov %rbp, %rsp; + /* Restore base pointer */ + pop %rbp; + /* * Return caller. Return address exists on top of stack. * We need to pop return address from stack.