From d35b5008f79e6a2f2142c0c3b87f9780779e1d86 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 20 Nov 2002 10:41:04 +0000 Subject: Patch from Stefan Allius: - Invert all FORCE_SHAREABLE_TEXT_SEGMENTS checks. - Define FORCE_SHAREABLE_TEXT_SEGMENTS in the Makefile, so it can be configured by the config system. - linuxelf.h inspects that we don't combine FORCE_SHAREABLE_TEXT_SEGMENTS and SVR4_BUGCOMPAT - Add a new config option for FORCE_SHAREABLE_TEXT_SEGMENTS --- ldso/ldso/Makefile | 3 +++ ldso/ldso/dl-elf.c | 2 +- ldso/ldso/ldso.c | 10 +++------- ldso/ldso/linuxelf.h | 10 +++++++++- ldso/ldso/readelflib1.c | 2 +- 5 files changed, 17 insertions(+), 10 deletions(-) (limited to 'ldso') diff --git a/ldso/ldso/Makefile b/ldso/ldso/Makefile index 53c3c6385..13063616f 100644 --- a/ldso/ldso/Makefile +++ b/ldso/ldso/Makefile @@ -55,6 +55,9 @@ ifeq ($(strip $(SUPPORT_LD_DEBUG_EARLY)),y) XXFLAGS+=-D__SUPPORT_LD_DEBUG_EARLY__ endif +ifeq ($(strip $(FORCE_SHAREABLE_TEXT_SEGMENTS)),y) +XXFLAGS+=-DFORCE_SHAREABLE_TEXT_SEGMENTS +endif all: lib diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index b259da401..7a0e3fcef 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -573,7 +573,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, back again later. */ if (dynamic_info[DT_TEXTREL]) { -#ifdef FORCE_SHAREABLE_TEXT_SEGMENTS +#ifndef FORCE_SHAREABLE_TEXT_SEGMENTS ppnt = (elf_phdr *)(intptr_t) & header[epnt->e_phoff]; for (i = 0; i < epnt->e_phnum; i++, ppnt++) { if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index c83c5cbb2..01ec298c2 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -30,10 +30,6 @@ * SUCH DAMAGE. */ -/* Enable mprotect protection munging. ARM and MIPS Linux needs this - * it seems, so leave this enabled by default */ -#define FORCE_SHAREABLE_TEXT_SEGMENTS - // Support a list of library preloads in /etc/ld.so.preload //#define SUPPORT_LDSO_PRELOAD_FILE @@ -434,7 +430,7 @@ LD_BOOT(unsigned long args) } app_tpnt->dynamic_info[dpnt->d_tag] = dpnt->d_un.d_val; if (dpnt->d_tag == DT_DEBUG) -#ifndef FORCE_SHAREABLE_TEXT_SEGMENTS +#ifdef FORCE_SHAREABLE_TEXT_SEGMENTS dpnt->d_un.d_val = (unsigned long) debug_addr; #else dpnt_debug = dpnt; @@ -455,7 +451,7 @@ LD_BOOT(unsigned long args) tpnt->elf_buckets = hash_addr; hash_addr += tpnt->nbucket; -#ifdef FORCE_SHAREABLE_TEXT_SEGMENTS +#ifndef FORCE_SHAREABLE_TEXT_SEGMENTS /* Ugly, ugly. We need to call mprotect to change the protection of the text pages so that we can do the dynamic linking. We can set the protection back again once we are done */ @@ -1186,7 +1182,7 @@ static void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *a *_dl_envp = (unsigned long) envp; } -#ifdef FORCE_SHAREABLE_TEXT_SEGMENTS +#ifndef FORCE_SHAREABLE_TEXT_SEGMENTS { unsigned int j; elf_phdr *myppnt; diff --git a/ldso/ldso/linuxelf.h b/ldso/ldso/linuxelf.h index 5a6e8b85f..26d3937c4 100644 --- a/ldso/ldso/linuxelf.h +++ b/ldso/ldso/linuxelf.h @@ -31,7 +31,15 @@ extern int _dl_linux_resolve(void); #ifndef SVR4_BUGCOMPAT -#define SVR4_BUGCOMPAT 1 +# ifdef FORCE_SHAREABLE_TEXT_SEGMENTS +# define SVR4_BUGCOMPAT 0 +# else +# define SVR4_BUGCOMPAT 1 +# endif +#else +# ifdef FORCE_SHAREABLE_TEXT_SEGMENTS +# error option SVR4_BUGCOMPAT combined with option FORCE_SHAREABLE_TEXT_SEGMENTS makes no sense +# endif #endif #if ELF_CLASS == ELFCLASS32 diff --git a/ldso/ldso/readelflib1.c b/ldso/ldso/readelflib1.c index b259da401..7a0e3fcef 100644 --- a/ldso/ldso/readelflib1.c +++ b/ldso/ldso/readelflib1.c @@ -573,7 +573,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, back again later. */ if (dynamic_info[DT_TEXTREL]) { -#ifdef FORCE_SHAREABLE_TEXT_SEGMENTS +#ifndef FORCE_SHAREABLE_TEXT_SEGMENTS ppnt = (elf_phdr *)(intptr_t) & header[epnt->e_phoff]; for (i = 0; i < epnt->e_phnum; i++, ppnt++) { if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) -- cgit v1.2.3