diff options
author | Ned Ludd <solar@gentoo.org> | 2003-11-16 00:21:02 +0000 |
---|---|---|
committer | Ned Ludd <solar@gentoo.org> | 2003-11-16 00:21:02 +0000 |
commit | 20ad652dac45681e2db70a8a2e51d44c15f15143 (patch) | |
tree | 42dc742ed7ae6aa48e5317e42b58080abb82f821 /dev-libs/uclibc | |
parent | version bump, 0.9.22 was braindead.. In this release we continue support for ... (diff) | |
download | historical-20ad652dac45681e2db70a8a2e51d44c15f15143.tar.gz historical-20ad652dac45681e2db70a8a2e51d44c15f15143.tar.bz2 historical-20ad652dac45681e2db70a8a2e51d44c15f15143.zip |
version bump, 0.9.22 was braindead.. In this release we continue support for PaX etdyn executabes thanks to the PaX Team and Peter S. Mazinger as well as add a small patch that was submited to the uClibc by Rob McMullen
Diffstat (limited to 'dev-libs/uclibc')
-rw-r--r-- | dev-libs/uclibc/Manifest | 4 | ||||
-rw-r--r-- | dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-etdyn.patch | 169 | ||||
-rw-r--r-- | dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-flipturn.patch | 43 | ||||
-rw-r--r-- | dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-pax.patch | 81 | ||||
-rw-r--r-- | dev-libs/uclibc/files/digest-uclibc-0.9.23 | 1 | ||||
-rw-r--r-- | dev-libs/uclibc/uclibc-0.9.23.ebuild | 55 |
6 files changed, 351 insertions, 2 deletions
diff --git a/dev-libs/uclibc/Manifest b/dev-libs/uclibc/Manifest index 864af9bee1d2..91561263419b 100644 --- a/dev-libs/uclibc/Manifest +++ b/dev-libs/uclibc/Manifest @@ -1,7 +1,7 @@ -MD5 ba5c40cf4aa3386ead8def218e308a35 ChangeLog 1838 +MD5 77cb935d658335a2a24e5e22aaf459e3 ChangeLog 2279 MD5 d376f22663da6a652b88a001974e1ee4 uclibc-0.9.19.ebuild 1003 MD5 41a8b11a4a34ad8ec8f82e77c2285a9c uclibc-0.9.20.ebuild 1072 -MD5 e8584f2f39f0a601140dc90266456cbd uclibc-0.9.23.ebuild 1396 +MD5 a142a3231675fe38e60530e5204df538 uclibc-0.9.23.ebuild 1396 MD5 9d7757d79b70fde524b8ce1bfbe2c201 metadata.xml 987 MD5 751009ae55f3a2412b3d751b82c94c64 uclibc-0.9.22.ebuild 1345 MD5 622995e1333dce9b63473e0655f991e5 uclibc-0.9.21.ebuild 1083 diff --git a/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-etdyn.patch b/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-etdyn.patch new file mode 100644 index 000000000000..f0e00371b63a --- /dev/null +++ b/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-etdyn.patch @@ -0,0 +1,169 @@ +diff -Nru uClibc-0.9.23/libc/misc/internals/Makefile uClibc-0.9.23-etdyn/libc/misc/internals/Makefile +--- uClibc-0.9.23/libc/misc/internals/Makefile 2003-10-18 06:18:58.000000000 -0400 ++++ uClibc-0.9.23-etdyn/libc/misc/internals/Makefile 2003-11-15 18:56:41.000000000 -0500 +@@ -47,6 +47,7 @@ + interp.o: interp.c + $(CC) $(CFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o ++ $(INSTALL) $@ $(TOPDIR)lib/ + + $(COBJS): %.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ +diff -Nru uClibc-0.9.23/libc/sysdeps/linux/i386/Makefile uClibc-0.9.23-etdyn/libc/sysdeps/linux/i386/Makefile +--- uClibc-0.9.23/libc/sysdeps/linux/i386/Makefile 2003-11-08 16:21:19.000000000 -0500 ++++ uClibc-0.9.23-etdyn/libc/sysdeps/linux/i386/Makefile 2003-11-15 18:56:41.000000000 -0500 +@@ -25,6 +25,9 @@ + CRT0_DEPS=gmon-start.S + CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o + ++CRT0S_SRC = crt0S.S ++CRT0S_OBJ = crt0S.o crt1S.o ++ + SSRC=__longjmp.S vfork.S clone.S setjmp.S bsd-setjmp.S \ + bsd-_setjmp.S syscall.S mmap64.S + ifeq ($(strip $(UCLIBC_PROFILING)),y) +@@ -49,14 +52,23 @@ + + $(LIBC): ar-target + +-ar-target: $(OBJS) $(CRT0_OBJ) $(CTOR_TARGETS) ++ar-target: $(OBJS) $(CRT0_OBJ) $(CTOR_TARGETS) $(CRT0S_OBJ) + $(AR) $(ARFLAGS) $(LIBC) $(OBJS) + cp $(CRT0_OBJ) $(TOPDIR)lib/ ++ifneq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++ cp crt0S.o $(TOPDIR)lib/crt1S.o ++else ++ cp crt1S.o $(TOPDIR)lib/ ++endif + + $(CRT0_OBJ): $(CRT0_SRC) + $(CC) $(CFLAGS) -DL_$* $< -c -o $*.o + $(STRIPTOOL) -x -R .note -R .comment $*.o + ++$(CRT0S_OBJ): $(CRT0S_SRC) ++ $(CC) $(CFLAGS) -fPIC -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ + $(SOBJS): %.o : %.S + $(CC) $(CFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o +diff -Nru uClibc-0.9.23/libc/sysdeps/linux/i386/crt0S.S uClibc-0.9.23-etdyn/libc/sysdeps/linux/i386/crt0S.S +--- uClibc-0.9.23/libc/sysdeps/linux/i386/crt0S.S 1969-12-31 19:00:00.000000000 -0500 ++++ uClibc-0.9.23-etdyn/libc/sysdeps/linux/i386/crt0S.S 2003-11-15 19:01:04.000000000 -0500 +@@ -0,0 +1,116 @@ ++/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. ++This file is part of the GNU C Library. ++ ++The GNU C Library is free software; you can redistribute it and/or ++modify it under the terms of the GNU Library General Public License as ++published by the Free Software Foundation; either version 2 of the ++License, or (at your option) any later version. ++ ++The GNU C Library is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++Library General Public License for more details. ++ ++You should have received a copy of the GNU Library General Public ++License along with the GNU C Library; see the file COPYING.LIB. If ++not, write to the Free Software Foundation, Inc., 675 Mass Ave, ++Cambridge, MA 02139, USA. */ ++ ++ ++/* Based on the code from GNU libc, but hacked up by John Beppu and Erik Andersen */ ++/* crt0.S adapted by Pax Team for ET_DYN binaries */ ++ ++/* ++ When we enter this piece of code, the program stack looks like this: ++ argc argument counter (integer) ++ argv[0] program name (pointer) ++ argv[1...N] program args (pointers) ++ argv[argc-1] end of args (integer) ++ NULL ++ env[0...N] environment variables (pointers) ++ NULL ++*/ ++ ++#include <features.h> ++ ++.text ++ .align 4 ++ ++ .global _start ++ .type _start,%function ++#if defined L_crt0S || ! defined __UCLIBC_CTOR_DTOR__ ++ .type __uClibc_main,%function ++#else ++ .weak _init ++ .weak _fini ++ .type __uClibc_start_main,%function ++#endif ++/* Stick in a dummy reference to main(), so that if an application ++ * is linking when the main() function is in a static library (.a) ++ * we can be sure that main() actually gets linked in */ ++ .type main,%function ++ ++_start: ++ /* locate the start of the environment variables */ ++ popl %ecx /* Store argc into %ecx */ ++ movl %esp,%ebx /* Store argv into ebx */ ++ movl %esp,%eax /* Store argv into eax as well*/ ++ movl %ecx,%edx /* Stick argc into %edx so we can do some math in a sec */ ++ leal 4(%eax,%edx,4),%eax ++ ++ /* [ register layout ] ++ ++ sizeof(char*) == 4 ++ %ecx = argc ; 0(esp) ++ %ebx = argv ; 4(esp) ++ %eax = env ; argv + (argc * 4) + 4 ++ */ ++ ++ /* Set up an invalid (NULL return address, NULL frame pointer) ++ callers stack frame so anybody unrolling the stack knows where ++ to stop */ ++ xorl %ebp,%ebp /* NULL */ ++ pushl %ebp /* callers %cs */ ++ pushl %ebp /* callers %eip (return address) */ ++ pushl %ebp /* callers %ebp (frame pointer) */ ++ movl %esp,%ebp /* mark callers stack frame as invalid */ ++ ++ call .L0 ++.L0: ++ pop %edx ++ addl $_GLOBAL_OFFSET_TABLE_+[.-.L0],%edx ++ ++#if (defined L_crt1S || defined L_gcrt1 ) && defined __UCLIBC_CTOR_DTOR__ ++ /* Push .init and .fini arguments to __uClibc_start_main() on the stack */ ++ pushl _fini@GOT(%edx) ++ pushl _init@GOT(%edx) ++ ++ /* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */ ++ pushl %eax /* Environment pointer */ ++ pushl %ebx /* Argument pointer */ ++ pushl %ecx /* And the argument count */ ++ ++ /* Ok, now run uClibc's main() -- shouldn't return */ ++ pushl .hlt@GOT(%edx) ++ pushl __uClibc_start_main@GOT(%edx) ++ ret ++#else ++ /* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */ ++ pushl %eax /* Environment pointer */ ++ pushl %ebx /* Argument pointer */ ++ pushl %ecx /* And the argument count */ ++ ++ pushl .hlt@GOT(%edx) ++ pushl __uClibc_main@GOT(%edx) ++ ret ++#endif ++ ++ /* Crash if somehow `exit' returns anyways. */ ++ hlt ++.size _start,.-_start ++ ++/* We disable profiling in crt0S.S, because it introduces text relocations. ++#if defined L_gcrt1 && defined __UCLIBC_PROFILING__ ++# include "./gmon-start.S" ++#endif ++*/ diff --git a/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-flipturn.patch b/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-flipturn.patch new file mode 100644 index 000000000000..b58f8cb13db9 --- /dev/null +++ b/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-flipturn.patch @@ -0,0 +1,43 @@ +diff -ur -x '*.[oa]' /tmp/uClibc-0.9.23/libc/misc/gnu/obstack.c /opt/src/buildroot/build_i386/uClibc-0.9.23/libc/misc/gnu/obstack.c +--- libc/misc/gnu/obstack.c 2003-09-03 03:23:15.000000000 -0400 ++++ /opt/src/buildroot/build_i386/uClibc-0.9.23/libc/misc/gnu/obstack.c 2003-11-14 14:06:19.000000000 -0500 +@@ -466,6 +466,7 @@ + /* # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC */ + # ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ + # include <libintl.h> ++# include <locale.h> + # ifndef _ + # define _(Str) __dcgettext (NULL, Str, LC_MESSAGES) + # endif +diff -ur -x '*.[oa]' /tmp/uClibc-0.9.23/libc/misc/wchar/Makefile /opt/src/buildroot/build_i386/uClibc-0.9.23/libc/misc/wchar/Makefile +--- libc/misc/wchar/Makefile 2003-11-08 03:06:04.000000000 -0500 ++++ /opt/src/buildroot/build_i386/uClibc-0.9.23/libc/misc/wchar/Makefile 2003-11-15 07:34:30.000000000 -0500 +@@ -30,7 +30,7 @@ + __mbsnrtowcs.o __wcsnrtombs.o wcwidth.o wcswidth.o + + #ifeq ($(UCLIBC_HAS_LOCALE),y) +-# MOBJ1 += iconv.o ++ MOBJ1 += iconv.o + #endif + + MSRC2= wstdio.c +@@ -67,3 +67,6 @@ + clean: + $(RM) *.[oa] *~ core #iconv.target + ++ ++.PHONY: print-% ++print-%: ; @ echo $* = $($*) +diff -ur -x '*.[oa]' /tmp/uClibc-0.9.23/utils/ldconfig.c /opt/src/buildroot/build_i386/uClibc-0.9.23/utils/ldconfig.c +--- utils/ldconfig.c 2003-11-06 17:38:46.000000000 -0500 ++++ /opt/src/buildroot/build_i386/uClibc-0.9.23/utils/ldconfig.c 2003-11-14 19:00:30.000000000 -0500 +@@ -189,8 +189,7 @@ + char buff[4096]; + + /* see if name is of the form libZ.so* */ +- if ((strncmp(name, "lib", 3) == 0 || strncmp(name, "ld-", 3) == 0) && \ +- name[strlen(name)-1] != '~' && (cp = strstr(name, ".so"))) ++ if (name[strlen(name)-1] != '~' && (cp = strstr(name, ".so"))) + { + /* find the start of the Vminor part, if any */ + if (cp[3] == '.' && (cp2 = strchr(cp + 4, '.'))) diff --git a/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-pax.patch b/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-pax.patch new file mode 100644 index 000000000000..be6600b8cb83 --- /dev/null +++ b/dev-libs/uclibc/files/0.9.23/uClibc-0.9.23-pax.patch @@ -0,0 +1,81 @@ +diff -Nurp -x sysdeps -x internals -x '*.a' -x '*swp' -x '*.so*' -x '*.o' -x '*progname*' -x include -x '*config*' uClibc-0.9.23/ldso/ldso/ldso.c uClibc-0.9.23-pax/ldso/ldso/ldso.c +--- uClibc-0.9.23/ldso/ldso/ldso.c 2003-10-04 19:31:22.000000000 +0200 ++++ uClibc-0.9.23-pax/ldso/ldso/ldso.c 2003-11-14 17:32:00.000000000 +0100 +@@ -371,6 +371,26 @@ LD_BOOT(unsigned long args) + app_tpnt = LD_MALLOC(sizeof(struct elf_resolve)); + _dl_memset(app_tpnt, 0, sizeof(struct elf_resolve)); + ++ /* Find the runtime load address of the main executable, this may be ++ * different from what the ELF header says for ET_DYN/PIE executables. ++ */ ++ { ++ ElfW(Phdr) *ppnt; ++ int i; ++ ++ ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr; ++ for (i = 0; i < auxvt[AT_PHNUM].a_un.a_val; i++, ppnt++) ++ if (ppnt->p_type == PT_PHDR) { ++ app_tpnt->loadaddr = (ElfW(Addr)) (auxvt[AT_PHDR].a_un.a_val - ppnt->p_vaddr); ++ break; ++ } ++ } ++ ++#ifdef __SUPPORT_LD_DEBUG_EARLY__ ++ SEND_STDERR("app_tpnt->loadaddr="); ++ SEND_ADDRESS_STDERR(app_tpnt->loadaddr, 1); ++#endif ++ + /* + * This is used by gdb to locate the chain of shared libraries that are currently loaded. + */ +@@ -407,7 +427,7 @@ LD_BOOT(unsigned long args) + ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr; + for (i = 0; i < auxvt[AT_PHNUM].a_un.a_val; i++, ppnt++) + if (ppnt->p_type == PT_DYNAMIC) { +- dpnt = (Elf32_Dyn *) ppnt->p_vaddr; ++ dpnt = (Elf32_Dyn *) (ppnt->p_vaddr + app_tpnt->loadaddr); + while (dpnt->d_tag) { + #if defined(__mips__) + if (dpnt->d_tag == DT_MIPS_GOTSYM) +@@ -501,8 +521,8 @@ LD_BOOT(unsigned long args) + ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr; + for (i = 0; i < auxvt[AT_PHNUM].a_un.a_val; i++, ppnt++) { + if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) +- _dl_mprotect((void *) (ppnt->p_vaddr & PAGE_ALIGN), +- (ppnt->p_vaddr & ADDR_ALIGN) + ++ _dl_mprotect((void *) ((ppnt->p_vaddr + app_tpnt->loadaddr) & PAGE_ALIGN), ++ ((ppnt->p_vaddr + app_tpnt->loadaddr) & ADDR_ALIGN) + + (unsigned long) ppnt->p_filesz, + PROT_READ | PROT_WRITE | PROT_EXEC); + } +@@ -715,8 +735,8 @@ static void _dl_get_ready_to_run(struct + ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr; + for (i = 0; i < auxvt[AT_PHNUM].a_un.a_val; i++, ppnt++) { + if (ppnt->p_type == PT_LOAD) { +- if (ppnt->p_vaddr + ppnt->p_memsz > brk_addr) +- brk_addr = ppnt->p_vaddr + ppnt->p_memsz; ++ if (ppnt->p_vaddr + app_tpnt->loadaddr + ppnt->p_memsz > brk_addr) ++ brk_addr = ppnt->p_vaddr + app_tpnt->loadaddr + ppnt->p_memsz; + } + if (ppnt->p_type == PT_DYNAMIC) { + #ifndef ALLOW_ZERO_PLTGOT +@@ -725,8 +745,8 @@ static void _dl_get_ready_to_run(struct + continue; + #endif + /* OK, we have what we need - slip this one into the list. */ +- app_tpnt = _dl_add_elf_hash_table("", 0, +- app_tpnt->dynamic_info, ppnt->p_vaddr, ppnt->p_filesz); ++ app_tpnt = _dl_add_elf_hash_table("", (char *)app_tpnt->loadaddr, ++ app_tpnt->dynamic_info, ppnt->p_vaddr + app_tpnt->loadaddr, ppnt->p_filesz); + _dl_loaded_modules->libtype = elf_executable; + _dl_loaded_modules->ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr; + _dl_loaded_modules->n_phent = auxvt[AT_PHNUM].a_un.a_val; +@@ -735,7 +755,7 @@ static void _dl_get_ready_to_run(struct + rpnt->dyn = _dl_loaded_modules; + app_tpnt->usage_count++; + app_tpnt->symbol_scope = _dl_symbol_tables; +- lpnt = (unsigned long *) (app_tpnt->dynamic_info[DT_PLTGOT]); ++ lpnt = (unsigned long *) (app_tpnt->dynamic_info[DT_PLTGOT] + app_tpnt->loadaddr); + #ifdef ALLOW_ZERO_PLTGOT + if (lpnt) + #endif diff --git a/dev-libs/uclibc/files/digest-uclibc-0.9.23 b/dev-libs/uclibc/files/digest-uclibc-0.9.23 new file mode 100644 index 000000000000..0d10281bfa8e --- /dev/null +++ b/dev-libs/uclibc/files/digest-uclibc-0.9.23 @@ -0,0 +1 @@ +MD5 42001a50d982d0f5d0c0e68e53c9d7a1 uClibc-0.9.23.tar.bz2 1571053 diff --git a/dev-libs/uclibc/uclibc-0.9.23.ebuild b/dev-libs/uclibc/uclibc-0.9.23.ebuild new file mode 100644 index 000000000000..0d4064b3fb29 --- /dev/null +++ b/dev-libs/uclibc/uclibc-0.9.23.ebuild @@ -0,0 +1,55 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-libs/uclibc/uclibc-0.9.23.ebuild,v 1.1 2003/11/16 00:20:59 solar Exp $ + +inherit eutils + +MY_P="${P/ucl/uCl}" +DESCRIPTION="C library for developing embedded Linux systems" +HOMEPAGE="http://www.uclibc.org/" +SRC_URI="http://www.kernel.org/pub/linux/libs/uclibc/${MY_P}.tar.bz2" +IUSE="etdyn" +LICENSE="LGPL-2" +SLOT="0" +KEYWORDS="~x86 ~ppc ~sparc ~mips" + +DEPEND="sys-devel/gcc" +PROVIDE="virtual/glibc" + +S=${WORKDIR}/${MY_P} + +src_unpack() { + local patches="uClibc-${PV}-flipturn.patch" + use etdyn && patches="${patches} uClibc-${PV}-pax.patch uClibc-${PV}-etdyn.patch" + + unpack ${A} + cd ${S} + + for patch in ${patches} ; do + [ -f ${FILESDIR}/${PV}/${patch} ] && epatch ${FILESDIR}/${PV}/${patch} + done + + # fixup for install perms + sed -i -e "s:-fa:-dRf:g" Makefile + + make defconfig || die "could not config" + for def in UCLIBC_{HAS_LOCALE,PROFILING} DO{DEBUG,ASSERTS} SUPPORT_LD_DEBUG{,_EARLY} ; do + sed -i "s:${def}=y:# ${def} is not set:" .config + done + cp .config myconfig + + for f in `grep -Rl 'subst -g' *` ; do + sed -i -e "/subst -g/s:-g:\\' -g \\':" ${f} + done + + emake clean || die "could not clean" +} + +src_compile() { + mv myconfig .config + make || die "could not make" +} + +src_install() { + make PREFIX=${D} install || die "install failed" +} |