From: hjl@varesearch.com (H.J. Lu)
To: drepper@cygnus.com (Ulrich Drepper)
Cc: libc-hacker@sourceware.cygnus.com (GNU C Library)
Subject: A static, none thread patch
Date: Thu, 29 Jul 1999 10:33:00 -0000 [thread overview]
Message-ID: <19990729173339.30C743FC1@varesearch.com> (raw)
While working on ia64 which is static only and has no threads, the
patch here is needed. You can verify it by doing
# .../configure --prefix=/usr --disable-profile --disable-shared --disable-sanity-checks --disable-versioning -without-pic-default --enable-static-nss --enable-add-ons=crypt
on ia32.
BTW, I cannot do cvs check out. I got
cvs [checkout aborted]: connect to glibc.cygnus.com:2401 failed: Connection refused
Any ideas?
Thanks.
--
H.J. Lu (hjl@gnu.org)
---
Thu Jul 29 10:20:53 1999 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/bits/libc-lock.h (__libc_cleanup_end): New.
* libio/iofputs.c (fputs_unlocked): Weak aliase if _IO_MTSAFE_IO
is not defined.
* libio/iofgets.c (fgets_unlocked): Likewise.
* libio/iofread.c (fread_unlocked): Likewise.
* libio/iofwrite.c (fwrite_unlocked): Likewise.
* malloc/malloc.c (ptmalloc_init): Make sure __libc_pagesize is
initiailized.
* elf/dl-load.c (_dl_init_paths): Set up rtld_search_dirs only
if necessary.
Check SHARED instead of PIC.
Index: sysdeps/generic/bits/libc-lock.h
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/sysdeps/generic/bits/libc-lock.h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 libc-lock.h
--- sysdeps/generic/bits/libc-lock.h 1997/11/06 17:04:25 1.1.1.1
+++ sysdeps/generic/bits/libc-lock.h 1999/07/29 06:42:52
@@ -90,6 +90,8 @@
/* End critical region with cleanup. */
#define __libc_cleanup_region_end(DOIT)
+/* Sometimes we have to exit the block in the middle. */
+#define __libc_cleanup_end(DOIT)
/* We need portable names for some of the functions. */
#define __libc_mutex_unlock
Index: libio/iofputs.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/libio/iofputs.c,v
retrieving revision 1.1.1.3
diff -u -p -r1.1.1.3 iofputs.c
--- libio/iofputs.c 1998/06/13 18:30:45 1.1.1.3
+++ libio/iofputs.c 1999/07/29 07:07:25
@@ -48,3 +48,7 @@ _IO_fputs (str, fp)
#ifdef weak_alias
weak_alias (_IO_fputs, fputs)
#endif
+
+#ifndef _IO_MTSAFE_IO
+weak_alias (_IO_fputs, fputs_unlocked)
+#endif
Index: libio/iofgets.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/libio/iofgets.c,v
retrieving revision 1.1.1.5
diff -u -p -r1.1.1.5 iofgets.c
--- libio/iofgets.c 1998/11/09 16:02:25 1.1.1.5
+++ libio/iofgets.c 1999/07/29 07:09:09
@@ -65,3 +65,7 @@ _IO_fgets (buf, n, fp)
#ifdef weak_alias
weak_alias (_IO_fgets, fgets)
#endif
+
+#ifndef _IO_MTSAFE_IO
+weak_alias (_IO_fgets, fgets_unlocked)
+#endif
Index: libio/iofread.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/libio/iofread.c,v
retrieving revision 1.1.1.4
diff -u -p -r1.1.1.4 iofread.c
--- libio/iofread.c 1998/11/13 23:44:17 1.1.1.4
+++ libio/iofread.c 1999/07/29 07:09:43
@@ -48,3 +48,7 @@ _IO_fread (buf, size, count, fp)
#ifdef weak_alias
weak_alias (_IO_fread, fread)
#endif
+
+#ifndef _IO_MTSAFE_IO
+weak_alias (_IO_fread, fread_unlocked)
+#endif
Index: libio/iofwrite.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/libio/iofwrite.c,v
retrieving revision 1.1.1.4
diff -u -p -r1.1.1.4 iofwrite.c
--- libio/iofwrite.c 1998/07/15 00:17:53 1.1.1.4
+++ libio/iofwrite.c 1999/07/29 07:11:07
@@ -53,3 +53,7 @@ _IO_fwrite (buf, size, count, fp)
#ifdef weak_alias
weak_alias (_IO_fwrite, fwrite)
#endif
+
+#ifndef _IO_MTSAFE_IO
+weak_alias (_IO_fwrite, fwrite_unlocked)
+#endif
Index: malloc/malloc.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/malloc/malloc.c,v
retrieving revision 1.1.1.24
diff -u -p -r1.1.1.24 malloc.c
--- malloc/malloc.c 1999/07/28 16:45:14 1.1.1.24
+++ malloc/malloc.c 1999/07/29 15:54:21
@@ -1663,7 +1663,6 @@ ptmalloc_init __MALLOC_P((void))
/* Initialize the pthreads interface. */
if (__pthread_initialize != NULL)
__pthread_initialize();
- __libc_pagesize = __getpagesize();
#endif
mutex_init(&main_arena.mutex);
mutex_init(&list_lock);
@@ -1671,6 +1670,9 @@ ptmalloc_init __MALLOC_P((void))
tsd_setspecific(arena_key, (Void_t *)&main_arena);
thread_atfork(ptmalloc_lock_all, ptmalloc_unlock_all, ptmalloc_init_all);
#endif /* !defined NO_THREADS */
+#ifdef _LIBC
+ __libc_pagesize = __getpagesize();
+#endif
#if defined _LIBC || defined MALLOC_HOOKS
if((s = getenv("MALLOC_TRIM_THRESHOLD_")))
mALLOPt(M_TRIM_THRESHOLD, atoi(s));
Index: elf/dl-load.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/elf/dl-load.c,v
retrieving revision 1.1.1.41
diff -u -p -r1.1.1.41 dl-load.c
--- elf/dl-load.c 1999/06/27 01:13:39 1.1.1.41
+++ elf/dl-load.c 1999/07/29 16:58:43
@@ -500,7 +500,7 @@ _dl_init_paths (const char *llp)
const char *strp;
struct r_search_path_elem *pelem, **aelem;
size_t round_size;
-#ifdef PIC
+#ifdef SHARED
struct link_map *l;
#endif
@@ -518,52 +518,58 @@ _dl_init_paths (const char *llp)
if (rtld_search_dirs == NULL)
_dl_signal_error (ENOMEM, NULL, "cannot create search path array");
- round_size = ((2 * sizeof (struct r_search_path_elem) - 1
- + ncapstr * sizeof (enum r_dir_status))
- / sizeof (struct r_search_path_elem));
-
- rtld_search_dirs[0] = (struct r_search_path_elem *)
- malloc ((sizeof (system_dirs) / sizeof (system_dirs[0]) - 1)
- * round_size * sizeof (struct r_search_path_elem));
- if (rtld_search_dirs[0] == NULL)
- _dl_signal_error (ENOMEM, NULL, "cannot create cache for search path");
-
- pelem = all_dirs = rtld_search_dirs[0];
- strp = system_dirs;
- idx = 0;
-
- do
+ if (sizeof (system_dirs) / sizeof (system_dirs[0]) > 1)
{
- size_t cnt;
-
- *aelem++ = pelem;
-
- pelem->what = "system search path";
- pelem->where = NULL;
-
- pelem->dirname = strp;
- pelem->dirnamelen = system_dirs_len[idx];
- strp += system_dirs_len[idx] + 1;
-
- if (pelem->dirname[0] != '/')
- for (cnt = 0; cnt < ncapstr; ++cnt)
- pelem->status[cnt] = existing;
- else
- for (cnt = 0; cnt < ncapstr; ++cnt)
- pelem->status[cnt] = unknown;
-
- pelem->next = (++idx == (sizeof (system_dirs_len)
- / sizeof (system_dirs_len[0]))
- ? NULL : (pelem + round_size));
-
- pelem += round_size;
+ round_size = ((2 * sizeof (struct r_search_path_elem) - 1
+ + ncapstr * sizeof (enum r_dir_status))
+ / sizeof (struct r_search_path_elem));
+
+ rtld_search_dirs[0] = (struct r_search_path_elem *)
+ malloc ((sizeof (system_dirs) / sizeof (system_dirs[0]) - 1)
+ * round_size * sizeof (struct r_search_path_elem));
+ if (rtld_search_dirs[0] == NULL)
+ _dl_signal_error (ENOMEM, NULL, "cannot create cache for search path");
+
+ pelem = all_dirs = rtld_search_dirs[0];
+ strp = system_dirs;
+ idx = 0;
+
+ do
+ {
+ size_t cnt;
+
+ *aelem++ = pelem;
+
+ pelem->what = "system search path";
+ pelem->where = NULL;
+
+ pelem->dirname = strp;
+ pelem->dirnamelen = system_dirs_len[idx];
+ strp += system_dirs_len[idx] + 1;
+
+ if (pelem->dirname[0] != '/')
+ for (cnt = 0; cnt < ncapstr; ++cnt)
+ pelem->status[cnt] = existing;
+ else
+ for (cnt = 0; cnt < ncapstr; ++cnt)
+ pelem->status[cnt] = unknown;
+
+ pelem->next = (++idx == (sizeof (system_dirs_len)
+ / sizeof (system_dirs_len[0]))
+ ? NULL : (pelem + round_size));
+
+ pelem += round_size;
+ }
+ while (idx < sizeof (system_dirs_len)
+ / sizeof (system_dirs_len[0]));
}
- while (idx < sizeof (system_dirs_len) / sizeof (system_dirs_len[0]));
+ else
+ rtld_search_dirs[0] = NULL;
max_dirnamelen = SYSTEM_DIRS_MAX_LEN;
*aelem = NULL;
-#ifdef PIC
+#ifdef SHARED
/* This points to the map of the main object. */
l = _dl_loaded;
if (l != NULL)
@@ -580,7 +586,7 @@ _dl_init_paths (const char *llp)
else
l->l_rpath_dirs = NULL;
}
-#endif /* PIC */
+#endif /* SHARED */
if (llp != NULL && *llp != '\0')
{
next reply other threads:[~1999-07-29 10:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-07-29 10:33 H.J. Lu [this message]
1999-07-29 23:34 ` Ulrich Drepper
1999-07-30 7:35 ` H.J. Lu
1999-07-30 7:57 ` Roland McGrath
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=19990729173339.30C743FC1@varesearch.com \
--to=hjl@varesearch.com \
--cc=drepper@cygnus.com \
--cc=libc-hacker@sourceware.cygnus.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).