diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2003-02-15 00:30:17 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2003-02-15 00:30:17 +0000 |
commit | d9e1f5a7828cb57f270071042410892e43afe214 (patch) | |
tree | 8febebb6a6d7a055adc3e448d6a88d5fc2b9e491 /libexec/ld.so | |
parent | 0fa9698a9a8355f9faa5eb55e8c91c6ebffd167c (diff) |
Do not call mprotect to enable writing for sections which normally are
writable. Idea taken from alpha version. Saves many mprotect syscalls.
Diffstat (limited to 'libexec/ld.so')
-rw-r--r-- | libexec/ld.so/powerpc/rtld_machine.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libexec/ld.so/powerpc/rtld_machine.c b/libexec/ld.so/powerpc/rtld_machine.c index db8093904f8..8c5b1e89535 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.22 2003/02/02 16:57:58 deraadt Exp $ */ +/* $OpenBSD: rtld_machine.c,v 1.23 2003/02/15 00:30:16 drahn Exp $ */ /* * Copyright (c) 1999 Dale Rahn @@ -170,8 +170,9 @@ _dl_printf("object relocation size %x, numrela %x\n", */ load_list = object->load_list; while (load_list != NULL) { - _dl_mprotect(load_list->start, load_list->size, - load_list->prot|PROT_WRITE); + if ((load_list->prot & PROT_WRITE) == 0) + _dl_mprotect(load_list->start, load_list->size, + load_list->prot|PROT_WRITE); load_list = load_list->next; } @@ -431,7 +432,9 @@ _dl_printf(" found other symbol at %x size %d\n", } load_list = object->load_list; while (load_list != NULL) { - _dl_mprotect(load_list->start, load_list->size, load_list->prot); + if ((load_list->prot & PROT_WRITE) == 0) + _dl_mprotect(load_list->start, load_list->size, + load_list->prot); load_list = load_list->next; } return(fails); |