mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
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.
This commit is contained in:
23
ChangeLog
23
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>
|
2000-07-29 Greg McGary <greg@mcgary.org>
|
||||||
|
|
||||||
* Rules (test-bp-inputs, make-test-out): New variables.
|
* Rules (test-bp-inputs, make-test-out): New variables.
|
||||||
@@ -28,7 +48,8 @@
|
|||||||
pointers as __unbounded. Wrap bounds around variable `current'.
|
pointers as __unbounded. Wrap bounds around variable `current'.
|
||||||
* sysdeps/i386/backtrace.c (struct layout): Make pointers __unbounded.
|
* sysdeps/i386/backtrace.c (struct layout): Make pointers __unbounded.
|
||||||
(ADVANCE_STACK_FRAME): Wrap bounds around return value.
|
(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
|
(__backtrace): Qualify frame-pointer chain and return address
|
||||||
pointers as __unbounded. Wrap bounds around variable `current'.
|
pointers as __unbounded. Wrap bounds around variable `current'.
|
||||||
|
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
2000-07-29 Ulrich Drepper <drepper@redhat.com>
|
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.
|
* tst-digits.c: Add ctype and wctype tests.
|
||||||
|
|
||||||
2000-07-28 Ulrich Drepper <drepper@redhat.com>
|
2000-07-28 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<code_set_name> test7
|
<code_set_name> UTF-8
|
||||||
<mb_cur_min> 1
|
<mb_cur_min> 1
|
||||||
<mb_cur_max> 3
|
<mb_cur_max> 3
|
||||||
|
|
||||||
@@ -21,58 +21,58 @@ CHARMAP
|
|||||||
<U0037> \x37
|
<U0037> \x37
|
||||||
<U0038> \x38
|
<U0038> \x38
|
||||||
<U0039> \x39
|
<U0039> \x39
|
||||||
<U0061> \x41
|
<U0041> \x41
|
||||||
<U0062> \x42
|
<U0042> \x42
|
||||||
<U0063> \x43
|
<U0043> \x43
|
||||||
<U0064> \x44
|
<U0044> \x44
|
||||||
<U0065> \x45
|
<U0045> \x45
|
||||||
<U0066> \x46
|
<U0046> \x46
|
||||||
<U0067> \x47
|
<U0047> \x47
|
||||||
<U0068> \x48
|
<U0048> \x48
|
||||||
<U0069> \x49
|
<U0049> \x49
|
||||||
<U006A> \x4A
|
<U004A> \x4a
|
||||||
<U006B> \x4B
|
<U004B> \x4b
|
||||||
<U006C> \x4C
|
<U004C> \x4c
|
||||||
<U006D> \x4D
|
<U004D> \x4d
|
||||||
<U006E> \x4E
|
<U004E> \x4e
|
||||||
<U006F> \x4F
|
<U004F> \x4f
|
||||||
<U0070> \x50
|
<U0050> \x50
|
||||||
<U0071> \x51
|
<U0051> \x51
|
||||||
<U0072> \x52
|
<U0052> \x52
|
||||||
<U0073> \x53
|
<U0053> \x53
|
||||||
<U0074> \x54
|
<U0054> \x54
|
||||||
<U0075> \x55
|
<U0055> \x55
|
||||||
<U0076> \x56
|
<U0056> \x56
|
||||||
<U0077> \x57
|
<U0057> \x57
|
||||||
<U0078> \x58
|
<U0058> \x58
|
||||||
<U0079> \x59
|
<U0059> \x59
|
||||||
<U007A> \x5A
|
<U005A> \x5a
|
||||||
<U0041> \x61
|
<U0061> \x61
|
||||||
<U0042> \x62
|
<U0062> \x62
|
||||||
<U0043> \x63
|
<U0063> \x63
|
||||||
<U0044> \x64
|
<U0064> \x64
|
||||||
<U0045> \x65
|
<U0065> \x65
|
||||||
<U0046> \x66
|
<U0066> \x66
|
||||||
<U0047> \x67
|
<U0067> \x67
|
||||||
<U0048> \x68
|
<U0068> \x68
|
||||||
<U0049> \x69
|
<U0069> \x69
|
||||||
<U004A> \x6a
|
<U006A> \x6A
|
||||||
<U004B> \x6b
|
<U006B> \x6B
|
||||||
<U004C> \x6c
|
<U006C> \x6C
|
||||||
<U004D> \x6d
|
<U006D> \x6D
|
||||||
<U004E> \x6e
|
<U006E> \x6E
|
||||||
<U004F> \x6f
|
<U006F> \x6F
|
||||||
<U0050> \x70
|
<U0070> \x70
|
||||||
<U0051> \x71
|
<U0071> \x71
|
||||||
<U0052> \x72
|
<U0072> \x72
|
||||||
<U0053> \x73
|
<U0073> \x73
|
||||||
<U0054> \x74
|
<U0074> \x74
|
||||||
<U0055> \x75
|
<U0075> \x75
|
||||||
<U0056> \x76
|
<U0076> \x76
|
||||||
<U0057> \x77
|
<U0077> \x77
|
||||||
<U0058> \x78
|
<U0078> \x78
|
||||||
<U0059> \x79
|
<U0079> \x79
|
||||||
<U005A> \x7a
|
<U007A> \x7A
|
||||||
<U2080> \xe2\x82\x80
|
<U2080> \xe2\x82\x80
|
||||||
<U2081> \xe2\x82\x81
|
<U2081> \xe2\x82\x81
|
||||||
<U2082> \xe2\x82\x82
|
<U2082> \xe2\x82\x82
|
||||||
|
@@ -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/test4.cm tests/test4.def test4
|
||||||
test_locale tests/test5.cm tests/test5.def test5 tests/test5.ds
|
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/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
|
exit 0
|
||||||
|
|
||||||
|
@@ -29,10 +29,13 @@ main (void)
|
|||||||
|
|
||||||
_FPU_GETCW (cw);
|
_FPU_GETCW (cw);
|
||||||
|
|
||||||
if (cw != _FPU_DEFAULT)
|
cw &= ~_FPU_RESERVED;
|
||||||
printf ("control word is 0x%x but should be 0x%x.\n", cw, _FPU_DEFAULT);
|
|
||||||
|
|
||||||
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
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
The resolver in the GNU C Library
|
||||||
|
*********************************
|
||||||
|
|
||||||
Starting with version 2.2, the resolver in the GNU C Library comes
|
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
|
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
|
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
|
* The `res_close' function in glibc only tries to close open files
|
||||||
referenced through `_res' if the RES_INIT bit is set in
|
referenced through `_res' if the RES_INIT bit is set in
|
||||||
`_res.options'. This fixes a potential security bug with programs
|
`_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
|
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
|
check the RES_INIT bit. By the way, you're not really supposed to
|
||||||
call `res_close/res_nclose' directly.
|
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
|
Source code
|
||||||
===========
|
===========
|
||||||
@@ -78,7 +148,7 @@ src/lib/inet/
|
|||||||
src/lib/isc/
|
src/lib/isc/
|
||||||
base64.c
|
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
|
been made to make them fit in with the rest of glibc. The more
|
||||||
non-obvious changes are wrapped in something like `#ifdef _LIBC'.
|
non-obvious changes are wrapped in something like `#ifdef _LIBC'.
|
||||||
|
|
||||||
|
@@ -123,16 +123,6 @@ struct res_sym {
|
|||||||
#define RES_DFLRETRY 2 /* Default #/tries. */
|
#define RES_DFLRETRY 2 /* Default #/tries. */
|
||||||
#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
|
#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 {
|
struct __res_state {
|
||||||
int retrans; /* retransmition time interval */
|
int retrans; /* retransmition time interval */
|
||||||
int retry; /* number of times to retransmit */
|
int retry; /* number of times to retransmit */
|
||||||
@@ -163,12 +153,8 @@ struct __res_state {
|
|||||||
u_int16_t nscount;
|
u_int16_t nscount;
|
||||||
u_int16_t nstimes[MAXNS]; /* ms. */
|
u_int16_t nstimes[MAXNS]; /* ms. */
|
||||||
int nssocks[MAXNS];
|
int nssocks[MAXNS];
|
||||||
#ifdef _LIBC
|
|
||||||
u_int16_t nscount6;
|
u_int16_t nscount6;
|
||||||
struct sockaddr_in6 *nsaddrs[MAXNS];
|
struct sockaddr_in6 *nsaddrs[MAXNS];
|
||||||
#else
|
|
||||||
struct __sockaddr_in nsaddrs[MAXNS];
|
|
||||||
#endif
|
|
||||||
} _ext;
|
} _ext;
|
||||||
} _u;
|
} _u;
|
||||||
};
|
};
|
||||||
|
@@ -52,8 +52,13 @@
|
|||||||
.type syscall_error,%function; \
|
.type syscall_error,%function; \
|
||||||
ENTRY (name); \
|
ENTRY (name); \
|
||||||
DO_CALL (args, syscall_name); \
|
DO_CALL (args, syscall_name); \
|
||||||
cmn r0, $4096; \
|
cmn r0, $4096;
|
||||||
bhs PLTJMP(C_SYMBOL_NAME(__syscall_error));
|
|
||||||
|
#define PSEUDO_RET \
|
||||||
|
RETINSTR(movcc, pc, lr); \
|
||||||
|
b PLTJMP(__syscall_error)
|
||||||
|
#undef ret
|
||||||
|
#define ret PSEUDO_RET
|
||||||
|
|
||||||
#undef PSEUDO_END
|
#undef PSEUDO_END
|
||||||
#define PSEUDO_END(name) \
|
#define PSEUDO_END(name) \
|
||||||
|
Reference in New Issue
Block a user