summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-07-29 18:08:15 +0000
committerUlrich Drepper <drepper@redhat.com>2000-07-29 18:08:15 +0000
commit497b8ef43fa893f36cd96abfe117e00e2b4854be (patch)
treec462b9900e58b8f592480f94906c479ca1e6b67f
parent2da345643ad4c615d36f9b11a41d77c9f12ff746 (diff)
Update.
2000-07-28 Philip Blundell <philb@gnu.org> * math/test-fpucw.c: Ignore reserved bits in control word. 2000-07-28 Philip Blundell <philb@gnu.org> * sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO_RET): New macro. (ret): Redefine to PSEUDO_RET. (PSEUDO): Remove jump to syscall_error. 2000-07-29 Mark Kettenis <kettenis@gnu.org> * resolv/README: Add some information about using the resolver in multi-threaded code and with C++. Spelling fixes. 2000-07-29 Mark Kettenis <kettenis@gnu.org> * resolv/resolv.h (struct __sockaddr_in): Remove. (struct __res_state) [!_LIBC]: Remove reference to __sockaddr_in. * sysdeps/powerpc/backtrace.c (struct layout): Make pointers __unbounded.
-rw-r--r--ChangeLog23
-rw-r--r--localedata/ChangeLog5
-rw-r--r--localedata/tests/test7.cm106
-rwxr-xr-xlocaledata/tst-locale.sh2
-rw-r--r--math/test-fpucw.c9
-rw-r--r--resolv/README74
-rw-r--r--resolv/resolv.h14
-rw-r--r--sysdeps/unix/sysv/linux/arm/sysdep.h9
8 files changed, 166 insertions, 76 deletions
diff --git a/ChangeLog b/ChangeLog
index ed27d72673..e681e4b941 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2000-07-28 Philip Blundell <philb@gnu.org>
+
+ * math/test-fpucw.c: Ignore reserved bits in control word.
+
+2000-07-28 Philip Blundell <philb@gnu.org>
+
+ * sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO_RET): New macro.
+ (ret): Redefine to PSEUDO_RET.
+ (PSEUDO): Remove jump to syscall_error.
+
+2000-07-29 Mark Kettenis <kettenis@gnu.org>
+
+ * resolv/README: Add some information about using the resolver in
+ multi-threaded code and with C++. Spelling fixes.
+
+2000-07-29 Mark Kettenis <kettenis@gnu.org>
+
+ * resolv/resolv.h (struct __sockaddr_in): Remove.
+ (struct __res_state) [!_LIBC]: Remove reference to __sockaddr_in.
+
2000-07-29 Greg McGary <greg@mcgary.org>
* Rules (test-bp-inputs, make-test-out): New variables.
@@ -28,7 +48,8 @@
pointers as __unbounded. Wrap bounds around variable `current'.
* sysdeps/i386/backtrace.c (struct layout): Make pointers __unbounded.
(ADVANCE_STACK_FRAME): Wrap bounds around return value.
- * sysdeps/powerpc/backtrace.c (struct layout): Make pointers __unbounded.
+ * sysdeps/powerpc/backtrace.c (struct layout): Make pointers
+ __unbounded.
(__backtrace): Qualify frame-pointer chain and return address
pointers as __unbounded. Wrap bounds around variable `current'.
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index da0faca163..caf60a87e1 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,5 +1,10 @@
2000-07-29 Ulrich Drepper <drepper@redhat.com>
+ * tst-digits.c: Add tests for wprintf.
+ * tests/test7.cm: Change so that it is usable for wprintf tests.
+
+ * tst-locale.sh: Fix typo in last change.
+
* tst-digits.c: Add ctype and wctype tests.
2000-07-28 Ulrich Drepper <drepper@redhat.com>
diff --git a/localedata/tests/test7.cm b/localedata/tests/test7.cm
index 207197e020..86b058dc58 100644
--- a/localedata/tests/test7.cm
+++ b/localedata/tests/test7.cm
@@ -1,4 +1,4 @@
-<code_set_name> test7
+<code_set_name> UTF-8
<mb_cur_min> 1
<mb_cur_max> 3
@@ -21,58 +21,58 @@ CHARMAP
<U0037> \x37
<U0038> \x38
<U0039> \x39
-<U0061> \x41
-<U0062> \x42
-<U0063> \x43
-<U0064> \x44
-<U0065> \x45
-<U0066> \x46
-<U0067> \x47
-<U0068> \x48
-<U0069> \x49
-<U006A> \x4A
-<U006B> \x4B
-<U006C> \x4C
-<U006D> \x4D
-<U006E> \x4E
-<U006F> \x4F
-<U0070> \x50
-<U0071> \x51
-<U0072> \x52
-<U0073> \x53
-<U0074> \x54
-<U0075> \x55
-<U0076> \x56
-<U0077> \x57
-<U0078> \x58
-<U0079> \x59
-<U007A> \x5A
-<U0041> \x61
-<U0042> \x62
-<U0043> \x63
-<U0044> \x64
-<U0045> \x65
-<U0046> \x66
-<U0047> \x67
-<U0048> \x68
-<U0049> \x69
-<U004A> \x6a
-<U004B> \x6b
-<U004C> \x6c
-<U004D> \x6d
-<U004E> \x6e
-<U004F> \x6f
-<U0050> \x70
-<U0051> \x71
-<U0052> \x72
-<U0053> \x73
-<U0054> \x74
-<U0055> \x75
-<U0056> \x76
-<U0057> \x77
-<U0058> \x78
-<U0059> \x79
-<U005A> \x7a
+<U0041> \x41
+<U0042> \x42
+<U0043> \x43
+<U0044> \x44
+<U0045> \x45
+<U0046> \x46
+<U0047> \x47
+<U0048> \x48
+<U0049> \x49
+<U004A> \x4a
+<U004B> \x4b
+<U004C> \x4c
+<U004D> \x4d
+<U004E> \x4e
+<U004F> \x4f
+<U0050> \x50
+<U0051> \x51
+<U0052> \x52
+<U0053> \x53
+<U0054> \x54
+<U0055> \x55
+<U0056> \x56
+<U0057> \x57
+<U0058> \x58
+<U0059> \x59
+<U005A> \x5a
+<U0061> \x61
+<U0062> \x62
+<U0063> \x63
+<U0064> \x64
+<U0065> \x65
+<U0066> \x66
+<U0067> \x67
+<U0068> \x68
+<U0069> \x69
+<U006A> \x6A
+<U006B> \x6B
+<U006C> \x6C
+<U006D> \x6D
+<U006E> \x6E
+<U006F> \x6F
+<U0070> \x70
+<U0071> \x71
+<U0072> \x72
+<U0073> \x73
+<U0074> \x74
+<U0075> \x75
+<U0076> \x76
+<U0077> \x77
+<U0078> \x78
+<U0079> \x79
+<U007A> \x7A
<U2080> \xe2\x82\x80
<U2081> \xe2\x82\x81
<U2082> \xe2\x82\x82
diff --git a/localedata/tst-locale.sh b/localedata/tst-locale.sh
index 5aa43e069f..b25f9a61f4 100755
--- a/localedata/tst-locale.sh
+++ b/localedata/tst-locale.sh
@@ -52,7 +52,7 @@ test_locale tests/test3.cm tests/test3.def test3
test_locale tests/test4.cm tests/test4.def test4
test_locale tests/test5.cm tests/test5.def test5 tests/test5.ds
test_locale tests/test6.cm tests/test6.def test6 tests/test6.ds
-test_locale tests/test7.cm tests/test4.def test7
+test_locale tests/test7.cm tests/test7.def test7
exit 0
diff --git a/math/test-fpucw.c b/math/test-fpucw.c
index a702d17330..0294a42bb5 100644
--- a/math/test-fpucw.c
+++ b/math/test-fpucw.c
@@ -29,10 +29,13 @@ main (void)
_FPU_GETCW (cw);
- if (cw != _FPU_DEFAULT)
- printf ("control word is 0x%x but should be 0x%x.\n", cw, _FPU_DEFAULT);
+ cw &= ~_FPU_RESERVED;
- return (cw != _FPU_DEFAULT);
+ if (cw != (_FPU_DEFAULT & ~_FPU_RESERVED))
+ printf ("control word is 0x%x but should be 0x%x.\n",
+ cw, (_FPU_DEFAULT & ~_FPU_RESERVED));
+
+ return cw != (_FPU_DEFAULT & ~_FPU_RESERVED);
#else
return 0;
diff --git a/resolv/README b/resolv/README
index e862fffe57..416205da77 100644
--- a/resolv/README
+++ b/resolv/README
@@ -1,3 +1,6 @@
+The resolver in the GNU C Library
+*********************************
+
Starting with version 2.2, the resolver in the GNU C Library comes
from BIND 8. Only a subset of the src/lib/resolv part of libbind is
included here; basically the parts that are needed to provide the
@@ -30,11 +33,78 @@ The resolver in the GNU C Library still differs from what's in BIND
* The `res_close' function in glibc only tries to close open files
referenced through `_res' if the RES_INIT bit is set in
`_res.options'. This fixes a potential security bug with programs
- that bogusly call `res_close' without initializing the resolver
+ that bogusly call `res_close' without initialising the resolver
state first. Note that the thread-safe `res_nclose' still doesn't
check the RES_INIT bit. By the way, you're not really supposed to
call `res_close/res_nclose' directly.
+* The resolver in glibc can connect to a nameserver over IPv6. Just
+ specify the IPv6 address in /etc/resolv.conf. You cannot change the
+ address of an IPv6 nameserver dynamically in your program though.
+
+
+Using the resolver in multi-threaded code
+=========================================
+
+The traditional resolver interfaces `res_query', `res_search',
+`res_mkquery', `res_send' and `res_init', used a static (global)
+resolver state stored in the `_res' structure. Therefore, these
+interfaces are not thread-safe. Therefore, BIND 8.2 introduced a set
+of "new" interfaces `res_nquery', `res_nsearch', `res_nmkquery',
+`res_nsend' and `res_ninit' that take a `res_state' as their first
+argument, so you can use a per-thread resolver state. In glibc, when
+you link with -lpthread, such a per-thread resolver state is already
+present. It can be accessed using `_res', which has been redefined as
+a macro, in a similar way to what has been done for the `errno' and
+`h_errno' variables. This per-thread resolver state is also used for
+the `gethostby*' family of functions, which means that for example
+`gethostbyname_r' is now fully thread-safe and re-entrant. The
+traditional resolver interfaces however, continue to use a single
+resolver state and are therefore still thread-unsafe. The resolver
+state is the same resolver state that is used for the initial ("main")
+thread.
+
+This has the following consequences for existing binaries and source
+code:
+
+* Single-threaded programs will continue to work. There should be no
+ user-visible changes when you recompile them.
+
+* Multi-threaded programs that use the traditional resolver interfaces
+ in the "main" thread should continue to work, except that they no
+ longer see any changes in the global resolver state caused by calls
+ to, for example, `gethostbyname' in other threads. Again there
+ should be no user-visible changes when you recompile these programs.
+
+* Multi-threaded programs that use the traditional resolver interfaces
+ in more than one thread should be just as buggy as before (there are
+ no problems if you use proper locking of course). If you recompile
+ these programs, manipulating the _res structure in threads other
+ than the "main" thread will seem to have no effect though.
+
+* In Multi-threaded that manipulate the _res structure, calls to
+ functions like `gethostbyname' in threads other than the "main"
+ thread won't be influenced by the those changes anymore. So if you
+ set RES_USE_INET6, a call to `gethostbyname' won't return any IPv6
+ hosts anymore. If you recompile such programs, manipulating the
+ _res structure will affect the thread in which you do so instead of
+ the "main" thread.
+
+We recommend to use the new thread-safe interfaces in new code, since
+the traditional interfaces have been deprecated by the BIND folks.
+For compatibility with other (older) systems you might want to
+continue to use those interfaces though.
+
+
+Using the resolver in C++ code
+==============================
+
+There resolver contains some hooks which will allow the user to
+install some callback functions that make it possible to filter DNS
+requests and responses. Although we do not encourage you to make use
+of this facility at all, C++ developers should realise that it isn't
+safe to throw exceptions from such callback functions.
+
Source code
===========
@@ -78,7 +148,7 @@ src/lib/inet/
src/lib/isc/
base64.c
-Some of these files have been optimized a bit, and adaptations have
+Some of these files have been optimised a bit, and adaptations have
been made to make them fit in with the rest of glibc. The more
non-obvious changes are wrapped in something like `#ifdef _LIBC'.
diff --git a/resolv/resolv.h b/resolv/resolv.h
index 4f505a2199..74a55ef0fb 100644
--- a/resolv/resolv.h
+++ b/resolv/resolv.h
@@ -123,16 +123,6 @@ struct res_sym {
#define RES_DFLRETRY 2 /* Default #/tries. */
#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
-/*
- * Like "struct sockaddr_in", but without any padding (to avoid making
- * "struct __rest_state" too large).
- */
-struct __sockaddr_in {
- __SOCKADDR_COMMON (sin_);
- in_port_t sin_port;
- struct in_addr sin_addr;
-};
-
struct __res_state {
int retrans; /* retransmition time interval */
int retry; /* number of times to retransmit */
@@ -163,12 +153,8 @@ struct __res_state {
u_int16_t nscount;
u_int16_t nstimes[MAXNS]; /* ms. */
int nssocks[MAXNS];
-#ifdef _LIBC
u_int16_t nscount6;
struct sockaddr_in6 *nsaddrs[MAXNS];
-#else
- struct __sockaddr_in nsaddrs[MAXNS];
-#endif
} _ext;
} _u;
};
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
index c337af2b14..1413a48736 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep.h
@@ -52,8 +52,13 @@
.type syscall_error,%function; \
ENTRY (name); \
DO_CALL (args, syscall_name); \
- cmn r0, $4096; \
- bhs PLTJMP(C_SYMBOL_NAME(__syscall_error));
+ cmn r0, $4096;
+
+#define PSEUDO_RET \
+ RETINSTR(movcc, pc, lr); \
+ b PLTJMP(__syscall_error)
+#undef ret
+#define ret PSEUDO_RET
#undef PSEUDO_END
#define PSEUDO_END(name) \