sh: Terminate .eh_frame in VDSO with a 4-byte 0.
authorKaz Kojima <kkojima@rr.iij4u.or.jp>
Fri, 2 Nov 2007 03:29:37 +0000 (12:29 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 2 Nov 2007 03:29:37 +0000 (12:29 +0900)
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>
arch/sh/kernel/vsyscall/vsyscall.lds.S

index c9bf2af35d359550238ea83cf1de05246875eb80..6d59ee7c23dd52ed27e199d8e2597f1e1fc3f26b 100644 (file)
@@ -38,7 +38,10 @@ SECTIONS
        .text           : { *(.text) }                  :text   =0x90909090
        .note           : { *(.note.*) }                :text   :note
        .eh_frame_hdr   : { *(.eh_frame_hdr ) }         :text   :eh_frame_hdr
-       .eh_frame       : { KEEP (*(.eh_frame)) }       :text
+       .eh_frame       : {
+               KEEP (*(.eh_frame))
+               LONG (0)
+       }                                               :text
        .dynamic        : { *(.dynamic) }               :text   :dynamic
        .useless        : {
              *(.got.plt) *(.got)