rpms/dietlibc/F-8 dietlibc-0.31-pagesize.patch,1.6,1.7
Enrico Scholz (ensc)
fedora-extras-commits at redhat.com
Sat Jun 21 14:20:58 UTC 2008
Author: ensc
Update of /cvs/extras/rpms/dietlibc/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv376
Modified Files:
dietlibc-0.31-pagesize.patch
Log Message:
* moved calculation of __elfinto into start.S; user could do
e.g. '*environ = NULL' which breaks the current deferred calculation
in __libc_getpagesize()
* do not return a predefined PAGE_SIZE when __elfinfo code fails
dietlibc-0.31-pagesize.patch:
Index: dietlibc-0.31-pagesize.patch
===================================================================
RCS file: /cvs/extras/rpms/dietlibc/F-8/dietlibc-0.31-pagesize.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- dietlibc-0.31-pagesize.patch 21 Jun 2008 14:08:41 -0000 1.6
+++ dietlibc-0.31-pagesize.patch 21 Jun 2008 14:19:34 -0000 1.7
@@ -1,6 +1,5 @@
-diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c
---- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100
-+++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/lib/mmap64.c.pagesize
++++ dietlibc-0.31.20080409/lib/mmap64.c
@@ -4,16 +4,18 @@
#include <syscalls.h>
#include <errno.h>
@@ -22,9 +21,8 @@
}
void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset)
-diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c
---- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100
-+++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/lib/readdir64.c.pagesize
++++ dietlibc-0.31.20080409/lib/readdir64.c
@@ -14,7 +14,7 @@
#ifndef WANT_LARGEFILE_BACKCOMPAT
struct dirent64* readdir64(DIR *d) {
@@ -52,9 +50,8 @@
if (res<=0) {
if (errno==ENOSYS) {
trygetdents64=0;
-diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c
---- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200
-+++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/lib/opendir.c.pagesize
++++ dietlibc-0.31.20080409/lib/opendir.c
@@ -5,6 +5,8 @@
#include <stdlib.h>
#include <fcntl.h>
@@ -73,9 +70,8 @@
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (t == MAP_FAILED)
lose:
-diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c
---- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200
-+++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/lib/readdir.c.pagesize
++++ dietlibc-0.31.20080409/lib/readdir.c
@@ -5,7 +5,7 @@
struct dirent* readdir(DIR *d) {
@@ -85,9 +81,8 @@
if (res<=0) return 0;
d->num=res; d->cur=0;
}
-diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c
---- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200
-+++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/lib/closedir.c.pagesize
++++ dietlibc-0.31.20080409/lib/closedir.c
@@ -4,8 +4,10 @@
#include <dirent.h>
#include <stdlib.h>
@@ -100,9 +95,8 @@
+ munmap (d, __DIET_PAGE_SIZE);
return res;
}
-diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c
---- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200
-+++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/lib/alloc.c.pagesize
++++ dietlibc-0.31.20080409/lib/alloc.c
@@ -18,8 +18,7 @@
#include <stdlib.h>
#include <string.h>
@@ -133,25 +127,25 @@
static size_t REGPARM(1) get_index(size_t _size) {
register size_t idx=0;
-diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S
---- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -31,6 +31,12 @@ _start:
+--- dietlibc-0.31.20080409/ppc/start.S.pagesize
++++ dietlibc-0.31.20080409/ppc/start.S
+@@ -31,6 +31,14 @@ _start:
lis 14,environ at ha
stw 5,environ at l(14)
+#ifdef WANT_ELFINFO
-+ /* TODO: can we really assume that environ and __elfinfo are on the
-+ same 16 bit page? */
++1: lwzu 15,4(5)
++ cmpwi 15,0
++ bne 1b
++
+ stw 5,__elfinfo at l(14)
+#endif
+
#ifdef WANT_DYNAMIC
mr 6,7
bl _dyn_start
-diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h
---- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200
-+++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/dietfeatures.h.pagesize
++++ dietlibc-0.31.20080409/dietfeatures.h
@@ -126,6 +126,16 @@
/* #define WANT_SSP_XOR */
@@ -178,9 +172,8 @@
+#endif
+
#endif
-diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile
---- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100
-+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/test/Makefile.pagesize
++++ dietlibc-0.31.20080409/test/Makefile
@@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name
memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \
protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \
@@ -190,9 +183,8 @@
test: $(TESTPROGRAMS)
-diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c
---- /dev/null 2008-03-18 07:40:22.289057188 +0100
-+++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 22:19:49.000000000 +0200
+--- /dev/null
++++ dietlibc-0.31.20080409/test/sysconf.c
@@ -0,0 +1,80 @@
+#include <unistd.h>
+#include <stdio.h>
@@ -274,9 +266,8 @@
+
+ return err;
+}
-diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh
---- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100
-+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/test/runtests.sh.pagesize
++++ dietlibc-0.31.20080409/test/runtests.sh
@@ -1,6 +1,6 @@
SUBDIRS="dirent inet stdio string stdlib time"
@@ -285,14 +276,19 @@
STDIN="read1"
PASS="getpass"
-diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S
---- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -25,6 +25,11 @@ _start:
+--- dietlibc-0.31.20080409/sparc64/start.S.pagesize
++++ dietlibc-0.31.20080409/sparc64/start.S
+@@ -25,6 +25,17 @@ _start:
or %o3, %lo(environ), %o3
stx %o2, [%o3]
+#ifdef WANT_ELFINFO
++# error "VERIFY ME!"
++1: add %o2, %o2, 8
++ ldx [%o2-8], %o4
++ orcc %o4, %o4, %o4
++ bne 1b
++
+ add %o3, %o3, 8
+ stx %o2, [%o3]
+#endif
@@ -300,9 +296,8 @@
/* When starting a binary via the dynamic linker, %g1 contains the
address of the shared library termination function, which will be
registered with atexit(). If we are statically linked, this will
-diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c
---- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100
-+++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize
++++ dietlibc-0.31.20080409/libcruft/sysconf.c
@@ -3,6 +3,9 @@
#include <limits.h>
#include <sys/resource.h>
@@ -313,7 +308,7 @@
extern int __sc_nr_cpus();
long sysconf(int name)
-@@ -16,6 +18,14 @@ long sysconf(int name)
+@@ -16,6 +19,14 @@ long sysconf(int name)
return limit.rlim_cur;
}
case _SC_CLK_TCK:
@@ -328,7 +323,7 @@
#ifdef __alpha__
return 1024;
#else
-@@ -23,11 +33,7 @@ long sysconf(int name)
+@@ -23,11 +34,7 @@ long sysconf(int name)
#endif
case _SC_PAGESIZE:
@@ -341,39 +336,26 @@
case _SC_ARG_MAX:
return ARG_MAX;
-diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c
---- /dev/null 2008-03-18 07:40:22.289057188 +0100
-+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 22:19:49.000000000 +0200
-@@ -0,0 +1,25 @@
+--- /dev/null
++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c
+@@ -0,0 +1,14 @@
+#include <stdlib.h>
+#include "../dietelfinfo.h"
+
+__diet_elf_addr_t *__get_elf_aux_value(unsigned int tag)
+{
-+ extern char ** __elfinfo;
-+ __diet_elf_addr_t *aux_ptr;
-+ char ** tmp;
-+
-+ /* External symbol points to 'environ' after startup. Now, go the end
-+ * of 'environ'; the auxiliary ELF table is located immediately after
-+ * this position */
-+
-+ /* operate on tmp instead of __elfinfo to be thread safe */
-+ tmp = __elfinfo;
-+ while (*tmp)
-+ ++tmp;
-+ __elfinfo = tmp;
++ extern __diet_elf_addr_t const * const __elfinfo;
++ __diet_elf_addr_t *aux_ptr;
+
-+ for (aux_ptr = (__diet_elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2)
++ for (aux_ptr = __elfinfo; aux_ptr[0]!=AT_NULL; aux_ptr += 2)
+ if (aux_ptr[0]==tag)
+ return aux_ptr+1;
+
+ return NULL;
+}
-diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c
---- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100
-+++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 22:19:49.000000000 +0200
-@@ -2,14 +2,25 @@
+--- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize
++++ dietlibc-0.31.20080409/libcruft/getpagesize.c
+@@ -2,14 +2,23 @@
#include <sys/ipc.h>
#include <sys/shm.h>
@@ -393,8 +375,6 @@
+ __diet_elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ);
+ if (__likely(v))
+ pgsz = *v;
-+ else
-+ pgsz = __DIET_PAGE_SIZE_PREDEF;
+ }
+
+ return pgsz;
@@ -405,9 +385,8 @@
size_t getpagesize(void) __attribute__((weak,alias("__libc_getpagesize")));
-
-diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h
---- /dev/null 2008-03-18 07:40:22.289057188 +0100
-+++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 22:19:49.000000000 +0200
+--- /dev/null
++++ dietlibc-0.31.20080409/dietpagesize.h
@@ -0,0 +1,31 @@
+#ifndef H_DIETLIBC_DIETPAGESIZE_H
+#define H_DIETLIBC_DIETPAGESIZE_H
@@ -440,24 +419,28 @@
+#endif
+
+#endif /* H_DIETLIBC_DIETPAGESIZE_H */
-diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S
---- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -26,6 +26,11 @@ _start:
+--- dietlibc-0.31.20080409/s390x/start.S.pagesize
++++ dietlibc-0.31.20080409/s390x/start.S
+@@ -26,6 +26,17 @@ _start:
larl %r13,environ
stg %r4,0(%r13)
+#ifdef WANT_ELFINFO
-+ ahi %r13, 8 /* TODO: does it really point to __elfinfo? */
++# error "VERIFY ME!"
++1: aghi %r4, 8 # increment envp
++ lg %r12, -8(0,%r4) # load envp[-1] into %r12
++ ogr %r12, %r12 # test %r12 for NULL
++ brc 1, 1b
++
++ aghi %r13, 8
+ stg %r4,0(%r13)
+#endif
+
/* call main or _dyn_start */
#ifdef WANT_DYNAMIC
brasl %r14,_dyn_start
-diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h
---- /dev/null 2008-03-18 07:40:22.289057188 +0100
-+++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 22:21:09.000000000 +0200
+--- /dev/null
++++ dietlibc-0.31.20080409/dietelfinfo.h
@@ -0,0 +1,20 @@
+#include "dietfeatures.h"
+
@@ -479,14 +462,18 @@
+__diet_elf_addr_t * __get_elf_aux_value(unsigned int tag)
+ __attribute__((__visibility__("hidden"),__const__)) __pure;
+#endif
-diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S
---- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -40,6 +40,11 @@ _start:
+--- dietlibc-0.31.20080409/ia64/start.S.pagesize
++++ dietlibc-0.31.20080409/ia64/start.S
+@@ -40,6 +40,16 @@ _start:
;;
st8 [r14] = out2 /* store envp in environ */
+#ifdef WANT_ELFINFO
++# error "MAKE ME IE64 CODE!"
++1: ld8 r9 = [out2], 8 /* load *envp and increment it */
++ orr r9 = r9, r9 /* test for NULL */
++ bne 1b
++
+ adds r14 = 8, r14 /* __elfinfo = environ + 8 */
+ st8 [r14] = out2 /* store envp in __elfinfo */
+#endif
@@ -494,23 +481,24 @@
#ifdef WANT_DYNAMIC
/* FIXME: dl_init parameter ??? */
br.call.sptk.few rp = _dyn_start
-diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S
---- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -25,6 +25,10 @@ _start:
+--- dietlibc-0.31.20080409/i386/start.S.pagesize
++++ dietlibc-0.31.20080409/i386/start.S
+@@ -25,6 +25,13 @@ _start:
PIC_INIT /* non-PIC: this is an empty line */
PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */
+#ifdef WANT_ELFINFO
++1: add $4, %eax /* increment envp */
++ cmpl $0, -4(%eax) /* load envp[-1] */
++ jne 1b /* ... until envp[-1]==NULL */
+ PUT_VAR %eax, __elfinfo, %ecx
+#endif
+
#ifdef PROFILING
pushl $_etext
pushl $.text
-diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h
---- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200
-+++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/dietdirent.h.pagesize
++++ dietlibc-0.31.20080409/dietdirent.h
@@ -1,8 +1,12 @@
#include <sys/shm.h>
@@ -525,23 +513,26 @@
}; /* stream data from opendir() */
+
+#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf))
-diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S
---- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -24,6 +24,10 @@ _start:
+--- dietlibc-0.31.20080409/alpha/start.S.pagesize
++++ dietlibc-0.31.20080409/alpha/start.S
+@@ -24,6 +24,15 @@ _start:
stq $18, environ
+#ifdef WANT_ELFINFO
++# error "MAKE ME alpha ASSEMBLER!"
++1: ldq $19, $18 ; load *envp into $19
++ addq $18, 1, $18 ; increment *envp
++ orr $19, $19, $19
++ jne 1b
+ stq $18, __elfinfo
+#endif
+
#ifdef WANT_DYNAMIC
/* in v0 ($0) is the ld.so _fini pointer */
mov $0, $19 /* mov v0(dynload) to a3 */
-diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S
---- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200
-+++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize
++++ dietlibc-0.31.20080409/syscalls.s/environ.S
@@ -1,6 +1,7 @@
.section ".bss"
.align 8
@@ -573,10 +564,9 @@
+#endif
+.size __elfinfo,.-__elfinfo
+#endif
-diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S
---- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -23,11 +23,15 @@ _start:
+--- dietlibc-0.31.20080409/arm/start.S.pagesize
++++ dietlibc-0.31.20080409/arm/start.S
+@@ -23,11 +23,18 @@ _start:
#ifdef __DYN_LIB
ldr sl, .L4
1: add sl, pc, sl
@@ -587,27 +577,34 @@
#endif
+#ifdef WANT_ELFINFO
++1: ldr r5, [a3], #4 @ load *envp and increment it
++ orr r5, r5, r5 @ read value==0?
++ bne 1b
+ str a3, [ip, #4] @ __elfinfo = envp
+#endif
+
#ifdef PROFILING
stmdb sp!, { r0 - r3 }
ldr r0, .L5
-@@ -70,6 +74,3 @@ _exit:
+@@ -70,6 +77,3 @@ _exit:
.L5: .word .text
.L6: .word _etext
#endif
-
-
-
-diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S
---- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -34,6 +34,11 @@ _start:
+--- dietlibc-0.31.20080409/parisc/start.S.pagesize
++++ dietlibc-0.31.20080409/parisc/start.S
+@@ -34,6 +34,16 @@ _start:
ldil LP%environ, %r19
ldo RP%environ(%r19), %r19
+#ifdef WANT_ELFINFO
++# error "MAKE ME PARISC CODE!"
++1: add %r20, %r19, %r19 ; envp += 4
++ ldw -4(0,%r19), %r21 ; load envp[-4] into %r21
++ comibf =,0, 0,%21,1b ; compare %21 with 0 without nullification
++
+ ldil LP%__elfinfo, %r19
+ ldo RP%__elfinfo(%r19), %r19
+#endif
@@ -615,9 +612,8 @@
/* Expand the stack to store the 5th through 7th args */
ldo 64(%sp), %sp
-diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h
---- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200
-+++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/include/sys/shm.h.pagesize
++++ dietlibc-0.31.20080409/include/sys/shm.h
@@ -60,15 +60,6 @@ struct shm_info {
unsigned long swap_successes;
};
@@ -634,14 +630,19 @@
extern int shmget(key_t key, int size, int shmflg) __THROW;
extern void *shmat(int shmid, const void *shmaddr, int shmflg) __THROW;
extern int shmdt (const void *shmaddr) __THROW;
-diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S
---- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -25,6 +25,11 @@ _start:
+--- dietlibc-0.31.20080409/sparc/start.S.pagesize
++++ dietlibc-0.31.20080409/sparc/start.S
+@@ -25,6 +25,17 @@ _start:
or %o3, %lo(environ), %o3
st %o2, [%o3]
+#ifdef WANT_ELFINFO
++# error "VERIFY ME!"
++1: add %o2, %o2, 4
++ ld [%o2-4], %o4
++ orcc %o4, %o4, %o4
++ bne 1b
++
+ add %o3, %o3, 4
+ st %o2, [%o3]
+#endif
@@ -649,9 +650,8 @@
/* When starting a binary via the dynamic linker, %g1 contains the
address of the shared library termination function, which will be
registered with atexit(). If we are statically linked, this will
-diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c
---- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200
-+++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/sparc/shmat.c.pagesize
++++ dietlibc-0.31.20080409/sparc/shmat.c
@@ -3,17 +3,15 @@
#include <sys/shm.h>
#include <unistd.h>
@@ -673,26 +673,26 @@
result=raddr;
return result;
}
-diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S
---- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -58,6 +58,12 @@ _start:
+--- dietlibc-0.31.20080409/ppc64/start.S.pagesize
++++ dietlibc-0.31.20080409/ppc64/start.S
+@@ -58,6 +58,14 @@ _start:
oris 14,14,environ at ha
std 5,environ at l(14)
+#ifdef WANT_ELFINFO
-+ /* TODO: can we really assume that environ and __elfinfo are on the
-+ same 16 bit page? */
++1: ldu 15,8(5)
++ cmpdi 15,0
++ bne 1b
++
+ std 5,__elfinfo at l(14)
+#endif
+
#ifdef WANT_DYNAMIC
/* #warning dynamic */
mr 6,7
-diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S
---- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -12,12 +12,23 @@ _start:
+--- dietlibc-0.31.20080409/x86_64/start.S.pagesize
++++ dietlibc-0.31.20080409/x86_64/start.S
+@@ -12,12 +12,28 @@ _start:
leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */
@@ -703,7 +703,12 @@
+#else
+ leaq environ(%rip), %rax
+#endif
-+ movq %rdx, (%rax) /* environ */
++ movq %rdx, (%rax) /* environ */
++
++1: add $8, %rdx /* increment envp */
++ cmpq $0, -8(%rdx) /* load envp[-1] */
++ jne 1b /* ... until envp[-1]==NULL */
++
+ movq %rdx, 8(%rax) /* __elfinfo */
+#else
#ifdef __DYN_LIB
@@ -716,24 +721,28 @@
#ifdef PROFILING
pushq %rdi /* save reg args */
-diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S
---- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -30,6 +30,11 @@ _start:
+--- dietlibc-0.31.20080409/s390/start.S.pagesize
++++ dietlibc-0.31.20080409/s390/start.S
+@@ -30,6 +30,17 @@ _start:
l %r1,8(%r13)
st %r4,0(%r1)
+#ifdef WANT_ELFINFO
-+ ahi %r1, 4 # TODO: does it really point to __elfinfo now?
++# error "VERIFY ME!"
++1: ahi %r4, 4 # increment envp
++ l %r12, -4(0,%r4) # load envp[-1] into %r12
++ or %r12, %r12 # test %r12 for NULL
++ brc 1, 1b
++
++ ahi %r1, 4
+ st %r4,0(%r1)
+#endif
+
/* call main or _dyn_start */
l %r1,0(%r13)
basr %r14,%r1
-diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S
---- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200
-+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 22:19:49.000000000 +0200
+--- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize
++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S
@@ -86,6 +86,15 @@ __environ:
.long 0
#endif
@@ -750,14 +759,19 @@
.global fini_entry
fini_entry:
.long 0
-diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S
---- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200
-+++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 22:19:49.000000000 +0200
-@@ -47,6 +47,9 @@ __start:
+--- dietlibc-0.31.20080409/mips/start.S.pagesize
++++ dietlibc-0.31.20080409/mips/start.S
+@@ -47,6 +47,15 @@ __start:
#endif
add $a2, $a2, $a1
sw $a2, environ
+#ifdef WANT_ELFINFO
++# error "MAKE ME MIPS CODE!"
++1: addu $a2, $a2, 4 /* increment envp */
++ lw $4, -4($a2) /* load envp[-1]; TODO: is $4 a proper
++ temporary register? */
++ bnz 1b /* ... until envp[-1]==NULL
++ TODO: use proper 'bnz' operation */
+ sw $a2, __elfinfo
+#endif
jalr $25
More information about the fedora-extras-commits
mailing list