From: Kaz K. <kk...@rr...> - 2007-06-16 22:23:58
|
The 2nd one is about VDSO. 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. BTW, I've found that SH boards set CONFIG_VSYSCALL=y as default. Brave enough! :-) Regards, kaz --- GIT/linux-2.6/arch/sh/kernel/vsyscall/vsyscall.lds.S 2006-12-02 20:23:20.000000000 +0900 +++ linux-2.6.22-rc4/arch/sh/kernel/vsyscall/vsyscall.lds.S 2007-06-15 18:06:38.000000000 +0900 @@ -36,7 +36,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) |