diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2003-01-24 00:43:30 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2003-01-24 00:43:30 +0000 |
commit | 383172fe7e7841f8715f672fc2535f16d3448d51 (patch) | |
tree | 125a017202ec78941b1e8240dda4cbeb5347bbe4 /libexec | |
parent | 9f38c907e9dbedb296f69f421c5f1c25f8a02907 (diff) |
Flush the blrl instruction from the instruction cache if the GOT tag is
present. Fixes illegal instruction problems seen the last few days
tested by myself and matthieu@
Diffstat (limited to 'libexec')
-rw-r--r-- | libexec/ld.so/powerpc/rtld_machine.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/ld.so/powerpc/rtld_machine.c b/libexec/ld.so/powerpc/rtld_machine.c index 5e44c314f04..8fc17624352 100644 --- a/libexec/ld.so/powerpc/rtld_machine.c +++ b/libexec/ld.so/powerpc/rtld_machine.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rtld_machine.c,v 1.19 2002/12/18 19:20:02 drahn Exp $ */ +/* $OpenBSD: rtld_machine.c,v 1.20 2003/01/24 00:43:29 drahn Exp $ */ /* * Copyright (c) 1999 Dale Rahn @@ -45,6 +45,7 @@ #include "archdep.h" #include "resolve.h" +void _dl_syncicache(char *from, size_t len); /* relocation bits */ #define HA(x) (((Elf_Addr)(x) >> 16) + (((Elf_Addr)(x) & 0x00008000) >> 15)) @@ -517,6 +518,7 @@ _dl_md_reloc_got(elf_object_t *object, int lazy) if (object->got_addr != NULL && object->got_size != 0) _dl_mprotect((void*)object->got_addr, object->got_size, PROT_READ|PROT_EXEC); /* only PPC is PROT_EXE */ + _dl_syncicache((void*)object->got_addr, 4); if (object->plt_addr != NULL && object->plt_size != 0) _dl_mprotect((void*)object->plt_addr, object->plt_size, PROT_READ|PROT_EXEC); |