diff options
author | Kaz Kojima <kkojima@rr.iij4u.or.jp> | 2007-11-01 23:29:37 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-11-01 23:29:37 -0400 |
commit | f38c5a696a1e775c70d8764b1b9c1a4e267448d3 (patch) | |
tree | 45d25babb1ce72b04d65b705c5d23d295b26eb7a | |
parent | 236b1957447018d53cfd24ec774995c44e18998d (diff) |
sh: Terminate .eh_frame in VDSO with a 4-byte 0.
It's assumed that .eh_frame is terminated with 4-byte 0 in shared
libraries and executable. It seems to be the case for VDSOs too.
Without this terminator, I saw failures when unwinding from VDSO,
though I don't know how other architectures handle this issue.
For the normal libs, crtendS.o gives this terminator. We can use
such terminating objects. Or we can add a 4-byte 0 with modifying
the linker script like as the patch below.
Signed-off-by: Kaz Kojima <kkojima@rr.iij4u.or.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/kernel/vsyscall/vsyscall.lds.S | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/sh/kernel/vsyscall/vsyscall.lds.S b/arch/sh/kernel/vsyscall/vsyscall.lds.S index c9bf2af35d35..6d59ee7c23dd 100644 --- a/arch/sh/kernel/vsyscall/vsyscall.lds.S +++ b/arch/sh/kernel/vsyscall/vsyscall.lds.S | |||
@@ -38,7 +38,10 @@ SECTIONS | |||
38 | .text : { *(.text) } :text =0x90909090 | 38 | .text : { *(.text) } :text =0x90909090 |
39 | .note : { *(.note.*) } :text :note | 39 | .note : { *(.note.*) } :text :note |
40 | .eh_frame_hdr : { *(.eh_frame_hdr ) } :text :eh_frame_hdr | 40 | .eh_frame_hdr : { *(.eh_frame_hdr ) } :text :eh_frame_hdr |
41 | .eh_frame : { KEEP (*(.eh_frame)) } :text | 41 | .eh_frame : { |
42 | KEEP (*(.eh_frame)) | ||
43 | LONG (0) | ||
44 | } :text | ||
42 | .dynamic : { *(.dynamic) } :text :dynamic | 45 | .dynamic : { *(.dynamic) } :text :dynamic |
43 | .useless : { | 46 | .useless : { |
44 | *(.got.plt) *(.got) | 47 | *(.got.plt) *(.got) |