summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/powerpc
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2011-12-17 16:20:27 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2011-12-17 16:20:27 +0000
commitf8b4a766de2be2a507d2dd0f699a5b2926c67df8 (patch)
tree6afd24f0b93d40c991c7bd1103fd2ce2f1851472 /libexec/rtld-elf/powerpc
parent270e7ed83a884df4d028c42cfd58a5ec4dc10c8e (diff)
downloadFreeBSD-src-f8b4a766de2be2a507d2dd0f699a5b2926c67df8.zip
FreeBSD-src-f8b4a766de2be2a507d2dd0f699a5b2926c67df8.tar.gz
Additional icache paranoia: non-PLT relocations can modify the text segment.
It is then important to make sure the icache is synchronized again to prevent (rare) random seg faults and illegal instructions. MFC after: 3 days
Diffstat (limited to 'libexec/rtld-elf/powerpc')
-rw-r--r--libexec/rtld-elf/powerpc/reloc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libexec/rtld-elf/powerpc/reloc.c b/libexec/rtld-elf/powerpc/reloc.c
index c8967b6..d0637f4 100644
--- a/libexec/rtld-elf/powerpc/reloc.c
+++ b/libexec/rtld-elf/powerpc/reloc.c
@@ -317,6 +317,10 @@ reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld, RtldLockState *lockstate)
done:
if (cache != NULL)
free(cache);
+
+ /* Synchronize icache for text seg in case we made any changes */
+ __syncicache(obj->mapbase, obj->textsize);
+
return (r);
}
OpenPOWER on IntegriCloud