Hello, I was trying to run gcc testsuite for xtensa-uclinux-uclibc target with bFLT executables and found that C++ exception handling doesn't work.
The FDE structure that associates a range of code addresses with LSDA structure that describes how C++ exception thrown from that range should be handled is located in .eh_frame section that ends up with data in the bFLT image, but it contains an offset of the beginning of the code range relatively to itself. The issue occurs because the relative position of text and data loaded from the bFLT image doesn't match their relative position in the ELF image, which breaks relative references from data to code. I looked at the bFLT loader code in the linux kernel and it appears that this is always the case: the relative position of the text and data is never preserved by the loader, as it reserves space for data segment pointers for libraries between them. I also looked at how relocations are applied and my understanding is that only absolute address references may be relocated, there's no way to relocate a field that represents offset from data to code. Given that I've got a couple of questions: - the only way that I see to fix that without changing bFLT loader is to build everything as non-PIC. Is that correct? - why couldn't relative position of the text and data loaded from bFLT executable be preserved? -- Thanks. -- Max _______________________________________________ uClinux-dev mailing list uClinux-dev@uclinux.org http://mailman.uclinux.org/mailman/listinfo/uclinux-dev This message was resent by uclinux-dev@uclinux.org To unsubscribe see: http://mailman.uclinux.org/mailman/options/uclinux-dev