Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Feb 2002 19:09:05 +0100 (CET)
From:      Martin Blapp <mb@imp.ch>
To:        <freebsd-current@freebsd.org>
Subject:   libc_r patches and some questions
Message-ID:  <20020226190200.A26547-100000@levais.imp.ch>

next in thread | raw e-mail | index | archive | help

Hi all,

I've recieved patches from Carlos Fernando Assis Paniago <pan@cnpm.embrapa.br>
to get Openoffice Build 641 running.

Since I'm not familiar, I hope someone else can look at them and point me
to the right direction to have a working OpenOffice port.

> This patch solves a readdir_r bug that stop after 240 files in a directory.
> It is not the ideal solution, but I don't know where the system alloc are for
> this entry. I know that if I copy only the data that exist it works if a copy
> the whole struc if bumps a error.

--- lib/libc/gen/readdir.c.orig	Wed Feb  6 09:37:15 2002
+++ lib/libc/gen/readdir.c	Tue Feb 26 18:50:49 2002
@@ -113,11 +113,11 @@
 	if (__isthreaded) {
 		_pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock);
 		if ((dp = _readdir_unlocked(dirp)) != NULL)
-			memcpy(entry, dp, sizeof *entry);
+			memcpy(entry, dp, _GENERIC_DIRSIZ(dp));
 		_pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock);
 	}
 	else if ((dp = _readdir_unlocked(dirp)) != NULL)
-		memcpy(entry, dp, sizeof *entry);
+		memcpy(entry, dp, _GENERIC_DIRSIZ(dp));

 	if (errno != 0) {
 		if (dp == NULL)

> Tim find this bug. The old version doesn have this loop that is a infinite
> loop in OO.

Comment: I guess this is a bug in openoffice. Can someone help me to track it
down ?

--- lib/libc_r/uthread/uthread_join.c.orig	Wed Dec 19 23:29:20 2001
+++ lib/libc_r/uthread/uthread_join.c	Tue Feb 26 18:53:28 2002
@@ -124,10 +124,7 @@
 		/* Keep track of which thread we're joining to: */
 		curthread->join_status.thread = pthread;

-		while (curthread->join_status.thread == pthread) {
-			/* Schedule the next thread: */
-			_thread_kern_sched_state(PS_JOIN, __FILE__, __LINE__);
-		}
+		_thread_kern_sched_state(PS_JOIN, __FILE__, __LINE__);

 		/*
 		 * The thread return value and error are set by the thread we're


> Tim again find this two patches to disable the cache.

What's wrong with the cache ?

--- ./libexec/rtld-elf/rtld.c.orig	Wed Feb  6 09:37:41 2002
+++ ./libexec/rtld-elf/rtld.c	Tue Feb 26 18:57:50 2002
@@ -844,10 +844,11 @@
      */
     if (symnum >= refobj->nchains)
 	return NULL;	/* Bad object */
-    if (cache != NULL && cache[symnum].sym != NULL) {
-	*defobj_out = cache[symnum].obj;
-	return cache[symnum].sym;
-    }
+/*    if (cache != NULL && cache[symnum].sym != NULL) {
+ *	*defobj_out = cache[symnum].obj;
+ *	return cache[symnum].sym;
+ *   }
+ */

     ref = refobj->symtab + symnum;
     name = refobj->strtab + ref->st_name;
@@ -868,10 +869,11 @@
     if (def != NULL) {
 	*defobj_out = defobj;
 	/* Record the information in the cache to avoid subsequent lookups. */
-	if (cache != NULL) {
-	    cache[symnum].sym = def;
-	    cache[symnum].obj = defobj;
-	}
+ /*	if (cache != NULL) {
+  *	    cache[symnum].sym = def;
+  * 	    cache[symnum].obj = defobj;
+  *	}
+  */
     } else {
 	if (refobj != &obj_rtld)
 	    _rtld_error("%s: Undefined symbol \"%s\"", refobj->path, name);

--- ./libexec/rtld-elf/i386/reloc.c.orig	Thu Nov  1 21:37:39 2001
+++ ./libexec/rtld-elf/i386/reloc.c	Tue Feb 26 18:55:10 2002
@@ -116,10 +116,10 @@
 	const Elf_Rel *rel;
 	SymCache *cache;

-	cache = (SymCache *)alloca(obj->nchains * sizeof(SymCache));
-	if (cache != NULL)
-	    memset(cache, 0, obj->nchains * sizeof(SymCache));
-
+/*	cache = (SymCache *)alloca(obj->nchains * sizeof(SymCache));
+ *	if (cache != NULL)
+ *	    memset(cache, 0, obj->nchains * sizeof(SymCache));
+ */
 	rellim = (const Elf_Rel *) ((caddr_t) obj->rel + obj->relsize);
 	for (rel = obj->rel;  rel < rellim;  rel++) {
 	    Elf_Addr *where = (Elf_Addr *) (obj->relocbase + rel->r_offset);

Thank you for any pointers
Martin

Martin Blapp, <mb@imp.ch> <mbr@FreeBSD.org>
------------------------------------------------------------------
ImproWare AG, UNIXSP & ISP, Zurlindenstrasse 29, 4133 Pratteln, CH
Phone: +41 061 826 93 00: +41 61 826 93 01
PGP Fingerprint: B434 53FC C87C FE7B 0A18 B84C 8686 EF22 D300 551E
------------------------------------------------------------------


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020226190200.A26547-100000>