This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
glibc bug 23125 (originally GCC bug 85492) demonstrates an infinate loop in exception handling that results from RA as being undefined at the start of program execution. This patch uses a CFI directive to mark RA as undefined, which allows the backtrace to terminate. There is no explicit glibc test case for this, but I thought I'd send the patch out anyway as it is fixing a bug. I'd like to have a test before committing this. I have not even compiled this. I will do that before committing... :) Thanks to Aurelian Jarno for finding the bug, and Jim Wilson for fixing it. ChangeLog 2018-05-18 Palmer Dabbelt <palmer@sifive.com> PR 23125 * sysdeps/riscv/start.S (ENTRY_POINT): Mark ra as undefined so backtraces can terminate if they reach this point. --- sysdeps/riscv/start.S | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sysdeps/riscv/start.S b/sysdeps/riscv/start.S index 4635ddb5eb8c..93a80bc4a760 100644 --- a/sysdeps/riscv/start.S +++ b/sysdeps/riscv/start.S @@ -43,6 +43,8 @@ __libc_start_main wants this in a5. */ ENTRY (ENTRY_POINT) + /* Mark ra as undefined in order to stop unwinding here! */ + cfi_undefined (ra) call .Lload_gp mv a5, a0 /* rtld_fini. */ /* main may be in a shared library. */ -- 2.16.1
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |