diff --git a/src/stub/Makefile b/src/stub/Makefile index fd4b6d93..7372fbc1 100644 --- a/src/stub/Makefile +++ b/src/stub/Makefile @@ -97,17 +97,17 @@ CC_LINUX_I386_GCC295 += -Os -fno-omit-frame-pointer CC_LINUX_I386_GCC295 += -malign-functions=0 -malign-jumps=0 -malign-loops=0 CC_LINUX_I386_GCC295 += -Werror -# gcc 3.4.0 (fold_*.bin: 1482 / 931 / 1173) -CC_LINUX_I386_GCC340 = gcc-3.4 -march=i386 -mtune=k6 -fno-exceptions -MMD -CC_LINUX_I386_GCC340 += -Os -fno-omit-frame-pointer -CC_LINUX_I386_GCC340 += -momit-leaf-frame-pointer -CC_LINUX_I386_GCC340 += -fno-align-functions -fno-align-jumps -fno-align-labels -fno-align-loops -##CC_LINUX_I386_GCC340 += -fweb -CC_LINUX_I386_GCC340 += -Werror +# gcc 3.4.0 (fold_*.bin: 1628 / 931 / 1210) +CC_LINUX_I386_GCC34 = gcc-3.4.0 -march=i386 -mtune=k6 -fno-exceptions -MMD +CC_LINUX_I386_GCC34 += -Os -fno-omit-frame-pointer +CC_LINUX_I386_GCC34 += -momit-leaf-frame-pointer +CC_LINUX_I386_GCC34 += -fno-align-functions -fno-align-jumps -fno-align-labels -fno-align-loops +##CC_LINUX_I386_GCC34 += -fweb +CC_LINUX_I386_GCC34 += -Werror CC_LINUX_I386 = $(CC_LINUX_I386_GCC272) CC_LINUX_I386 = $(CC_LINUX_I386_GCC295) -CC_LINUX_I386 = $(CC_LINUX_I386_GCC340) +CC_LINUX_I386 = $(CC_LINUX_I386_GCC34) CC_LINUX_I386 += -nostdinc CC_LINUX_I386 += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings CC_LINUX_I386 += -funsigned-char diff --git a/src/stub/l_lx_elf.c b/src/stub/l_lx_elf.c index 796589f2..1f6d9b71 100644 --- a/src/stub/l_lx_elf.c +++ b/src/stub/l_lx_elf.c @@ -241,17 +241,12 @@ auxv_up(Elf32_auxv_t *av, int const type, unsigned const value) ((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28)) #define EXP8(y) \ ((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0) - -static inline unsigned -__attribute__((regparm(1), stdcall)) -pf_to_prot(unsigned const pf) -{ - return (PROT_READ|PROT_WRITE|PROT_EXEC) & ( - ( (REP8(PROT_EXEC ) & EXP8(PF_X)) - |(REP8(PROT_READ ) & EXP8(PF_R)) - |(REP8(PROT_WRITE) & EXP8(PF_W)) - ) >> ((pf & (PF_R|PF_W|PF_X))<<2) ); -} +#define PF_TO_PROT(pf) \ + ((PROT_READ|PROT_WRITE|PROT_EXEC) & ( \ + ( (REP8(PROT_EXEC ) & EXP8(PF_X)) \ + |(REP8(PROT_READ ) & EXP8(PF_R)) \ + |(REP8(PROT_WRITE) & EXP8(PF_W)) \ + ) >> ((pf & (PF_R|PF_W|PF_X))<<2) )) // Find convex hull of PT_LOAD (the minimal interval which covers all PT_LOAD), @@ -300,7 +295,7 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi, auxv_up(av, AT_PHDR, phdr->p_vaddr + reloc); } else if (PT_LOAD==phdr->p_type) { - unsigned const prot = pf_to_prot(phdr->p_flags); + unsigned const prot = PF_TO_PROT(phdr->p_flags); struct Extent xo; size_t mlen = xo.size = phdr->p_filesz; char *addr = xo.buf = (char *)phdr->p_vaddr; diff --git a/src/stub/l_lx_sh.c b/src/stub/l_lx_sh.c index d9cbe598..2f6e8b54 100644 --- a/src/stub/l_lx_sh.c +++ b/src/stub/l_lx_sh.c @@ -172,16 +172,11 @@ bzero(char *p, size_t len) ((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28)) #define EXP8(y) \ ((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0) - -static inline unsigned -__attribute__((regparm(1), stdcall)) -pf_to_prot(unsigned const pf) -{ - return 7 & (( (REP8(PROT_EXEC ) & EXP8(PF_X)) - |(REP8(PROT_READ ) & EXP8(PF_R)) - |(REP8(PROT_WRITE) & EXP8(PF_W)) ) - >> ((pf & (PF_R|PF_W|PF_X))<<2) ); -} +#define PF_TO_PROT(pf) \ + (7 & (( (REP8(PROT_EXEC ) & EXP8(PF_X)) \ + |(REP8(PROT_READ ) & EXP8(PF_R)) \ + |(REP8(PROT_WRITE) & EXP8(PF_W)) ) \ + >> ((pf & (PF_R|PF_W|PF_X))<<2) )) // Find convex hull of PT_LOAD (the minimal interval which covers all PT_LOAD), @@ -249,7 +244,7 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, Elf32_auxv_t *const av) av[AT_PHDR -1].a_un.a_val = phdr->p_vaddr; } else if (PT_LOAD==phdr->p_type) { - unsigned const prot = pf_to_prot(phdr->p_flags); + unsigned const prot = PF_TO_PROT(phdr->p_flags); struct Extent xo; size_t mlen = xo.size = phdr->p_filesz; char *addr = xo.buf = (char *)phdr->p_vaddr;