diff options
author | obrien <obrien@FreeBSD.org> | 2001-08-17 22:54:26 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2001-08-17 22:54:26 +0000 |
commit | d40943f1a463be64380e0cd248731d4b4930366e (patch) | |
tree | 3d32ec298ff10961525f1e74850ecf83c865a3f0 /contrib/gcc/config/xm-gnu.h | |
parent | f1dd0e9302326c7f7b4f08da7eeeb6c0355e3a76 (diff) | |
download | FreeBSD-src-d40943f1a463be64380e0cd248731d4b4930366e.zip FreeBSD-src-d40943f1a463be64380e0cd248731d4b4930366e.tar.gz |
Re-initialize gp after a jsr.
When rtld runs the .fini section in a shared lib (C++), the code in
question from .../contrib/gdb/config/alpha/crtbegin.asm first calls
__do_globals_dtors_aux and then __do_frame_takedown. Unfortunately, the
value of gp after a jsr is undefined and in this case had changed from before
the call, probably as a result of calling code in some other shared library.
The normal calling convention for alpha is to re-initialize gp using
'ldgp gp,0(ra)' after a jsr instruction but in this case no such
re-initialization is done. This leads to a bogus value being read for the
address of __do_frame_takedown and a quick segfault.
Submitted by: dfr
Obtained from: GCC 3.0
Diffstat (limited to 'contrib/gcc/config/xm-gnu.h')
0 files changed, 0 insertions, 0 deletions