[PATCH] D13104: Mips - Mark the section .eh_frame as writeable for pic
Logan Chien via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 23 18:16:12 PDT 2015
logan added a comment.
In http://reviews.llvm.org/D13104#251958, @dsanders wrote:
> It was Android that asked us to get read-only .eh_frame working properly for Mips so I might have two opposing requests from the same project.
I guess that you got this impression due to http://reviews.llvm.org/rL209907. I remembered that when I was writing that patch, some (old) versions of Android libc can't relocate the read only sections properly. As a result, we have use DW_EH_PE_indirect to avoid dynamic relocations in .eh_frame sections (like what gcc did.) I was only testing `clang+ld.bfd` and `clang+ld.gold` at the time.
If I read this change correctly, it seems that it is trying to workaround another issue. For unknown reasons, the compiler is generating some ABS relocations. `ld.bfd` and `ld.gold` will statically relocate these symbols. However, `ld.mcld` will leave them unchanged and result in the warnings or `dlopen()` failures on MIPS64. This change goes **a step further** simply by marking this section as writable. I think this will work but suboptimal.
 IIRC, it was Android 3.1 or 4.0. BTW, the newer Android libc (>4.1?) fixed the issue so that some relocation can be applied to read only sections; however, it is discouraged to have dynamic relocations on read only sections because higher memory usage.
More information about the llvm-commits