aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2012-02-06 16:11:09 +0100
committerJiri Kosina <jkosina@suse.cz>2012-02-06 16:12:16 +0100
commitd4730ace0c7dbb64513e35b6fc5fd7e7f381e490 (patch)
tree18890c096cdd869a593c56de3257faa40af8e050 /kernel/trace
parentHID: hyperv: Properly disconnect the input device (diff)
parentMerge tag 'pm-fixes-for-3.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into upstream-fixes
Sync with Linus' tree. This is necessary to have a base for patch that fixes commit 35b4c01e29b ("power_supply: add "powers" links to self-powered HID devices") which went in through Anton's tree.
Diffstat (limited to 'kernel/trace')
-rw-r--r--kernel/trace/ftrace.c715
-rw-r--r--kernel/trace/trace_events_filter.c283
-rw-r--r--kernel/trace/trace_stack.c30
3 files changed, 683 insertions, 345 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index b1e8943fed1d..683d559a0eef 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -22,11 +22,13 @@
#include <linux/hardirq.h>
#include <linux/kthread.h>
#include <linux/uaccess.h>
+#include <linux/bsearch.h>
#include <linux/module.h>
#include <linux/ftrace.h>
#include <linux/sysctl.h>
#include <linux/slab.h>
#include <linux/ctype.h>
+#include <linux/sort.h>
#include <linux/list.h>
#include <linux/hash.h>
#include <linux/rcupdate.h>
@@ -947,13 +949,6 @@ struct ftrace_func_probe {
struct rcu_head rcu;
};
-enum {
- FTRACE_ENABLE_CALLS = (1 << 0),
- FTRACE_DISABLE_CALLS = (1 << 1),
- FTRACE_UPDATE_TRACE_FUNC = (1 << 2),
- FTRACE_START_FUNC_RET = (1 << 3),
- FTRACE_STOP_FUNC_RET = (1 << 4),
-};
struct ftrace_func_entry {
struct hlist_node hlist;
unsigned long ip;
@@ -984,18 +979,19 @@ static struct ftrace_ops global_ops = {
.filter_hash = EMPTY_HASH,
};
-static struct dyn_ftrace *ftrace_new_addrs;
-
static DEFINE_MUTEX(ftrace_regex_lock);
struct ftrace_page {
struct ftrace_page *next;
+ struct dyn_ftrace *records;
int index;
- struct dyn_ftrace records[];
+ int size;
};
-#define ENTRIES_PER_PAGE \
- ((PAGE_SIZE - sizeof(struct ftrace_page)) / sizeof(struct dyn_ftrace))
+static struct ftrace_page *ftrace_new_pgs;
+
+#define ENTRY_SIZE sizeof(struct dyn_ftrace)
+#define ENTRIES_PER_PAGE (PAGE_SIZE / ENTRY_SIZE)
/* estimate from running different kernels */
#define NR_TO_INIT 10000
@@ -1003,7 +999,10 @@ struct ftrace_page {
static struct ftrace_page *ftrace_pages_start;
static struct ftrace_page *ftrace_pages;
-static struct dyn_ftrace *ftrace_free_records;
+static bool ftrace_hash_empty(struct ftrace_hash *hash)
+{
+ return !hash || !hash->count;
+}
static struct ftrace_func_entry *
ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip)
@@ -1013,7 +1012,7 @@ ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip)
struct hlist_head *hhd;
struct hlist_node *n;
- if (!hash->count)
+ if (ftrace_hash_empty(hash))
return NULL;
if (hash->size_bits > 0)
@@ -1157,7 +1156,7 @@ alloc_and_copy_ftrace_hash(int size_bits, struct ftrace_hash *hash)
return NULL;
/* Empty hash? */
- if (!hash || !hash->count)
+ if (ftrace_hash_empty(hash))
return new_hash;
size = 1 << hash->size_bits;
@@ -1282,9 +1281,9 @@ ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip)
filter_hash = rcu_dereference_raw(ops->filter_hash);
notrace_hash = rcu_dereference_raw(ops->notrace_hash);
- if ((!filter_hash || !filter_hash->count ||
+ if ((ftrace_hash_empty(filter_hash) ||
ftrace_lookup_ip(filter_hash, ip)) &&
- (!notrace_hash || !notrace_hash->count ||
+ (ftrace_hash_empty(notrace_hash) ||
!ftrace_lookup_ip(notrace_hash, ip)))
ret = 1;
else
@@ -1307,6 +1306,47 @@ ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip)
} \
}
+
+static int ftrace_cmp_recs(const void *a, const void *b)
+{
+ const struct dyn_ftrace *reca = a;
+ const struct dyn_ftrace *recb = b;
+
+ if (reca->ip > recb->ip)
+ return 1;
+ if (reca->ip < recb->ip)
+ return -1;
+ return 0;
+}
+
+/**
+ * ftrace_location - return true if the ip giving is a traced location
+ * @ip: the instruction pointer to check
+ *
+ * Returns 1 if @ip given is a pointer to a ftrace location.
+ * That is, the instruction that is either a NOP or call to
+ * the function tracer. It checks the ftrace internal tables to
+ * determine if the address belongs or not.
+ */
+int ftrace_location(unsigned long ip)
+{
+ struct ftrace_page *pg;
+ struct dyn_ftrace *rec;
+ struct dyn_ftrace key;
+
+ key.ip = ip;
+
+ for (pg = ftrace_pages_start; pg; pg = pg->next) {
+ rec = bsearch(&key, pg->records, pg->index,
+ sizeof(struct dyn_ftrace),
+ ftrace_cmp_recs);
+ if (rec)
+ return 1;
+ }
+
+ return 0;
+}
+
static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
int filter_hash,
bool inc)
@@ -1336,7 +1376,7 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
if (filter_hash) {
hash = ops->filter_hash;
other_hash = ops->notrace_hash;
- if (!hash || !hash->count)
+ if (ftrace_hash_empty(hash))
all = 1;
} else {
inc = !inc;
@@ -1346,7 +1386,7 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
* If the notrace hash has no items,
* then there's nothing to do.
*/
- if (hash && !hash->count)
+ if (ftrace_hash_empty(hash))
return;
}
@@ -1363,8 +1403,8 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
if (!other_hash || !ftrace_lookup_ip(other_hash, rec->ip))
match = 1;
} else {
- in_hash = hash && !!ftrace_lookup_ip(hash, rec->ip);
- in_other_hash = other_hash && !!ftrace_lookup_ip(other_hash, rec->ip);
+ in_hash = !!ftrace_lookup_ip(hash, rec->ip);
+ in_other_hash = !!ftrace_lookup_ip(other_hash, rec->ip);
/*
*
@@ -1372,7 +1412,7 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
if (filter_hash && in_hash && !in_other_hash)
match = 1;
else if (!filter_hash && in_hash &&
- (in_other_hash || !other_hash->count))
+ (in_other_hash || ftrace_hash_empty(other_hash)))
match = 1;
}
if (!match)
@@ -1406,40 +1446,12 @@ static void ftrace_hash_rec_enable(struct ftrace_ops *ops,
__ftrace_hash_rec_update(ops, filter_hash, 1);
}
-static void ftrace_free_rec(struct dyn_ftrace *rec)
-{
- rec->freelist = ftrace_free_records;
- ftrace_free_records = rec;
- rec->flags |= FTRACE_FL_FREE;
-}
-
static struct dyn_ftrace *ftrace_alloc_dyn_node(unsigned long ip)
{
- struct dyn_ftrace *rec;
-
- /* First check for freed records */
- if (ftrace_free_records) {
- rec = ftrace_free_records;
-
- if (unlikely(!(rec->flags & FTRACE_FL_FREE))) {
- FTRACE_WARN_ON_ONCE(1);
- ftrace_free_records = NULL;
+ if (ftrace_pages->index == ftrace_pages->size) {
+ /* We should have allocated enough */
+ if (WARN_ON(!ftrace_pages->next))
return NULL;
- }
-
- ftrace_free_records = rec->freelist;
- memset(rec, 0, sizeof(*rec));
- return rec;
- }
-
- if (ftrace_pages->index == ENTRIES_PER_PAGE) {
- if (!ftrace_pages->next) {
- /* allocate another page */
- ftrace_pages->next =
- (void *)get_zeroed_page(GFP_KERNEL);
- if (!ftrace_pages->next)
- return NULL;
- }
ftrace_pages = ftrace_pages->next;
}
@@ -1459,8 +1471,6 @@ ftrace_record_ip(unsigned long ip)
return NULL;
rec->ip = ip;
- rec->newlist = ftrace_new_addrs;
- ftrace_new_addrs = rec;
return rec;
}
@@ -1475,7 +1485,19 @@ static void print_ip_ins(const char *fmt, unsigned char *p)
printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]);
}
-static void ftrace_bug(int failed, unsigned long ip)
+/**
+ * ftrace_bug - report and shutdown function tracer
+ * @failed: The failed type (EFAULT, EINVAL, EPERM)
+ * @ip: The address that failed
+ *
+ * The arch code that enables or disables the function tracing
+ * can call ftrace_bug() when it has detected a problem in
+ * modifying the code. @failed should be one of either:
+ * EFAULT - if the problem happens on reading the @ip address
+ * EINVAL - if what is read at @ip is not what was expected
+ * EPERM - if the problem happens on writting to the @ip address
+ */
+void ftrace_bug(int failed, unsigned long ip)
{
switch (failed) {
case -EFAULT:
@@ -1517,24 +1539,19 @@ int ftrace_text_reserved(void *start, void *end)
return 0;
}
-
-static int
-__ftrace_replace_code(struct dyn_ftrace *rec, int enable)
+static int ftrace_check_record(struct dyn_ftrace *rec, int enable, int update)
{
- unsigned long ftrace_addr;
unsigned long flag = 0UL;
- ftrace_addr = (unsigned long)FTRACE_ADDR;
-
/*
- * If we are enabling tracing:
+ * If we are updating calls:
*
* If the record has a ref count, then we need to enable it
* because someone is using it.
*
* Otherwise we make sure its disabled.
*
- * If we are disabling tracing, then disable all records that
+ * If we are disabling calls, then disable all records that
* are enabled.
*/
if (enable && (rec->flags & ~FTRACE_FL_MASK))
@@ -1542,18 +1559,72 @@ __ftrace_replace_code(struct dyn_ftrace *rec, int enable)
/* If the state of this record hasn't changed, then do nothing */
if ((rec->flags & FTRACE_FL_ENABLED) == flag)
- return 0;
+ return FTRACE_UPDATE_IGNORE;
if (flag) {
- rec->flags |= FTRACE_FL_ENABLED;
+ if (update)
+ rec->flags |= FTRACE_FL_ENABLED;
+ return FTRACE_UPDATE_MAKE_CALL;
+ }
+
+ if (update)
+ rec->flags &= ~FTRACE_FL_ENABLED;
+
+ return FTRACE_UPDATE_MAKE_NOP;
+}
+
+/**
+ * ftrace_update_record, set a record that now is tracing or not
+ * @rec: the record to update
+ * @enable: set to 1 if the record is tracing, zero to force disable
+ *
+ * The records that represent all functions that can be traced need
+ * to be updated when tracing has been enabled.
+ */
+int ftrace_update_record(struct dyn_ftrace *rec, int enable)
+{
+ return ftrace_check_record(rec, enable, 1);
+}
+
+/**
+ * ftrace_test_record, check if the record has been enabled or not
+ * @rec: the record to test
+ * @enable: set to 1 to check if enabled, 0 if it is disabled
+ *
+ * The arch code may need to test if a record is already set to
+ * tracing to determine how to modify the function code that it
+ * represents.
+ */
+int ftrace_test_record(struct dyn_ftrace *rec, int enable)
+{
+ return ftrace_check_record(rec, enable, 0);
+}
+
+static int
+__ftrace_replace_code(struct dyn_ftrace *rec, int enable)
+{
+ unsigned long ftrace_addr;
+ int ret;
+
+ ftrace_addr = (unsigned long)FTRACE_ADDR;
+
+ ret = ftrace_update_record(rec, enable);
+
+ switch (ret) {
+ case FTRACE_UPDATE_IGNORE:
+ return 0;
+
+ case FTRACE_UPDATE_MAKE_CALL:
return ftrace_make_call(rec, ftrace_addr);
+
+ case FTRACE_UPDATE_MAKE_NOP:
+ return ftrace_make_nop(NULL, rec, ftrace_addr);
}
- rec->flags &= ~FTRACE_FL_ENABLED;
- return ftrace_make_nop(NULL, rec, ftrace_addr);
+ return -1; /* unknow ftrace bug */
}
-static void ftrace_replace_code(int enable)
+static void ftrace_replace_code(int update)
{
struct dyn_ftrace *rec;
struct ftrace_page *pg;
@@ -1563,11 +1634,7 @@ static void ftrace_replace_code(int enable)
return;
do_for_each_ftrace_rec(pg, rec) {
- /* Skip over free records */
- if (rec->flags & FTRACE_FL_FREE)
- continue;
-
- failed = __ftrace_replace_code(rec, enable);
+ failed = __ftrace_replace_code(rec, update);
if (failed) {
ftrace_bug(failed, rec->ip);
/* Stop processing */
@@ -1576,6 +1643,78 @@ static void ftrace_replace_code(int enable)
} while_for_each_ftrace_rec();
}
+struct ftrace_rec_iter {
+ struct ftrace_page *pg;
+ int index;
+};
+
+/**
+ * ftrace_rec_iter_start, start up iterating over traced functions
+ *
+ * Returns an iterator handle that is used to iterate over all
+ * the records that represent address locations where functions
+ * are traced.
+ *
+ * May return NULL if no records are available.
+ */
+struct ftrace_rec_iter *ftrace_rec_iter_start(void)
+{
+ /*
+ * We only use a single iterator.
+ * Protected by the ftrace_lock mutex.
+ */
+ static struct ftrace_rec_iter ftrace_rec_iter;
+ struct ftrace_rec_iter *iter = &ftrace_rec_iter;
+
+ iter->pg = ftrace_pages_start;
+ iter->index = 0;
+
+ /* Could have empty pages */
+ while (iter->pg && !iter->pg->index)
+ iter->pg = iter->pg->next;
+
+ if (!iter->pg)
+ return NULL;
+
+ return iter;
+}
+
+/**
+ * ftrace_rec_iter_next, get the next record to process.
+ * @iter: The handle to the iterator.
+ *
+ * Returns the next iterator after the given iterator @iter.
+ */
+struct ftrace_rec_iter *ftrace_rec_iter_next(struct ftrace_rec_iter *iter)
+{
+ iter->index++;
+
+ if (iter->index >= iter->pg->index) {
+ iter->pg = iter->pg->next;
+ iter->index = 0;
+
+ /* Could have empty pages */
+ while (iter->pg && !iter->pg->index)
+ iter->pg = iter->pg->next;
+ }
+
+ if (!iter->pg)
+ return NULL;
+
+ return iter;
+}
+
+/**
+ * ftrace_rec_iter_record, get the record at the iterator location
+ * @iter: The current iterator location
+ *
+ * Returns the record that the current @iter is at.
+ */
+struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter)
+{
+ return &iter->pg->records[iter->index];
+}
+
static int
ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
{
@@ -1617,13 +1756,7 @@ static int __ftrace_modify_code(void *data)
{
int *command = data;
- /*
- * Do not call function tracer while we update the code.
- * We are in stop machine, no worrying about races.
- */
- function_trace_stop++;
-
- if (*command & FTRACE_ENABLE_CALLS)
+ if (*command & FTRACE_UPDATE_CALLS)
ftrace_replace_code(1);
else if (*command & FTRACE_DISABLE_CALLS)
ftrace_replace_code(0);
@@ -1636,21 +1769,33 @@ static int __ftrace_modify_code(void *data)
else if (*command & FTRACE_STOP_FUNC_RET)
ftrace_disable_ftrace_graph_caller();
-#ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST
- /*
- * For archs that call ftrace_test_stop_func(), we must
- * wait till after we update all the function callers
- * before we update the callback. This keeps different
- * ops that record different functions from corrupting
- * each other.
- */
- __ftrace_trace_function = __ftrace_trace_function_delay;
-#endif
- function_trace_stop--;
-
return 0;
}
+/**
+ * ftrace_run_stop_machine, go back to the stop machine method
+ * @command: The command to tell ftrace what to do
+ *
+ * If an arch needs to fall back to the stop machine method, the
+ * it can call this function.
+ */
+void ftrace_run_stop_machine(int command)
+{
+ stop_machine(__ftrace_modify_code, &command, NULL);
+}
+
+/**
+ * arch_ftrace_update_code, modify the code to trace or not trace
+ * @command: The command that needs to be done
+ *
+ * Archs can override this function if it does not need to
+ * run stop_machine() to modify code.
+ */
+void __weak arch_ftrace_update_code(int command)
+{
+ ftrace_run_stop_machine(command);
+}
+
static void ftrace_run_update_code(int command)
{
int ret;
@@ -1659,8 +1804,31 @@ static void ftrace_run_update_code(int command)
FTRACE_WARN_ON(ret);
if (ret)
return;
+ /*
+ * Do not call function tracer while we update the code.
+ * We are in stop machine.
+ */
+ function_trace_stop++;
- stop_machine(__ftrace_modify_code, &command, NULL);
+ /*
+ * By default we use stop_machine() to modify the code.
+ * But archs can do what ever they want as long as it
+ * is safe. The stop_machine() is the safest, but also
+ * produces the most overhead.
+ */
+ arch_ftrace_update_code(command);
+
+#ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST
+ /*
+ * For archs that call ftrace_test_stop_func(), we must
+ * wait till after we update all the function callers
+ * before we update the callback. This keeps different
+ * ops that record different functions from corrupting
+ * each other.
+ */
+ __ftrace_trace_function = __ftrace_trace_function_delay;
+#endif
+ function_trace_stop--;
ret = ftrace_arch_code_modify_post_process();
FTRACE_WARN_ON(ret);
@@ -1691,7 +1859,7 @@ static int ftrace_startup(struct ftrace_ops *ops, int command)
return -ENODEV;
ftrace_start_up++;
- command |= FTRACE_ENABLE_CALLS;
+ command |= FTRACE_UPDATE_CALLS;
/* ops marked global share the filter hashes */
if (ops->flags & FTRACE_OPS_FL_GLOBAL) {
@@ -1743,8 +1911,7 @@ static void ftrace_shutdown(struct ftrace_ops *ops, int command)
if (ops != &global_ops || !global_start_up)
ops->flags &= ~FTRACE_OPS_FL_ENABLED;
- if (!ftrace_start_up)
- command |= FTRACE_DISABLE_CALLS;
+ command |= FTRACE_UPDATE_CALLS;
if (saved_ftrace_func != ftrace_trace_function) {
saved_ftrace_func = ftrace_trace_function;
@@ -1766,7 +1933,7 @@ static void ftrace_startup_sysctl(void)
saved_ftrace_func = NULL;
/* ftrace_start_up is true if we want ftrace running */
if (ftrace_start_up)
- ftrace_run_update_code(FTRACE_ENABLE_CALLS);
+ ftrace_run_update_code(FTRACE_UPDATE_CALLS);
}
static void ftrace_shutdown_sysctl(void)
@@ -1788,14 +1955,16 @@ static int ops_traces_mod(struct ftrace_ops *ops)
struct ftrace_hash *hash;
hash = ops->filter_hash;
- return !!(!hash || !hash->count);
+ return ftrace_hash_empty(hash);
}
static int ftrace_update_code(struct module *mod)
{
+ struct ftrace_page *pg;
struct dyn_ftrace *p;
cycle_t start, stop;
unsigned long ref = 0;
+ int i;
/*
* When adding a module, we need to check if tracers are
@@ -1817,46 +1986,44 @@ static int ftrace_update_code(struct module *mod)
start = ftrace_now(raw_smp_processor_id());
ftrace_update_cnt = 0;
- while (ftrace_new_addrs) {
+ for (pg = ftrace_new_pgs; pg; pg = pg->next) {
- /* If something went wrong, bail without enabling anything */
- if (unlikely(ftrace_disabled))
- return -1;
+ for (i = 0; i < pg->index; i++) {
+ /* If something went wrong, bail without enabling anything */
+ if (unlikely(ftrace_disabled))
+ return -1;
- p = ftrace_new_addrs;
- ftrace_new_addrs = p->newlist;
- p->flags = ref;
+ p = &pg->records[i];
+ p->flags = ref;
- /*
- * Do the initial record conversion from mcount jump
- * to the NOP instructions.
- */
- if (!ftrace_code_disable(mod, p)) {
- ftrace_free_rec(p);
- /* Game over */
- break;
- }
+ /*
+ * Do the initial record conversion from mcount jump
+ * to the NOP instructions.
+ */
+ if (!ftrace_code_disable(mod, p))
+ break;
- ftrace_update_cnt++;
+ ftrace_update_cnt++;
- /*
- * If the tracing is enabled, go ahead and enable the record.
- *
- * The reason not to enable the record immediatelly is the
- * inherent check of ftrace_make_nop/ftrace_make_call for
- * correct previous instructions. Making first the NOP
- * conversion puts the module to the correct state, thus
- * passing the ftrace_make_call check.
- */
- if (ftrace_start_up && ref) {
- int failed = __ftrace_replace_code(p, 1);
- if (failed) {
- ftrace_bug(failed, p->ip);
- ftrace_free_rec(p);
+ /*
+ * If the tracing is enabled, go ahead and enable the record.
+ *
+ * The reason not to enable the record immediatelly is the
+ * inherent check of ftrace_make_nop/ftrace_make_call for
+ * correct previous instructions. Making first the NOP
+ * conversion puts the module to the correct state, thus
+ * passing the ftrace_make_call check.
+ */
+ if (ftrace_start_up && ref) {
+ int failed = __ftrace_replace_code(p, 1);
+ if (failed)
+ ftrace_bug(failed, p->ip);
}
}
}
+ ftrace_new_pgs = NULL;
+
stop = ftrace_now(raw_smp_processor_id());
ftrace_update_time = stop - start;
ftrace_update_tot_cnt += ftrace_update_cnt;
@@ -1864,57 +2031,108 @@ static int ftrace_update_code(struct module *mod)
return 0;
}
-static int __init ftrace_dyn_table_alloc(unsigned long num_to_init)
+static int ftrace_allocate_records(struct ftrace_page *pg, int count)
{
- struct ftrace_page *pg;
+ int order;
int cnt;
- int i;
- /* allocate a few pages */
- ftrace_pages_start = (void *)get_zeroed_page(GFP_KERNEL);
- if (!ftrace_pages_start)
- return -1;
+ if (WARN_ON(!count))
+ return -EINVAL;
+
+ order = get_count_order(DIV_ROUND_UP(count, ENTRIES_PER_PAGE));
/*
- * Allocate a few more pages.
- *
- * TODO: have some parser search vmlinux before
- * final linking to find all calls to ftrace.
- * Then we can:
- * a) know how many pages to allocate.
- * and/or
- * b) set up the table then.
- *
- * The dynamic code is still necessary for
- * modules.
+ * We want to fill as much as possible. No more than a page
+ * may be empty.
*/
+ while ((PAGE_SIZE << order) / ENTRY_SIZE >= count + ENTRIES_PER_PAGE)
+ order--;
- pg = ftrace_pages = ftrace_pages_start;
+ again:
+ pg->records = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
- cnt = num_to_init / ENTRIES_PER_PAGE;
- pr_info("ftrace: allocating %ld entries in %d pages\n",
- num_to_init, cnt + 1);
+ if (!pg->records) {
+ /* if we can't allocate this size, try something smaller */
+ if (!order)
+ return -ENOMEM;
+ order >>= 1;
+ goto again;
+ }
- for (i = 0; i < cnt; i++) {
- pg->next = (void *)get_zeroed_page(GFP_KERNEL);
+ cnt = (PAGE_SIZE << order) / ENTRY_SIZE;
+ pg->size = cnt;
- /* If we fail, we'll try later anyway */
- if (!pg->next)
+ if (cnt > count)
+ cnt = count;
+
+ return cnt;
+}
+
+static struct ftrace_page *
+ftrace_allocate_pages(unsigned long num_to_init)
+{
+ struct ftrace_page *start_pg;
+ struct ftrace_page *pg;
+ int order;
+ int cnt;
+
+ if (!num_to_init)
+ return 0;
+
+ start_pg = pg = kzalloc(sizeof(*pg), GFP_KERNEL);
+ if (!pg)
+ return NULL;
+
+ /*
+ * Try to allocate as much as possible in one continues
+ * location that fills in all of the space. We want to
+ * waste as little space as possible.
+ */
+ for (;;) {
+ cnt = ftrace_allocate_records(pg, num_to_init);
+ if (cnt < 0)
+ goto free_pages;
+
+ num_to_init -= cnt;
+ if (!num_to_init)
break;
+ pg->next = kzalloc(sizeof(*pg), GFP_KERNEL);
+ if (!pg->next)
+ goto free_pages;
+
pg = pg->next;
}
- return 0;
+ return start_pg;
+
+ free_pages:
+ while (start_pg) {
+ order = get_count_order(pg->size / ENTRIES_PER_PAGE);
+ free_pages((unsigned long)pg->records, order);
+ start_pg = pg->next;
+ kfree(pg);
+ pg = start_pg;
+ }
+ pr_info("ftrace: FAILED to allocate memory for functions\n");
+ return NULL;
}
-enum {
- FTRACE_ITER_FILTER = (1 << 0),
- FTRACE_ITER_NOTRACE = (1 << 1),
- FTRACE_ITER_PRINTALL = (1 << 2),
- FTRACE_ITER_HASH = (1 << 3),
- FTRACE_ITER_ENABLED = (1 << 4),
-};
+static int __init ftrace_dyn_table_alloc(unsigned long num_to_init)
+{
+ int cnt;
+
+ if (!num_to_init) {
+ pr_info("ftrace: No functions to be traced?\n");
+ return -1;
+ }
+
+ cnt = num_to_init / ENTRIES_PER_PAGE;
+ pr_info("ftrace: allocating %ld entries in %d pages\n",
+ num_to_init, cnt + 1);
+
+ return 0;
+}
#define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */
@@ -1980,6 +2198,9 @@ static void *t_hash_start(struct seq_file *m, loff_t *pos)
void *p = NULL;
loff_t l;
+ if (!(iter->flags & FTRACE_ITER_DO_HASH))
+ return NULL;
+
if (iter->func_pos > *pos)
return NULL;
@@ -2023,7 +2244,7 @@ static void *
t_next(struct seq_file *m, void *v, loff_t *pos)
{
struct ftrace_iterator *iter = m->private;
- struct ftrace_ops *ops = &global_ops;
+ struct ftrace_ops *ops = iter->ops;
struct dyn_ftrace *rec = NULL;
if (unlikely(ftrace_disabled))
@@ -2047,9 +2268,7 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
}
} else {
rec = &iter->pg->records[iter->idx++];
- if ((rec->flags & FTRACE_FL_FREE) ||
-
- ((iter->flags & FTRACE_ITER_FILTER) &&
+ if (((iter->flags & FTRACE_ITER_FILTER) &&
!(ftrace_lookup_ip(ops->filter_hash, rec->ip))) ||
((iter->flags & FTRACE_ITER_NOTRACE) &&
@@ -2081,7 +2300,7 @@ static void reset_iter_read(struct ftrace_iterator *iter)
static void *t_start(struct seq_file *m, loff_t *pos)
{
struct ftrace_iterator *iter = m->private;
- struct ftrace_ops *ops = &global_ops;
+ struct ftrace_ops *ops = iter->ops;
void *p = NULL;
loff_t l;
@@ -2101,7 +2320,8 @@ static void *t_start(struct seq_file *m, loff_t *pos)
* off, we can short cut and just print out that all
* functions are enabled.
*/
- if (iter->flags & FTRACE_ITER_FILTER && !ops->filter_hash->count) {
+ if (iter->flags & FTRACE_ITER_FILTER &&
+ ftrace_hash_empty(ops->filter_hash)) {
if (*pos > 0)
return t_hash_start(m, pos);
iter->flags |= FTRACE_ITER_PRINTALL;
@@ -2126,12 +2346,8 @@ static void *t_start(struct seq_file *m, loff_t *pos)
break;
}
- if (!p) {
- if (iter->flags & FTRACE_ITER_FILTER)
- return t_hash_start(m, pos);
-
- return NULL;
- }
+ if (!p)
+ return t_hash_start(m, pos);
return iter;
}
@@ -2189,6 +2405,7 @@ ftrace_avail_open(struct inode *inode, struct file *file)
return -ENOMEM;
iter->pg = ftrace_pages_start;
+ iter->ops = &global_ops;
ret = seq_open(file, &show_ftrace_seq_ops);
if (!ret) {
@@ -2217,6 +2434,7 @@ ftrace_enabled_open(struct inode *inode, struct file *file)
iter->pg = ftrace_pages_start;
iter->flags = FTRACE_ITER_ENABLED;
+ iter->ops = &global_ops;
ret = seq_open(file, &show_ftrace_seq_ops);
if (!ret) {
@@ -2237,7 +2455,23 @@ static void ftrace_filter_reset(struct ftrace_hash *hash)
mutex_unlock(&ftrace_lock);
}
-static int
+/**
+ * ftrace_regex_open - initialize function tracer filter files
+ * @ops: The ftrace_ops that hold the hash filters
+ * @flag: The type of filter to process
+ * @inode: The inode, usually passed in to your open routine
+ * @file: The file, usually passed in to your open routine
+ *
+ * ftrace_regex_open() initializes the filter files for the
+ * @ops. Depending on @flag it may process the filter hash or
+ * the notrace hash of @ops. With this called from the open
+ * routine, you can use ftrace_filter_write() for the write
+ * routine if @flag has FTRACE_ITER_FILTER set, or
+ * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set.
+ * ftrace_regex_lseek() should be used as the lseek routine, and
+ * release must call ftrace_regex_release().
+ */
+int
ftrace_regex_open(struct ftrace_ops *ops, int flag,
struct inode *inode, struct file *file)
{
@@ -2306,8 +2540,9 @@ ftrace_regex_open(struct ftrace_ops *ops, int flag,
static int
ftrace_filter_open(struct inode *inode, struct file *file)
{
- return ftrace_regex_open(&global_ops, FTRACE_ITER_FILTER,
- inode, file);
+ return ftrace_regex_open(&global_ops,
+ FTRACE_ITER_FILTER | FTRACE_ITER_DO_HASH,
+ inode, file);
}
static int
@@ -2317,7 +2552,7 @@ ftrace_notrace_open(struct inode *inode, struct file *file)
inode, file);
}
-static loff_t
+loff_t
ftrace_regex_lseek(struct file *file, loff_t offset, int origin)
{
loff_t ret;
@@ -2426,7 +2661,6 @@ match_records(struct ftrace_hash *hash, char *buff,
goto out_unlock;
do_for_each_ftrace_rec(pg, rec) {
-
if (ftrace_match_record(rec, mod, search, search_len, type)) {
ret = enter_record(hash, rec, not);
if (ret < 0) {
@@ -2871,14 +3105,14 @@ out_unlock:
return ret;
}
-static ssize_t
+ssize_t
ftrace_filter_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
return ftrace_regex_write(file, ubuf, cnt, ppos, 1);
}
-static ssize_t
+ssize_t
ftrace_notrace_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
@@ -2919,7 +3153,7 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
ret = ftrace_hash_move(ops, enable, orig_hash, hash);
if (!ret && ops->flags & FTRACE_OPS_FL_ENABLED
&& ftrace_enabled)
- ftrace_run_update_code(FTRACE_ENABLE_CALLS);
+ ftrace_run_update_code(FTRACE_UPDATE_CALLS);
mutex_unlock(&ftrace_lock);
@@ -3045,8 +3279,8 @@ static void __init set_ftrace_early_graph(char *buf)
}
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
-static void __init
-set_ftrace_early_filter(struct ftrace_ops *ops, char *buf, int enable)
+void __init
+ftrace_set_early_filter(struct ftrace_ops *ops, char *buf, int enable)
{
char *func;
@@ -3059,17 +3293,16 @@ set_ftrace_early_filter(struct ftrace_ops *ops, char *buf, int enable)
static void __init set_ftrace_early_filters(void)
{
if (ftrace_filter_buf[0])
- set_ftrace_early_filter(&global_ops, ftrace_filter_buf, 1);
+ ftrace_set_early_filter(&global_ops, ftrace_filter_buf, 1);
if (ftrace_notrace_buf[0])
- set_ftrace_early_filter(&global_ops, ftrace_notrace_buf, 0);
+ ftrace_set_early_filter(&global_ops, ftrace_notrace_buf, 0);
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
if (ftrace_graph_buf[0])
set_ftrace_early_graph(ftrace_graph_buf);
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
}
-static int
-ftrace_regex_release(struct inode *inode, struct file *file)
+int ftrace_regex_release(struct inode *inode, struct file *file)
{
struct seq_file *m = (struct seq_file *)file->private_data;
struct ftrace_iterator *iter;
@@ -3107,7 +3340,7 @@ ftrace_regex_release(struct inode *inode, struct file *file)
orig_hash, iter->hash);
if (!ret && (iter->ops->flags & FTRACE_OPS_FL_ENABLED)
&& ftrace_enabled)
- ftrace_run_update_code(FTRACE_ENABLE_CALLS);
+ ftrace_run_update_code(FTRACE_UPDATE_CALLS);
mutex_unlock(&ftrace_lock);
}
@@ -3270,9 +3503,6 @@ ftrace_set_func(unsigned long *array, int *idx, char *buffer)
do_for_each_ftrace_rec(pg, rec) {
- if (rec->flags & FTRACE_FL_FREE)
- continue;
-
if (ftrace_match_record(rec, NULL, search, search_len, type)) {
/* if it is in the array */
exists = false;
@@ -3381,15 +3611,62 @@ static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer)
return 0;
}
+static void ftrace_swap_recs(void *a, void *b, int size)
+{
+ struct dyn_ftrace *reca = a;
+ struct dyn_ftrace *recb = b;
+ struct dyn_ftrace t;
+
+ t = *reca;
+ *reca = *recb;
+ *recb = t;
+}
+
static int ftrace_process_locs(struct module *mod,
unsigned long *start,
unsigned long *end)
{
+ struct ftrace_page *pg;
+ unsigned long count;
unsigned long *p;
unsigned long addr;
unsigned long flags = 0; /* Shut up gcc */
+ int ret = -ENOMEM;
+
+ count = end - start;
+
+ if (!count)
+ return 0;
+
+ pg = ftrace_allocate_pages(count);
+ if (!pg)
+ return -ENOMEM;
mutex_lock(&ftrace_lock);
+
+ /*
+ * Core and each module needs their own pages, as
+ * modules will free them when they are removed.
+ * Force a new page to be allocated for modules.
+ */
+ if (!mod) {
+ WARN_ON(ftrace_pages || ftrace_pages_start);
+ /* First initialization */
+ ftrace_pages = ftrace_pages_start = pg;
+ } else {
+ if (!ftrace_pages)
+ goto out;
+
+ if (WARN_ON(ftrace_pages->next)) {
+ /* Hmm, we have free pages? */
+ while (ftrace_pages->next)
+ ftrace_pages = ftrace_pages->next;
+ }
+
+ ftrace_pages->next = pg;
+ ftrace_pages = pg;
+ }
+
p = start;
while (p < end) {
addr = ftrace_call_adjust(*p++);
@@ -3401,9 +3678,18 @@ static int ftrace_process_locs(struct module *mod,
*/
if (!addr)
continue;
- ftrace_record_ip(addr);
+ if (!ftrace_record_ip(addr))
+ break;
}
+ /* These new locations need to be initialized */
+ ftrace_new_pgs = pg;
+
+ /* Make each individual set of pages sorted by ips */
+ for (; pg; pg = pg->next)
+ sort(pg->records, pg->index, sizeof(struct dyn_ftrace),
+ ftrace_cmp_recs, ftrace_swap_recs);
+
/*
* We only need to disable interrupts on start up
* because we are modifying code that an interrupt
@@ -3417,32 +3703,55 @@ static int ftrace_process_locs(struct module *mod,
ftrace_update_code(mod);
if (!mod)
local_irq_restore(flags);
+ ret = 0;
+ out:
mutex_unlock(&ftrace_lock);
- return 0;
+ return ret;
}
#ifdef CONFIG_MODULES
+
+#define next_to_ftrace_page(p) container_of(p, struct ftrace_page, next)
+
void ftrace_release_mod(struct module *mod)
{
struct dyn_ftrace *rec;
+ struct ftrace_page **last_pg;
struct ftrace_page *pg;
+ int order;
mutex_lock(&ftrace_lock);
if (ftrace_disabled)
goto out_unlock;
- do_for_each_ftrace_rec(pg, rec) {
+ /*
+ * Each module has its own ftrace_pages, remove
+ * them from the list.
+ */
+ last_pg = &ftrace_pages_start;
+ for (pg = ftrace_pages_start; pg; pg = *last_pg) {
+ rec = &pg->records[0];
if (within_module_core(rec->ip, mod)) {
/*
- * rec->ip is changed in ftrace_free_rec()
- * It should not between s and e if record was freed.
+ * As core pages are first, the first
+ * page should never be a module page.
*/
- FTRACE_WARN_ON(rec->flags & FTRACE_FL_FREE);
- ftrace_free_rec(rec);
- }
- } while_for_each_ftrace_rec();
+ if (WARN_ON(pg == ftrace_pages_start))
+ goto out_unlock;
+
+ /* Check if we are deleting the last page */
+ if (pg == ftrace_pages)
+ ftrace_pages = next_to_ftrace_page(last_pg);
+
+ *last_pg = pg->next;
+ order = get_count_order(pg->size / ENTRIES_PER_PAGE);
+ free_pages((unsigned long)pg->records, order);
+ kfree(pg);
+ } else
+ last_pg = &pg->next;
+ }
out_unlock:
mutex_unlock(&ftrace_lock);
}
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index f04cc3136bd3..24aee7127451 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1738,11 +1738,121 @@ static int replace_system_preds(struct event_subsystem *system,
return -ENOMEM;
}
+static int create_filter_start(char *filter_str, bool set_str,
+ struct filter_parse_state **psp,
+ struct event_filter **filterp)
+{
+ struct event_filter *filter;
+ struct filter_parse_state *ps = NULL;
+ int err = 0;
+
+ WARN_ON_ONCE(*psp || *filterp);
+
+ /* allocate everything, and if any fails, free all and fail */
+ filter = __alloc_filter();
+ if (filter && set_str)
+ err = replace_filter_string(filter, filter_str);
+
+ ps = kzalloc(sizeof(*ps), GFP_KERNEL);
+
+ if (!filter || !ps || err) {
+ kfree(ps);
+ __free_filter(filter);
+ return -ENOMEM;
+ }
+
+ /* we're committed to creating a new filter */
+ *filterp = filter;
+ *psp = ps;
+
+ parse_init(ps, filter_ops, filter_str);
+ err = filter_parse(ps);
+ if (err && set_str)
+ append_filter_err(ps, filter);
+ return err;
+}
+
+static void create_filter_finish(struct filter_parse_state *ps)
+{
+ if (ps) {
+ filter_opstack_clear(ps);
+ postfix_clear(ps);
+ kfree(ps);
+ }
+}
+
+/**
+ * create_filter - create a filter for a ftrace_event_call
+ * @call: ftrace_event_call to create a filter for
+ * @filter_str: filter string
+ * @set_str: remember @filter_str and enable detailed error in filter
+ * @filterp: out param for created filter (always updated on return)
+ *
+ * Creates a filter for @call with @filter_str. If @set_str is %true,
+ * @filter_str is copied and recorded in the new filter.
+ *
+ * On success, returns 0 and *@filterp points to the new filter. On
+ * failure, returns -errno and *@filterp may point to %NULL or to a new
+ * filter. In the latter case, the returned filter contains error
+ * information if @set_str is %true and the caller is responsible for
+ * freeing it.
+ */
+static int create_filter(struct ftrace_event_call *call,
+ char *filter_str, bool set_str,
+ struct event_filter **filterp)
+{
+ struct event_filter *filter = NULL;
+ struct filter_parse_state *ps = NULL;
+ int err;
+
+ err = create_filter_start(filter_str, set_str, &ps, &filter);
+ if (!err) {
+ err = replace_preds(call, filter, ps, filter_str, false);
+ if (err && set_str)
+ append_filter_err(ps, filter);
+ }
+ create_filter_finish(ps);
+
+ *filterp = filter;
+ return err;
+}
+
+/**
+ * create_system_filter - create a filter for an event_subsystem
+ * @system: event_subsystem to create a filter for
+ * @filter_str: filter string
+ * @filterp: out param for created filter (always updated on return)
+ *
+ * Identical to create_filter() except that it creates a subsystem filter
+ * and always remembers @filter_str.
+ */
+static int create_system_filter(struct event_subsystem *system,
+ char *filter_str, struct event_filter **filterp)
+{
+ struct event_filter *filter = NULL;
+ struct filter_parse_state *ps = NULL;
+ int err;
+
+ err = create_filter_start(filter_str, true, &ps, &filter);
+ if (!err) {
+ err = replace_system_preds(system, ps, filter_str);
+ if (!err) {
+ /* System filters just show a default message */
+ kfree(filter->filter_string);
+ filter->filter_string = NULL;
+ } else {
+ append_filter_err(ps, filter);
+ }
+ }
+ create_filter_finish(ps);
+
+ *filterp = filter;
+ return err;
+}
+
int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
{
- struct filter_parse_state *ps;
struct event_filter *filter;
- struct event_filter *tmp;
int err = 0;
mutex_lock(&event_mutex);
@@ -1759,49 +1869,30 @@ int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
goto out_unlock;
}
- err = -ENOMEM;
- ps = kzalloc(sizeof(*ps), GFP_KERNEL);
- if (!ps)
- goto out_unlock;
-
- filter = __alloc_filter();
- if (!filter) {
- kfree(ps);
- goto out_unlock;
- }
-
- replace_filter_string(filter, filter_string);
-
- parse_init(ps, filter_ops, filter_string);
- err = filter_parse(ps);
- if (err) {
- append_filter_err(ps, filter);
- goto out;
- }
+ err = create_filter(call, filter_string, true, &filter);
- err = replace_preds(call, filter, ps, filter_string, false);
- if (err) {
- filter_disable(call);
- append_filter_err(ps, filter);
- } else
- call->flags |= TRACE_EVENT_FL_FILTERED;
-out:
/*
* Always swap the call filter with the new filter
* even if there was an error. If there was an error
* in the filter, we disable the filter and show the error
* string
*/
- tmp = call->filter;
- rcu_assign_pointer(call->filter, filter);
- if (tmp) {
- /* Make sure the call is done with the filter */
- synchronize_sched();
- __free_filter(tmp);
+ if (filter) {
+ struct event_filter *tmp = call->filter;
+
+ if (!err)
+ call->flags |= TRACE_EVENT_FL_FILTERED;
+ else
+ filter_disable(call);
+
+ rcu_assign_pointer(call->filter, filter);
+
+ if (tmp) {
+ /* Make sure the call is done with the filter */
+ synchronize_sched();
+ __free_filter(tmp);
+ }
}
- filter_opstack_clear(ps);
- postfix_clear(ps);
- kfree(ps);
out_unlock:
mutex_unlock(&event_mutex);
@@ -1811,7 +1902,6 @@ out_unlock:
int apply_subsystem_event_filter(struct event_subsystem *system,
char *filter_string)
{
- struct filter_parse_state *ps;
struct event_filter *filter;
int err = 0;
@@ -1835,48 +1925,19 @@ int apply_subsystem_event_filter(struct event_subsystem *system,
goto out_unlock;
}
- err = -ENOMEM;
- ps = kzalloc(sizeof(*ps), GFP_KERNEL);
- if (!ps)
- goto out_unlock;
-
- filter = __alloc_filter();
- if (!filter)
- goto out;
-
- /* System filters just show a default message */
- kfree(filter->filter_string);
- filter->filter_string = NULL;
-
- /*
- * No event actually uses the system filter
- * we can free it without synchronize_sched().
- */
- __free_filter(system->filter);
- system->filter = filter;
-
- parse_init(ps, filter_ops, filter_string);
- err = filter_parse(ps);
- if (err)
- goto err_filter;
-
- err = replace_system_preds(system, ps, filter_string);
- if (err)
- goto err_filter;
-
-out:
- filter_opstack_clear(ps);
- postfix_clear(ps);
- kfree(ps);
+ err = create_system_filter(system, filter_string, &filter);
+ if (filter) {
+ /*
+ * No event actually uses the system filter
+ * we can free it without synchronize_sched().
+ */
+ __free_filter(system->filter);
+ system->filter = filter;
+ }
out_unlock:
mutex_unlock(&event_mutex);
return err;
-
-err_filter:
- replace_filter_string(filter, filter_string);
- append_filter_err(ps, system->filter);
- goto out;
}
#ifdef CONFIG_PERF_EVENTS
@@ -1894,7 +1955,6 @@ int ftrace_profile_set_filter(struct perf_event *event, int event_id,
{
int err;
struct event_filter *filter;
- struct filter_parse_state *ps;
struct ftrace_event_call *call;
mutex_lock(&event_mutex);
@@ -1909,33 +1969,10 @@ int ftrace_profile_set_filter(struct perf_event *event, int event_id,
if (event->filter)
goto out_unlock;
- filter = __alloc_filter();
- if (!filter) {
- err = PTR_ERR(filter);
- goto out_unlock;
- }
-
- err = -ENOMEM;
- ps = kzalloc(sizeof(*ps), GFP_KERNEL);
- if (!ps)
- goto free_filter;
-
- parse_init(ps, filter_ops, filter_str);
- err = filter_parse(ps);
- if (err)
- goto free_ps;
-
- err = replace_preds(call, filter, ps, filter_str, false);
+ err = create_filter(call, filter_str, false, &filter);
if (!err)
event->filter = filter;
-
-free_ps:
- filter_opstack_clear(ps);
- postfix_clear(ps);
- kfree(ps);
-
-free_filter:
- if (err)
+ else
__free_filter(filter);
out_unlock:
@@ -1954,43 +1991,6 @@ out_unlock:
#define CREATE_TRACE_POINTS
#include "trace_events_filter_test.h"
-static int test_get_filter(char *filter_str, struct ftrace_event_call *call,
- struct event_filter **pfilter)
-{
- struct event_filter *filter;
- struct filter_parse_state *ps;
- int err = -ENOMEM;
-
- filter = __alloc_filter();
- if (!filter)
- goto out;
-
- ps = kzalloc(sizeof(*ps), GFP_KERNEL);
- if (!ps)
- goto free_filter;
-
- parse_init(ps, filter_ops, filter_str);
- err = filter_parse(ps);
- if (err)
- goto free_ps;
-
- err = replace_preds(call, filter, ps, filter_str, false);
- if (!err)
- *pfilter = filter;
-
- free_ps:
- filter_opstack_clear(ps);
- postfix_clear(ps);
- kfree(ps);
-
- free_filter:
- if (err)
- __free_filter(filter);
-
- out:
- return err;
-}
-
#define DATA_REC(m, va, vb, vc, vd, ve, vf, vg, vh, nvisit) \
{ \
.filter = FILTER, \
@@ -2109,12 +2109,13 @@ static __init int ftrace_test_event_filter(void)
struct test_filter_data_t *d = &test_filter_data[i];
int err;
- err = test_get_filter(d->filter, &event_ftrace_test_filter,
- &filter);
+ err = create_filter(&event_ftrace_test_filter, d->filter,
+ false, &filter);
if (err) {
printk(KERN_INFO
"Failed to get filter for '%s', err %d\n",
d->filter, err);
+ __free_filter(filter);
break;
}
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 77575b386d97..d4545f49242e 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -13,6 +13,9 @@
#include <linux/sysctl.h>
#include <linux/init.h>
#include <linux/fs.h>
+
+#include <asm/setup.h>
+
#include "trace.h"
#define STACK_TRACE_ENTRIES 500
@@ -133,7 +136,6 @@ stack_trace_call(unsigned long ip, unsigned long parent_ip)
static struct ftrace_ops trace_ops __read_mostly =
{
.func = stack_trace_call,
- .flags = FTRACE_OPS_FL_GLOBAL,
};
static ssize_t
@@ -311,6 +313,21 @@ static const struct file_operations stack_trace_fops = {
.release = seq_release,
};
+static int
+stack_trace_filter_open(struct inode *inode, struct file *file)
+{
+ return ftrace_regex_open(&trace_ops, FTRACE_ITER_FILTER,
+ inode, file);
+}
+
+static const struct file_operations stack_trace_filter_fops = {
+ .open = stack_trace_filter_open,
+ .read = seq_read,
+ .write = ftrace_filter_write,
+ .llseek = ftrace_regex_lseek,
+ .release = ftrace_regex_release,
+};
+
int
stack_trace_sysctl(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
@@ -338,8 +355,13 @@ stack_trace_sysctl(struct ctl_table *table, int write,
return ret;
}
+static char stack_trace_filter_buf[COMMAND_LINE_SIZE+1] __initdata;
+
static __init int enable_stacktrace(char *str)
{
+ if (strncmp(str, "_filter=", 8) == 0)
+ strncpy(stack_trace_filter_buf, str+8, COMMAND_LINE_SIZE);
+
stack_tracer_enabled = 1;
last_stack_tracer_enabled = 1;
return 1;
@@ -358,6 +380,12 @@ static __init int stack_trace_init(void)
trace_create_file("stack_trace", 0444, d_tracer,
NULL, &stack_trace_fops);
+ trace_create_file("stack_trace_filter", 0444, d_tracer,
+ NULL, &stack_trace_filter_fops);
+
+ if (stack_trace_filter_buf[0])
+ ftrace_set_early_filter(&trace_ops, stack_trace_filter_buf, 1);
+
if (stack_tracer_enabled)
register_ftrace_function(&trace_ops);
id='n2431' href='#n2431'>2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614
2001-12-14  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/strstr.c (strstr): Update.  New optimized version.
	Patch by Stephen R. van den Berg.

	* crypt/md5.h: Define md5_uintptr.

2001-12-13  Ulrich Drepper  <drepper@redhat.com>

	* libio/tst_swprintf.c (main): Add test for string argument with
	zero precision.
	* stdio-common/Makefile (tests): Add tst-sprintf.
	* stdio-common/tst-sprintf.c: New file.

2001-12-13  Andreas Schwab  <schwab@suse.de>

	* stdio-common/vfprintf.c (process_string_arg): Correctly handle
	zero precision with wide character string format.

2001-12-13  Thorsten Kukuk  <kukuk@suse.de>

	* sysdeps/posix/cuserid.c (cuserid): If we don't find the UID,
	but have a user supplied buffer, return the empty buffer, not NULL.

2001-12-13  Ulrich Drepper  <drepper@redhat.com>

	* crypt/md5.c (md5_process_bytes): Correct handling of alignment.
	Patch by Eric Sharkey <sharkey@netrics.com>.

	* crypt/md5test.c (main): Add test for multiple calls to
	__md5_process_bytes to itererate over input string.

2001-12-12  Ulrich Drepper  <drepper@redhat.com>

	* nis/nis_findserv.c (__nis_findfastest_with_timeout): Mostly the code
	from __nis_findfastest.  Take timeout value from parameter.
	(__nis_findfastest): Call __nis_findfastest_with_timeout repeatedly.
	* nis/nis_intern.h: Define parameters controlling __nis_findfastest
	[PR libc/2520].  Patch by Alexander Belopolsky <alexb@rentec.com>.

2001-12-12  Andreas Jaeger  <aj@suse.de>

	* configure.in: Use -nostartfiles -nostdlib for linker tests, fix
	combreloc test so that it works in this case.

	* sysdeps/arm/dl-machine.h (elf_machine_rela): Fix typo in last patch.

2001-12-12  NIIBE Yutaka  <gniibe@m17n.org>

	* sysdeps/sh/Makefile: New file.
	* sysdeps/sh/_mcount.S: New file.
	* sysdeps/sh/sysdep.h (CALL_MCOUNT): Implemented.
	* sysdeps/sh/machine-gmon.h: Remove "NOTYET" comment, as we are ready.

2001-12-11  Ulrich Drepper  <drepper@redhat.com>

	* resolv/nss_dns/dns-host.c (getanswer_r): Remove MAX_NR_ADDRS
	limitation [PR libc/2564].

2001-12-11  Jakub Jelinek  <jakub@redhat.com>

	* elf/Makefile (dl-routines): Add conflict.
	(rtld-ldscript-in, rtld-ldscript, rtld-parms): Remove.
	(ld.so): Add _begin local symbol.
	* elf/elf.h (DT_VALTAGIDX, DT_VALNUM, DT_ADDRTAGIDX, DT_ADDRNUM):
	Define.
	* elf/dl-deps.c (_dl_build_local_scope): New.
	(_dl_map_object_deps): If LD_TRACE_PRELINKING, compute local scopes
	of all libraries.
	* elf/do-rel.h (VALIDX): Define.
	(elf_dynamic_do_rel): If ELF_MACHINE_PLT_REL is defined, don't do
	lazy binding for RELA.  If DT_GNU_PRELINKED, DT_RELACOUNT relocations
	can be skipped.
	* elf/dl-conflict.c: New file.
	* elf/dl-lookup.c (_dl_debug_bindings): New.
	(_dl_lookup_symbol): Use _dl_debug_bindings.  Reference_name is always
	non-NULL.
	(_dl_lookup_symbol_skip): Likewise.
	(_dl_lookup_versioned_symbol): Likewise.
	(_dl_lookup_versioned_symbol_skip): Likewise.
	* elf/dl-runtime.c (PLTREL): If ELF_MACHINE_PLT_REL is defined,
	define to ElfW(Rel).
	* elf/dynamic-link.h (elf_get_dynamic_info): Record selected dynamic
	tags in the DT_VALRNGLO..DT_VALRNGHI and DT_ADDRRNGLO..DT_ADDRRNGHI
	ranges.
	Don't adjust address dynamic tags if l_addr is 0.
	* elf/rtld.c (_dl_trace_prelink, _dl_trace_prelink_map): New variables.
	(_dl_start): Skip ELF_DYNAMIC_RELOCATE if ld.so is prelinked.
	(VALIDX, ADDRIDX): Define.
	(_dl_start_final): Initialize _dl_rtld_map's l_map_start and l_map_end.
	(dl_main): Print library list for LD_TRACE_PRELINKING.
	If prelinking information can be used, skip relocating libraries and
	call _dl_resolve_conflicts instead.
	(process_envvars): Handle LD_TRACE_PRELINKING envvar.
	* elf/dl-load.c (_dl_map_object): Don't create fake libs
	if LD_TRACE_PRELINKING.
	* include/link.h (struct link_map) [l_info]: Add DT_VALNUM
	+ DT_ADDRNUM.
	* sysdeps/generic/ldsodefs.h (_dl_trace_prelink_map): New declaration.
	(DL_DEBUG_PRELINK): Define.
	(_dl_resolve_conflicts): Add prototype.

	* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): Reinitialize
	.plt for prelinked libraries where prelinking info cannot be used.
	(elf_machine_rela): If relocating R_ALPHA_JMP_SLOT in .gnu.conflict
	section, use RESOLVE_CONFLICT_FIND_MAP to find out reloc's link_map.
	* sysdeps/arm/bits/link.h: New file.
	* sysdeps/arm/dl-machine.h (elf_machine_runtime_setup): Save original
	content of .got[1].
	(ELF_MACHINE_NO_RELA): Only define if RTLD_BOOTSTRAP.
	(ELF_MACHINE_PLT_REL): Define.
	(elf_machine_rela, elf_machine_rela_relative): New.
	(elf_machine_lazy_rel): Reinitialize R_ARM_JUMP_SLOT address instead
	of adjusting it if prelinked and prelinking cannot be used.
	* sysdeps/i386/bits/link.h: New file.
	* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Save original
	content of .got[1].
	(ELF_MACHINE_NO_RELA): Only define if RTLD_BOOTSTRAP.
	(ELF_MACHINE_PLT_REL): Define.
	(elf_machine_rela, elf_machine_rela_relative): New.
	(elf_machine_lazy_rel): Reinitialize R_386_JUMP_SLOT address instead
	of adjusting it if prelinked and prelinking cannot be used.
	* sysdeps/powerpc/dl-machine.h (elf_machine_rela): If relocating
	conflicts, skip finaladdr computation.  Use RESOLVE_CONFLICT_FIND_MAP
	to find out map for R_PPC_JMP_SLOT relocs.
	* sysdeps/sparc/sparc32/dl-machine.h (VALIDX): Define.
	(OPCODE_BA): Define.
	(elf_machine_runtime_setup): Reinitialize .plt for prelinked
	libraries where prelinking info cannot be used.
	(sparc_fixup_plt): Renamed from elf_machine_fixup_plt.
	(elf_machine_fixup_plt): Call sparc_fixup_plt.
	(elf_machine_rela): Set value to 0 if relocating conflicts.
	Call sparc_fixup_plt for R_SPARC_JMP_SLOT.
	* sysdeps/sparc/sparc64/dl-machine.h (VALIDX): Define.
	(sparc64_fixup_plt): Fix a typo.
	(elf_machine_rela): Set value to 0 if relocating conflicts.
	Handle R_SPARC_JMP_SLOT relocs when relocating conflicts.
	(elf_machine_runtime_setup): Reinitialize .plt for prelinked
	libraries where prelinking info cannot be used.
	* sysdeps/sh/bits/link.h: New file.
	* sysdeps/sh/dl-machine.h (elf_machine_runtime_setup): Save original
	content of .got[1].
	(elf_machine_lazy_rel): Reinitialize R_SH_JMP_SLOT address instead
	of adjusting it if prelinked and prelinking cannot be used.
	* sysdeps/s390/s390-32/bits/link.h: New file.
	* sysdeps/s390/s390-32/dl-machine.h (elf_machine_runtime_setup):
	Save original content of .got[1].
	(elf_machine_lazy_rel): Reinitialize R_390_JMP_SLOT address instead
	of adjusting it if prelinked and prelinking cannot be used.
	* sysdeps/s390/s390-64/bits/link.h: New file.
	* sysdeps/s390/s390-64/dl-machine.h (elf_machine_runtime_setup):
	Save original content of .got[1].
	(elf_machine_lazy_rel): Reinitialize R_390_JMP_SLOT address instead
	of adjusting it if prelinked and prelinking cannot be used.
	* sysdeps/x86_64/bits/link.h: New file.
	* sysdeps/x86_64/dl-machine.h (elf_machine_runtime_setup):
	Save original content of .got[1].
	(elf_machine_lazy_rel): Reinitialize R_X86_64_JMP_SLOT address instead
	of adjusting it if prelinked and prelinking cannot be used.

2001-12-11  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/ptsname.c (__ptsname_r): Use sizeof
	where appropriate instead of numbers.  Little optimizations.

2001-12-10  Roland McGrath  <roland@frob.com>

	* sysdeps/mach/hurd/bind.c (bind): Don't deallocate IFSOCK if we never
	set it.

	* shlib-versions [USE_IN_LIBIO] (.*-.*-gnu-gnu.*): Set default
	set to GLIBC_2.2.5, not GLIBC_2.2.4.

	* sysdeps/mach/hurd/configure.in (libc_cv_gcc_unwind_find_fde):
	Fix conditionals so this is set by default for stdio and not for libio.
	* sysdeps/mach/hurd/configure: Regenerated.

2001-12-10  Thorsten Kukuk  <kukuk@suse.de>

	* io/ftw.c (ftw_startup): Check, if the path is search and readable.

2001-12-10  Ulrich Drepper  <drepper@redhat.com>

	* io/Makefile (tests): Add bug-ftw3.
	* io/bug-ftw3.c: New file.

	* sysdeps/generic/glob.c (glob): Return only pattern if nothing
	matches and GLOB_NOCHECK is set.
	* posix/globtest.sh: Correct expected result for NOCHECK test.

	* po/ca.po: Update from translation team.

2001-12-09  Ulrich Drepper  <drepper@redhat.com>

	Implement transliteration of characters in strings of the locale
	definitions.
	* locale/programs/linereader.c: Adjust for additional parameter to
	lr_token.
	(get_string): If character <Uxxxx> is not found try to transliterate
	it.
	* locale/programs/ld-ctype.c: Adjust for additional parameter to
	lr_token.  Add const to charmap parameter of all functions.
	(find_translit, find_translit2): New functions.
	* locale/programs/charmap.c: Adjust for additional parameter to
	lr_token.
	* locale/programs/repertoire.c: Likewise.
	* locale/programs/linereader.h: Likewise.
	* locale/programs/ld-address.c: Likewise.  Add const to charmap
	parameter of all functions.
	* locale/programs/ld-collate.c: Likewise.
	* locale/programs/ld-identification.c: Likewise.
	* locale/programs/ld-measurement.c: Likewise.
	* locale/programs/ld-messages.c: Likewise.
	* locale/programs/ld-monetary.c: Likewise.
	* locale/programs/ld-name.c: Likewise.
	* locale/programs/ld-numeric.c: Likewise.
	* locale/programs/ld-paper.c: Likewise.
	* locale/programs/ld-paper.c: Likewise.
	* locale/programs/ld-telephone.c: Likewise.
	* locale/programs/ld-time.c: Likewise.
	* locale/programs/locfile.c: Likewise.
	* locale/programs/localedef.c: Likewise.
	* locale/programs/localedef.h: Likewise.
	* locale/programs/locfile.h: Likewise.  Add declaration for
	find_translit.
	* locale/programs/simple-hash.c: Add const to first parameter of
	find_entry, iterate_table, and lookup.
	* locale/programs/simple-hash.h: Likewise.
	* locale/localeinfo.h: Don't define __LC_LAST here.  Include <locale.h>
	instead.
	* include/locale.h: Define __LC_LAST.
	* iconv/Makefile (CFLAGS-linereader.c): Define to -DNO_TRANSLITERATION.

2001-12-07  Geoff Keating  <geoffk@redhat.com>

	* sysdeps/powerpc/Dist: Update for recent FP changes.
	* sysdeps/powerpc/fpu/Dist: Likewise.

2001-12-07  Andreas Schwab  <schwab@suse.de>

	* sysdeps/unix/sysv/linux/opensock.c: Include <string.h>.

2001-12-06  Geoff Keating  <geoffk@redhat.com>

	* sysdeps/powerpc/Makefile (sysdep_routines): Don't build the fpr
	save/restore functions here.
	(libm-support): Don't define these functions here.
	* sysdeps/powerpc/fpu/Makefile: Build the fpr save/restore
	functions here.
	* sysdeps/powerpc/fe_nomask.c: Move to...
	* sysdeps/powerpc/fpu/fe_nomask.c: ... here.
	* sysdeps/powerpc/fprrest.S: Move to...
	* sysdeps/powerpc/fpu/fprrest.S: ... here.
	* sysdeps/powerpc/fprsave.S: Move to...
	* sysdeps/powerpc/fpu/fprsave.S: ... here.

2001-12-06  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/opensock.c: New file.

2001-12-06  Geoff Keating  <geoffk@redhat.com>

	* config.make.in (with-fp): Define from configure.
	* configure.in: Substitute with_fp.
	* configure: Regenerate.
	* sysdeps/powerpc/Makefile: Set -msoft-float when --without-fp is
	specified, and don't change FPU environment.

2001-12-06  Ulrich Drepper  <drepper@redhat.com>

	* libio/vasprintf.c (_IO_vasprintf): Free buffer on failure.
	* assert/assert.c: Check result of __asprintf call and don't use
	string if it failed.
	* assert/assert-perr.c: Likewise.
	* inet/rcmd.c: Likewise.
	* locale/programs/localedef.c (main): Check result of
	construct_output_path and exit if it failed.
	(construct_output_path): Check result of asprintf and mkdir calls and
	fail if they failed.
	* posix/getopt.c: Check result of __asprintf calls and fail if
	they failed.
	Patch by Dmitry V. Levin <ldv@alt-linux.org>.

2001-12-05  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/strcasecmp.c (__strcasecmp): Little performance
	patch.
	* sysdeps/generic/strncase.c: Likewise.
	* string/tester.c: Add tests for strcasecmp and strncasecmp.

2001-12-05  Geoff Keating  <geoffk@redhat.com>

	* scripts/cpp: Test the exit status from 'type', not 'awk'.

	* sysdeps/powerpc/__longjmp.S: Don't restore FP registers.
	* sysdeps/powerpc/fpu/__longjmp.S: Do restore FP registers.
	* sysdeps/powerpc/setjmp.S: Don't save FP registers.
	* sysdeps/powerpc/fpu/setjmp.S: Do save FP registers.
	* sysdeps/powerpc/fclrexcpt.c: Move to...
	* sysdeps/powerpc/fpu/fclrexcpt.c: ... here.
	* sysdeps/powerpc/fpu_control.h: Move to...
	* sysdeps/powerpc/fpu/fpu_control.h: ... here.

2001-12-05  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/ibm1129.h: Remove duplicate mappings.
	* iconvdata/ibm937.c: Handle overflow errors.  Handle new tables.
	* iconvdata/ibm937.h: Reorganize table to safe a lot of space.
	Patch by Masahide Washizawa <WASHI@jp.ibm.com>.

	* timezone/zic.c: Fix handling of turnaround times.
	Patch by Arthur David Olson <olsona@dc37a.nci.nih.gov>.

2001-12-02  Moshe Olshansky  <OLSHANSK@il.ibm.com>

	* sysdeps/ieee754/dbl-64/e_remainder.c (__ieee754_remainder): Fix
	overflow problem.

2001-12-05  Ulrich Drepper  <drepper@redhat.com>

	* posix/regex.c: For use outside glibc defined bounded pointer
	macros here.  Patch by Jim Meyering <jim@meyering.net>.

	* iconvdata/Makefile (modules): Add TCVN5712-1.
	* iconvdata/TESTS: Add TCVN5712-1.
	* iconvdata/gconv-modules: Likewise.
	* iconvdata/tcvn5712-1.c: New file.
	* iconvdata/testdata/TCVN-5712: New file.
	* iconvdata/testdata/TCVN-5712..UTF8: New file.

2001-12-04  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/cp1258.c: Optimize conversion from UCS4.

2001-12-02  Roland McGrath  <roland@frob.com>

	* mach/Makefile, mach/Machrules: Move comments out of \ continuations.

	* hurd/hurd.h (__hurd_fail): Add `break;' to silence new gcc-3 warning.
	Reported by Jeff Bailey <jbailey@nisa.net>.

	* hurd/hurd.h (_hurd_umask): Remove volatile qualifier from decl.
	Reported by Jeff Bailey <jbailey@nisa.net>.

	* mach/Makefile ($(objpfx)mach-syscalls.mk): Pass $(CFLAGS) to $(CC).
	* mach/Machrules ($(objpfx)%.udeps static pattern rule): Likewise.
	Reported by Jeff Bailey <jbailey@nisa.net>.

2001-12-01  Roland McGrath  <roland@frob.com>

	* sysdeps/mach/hurd/configure.in (libc_cv_gcc_unwind_find_fde): Add
	missing backslash in test arguments.
	* sysdeps/mach/hurd/configure: Regenerated.

2001-11-26  Roland McGrath  <roland@frob.com>

	* hurd/hurdinit.c (_hurd_ports_use): Check if _hurd_ports is null.
	Reported by John Tobey <jtobey@john-edwin-tobey.org>.

2001-11-30  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/Makefile (modules): Add ARMSCII-8.
	* iconvdata/gconv-modules: Add entries for ARMSCII-8.
	* iconvdata/armscii-8.c: New file.

2001-11-29  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/glob.c (next_brace_sub): Return NULL if braces
	don't match, fix {{a,b},c} globbing, clean up.
	Patch by Flavio Veloso <flaviovs@magnux.com>.
	* posix/globtest.sh: Add new tests.

2001-11-29  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/x86_64/Versions: Add arch_prctl.
	* sysdeps/unix/sysv/linux/x86_64/syscalls.list: Add arch_prctl call.

	* sysdeps/generic/abort.c: Include libioP.h for
	_IO_flush_all_lockp prototype.

2001-11-29  Ulrich Drepper  <drepper@redhat.com>

	* posix/regex.h: Define __restrict_arr correctly.

2001-11-28  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/ibm1163.c: New file.
	* iconvdata/ibm1163.h: New file.
	* iconvdata/ibm1164.c: New file.
	* iconvdata/ibm1164.h: New file.
	* iconvdata/TESTS: Add entries for IBM1163 and IBM1164.
	* iconvdata/Makefile: Likewise.
	* iconvdata/testdata/IBM1163: New file.
	* iconvdata/testdata/IBM1163..UTF8: New file.
	* iconvdata/testdata/IBM1164: New file.
	* iconvdata/testdata/IBM1164..UTF8: New file.
	Patch by Masahide Washizawa <WASHI@jp.ibm.com>.

	* iconvdata/ibm1046.h: Optimize.  Remove duplicate mappings.
	* iconvdata/ibm1124.h: Likewise.
	* iconvdata/ibm1132.h: Likewise.
	* iconvdata/ibm1133.h: Likewise.
	* iconvdata/ibm1160.h: Likewise.
	* iconvdata/ibm1161.h: Likewise.
	* iconvdata/ibm1162.h: Likewise.
	* iconvdata/ibm856.h: Likewise.
	* iconvdata/ibm922.h: Likewise.
	* iconvdata/ibm930.h: Likewise.
	* iconvdata/ibm932.h: Likewise.
	* iconvdata/ibm933.h: Likewise.
	* iconvdata/ibm935.h: Likewise.
	* iconvdata/ibm937.h: Likewise.
	* iconvdata/ibm939.h: Likewise.
	* iconvdata/ibm943.h: Likewise.
	* iconvdata/ibm930.c: Pretty printing.
	* iconvdata/ibm937.c: Avoid access accross array boundary.

	* iconv/gconv_open.c (__gconv_open): Empty codeset name now means using
	the current locale's codeset.
	* iconv/iconv_open.c (iconv_open): Don't strip out everything for
	empty input string.
	* iconv/iconv_prog.c: Pass empty strings as default value for to-
	and from-charset.  Don't determine locale's charset here.

	* libio/genops.c (_IO_flush_all_lockp): New function.  The same code
	as the old _IO_flush_all but lock only if parameter is nonzero.
	(_IO_flush_all): Call _IO_flush_all_lockp with 1 as parameter.
	* libio/libioP.h: Add prototype for _IO_flush_all_lockp.
	* sysdeps/generic/abort.c (fflush): Define to _IO_flush_all_lockp(0)
	if libio is used [PR libc/2575].

2001-11-28  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/sparc/fpu/bits/mathinline.h (__signbitf, __signbit,
	__signbitl): Only define for ISO C99.

2001-11-22  Thorsten Kukuk  <kukuk@suse.de>

	* nss/nss_files/files-hosts.c (_nss_files_get##name##_r): Set
	herrnop to NETDB_INTERNAL if we run out of buffer space.

2001-11-28  Ulrich Drepper  <drepper@redhat.com>

	* nss/nss_files/files-XXX.c (internal_getent): Correct input
	overflow test for platforms with signed char.
	Reported by Andrew Haley <aph@cambridge.redhat.com>.

2001-11-28  Bruno Haible  <bruno@clisp.org>

	* locale/programs/simple-hash.c (lookup_2): Remove function.
	(insert_entry_2): Call lookup instead of lookup_2.

2001-03-04  Bruno Haible  <bruno@clisp.org>

	* intl/dcigettext.c (DCIGETTEXT): Increment path_max proportionally.

2001-10-31  Bruno Haible  <bruno@clisp.org>

	* intl/plural.y: Include <stddef.h>, needed for NULL with SunOS 4 cc.

2001-03-21  Bruno Haible  <bruno@clisp.org>

	* intl/dcigettext.c (_nl_state_lock): Mark as #ifdef _LIBC. AIX 3 xlc
	chokes on empty macro arguments.
	* intl/plural.y: Add #pragma for alloca on AIX 3.

2001-11-27  Ulrich Drepper  <drepper@redhat.com>

	* intl/dcigettext.c (guess_category_value): Only implement for
	glibc.  Otherwise rely on function _nl_locale_name which isn't
	present in the glibc sources.

2001-09-24  Bruno Haible  <bruno@clisp.org>

	* intl/loadmsgcat.c (_nl_init_domain_conv): Also enable
	transliteration when building on a glibc system but outside glibc.

2001-09-22  Bruno Haible  <bruno@clisp.org>

	* intl/plural-eval.c: New file, extracted from dcigettext.c.
	* intl/dcigettext.c (plural_eval): Remove function, moved to
	intl/plural-eval.c.
	(plural_lookup): Call PLURAL_EVAL instead of plural_eval.
	Include plural-eval.c.

2001-09-22  Bruno Haible  <bruno@clisp.org>

	* intl/plural-exp.c (EXTRACT_PLURAL_EXPRESSION): Reject numbers that
	don't start with a digit; nplurals must be positive.

2001-09-02  Bruno Haible  <bruno@clisp.org>

	* intl/plural-exp.h: New file, extracted from gettextP.h.
	* intl/plural-exp.c: New file, extracted from loadmsgcat.c.
	* intl/gettextP.h (struct expression, struct parse_args,
	__gettext_free_exp, __gettextparse): Move to plural-exp.h.
	* intl/loadmsgcat.c: Include plural-exp.h.
	(PLURAL_PARSE): Move macro to plural-exp.h.
	(plvar, plone, germanic_plural, INIT_GERMANIC_PLURAL): Move to
	plural-exp.c.
	(_nl_load_domain): Move plural handling code to plural-exp.c.  Call
	EXTRACT_PLURAL_EXPRESSION.
	(_nl_unload_domain): Update.
	* intl/dcigettext.c: Include plural-exp.h.
	* intl/plural.y: Include plural-exp.h, not gettextP.h.
	(FREE_EXPRESSION): Move macro to plural-exp.h.
	* intl/Makefile (routines): Add plural-exp.
	(distribute): Add plural-exp.h.

2001-07-28  Bruno Haible  <bruno@clisp.org>

	* intl/l10nflist.c (_nl_normalize_codeset): Cast isalnum, isalpha,
	isdigit, tolower argument to 'unsigned char'.
	* intl/loadmsgcat.c (_nl_load_domain): Cast isspace argument to
	'unsigned char'.
	* intl/localealias.c (read_alias_file): Cast isspace argument to
	'unsigned char'.

2001-10-20  Bruno Haible  <bruno@clisp.org>

	Assume strchr() exists. (Without it, intl/explodename.c wouldn't link
	anyway.)
	* intl/dcigettext.c (strchr): Remove fallback definition; it conflicts
	with the variable 'index' in plural_lookup.
	* intl/l10nflist.c (strchr): Likewise.
	* intl/localealias.c (strchr): Likewise.

	Assume <stddef.h>, <stdlib.h>, <string.h>, <locale.h> exist.
	* intl/bindtextdom.c: Likewise.
	* intl/dcigettext.c: Likewise.
	* intl/dgettext.c: Likewise.
	* intl/dngettext.c: Likewise.
	* intl/explodename.c: Likewise.
	* intl/finddomain.c: Likewise.
	* intl/gettext.c: Likewise.
	* intl/l10nflist.c: Likewise.
	* intl/loadmsgcat.c: Likewise.
	* intl/localealias.c: Likewise.
	* intl/ngettext.c: Likewise.
	* intl/textdomain.c: Likewise.
	* intl/gettext.h: Assume <limits.h> exists.

2001-11-27  Ulrich Drepper  <drepper@redhat.com>

	* stdio-common/Makefile (tests): Add scanf11.
	* stdio-common/scanf11.c: New file.

2001-11-26  Ulrich Drepper  <drepper@redhat.com>

	* version.h (RELEASE): Define as development.
	(VERSION): Set to 2.2.90.

2001-11-22  Thorsten Kukuk  <kukuk@suse.de>

	* nis/nss_compat/compat-grp.c: Print group id as unsigned long.
	* nis/nss_nis/nis-grp.c: Likewise.
	* nis/nss_nisplus/nisplus-grp.c: Likewise.

	* nis/nss_compat/compat-pwd.c: Print user id as unsigned long.
	* nis/nss_nis/nis-pwd.c: Likewise.
	* nis/nss_nisplus/nisplus-pwd.c: Likewise.

	* nis/nss_nis/nis-publickey.c: Use strtoul instead of atoi.
	* nis/nss_nisplus/nisplus-parser.c: Likewise.
	* nis/nss_nisplus/nisplus-publickey.c: Likewise.

	* nscd/grpcache.c: Use strtoul instead of atol.
	* nscd/pwdcache.c: Likewise.
	* nss/getent.c: Likewise.

2001-11-27  Paul Eggert  <eggert@twinsun.com>

	* sysdeps/posix/tempname.c (__gen_tempname): Try at least
	ATTEMPTS_MIN or TMP_MAX times, whichever is greater.

2001-11-19  Bruno Haible  <bruno@clisp.org>

	* locale/programs/simple-hash.c (insert_entry_2): Resize at 75%, not
	90%.
	(compute_hashval): Shift by 9 bits, not by 4 bits. This drastically
	improves the quality of the hash function, especially for short
	strings.

2001-11-26  Ulrich Drepper  <drepper@redhat.com>

	* stdio-common/vfscanf.c: If incomplete nan of inf(inity) strings
	are found call conv_error and not input_error [PR libc/2669].

	* math/bits/mathcalls.h: Mark ceil and floor as const.
	Reported by David Mosberger.

2001-11-21  Jim Meyering  <meyering@lucent.com>

	* posix/regex.c (iswctype, mbrtowc, wcslen, wcscoll, wcrtomb) [_LIBC]:
	Define to be __-prefixed.
	Remove unnecessary duplication in `#ifdef _LIBC' blocks.

2001-11-26  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/hppa/brk.c: Remove __brk_addr alias,
	avoid warning.

2001-11-26  Stephen L Moshier <moshier@mediaone.net>

	* sysdeps/ieee754/ldbl-128/e_log10l.c (L102B): Fix typo in
	initialization.

	* sysdeps/ieee754/ldbl-128/e_coshl.c (__ieee754_coshl): Remove
	unused variables.  Fix threshold for returning 1.0.

	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (neval, deval): Constify
	argument.

	* sysdeps/ieee754/ldbl-128/s_erfl.c (neval, deval): Likewise, and
	remove unused variables.

	* sysdeps/ieee754/ldbl-128/e_j0l.c (neval, deval): Likewise.

	* sysdeps/ieee754/ldbl-128/e_j1l.c (neval, deval): Likewise, and
	include local math header files.

2001-11-22  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/ldbl-96/s_ilogbl.c (__ilogbl): Add brace to
	avoid warning.

2001-11-21  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/x86_64/sys/debugreg.h: New file.

	* sysdeps/unix/sysv/linux/x86_64/Makefile (sysdep_headers): Add
	sys/debugreg.h

2001-11-15  Andreas Jaeger  <aj@suse.de>

	* include/features.h (__GLIBC_HAVE_LONG_LONG): Define for
	compilers that support it.

	* posix/sys/types.h: Use __GLIBC_HAVE_LONG_LONG.
	* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
	* stdlib/stdlib.h: Likewise.

2001-11-17  Ulrich Drepper  <drepper@redhat.com>

	* posix/regex.c (byte_re_match_2_internal): For gcc replace switch
	statement with gotos.
	Based on a patch by Paolo Bonzini <bonzini@pc-amo3.elet.polimi.it>.

2001-11-16  Stephen L Moshier  <moshier@mediaone.net>

	* sysdeps/ieee754/ldbl-96/s_erfl.c (__erfcl): Fix K&R header.

2001-11-15  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/unwind-dw2-fde.c: Don't use recursive mutexes.

2001-10-02  Jakub Jelinek  <jakub@redhat.com>
	    H.J. Lu  <hjl@gnu.org>

	* Versions.def (libc): Add GCC_3.0.
	* configure.in (libc_cv_gcc_static_libgcc): Set to -static-libgcc
	if gcc supports this flag.
	(EXPORT_UNWIND_FIND_FDE): Define unless target configure disables it.
	(gcc3): Allow glibc to be compiled with gcc 3.x.
	* config.h.in (EXPORT_UNWIND_FIND_FDE): Add.
	* config.make.in (static-libgcc, unwind-find-fde): Add.
	* Makerules (build-shlib-helper, build-module-helper): Use it.
	* scripts/versions.awk: Make sure GLIBC_ versions come first.
	* elf/soinit.c (__libc_global_ctors): Set tbases and dbases if
	necessary.
	(_fini): Call __deregister_frame_info_bases if
	__register_frame_info_bases was used to register.
	* elf/Versions (__register_frame_info, __deregister_frame_info): Add
	for GLIBC_2.0.
	(__register_frame_info_bases, __register_frame_info_table_bases,
	__deregister_frame_info_bases, _Unwind_Find_FDE): Add for GCC_3.0.
	* elf/Makefile (routines): Add unwind-dw2-fde.
	(shared-only-routines): Add unwind-dw2-fde.
	* sysdeps/alpha/gccframe.h: New file.
	* sysdeps/arm/gccframe.h: New file.
	* sysdeps/generic/framestate.c: New file.
	* sysdeps/generic/dwarf2.h: New file.
	* sysdeps/generic/gccframe.h (struct object): Update from gcc 3.0.
	* sysdeps/generic/unwind-dw2-fde.c: New file.
	* sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c: New file.
	* sysdeps/generic/unwind-dw2-fde.h: New file.
	* sysdeps/generic/unwind-dw2.c: New file.
	* sysdeps/generic/unwind-pe.h: New file.
	* sysdeps/generic/unwind.h: New file.
	* sysdeps/hppa/gccframe.h: New file.
	* sysdeps/i386/gccframe.h: New file.
	* sysdeps/m68k/gccframe.h: New file.
	* sysdeps/mips/gccframe.h: New file.
	* sysdeps/powerpc/gccframe.h: New file.
	* sysdeps/s390/gccframe.h: New file.
	* sysdeps/sh/gccframe.h: New file.
	* sysdeps/sparc/gccframe.h: New file.
	* sysdeps/vax/gccframe.h: New file.
	* sysdeps/unix/sysv/linux/configure.in (libc_cv_gcc_unwind_find_fde):
	Set on all architectures except ia64.
	* sysdeps/mach/hurd/configure.in (libc_cv_gcc_unwind_find_fde): Set
	for i386.
	* sysdeps/mach/hurd/i386/Versions (__register_frame_info,
	__deregister_frame_info): Move to elf/Versions.
	* sysdeps/unix/sysv/linux/m68k/Versions: Likewise.
	* sysdeps/unix/sysv/linux/arm/Versions: Likewise.
	* sysdeps/unix/sysv/linux/alpha/Versions: Likewise.
	* sysdeps/unix/sysv/linux/i386/Versions: Likewise.
	* sysdeps/unix/sysv/linux/mips/Versions: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/Versions: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/Versions: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/Versions: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/Versions: Likewise.
	* sysdeps/mach/hurd/i386/Makefile (sysdep-routines): Add framestate.
	* sysdeps/unix/sysv/linux/arm/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/alpha/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/i386/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/m68k/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/mips/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/sparc/Makefile: Likewise.

2001-11-15  Jeff Law  <law@redhat.com>

	* posix/regex.c (uintptr_t): Do not provide a definition if the
	system provided one.

2001-11-13  Roland McGrath  <roland@frob.com>

	* stdio-common/tmpfile.c: Moved to ...
	* sysdeps/generic/tmpfile.c: ... here.
	* sysdeps/mach/hurd/tmpfile.c: New file.

	* hurd/fopenport.c (__fopenport): Renamed from fopenport.
	[USE_IN_LIBIO] (fopencookie): #define as _IO_fopencookie.
	(fopenport): Define as weak alias.

	* libio/iofopncook.c (_IO_fopencookie): Move forward declaration ...
	* libio/libioP.h: ... to here.

2001-11-12  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-reloc.c (_dl_relocate_object): Avoid iterating over
	program header twice.  Construct list with the needed information.

2001-11-10  Ulrich Drepper  <drepper@redhat.com>

	* po/ca.po: Update from translation team.

	* elf/dl-load.c (_dl_map_object_from_fd): Remove use of
	_dl_pf_to_prot.  Use arithmetic operation using PF_TO_PROT macro.
	* sysdeps/generic/ldsodefs.h (PF_TO_PROT): New macro.
	* elf/dl-reloc.c (_dl_relocate_object): Likewise.

2001-11-10  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/ldbl-128/e_log2l.c: New file.
	* sysdeps/ieee754/ldbl-128/e_log10l.c: Likewise.
	Contributed by Stephen L Moshier <moshier@mediaone.net>.

2001-11-09  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-minimal.c (realloc): Handle NULL for first parameter
	correctly.
	* elf/dl-load.c (is_dst): New function.
	(_dl_dst_count): Use is_dst to check for DST variable.
	(_dl_dst_substitute): Likewise.

2001-11-09  Roland McGrath  <roland@frob.com>

	Hurd/PowerPC port contributed by Peter Bruin <pjbruin@dds.nl>.
	* sysdeps/mach/hurd/powerpc/exc2signal.c: New file.
	* sysdeps/mach/hurd/powerpc/init-first.c: New file.
	* sysdeps/mach/hurd/powerpc/intr-msg.h: New file.
	* sysdeps/mach/hurd/powerpc/longjmp-ts.c: New file.
	* sysdeps/mach/hurd/powerpc/register-dump.h: New file.
	* sysdeps/mach/hurd/powerpc/sigreturn.c: New file.
	* sysdeps/mach/hurd/powerpc/static-start.S: New file.
	* sysdeps/mach/hurd/powerpc/trampoline.c: New file.
	* sysdeps/mach/hurd/powerpc/bits/sigcontext.h: New file.
	* sysdeps/mach/hurd/powerpc/Dist: New file.

	* hurd/privports.c (__get_privileged_ports):
	Only contact the proc server if necessary for this call.
	Suggested by Neal H Walfield <neal@cs.uml.edu>.
	Check error return for mach_port_mod_refs.

2001-11-09  Andreas Schwab  <schwab@suse.de>

	* sysdeps/unix/sysv/linux/m68k/bits/resource.h: New file.

2001-11-09  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-load.c (lose): Remove some unnecessary code.  The new
	object is always the last in the list.
	(_dl_map_object_from_fd): Delete code to remove from object list
	when DF_1_NOOPEN is seen.  This is done in lose.

2001-11-08  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-object.c (_dl_new_object): Various small optimizations.

2001-11-07  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/dl-cache.c: Optimize SEARCH_CACHE and
	HWCAP_CHECK macro code.

	* elf/dl-misc.c (_dl_sysdep_read_whole_file): Optimize code a bit.
	Now returns MAP_FAILED on error.
	* elf/rtld.c: Adjust caller.
	* sysdeps/generic/dl-cache.c: Likewise.
	* sysdeps/generic/ldsodefs.h: Adjust description.

	* elf/dl-version.c (match_symbol): Optimize error handling for size.
	(_dl_check_map_versions): Likewise.

2001-11-06  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-load.c (_dl_map_object_from_fd): Don't call
	_dl_signal_error directly, always use lose.  Set fd to -1 after
	file is closed.
	(lose): Don't call close if fd == -1.

2001-11-07  Kaoru Fukui  <k_fukui@highway.ne.jp>

	* manual/charset.texi: Fix typo @w[ISO 6937] to  @w{ISO 6937}.
	 Also fix typo @code {mbsinit} to @code{mbsinit}.

2001-11-06  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-profile.c: Replace state variable with simple flag named
	running.  Remove commented-out code.

	* elf/dl-load.c (decompose_rpath): Optimize error handling for size.
	(_dl_init_paths): Likewise.
	(_dl_map_object_from_fd): Likewise.
	* elf/dl-reloc.c (_dl_relocate_object): Likewise.

2001-11-06  Roland McGrath  <roland@frob.com>

	* sysdeps/mach/powerpc/sysdep.h: Include sysdeps/unix/powerpc/sysdep.h
	instead of sysdeps/powerpc/elf/sysdep.h and sysdeps/unix/sysdep.h.

	* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Don't include
	sysdeps/powerpc/elf/sysdep.h.
	Reported by Kaoru Fukui <k_fukui@highway.ne.jp>.

2001-11-05  Ulrich Drepper  <drepper@redhat.com>

	* elf/rtld.c (process_dl_debug): Rewritten.  Optimized for size not
	speed.
	(process_envvars): Some more optimizations.
	* sysdeps/generic/ldsodefs.h (DL_DEBUG_HELP): New macro.

	* elf/elf.h: Add dynamic tag definitions for prelinking.

	* elf/rtld.c (process_envvars): Avoid using array of string pointers.
	Rewrite code to remove environment varables for SUID binaries.
	Small optimization in LD_PROFILE handling.
	* sysdeps/generic/unsecvars.h: Adjust format for process_envvars
	changes.
	* sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise.

	* sysdeps/generic/dl-sysdep.c: Don't initialize _dl_cpuclock_offset.

	* elf/dl-reloc.c (_dl_reloc_bad_type): Rewrite to not use writable
	strings.  Change type of second parameter.
	* sysdeps/generic/ldsodefs.h: Adjust _dl_reloc_bad_type prototype
	for last change.

	* io/fts.h: Prevent using <fts.h> with _FILE_OFFSET_BITS=64.

2001-11-04  Joseph S. Myers  <jsm28@cam.ac.uk>

	* manual/string.texi: Fix typos.
	* manual/examples/argp-ex2.c: Likewise.

2001-11-05  Roland McGrath  <roland@frob.com>

	* sysdeps/powerpc/elf/sysdep.h: Remove this file, because it overrides
	the more-specific unix/sysv/linux/powerpc file and breaks everything.
	* sysdeps/powerpc/sysdep.h (ALIGNARG, ASM_TYPE_DIRECTIVE,
	ASM_SIZE_DIRECTIVE, CALL_MCOUNT, ENTRY, EALIGN, DO_CALL, JUMPTARGET,
	PSEUDO, PSEUDO_RET, PSEUDO_END, L, C_TEXT): These macros moved here
	here, put under [__ELF__].

2001-11-05  Ulrich Drepper  <drepper@redhat.com>

	* manual/charset.texi: Extensive editing work.
	* manual/nss.texi: Likewise.
	Changes by Dennis Grace <dgrace@us.ibm.com>.

2001-11-04  Roland McGrath  <roland@frob.com>

	* hurd/set-host.c (_hurd_set_host_config): Use O_WRONLY in flags
	parameter to dir_mkfile.

2001-11-02  Jakub Jelinek  <jakub@redhat.com>

	* string/bits/string2.h (__strndup): If n is smaller than len, set
	len to n + 1.
	* string/tester.c (test_strndup): New function.
	(main): Call it.

2001-11-01  Ulrich Drepper  <drepper@redhat.com>

	* sunrpc/rpc_main.c: Optimize variable definitions a bit.

	* sunrpc/Makefile (rpcgen-cmd): Use ../scripts/cpp in rpcgen calls.
	* scripts/cpp: New file.

	* elf/dl-load.c (_dl_map_object): Correct test of DF_1_NODEFLIB
	for rtld_search_dirs content.  Minor optimizations.

2001-10-31  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-load.c (_dl_map_object): Make code a bit more compact by
	avoiding unnecessary duplication.

2001-10-31  Jakub Jelinek  <jakub@redhat.com>

	* elf/dl-load.c (_dl_map_object): If library was found using
	LD_LIBRARY_PATH, don't try RUNPATH list.

2001-10-31  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h (REGISTER_DUMP):
	Correct second argument of register_dump call.
	* sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h (REGISTER_DUMP):
	Likewise.

2001-10-31  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/Makefile: Add support for IBM1132, IBM1133, and IBM1162
	modules.
	* iconvdata/TESTS: Likewise.
	* iconvdata/gconv-modules: Likewise.
	* iconvdata/ibm1132.c: New file.
	* iconvdata/ibm1132.h: New file.
	* iconvdata/ibm1133.c: New file.
	* iconvdata/ibm1133.h: New file.
	* iconvdata/ibm1162.c: New file.
	* iconvdata/ibm1162.h: New file.
	* iconvdata/testdata/IBM1132: New file.
	* iconvdata/testdata/IBM1132..UTF8: New file.
	* iconvdata/testdata/IBM1133: New file.
	* iconvdata/testdata/IBM1133..UTF8: New file.
	* iconvdata/testdata/IBM1162: New file.
	* iconvdata/testdata/IBM1162..UTF8: New file.
	Patches by Masahide Washizawa <WASHI@jp.ibm.com>.

	* string/string.h: Fix typo in comment.
	* wcsmbs/wchar.h: Likewise.

2001-10-30  Joseph S. Myers  <jsm28@cam.ac.uk>

	* manual/getopt.texi (getopt_long, getopt_long_only): Include
	const in type of longopts parameter.

2001-10-29  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/dbl-64/mpa.h: Add prototypes for internal functions.

2001-10-29  Kevin Ryde  <user42@zip.com.au>

	* manual/stdio.texi (Integer Conversions): Corrections to sample printf
	output, clarify `#' behaviour on 0.
	(Floating-Point Conversions): Clarify that %g only uses %e when
	the exponent would be greater than 1.

2001-10-28  Roland McGrath  <roland@frob.com>

	Support for Mach/PowerPC contributed by Peter Bruin <pjbruin@dds.nl>.
	* sysdeps/mach/powerpc/machine-sp.h: New file.
	* sysdeps/mach/powerpc/sysdep.h: New file.
	* sysdeps/mach/powerpc/thread_state.h: New file.

	* sysdeps/mach/hurd/i386/Makefile: File removed; crt0.o rules moved ...
	* sysdeps/mach/hurd/Makefile: ... to here.  For the time being, we can
	expect to need the same thing on every platform.

	* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: File moved ...
	* sysdeps/generic/sys/ucontext.h: ... to replace this one.

	* sysdeps/unix/sysv/linux/powerpc/sysdep.h (ALIGNARG,
	ASM_TYPE_DIRECTIVE, ASM_SIZE_DIRECTIVE, CALL_MCOUNT, ENTRY, EALIGN,
	DO_CALL, JUMPTARGET, PSEUDO, PSEUDO_RET, PSEUDO_END, L, C_TEXT):
	Move all these assembly-related definitions to ...
	* sysdeps/powerpc/elf/sysdep.h: ... this new file.

	* sysdeps/mach/powerpc/machine-lock.h: Assembly code rewritten
	by Peter Bruin <pjbruin@dds.nl>.

	* hurd/hurdselect.c (_hurd_select): Check SELECT_RETURNED bit when
	packing results for a `poll' call.

2001-10-26  Ulrich Drepper  <drepper@redhat.com>

	* posix/fnmatch_loop.c: Recognize - at end of bracket expression
	correctly.
	* posix/tst-fnmatch.input: Add tests for - at beginning and end of
	bracket expression.

	* string/strxfrm.c [USE_IN_EXTENDED_LOCALE_MODEL]: Correctly get
	nrules value.
	* string/tst-strxfrm.c (test): Also test __strxfrm_l.

2001-10-24  H.J. Lu  <hjl@gnu.org>

	* sysdeps/generic/bits/dlfcn.h (DL_CALL_FCT): Cast to void *.
	Use __BEGIN_DECLS/__END_DECLS around prototypes.
	* sysdeps/mips/bits/dlfcn.h (DL_CALL_FCT): Likewise.

2001-10-21  Jim Meyering  <meyering@lucent.com>

	* malloc/obstack.c (_): Honor the setting of ENABLE_NLS.  Otherwise,
	this code would end up calling gettext even in packages built
	with --disable-nls.
	* posix/getopt.c (_): Likewise.
	* posix/regex.c (_): Likewise.

2001-10-26  Ulrich Drepper  <drepper@redhat.com>

	* resolv/gethnamaddr.c (gethostbyaddr): Use ip6.addr for reverse
	lookup not ip6.int.
	* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyaddr_r): Likewise.
	Reported by Martin.v.Loewis@t-online.de [PR libc/2598].

2001-10-19  Jakub Jelinek  <jakub@redhat.com>

	* misc/sys/cdefs.h (__attribute_used__): Define.
	* elf/rtld.c (_dl_start): Add __attribute_used__.
	* elf/dl-runtime.c (fixup, profile_fixup): Likewise.

2001-10-25  Andreas Schwab  <schwab@suse.de>

	* stdlib/a64l.c: Expect least significant digit first.
	* stdlib/l64a.c: Produce least significant digit first.
	* stdlib/Makefile (tests): Add test-a64l.
	* stdlib/test-a64l.c: New file.
	Reported by Masaki Hasegawa <masaki-h@pp.iij4u.or.jp>.

2001-10-21  Ulrich Drepper  <drepper@redhat.com>

	* po/sk.po: Update from translation team.

2001-10-18  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/i386/elf/start.S (_fp_hw): Define object type.

2001-10-18  Andreas Schwab  <schwab@suse.de>

	* math/libm-test.inc (print_ulps): Print ulp values rounded to
	next whole number.
	(print_function_ulps): Likewise.
	(print_complex_function_ulps): Likewise.
	(print_max_error): Likewise.
	(print_complex_max_error): Likewise.  Handle ignore_max_ulp.

2001-10-16  Andreas Schwab  <schwab@suse.de>

	* sysdeps/m68k/fpu/libm-test-ulps: Updated for fixed cbrtl
	implementation.

	* sysdeps/m68k/setjmp.c: Also define setjmp and _setjmp if
	BSD_SETJMP or BSD__SETJMP is defined, resp.
	* sysdeps/m68k/bsd-setjmp.c: Inline setjmp code instead of making
	a tail call to __sigsetjmp that would require extending the
	caller's frame.
	* sysdeps/m68k/bsd-_setjmp.c: Likewise.
	* sysdeps/m68k/bsd-setjmp.S: Deleted.
	* sysdeps/m68k/bsd-_setjmp.S: Deleted.
	Reported by Jes Sorensen <jes@trained-monkey.org>.

2001-10-16  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/ldbl-96/s_nextafterl.c (__nextafterl): Fix
	parentheses.  Reported by David Byron <dbyron@porto.coactive.com>,
	close PR libc/2589.

2001-10-15  Ulrich Drepper  <drepper@redhat.com>

	* po/ca.po: New file.  Contributed by the translation team.

2001-10-15  Ralf Baechle  <ralf@gnu.org>

	* sysdeps/unix/sysv/linux/mips/sys/sysmips.h: Make sysmips() prototype
	a varargs prototype.  Remove dependency from kernel header files.

	* sysdeps/unix/sysv/linux/mips/bits/termios.h: General cleanup, use
	__USE_MISC / __USE_XOPEN not __USE_BSD where appropriate.

2001-10-14  Ulrich Drepper  <drepper@redhat.com>

	* locale/programs/ld-collate.c (handle_ellipsis): Use %lX not %lx
	to generate hexadecimal identifier.
	Patch by Jungshik Shin <jungshik.shin@yale.edu>.

2001-10-09  Stephen L Moshier  <moshier@mediaone.net>

	* sysdeps/ieee754/ldbl-96/s_cbrtl.c (__cbrtl): Fix algorithm.

2001-10-14  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/ieee754/ldbl-128/e_powl.c: New file.
	* sysdeps/ieee754/ldbl-128/s_cbrtl.c: New file.
	Contributed by Stephen L Moshier <moshier@mediaone.net>.

	* sysdeps/ieee754/ldbl-128/e_j0l.c: Constify float variables.
	* sysdeps/ieee754/ldbl-128/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c: Likewise
	* sysdeps/ieee754/ldbl-128/s_erfl.c: Likewise
	* sysdeps/ieee754/ldbl-128/s_expm1l.c: Likewise
	* sysdeps/ieee754/ldbl-128/s_log1pl.c: Likewise

	* timezone/africa: Update from tzdata2001d.
	* timezone/asia: Likewise.
	* timezone/australasia: Likewise.
	* timezone/backward: Likewise.
	* timezone/europe: Likewise.
	* timezone/leapseconds: Likewise.
	* timezone/northamerica: Likewise.
	* timezone/southamerica: Likewise.
	* timezone/zone.tab: Likewise.

2001-10-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/s390/s390-32/sys/ucontext.h: Correct __psw_t typedef.
	* sysdeps/s390/s390-64/sys/ucontext.h: Likewise.

2001-10-12  Ulrich Drepper  <drepper@redhat.com>

	* elf/elf.h (PT_TLS): New definition.

2001-10-10  Jeff Bailey  <jbailey@nisa.net>

	* sysdeps/mach/hurd/Makefile: Add $(CFLAGS) for generation of
	bits/errno.h

2001-10-07  Roland McGrath  <roland@frob.com>

	* sysdeps/mach/hurd/setrlimit.c (__setrlimit): Never return ENOSYS.

2001-10-10  Ulrich Drepper  <drepper@redhat.com>

	* elf/elf.h: Add more ELFOSABI_* constants.

2001-10-04  Ben Collins  <bcollins@debian.org>

	* sysdeps/generic/inttypes.h: Fix typo (define, not defined) in
	decleration of __need_wchar_t.

2001-10-03  Jakub Jelinek  <jakub@redhat.com>

	* string/bits/string2.h (__strsep_g): Add prototype.
	(__strsep): Use it.
	* string/Versions (__strsep): Remove.
	* sysdeps/generic/strsep.c (__strsep_g): Add alias to __strsep.

2001-10-07  Ulrich Drepper  <drepper@redhat.com>

	* manua/llio.texi: Clarify file references added by mmap.
	Patch by Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>.

2001-09-29  Jes Sorensen  <jes@trained-monkey.org>

	* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (struct sigcontext):
	Add sc_loadrs and sc_rbs_bas to match current kernel.

2001-09-27  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update.

	* sysdeps/ieee754/ldbl-128/s_erfl.c (__erfcl): Fix erfc(-inf).

2001-09-27  Jakub Jelinek  <jakub@redhat.com>

	* elf/dl-open.c (dl_open_worker): If l_opencount of freshly loaded
	object has been bumped because of relocation dependency, avoid
	duplicates in l_scope.
	(show_scope): Fix typos.
	* elf/Makefile: Add rules to build and run reldep6.
	* elf/reldep6.c: New file.
	* elf/reldep6mod0.c: New file.
	* elf/reldep6mod1.c: New file.
	* elf/reldep6mod2.c: New file.
	* elf/reldep6mod3.c: New file.
	* elf/reldep6mod4.c: New file.

2001-09-26  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_fixup_plt): Call
	sparc64_fixup_plt.
	(sparc64_fixup_plt): Moved from elf_machine_fixup_plt.  Optimize
	near jumps and 0xfffff800XXXXXXXX target addresses, no thread safety
	for non-lazy binding. Fix .plt[32768+] handling.
	(elf_machine_plt_value): Don't add addend.
	(elf_machine_rela): Call sparc64_fixup_plt instead of
	elf_machine_fixup_plt.
	(elf_machine_runtime_setup, TRAMPOLINE_TEMPLATE): Optimize for
	dynamic linker at 0xfffff800XXXXXXXX.

	* sysdeps/sparc/sparc32/fpu/libm-test-ulps: Update.

2001-09-28  Ulrich Drepper  <drepper@redhat.com>

	* elf/elf.h: Define SHF_GROUP and SHF_TLS.

2001-09-25  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/unix/bsd/bsd4.4/bits/socket.h (struct cmsghdr): Don't
	declare __cmsg_data field if its size would be bigger than 0.
	(CMSG_DATA): Adjust accordingly.
	* sysdeps/unix/sysv/aix/bits/socket.h: Likewise.
	* sysdeps/unix/sysv/linux/alpha/bits/socket.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/socket.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h: Likewise.
	* sysdeps/unix/sysv/linux/bits/socket.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/socket.h: Likewise.

2001-09-25  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/TESTS: Add entries for IBM1160 and IBM1161.
	* iconvdata/testdata/IBM1160: New file.
	* iconvdata/testdata/IBM1160..UTF8: New file.
	* iconvdata/testdata/IBM1161: New file.
	* iconvdata/testdata/IBM1161..UTF8: New file.
	Patch by Masahide Washizawa <WASHI@jp.ibm.com>.

2001-09-24  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/bsd/ulimit.c (ulimit): Handle overflow in
	UL_SETFSIZE computations better.

	* rt/Makefile: Remove use of filter for librt again.

	* sysdeps/unix/sysv/linux/ulimit.c (__ulimit): Handle overflow in
	UL_SETFSIZE computations better.

	* string/Versions: Export __strsep for GLIBC_2.2.5.
	* string/bits/string2.h: Define all __STRING_INLINE functions if
	_FORCE_INLINES is defined.
	Use int instead of char of parameter types.
	(__strsep): Don't use __strsep_g.  Don't define it.
	(__strsep_1c, __strsep_2c, __strsep_3c): Optimize.
	* sysdeps/i386/i486/string.h (__strcpy_a_small): Renamed from
	__strcpy_small.
	(__stpcpy_a_small): Renamed from __stpcpy_small.
	(__strcspn_c1): Don't define if _FORCE_INLINES.
	(__strspn_c1): Likewise.

2001-09-22  Ben Collins  <bcollins@debian.org>

	* sysdeps/sparc/bits/sigaction.h: Define SA_RESTART and friends when
	_UNIX98_SOURCE is defined too.  Matches generic/bits/sigaction.h.
	* sysdeps/ia64/bits/sigaction.h: Likewise.
	* sysdeps/s390/s390-64/bits/sigaction.h: Likewise.

2001-09-24  Andrew Haley  <aph@cambridge.redhat.com>

	* sysdeps/unix/sysv/linux/sh/Makefile (sysdep_headers): Add sys/io.h.

2001-09-24  Jakub Jelinek  <jakub@redhat.com>

	* elf/dl-open.c (dl_open_worker): Update l_scope_max.

2001-09-24  Ulrich Drepper  <drepper@redhat.com>

	* wcsmbs/wchar.h: Add __attribute_pure__ to mbsinit prototype.

2001-09-20  H.J. Lu  <hjl@gnu.org>

	* include/dlfcn.h (__RTLD_SPROF): New definiton.
	* elf/dl-open.c (dl_open_worker): Return immediately after loading
	for __RTLD_SPROF.
	* elf/sprof.c (main): Default to the filename if soname doesn't exist.
	(load_shobj): Call dlopen with `RTLD_LAZY | __RTLD_SPROF'.

2001-09-20  H.J. Lu  <hjl@gnu.org>

	* elf/dl-profile.c (_dl_mcount): Use old *narcsp value for newarc,
	don't add 1.

2001-09-22  Ulrich Drepper  <drepper@redhat.com>

	* nss/getent.c: Accept -s parameter to overwrite rules in
	nsswitch.conf.  Patch by Nalin Dahyabhai <nalin@redhat.com>.

	* nss/nss_files/files-network.c (LINE_PARSER): Pad addr string
	with as many ".0" as necessary to form a complete address
	inet_network understands.

	* nss/getent.c: Various cleanups.  Use simpler and fewer function
	calls.

2001-09-20  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/s390/s390-32/bits/setjmp.h: Correct pointer comparison in
	_JMPBUF_UNWINDS.
	* sysdeps/s390/s390-64/bits/setjmp.h: Likewise.

2001-09-22  Ulrich Drepper  <drepper@redhat.com>

	* iconvdata/Makefile: Add rules to build and distribute IBM1160 and
	IBM1161.
	* iconvdata/gconv-modules: Add entries for IBM1160 and IBM1161.
	* iconvdata/ibm1160.c: New file.
	* iconvdata/ibm1160.h: New file.
	* iconvdata/ibm1161.c: New file.
	* iconvdata/ibm1161.h: New file.
	Patch by Masahide Washizawa <WASHI@jp.ibm.com>.

2001-09-19  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/alpha/dl-machine.h (elf_machine_load_address): Compute the
	difference between base address and first PT_LOAD's virtual address,
	not the base address.

2001-09-11  Tom Rix  <trix@redhat.com>

	* sysdeps/unix/sysv/aix/init-first.c (init):  Use USE_NONONPTION_FLAG
	ifdef for __getopt_clean_environment.
	* sysdeps/unix/sysv/aix/libc-start.c: Add real implementation.

2001-09-22  Andreas Jaeger  <aj@suse.de>

	* elf/reldep4.c (main): Add proper prototype to fix warning.

	* elf/reldep5.c (main): Remove unused variable.

	* math/math_private.h: Add prototypes.

2001-09-21  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/x86_64/Dist: New file.
	* sysdeps/x86_64/Dist: New file.
	* sysdeps/x86_64/soft-fp/Dist: New file.

	* sysdeps/gnu/Dist: Remove eval.c.

2001-09-20  Ulrich Drepper  <drepper@redhat.com>

	* malloc/memusage.c (realloc): Don't count already allocated
	memory in the sums.
	(me): Always use dlsym() to find the real implementations.

	* malloc/memusage.sh: Make -n option actually do something.

2001-09-20  Andreas Jaeger  <aj@suse.de>

	* elf/elf.h (R_390_NUM): Correct value.

	* Versions.def: Add missing versions 2.2.3 for libthread_db and
	libpthread.

	* sysdeps/unix/sysv/linux/configure.in: Add minimal kernel version
	for x86-64, install x86-64 into */lib64.

	* shlib-versions: Add x86-64.

	* elf/elf.h: Add x86-64 relocations.

2001-09-19  Ulrich Drepper  <drepper@redhat.com>

	* po/fr.po: Update from translation team.

2001-09-19  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/x86_64/Makefile: New file.
	* sysdeps/unix/sysv/linux/x86_64/Versions: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/mman.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/stat.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/statfs.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/time.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/types.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/brk.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/clone.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/fstatfs64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/ftruncate64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/fxstat.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/fxstat64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/getdents.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/getdents64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/getrlimit64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/glob64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/lxstat.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/lxstat64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/mmap64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/pread64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/profil-counter.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/pwrite64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir64_r.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir_r.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/recv.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/register-dump.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/send.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/setrlimit64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigaction.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigpending.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigprocmask.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigsuspend.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/statfs64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/perm.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/procfs.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/reg.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/ucontext.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/user.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/syscall.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/syscalls.list: New file.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/time.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/truncate64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/umount.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/vfork.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/xstat.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/xstat64.c: New file.
	* sysdeps/unix/x86_64/sysdep.S: New file.
	* sysdeps/unix/x86_64/sysdep.h: New file.
	* sysdeps/x86_64/Implies: New file.
	* sysdeps/x86_64/Makefile: New file.
	* sysdeps/x86_64/Versions: New file.
	* sysdeps/x86_64/__longjmp.S: New file.
	* sysdeps/x86_64/abort-instr.h: New file.
	* sysdeps/x86_64/atomicity.h: New file.
	* sysdeps/x86_64/bits/endian.h: New file.
	* sysdeps/x86_64/bits/setjmp.h: New file.
	* sysdeps/x86_64/bits/string.h: New file.
	* sysdeps/x86_64/bp-asm.h: New file.
	* sysdeps/x86_64/bsd-_setjmp.S: New file.
	* sysdeps/x86_64/bsd-setjmp.S: New file.
	* sysdeps/x86_64/dl-machine.h: New file.
	* sysdeps/x86_64/elf/initfini.c: New file.
	* sysdeps/x86_64/elf/start.S: New file.
	* sysdeps/x86_64/ffs.c: New file.
	* sysdeps/x86_64/ffsll.c: New file.
	* sysdeps/x86_64/fpu/bits/fenv.h: New file.
	* sysdeps/x86_64/fpu/bits/mathdef.h: New file.
	* sysdeps/x86_64/fpu/e_acosl.c: New file.
	* sysdeps/x86_64/fpu/e_atan2l.c: New file.
	* sysdeps/x86_64/fpu/e_exp2l.S: New file.
	* sysdeps/x86_64/fpu/e_expl.c: New file.
	* sysdeps/x86_64/fpu/e_fmodl.S: New file.
	* sysdeps/x86_64/fpu/e_log10l.S: New file.
	* sysdeps/x86_64/fpu/e_log2l.S: New file.
	* sysdeps/x86_64/fpu/e_logl.S: New file.
	* sysdeps/x86_64/fpu/e_powl.S: New file.
	* sysdeps/x86_64/fpu/e_rem_pio2l.c: New file.
	* sysdeps/x86_64/fpu/e_scalbl.S: New file.
	* sysdeps/x86_64/fpu/e_sqrtl.c: New file.
	* sysdeps/x86_64/fpu/fclrexcpt.c: New file.
	* sysdeps/x86_64/fpu/fedisblxcpt.c: New file.
	* sysdeps/x86_64/fpu/feenablxcpt.c: New file.
	* sysdeps/x86_64/fpu/fegetenv.c: New file.
	* sysdeps/x86_64/fpu/fegetexcept.c: New file.
	* sysdeps/x86_64/fpu/fegetround.c: New file.
	* sysdeps/x86_64/fpu/feholdexcpt.c: New file.
	* sysdeps/x86_64/fpu/fesetenv.c: New file.
	* sysdeps/x86_64/fpu/fesetround.c: New file.
	* sysdeps/x86_64/fpu/fgetexcptflg.c: New file.
	* sysdeps/x86_64/fpu/fraiseexcpt.c: New file.
	* sysdeps/x86_64/fpu/fsetexcptflg.c: New file.
	* sysdeps/x86_64/fpu/ftestexcept.c: New file.
	* sysdeps/x86_64/fpu/libm-test-ulps: New file.
	* sysdeps/x86_64/fpu/math_ldbl.h: New file.
	* sysdeps/x86_64/fpu/printf_fphex.c: New file.
	* sysdeps/x86_64/fpu/s_atanl.c: New file.
	* sysdeps/x86_64/fpu/s_cosl.S: New file.
	* sysdeps/x86_64/fpu/s_expm1l.S: New file.
	* sysdeps/x86_64/fpu/s_fpclassifyl.c: New file.
	* sysdeps/x86_64/fpu/s_isinfl.c: New file.
	* sysdeps/x86_64/fpu/s_isnanl.c: New file.
	* sysdeps/x86_64/fpu/s_log1pl.S: New file.
	* sysdeps/x86_64/fpu/s_logbl.c: New file.
	* sysdeps/x86_64/fpu/s_nextafterl.c: New file.
	* sysdeps/x86_64/fpu/s_nexttoward.c: New file.
	* sysdeps/x86_64/fpu/s_nexttowardf.c: New file.
	* sysdeps/x86_64/fpu/s_rintl.c: New file.
	* sysdeps/x86_64/fpu/s_significandl.c: New file.
	* sysdeps/x86_64/fpu/s_sincosl.S: New file.
	* sysdeps/x86_64/fpu/s_sinl.S: New file.
	* sysdeps/x86_64/fpu/s_tanl.S: New file.
	* sysdeps/x86_64/gmp-mparam.h: New file.
	* sysdeps/x86_64/hp-timing.c: New file.
	* sysdeps/x86_64/hp-timing.h: New file.
	* sysdeps/x86_64/htonl.S: New file.
	* sysdeps/x86_64/memusage.h: New file.
	* sysdeps/x86_64/setjmp.S: New file.
	* sysdeps/x86_64/soft-fp/sfp-machine.h: New file.
	* sysdeps/x86_64/stackinfo.h: New file.
	* sysdeps/x86_64/sysdep.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed: New file.

	* sysdeps/ieee754/ldbl-128/s_erfl.c: New file, contributed Stephen
	L Moshier.

2001-09-18  Ulrich Drepper  <drepper@redhat.com>

	* malloc/malloc.c (ptmalloc_init): Handle _environ==NULL.
	Reported by B. D. Elliott <bde@nwlink.com> [PR libc/2541].

2001-09-18  Andreas Schwab  <schwab@suse.de>

	* elf/dl-load.c (_dl_map_object_from_fd): Update handling of scope
	list, now that l_scope is a pointer.

	* elf/dl-open.c (dl_open_worker): Fix thinko when enlarging the
	scope list.

2001-09-18  kaz Kojima  <kkojima@rr.iij4u.or.jp>

	* sysdeps/sh/dl-machine.h (elf_machine_rela): Fix reverse condition.
	(elf_machine_rela_relative): Add a missing declaration.

2001-09-18  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: New file.
	* sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed: New file.
	* sysdeps/unix/sysv/linux/configure.in: Add ia64 and s390
	ldd-rewrite scripts.

2001-09-18  Ulrich Drepper  <drepper@redhat.com>

	* elf/ldd.bash.in: Update copyright message.

2001-09-17  H.J. Lu  <hjl@gnu.org>

	* hurd/hurdmalloc.c (bcopy): Removed.
	(realloc): Replace bcopy with memcpy.
	* hurd/path-lookup.c (file_name_path_scan): Likewise.
	* resolv/gethnamaddr.c (map_v4v6_address): Likewise.
	* sunrpc/rpcinfo.c (pmapdump): Likewise.

	* resolv/gethnamaddr.c (getanswer): Replace bcopy with memmove.
	(gethostbyaddr): Likewise.
	* sunrpc/rpcinfo.c (get_inet_address): Likewise.

2001-09-18  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/gnu/eval.c: Removed.

2001-09-18  Andreas Jaeger  <aj@suse.de>

	* sysdeps/i386/fpu/s_logbl.S: Move to ...
	* sysdeps/i386/fpu/s_logbl.c: ...here, use inline assembler.

	* sysdeps/i386/fpu/s_rintl.S: Move to ...
	* sysdeps/i386/fpu/s_rintl.c: ...here, use inline assembler.

	* sysdeps/i386/fpu/s_significandl.S: Move to ...
	* sysdeps/i386/fpu/s_significandl.c: ...here, use inline assembler.

2001-09-16  Ulrich Drepper  <drepper@redhat.com>

	* string/strcoll.c [USE_IN_EXTENDED_LOCALE_MODEL]: Correctly get
	nrules value.

2001-09-14  H.J. Lu  <hjl@gnu.org>

	* sysdeps/mips/fpu/libm-test-ulps: Updated.

2001-09-14  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Fix a typo.
	Patch by Florian La Roche <laroche@redhat.com>.

	* string/bits/string2.h (__strtok_r_1c): Optimize a bit.

	* sysdeps/unix/sysv/linux/net/ethernet.h: Correct references to
	ETHER_CRC_LEN.

2001-09-14  Andreas Schwab  <schwab@suse.de>

	* posix/execl.c: Fix last argument of memcpy.  Reported by Brian
	Sumner <bls@sgi.com>.
	* posix/execlp.c: Likewise.

2001-09-13  Jakub Jelinek  <jakub@redhat.com>

	* elf/dl-deps.c (_dl_map_object_deps): Fix filter handling if filter
	is already found earlier in the search scope.

2001-09-12  Jakub Jelinek  <jakub@redhat.com>

	* rt/Makefile (LDFLAGS-rt.so): Use shared thread library as librt's
	filter.

2001-09-13  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/powerpc/fpu/libm-test-ulps: Adjust expected errors for j0.

2001-09-12  Ulrich Drepper  <drepper@redhat.com>

	* config.h.in: Enforce optimization to be used.
	* Makeconfig (preprocess-versions): Define ASSEMBLER.
	* stdlib/Makefile (isomac-CFLAGS): Define to -O.
	* posix/Makefile (annexc-CFLAGS): Define to -O.
	* sysdeps/unix/make-syscalls.sh: Define __OPTIMIZE__ in use of asm_CPP.

2001-09-11  Ulrich Drepper  <drepper@redhat.com>

	* nscd/nscd_gethst_r.c: Don't expect IPv6 addresses for IPv4 lookup.
	Patch by Stephan Kulow.

2001-09-08  Ben Collins  <bcollins@debian.org>

	* sysdeps/arm/dl-machine.h (elf_machine_rel): Fix thinko in
	usage of RESOLVE() (r_type, not reloc->r_type).

2001-09-08  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-object.c: Avoid allocating extra memory block for name.
	* elf/dl-close.c (_dl_close): Don't free l_libname if it is not
	allocated separately.
	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.

2001-09-08  H.J. Lu  <hjl@gnu.org>

	* po/zh_TW.po: Fix a typo.

2001-09-07  Tom Rix  <trix@redhat.com>

	* sysdeps/unix/sysv/aix/sysv_termio.h: New file.

2001-08-26  Tom Rix  <trix@redhat.com>

	* sysdeps/unix/sysv/aix/Makefile (aix-syscalls.o): More linker
	command line options.
	* sysdeps/unix/sysv/aix/start.s: New file, rework of start.c
	* sysdeps/unix/sysv/aix/start.c: Removed.
	* sysdeps/unix/sysv/aix/start-libc.c: New file.
	* sysdeps/unix/sysv/aix/init-first.c: New file.
	* sysdeps/unix/sysv/aix/fcntl.c: Alias __libc_fcntl to __fcntl.

2001-09-08  Ben Collins  <bcollins@debian.org>

	* sysdeps/arm/dl-machine.h: Fix usage of new _dl_signal_error() format.
	* sysdeps/generic/dl-machine.h: Likewise.
	* sysdeps/hppa/dl-fptr.c: Likewise.
	* sysdeps/ia64/dl-fptr.c: Likewise.
	* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
	* sysdeps/mips/dl-machine.h: Likewise.
	* sysdeps/mips/mips64/dl-machine.h: Likewise.
	* sysdeps/powerpc/dl-machine.c: Likewise.

2001-09-07  Ben Collins  <bcollins@debian.org>

	* sysdeps/sparc/sparc32/dl-machine.h: Fix typo.

	* sysdeps/hppa/dl-lookupcfg.h: Forward declare struct link_map.

2001-09-08  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-lookup.c (add_dependency): Bump l_opencount of all
	dependencies if necessary.

	* elf/dl-close.c (_dl_close): If object has no r_list (i.e., wasn't
	loaded directly) determine length if l_initfini list by iterating
	over its elements.  Minor optimizations.
	* elf/dl-deps.c (_dl_map_object_deps): Always add own map to l_initfini
	for dependency objects.
	If object was already loaded check whether any of the dependencies
	is already on the relocation dependency list.  If yes, remove the
	latter.  Minor optimizations.
	* elf/dl-lookup.c (add_dependency): Add check for self reference of
	maps here.  Search l_initfini list only if the object was loaded
	directly and not only as a dependency.
	(_dl_lookup_symbol): Add relocation dependency also if object
	is not in global scope.  Remove test for self-reference here.
	(_dl_lookup_versioned_symbol): Likewise.
	* elf/dl-object (_dl_new_object): Cleanup.  Initialize dont_free
	element of first name record.
	* elf/loadtest.c: Add some more test to recognize early if an object
	wasn't unloaded.
	* elf/Makefile: Add rules to build and run reldep5.
	* elf/reldep5.c: New file.
	* elf/reldepmod5.c: New file.
	* elf/reldepmod6.c: New file.

	* elf/reldep2.c: Fix typo.

2001-09-07  Ulrich Drepper  <drepper@redhat.com>

	* include/link.h (struct link_map): Add l_scope_mem and l_scope_max
	elements.  Change l_scope to be a pointer only.
	* elf/dl-object.c (_dl_new_object): Initialize l_scope and l_scope_max.
	* elf/dl-open.c (dl_open_worker): If dependency wasn't just opened
	here add searchlist of newly open file to the dependency's scope.
	* elf/dl-close.c (_dl_close): If dependency is used otherwise remove
	only searchlist from its scope.  Free own scope array if necessary.
	* elf/Makefile (tests): Add dblload and dblunload now.

2001-09-06  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c: New file, contributed
	Stephen L Moshier.

2001-09-05  Ulrich Drepper  <drepper@redhat.com>

	* elf/Makefile: Add rules to build new tests.  Don't run them yet since
	they both fail.
	* elf/dblload.c: New file.
	* elf/dblloadmod1.c: New file.
	* elf/dblloadmod2.c: New file.
	* elf/dblloadmod3.c: New file.
	* elf/dblunload.c: New file.

2001-09-04  Richard Henderson  <rth@redhat.com>

	* elf/elf.h (R_ALPHA_OP_*, R_ALPHA_IMMED_*): Remove.
	(R_ALPHA_GPREL16): Rename from R_ALPHA_IMMED_GP_16.

2001-09-04  Ulrich Drepper  <drepper@redhat.com>

	Correct very misleading message for error in failed runtime relocation.
	* elf/dl-error.c (_dl_signal_error): Take extra parameter to describe
	place of the error.
	(_dl_signal_cerror): Likewise.
	* sysdeps/generic/ldsodefs.h: Adjust prototypes.
	* elf/dl-close.c: Likewise.
	* elf/dl-deps.c: Likewise.
	* elf/dl-load.c: Likewise.
	* elf/dl-lookup.c: Likewise.
	* elf/dl-open.c: Likewise.
	* elf/dl-reloc.c: Likewise.
	* elf/dl-sym.c: Likewise.
	* elf/dl-version.c: Likewise.
	* sysdeps/generic/dl-sysdep.c: Likewise.

2001-09-04  Jakub Jelinek  <jakub@redhat.com>

	* iconv/strtab.c (strtabinit): Initialize null Strent.
	(newstring): Move len == 0 handling...
	(strtabadd): ...here.
	If len == 1, return null Strent.
	When inserting a suffix of an existing string, check if
	it is not equal to some suffix already recorded.
	Copy left and right members over if adding longer string.

2001-09-04  Jakub Jelinek  <jakub@redhat.com>

	* sunrpc/rpc_cout.c (upcase): Account for trailing '\0'.

	* sysdeps/unix/sysv/linux/alpha/gethostname.c: Include <errno.h>.
	(__syscall_gethostname): Add prototype.

2001-09-04  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-object.c (_dl_new_object): Remove unnecessary if.

2001-09-02  Ulrich Drepper  <drepper@redhat.com>

	* elf/rtld.c (dl_main): Increment l_opencount for main binary.

2001-08-27  Roland McGrath  <roland@frob.com>

	* sysdeps/unix/sysv/gethostname.c (__gethostname): When LEN is too
	short, copy that much into NAME anyway before returning error.

2001-09-01  Richard Henderson  <rth@redhat.com>

	* sysdeps/alpha/elf/Dist: Remove file.
	* sysdeps/alpha/elf/Makefile: Remove file.
	* sysdeps/alpha/elf/crtbegin.S: Remove file.
	* sysdeps/alpha/elf/crtend.S: Remove file.
	* sysdeps/alpha/elf/initfini.c: New file.

2001-09-01  Mark Kettenis  <kettenis@gnu.org>

	* iconv/tst-iconv1.c: Include <stddef.h> for wchar_t.
	* iconv/tst-iconv3.c: Likewise.

2001-09-01  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/inttypes.h (__gwchar_t): Define to wchar_t for C++.

2001-09-01  Ulrich Drepper  <drepper@redhat.com>

	* iconv/gconv_cache.c: Rename variable cache to __gconv_cache and
	export it.
	* iconv/Versions (libc) [GLIBC_2.2.5]: Export __gconv_cache.
	* iconv/iconv_prog.c (insert_cache): New function.
	(print_known_names): If cache is used call insert_cache to use the
	information from the cache [PR libc/2509].

2001-08-31  Ulrich Drepper  <drepper@redhat.com>

	* time/strptime.c (strptime_internal): Recognize 'l' format and
	handle it like 'I' for symmetry with strftime.

2001-08-31  Richard Henderson  <rth@redhat.com>

	* elf/dl-support.c (_dl_cpuclock_offset): Protect with NONAVAIL.
	(HP_TIMING_AVAIL): Set to HP_SMALL_TIMING_AVAIL if present.
	* elf/rtld.c (HP_TIMING_AVAIL): Likewise.
	(print_statistics): Make scalar unsigned long long.
	* sysdeps/alpha/hp-timing.h: New file.

2001-08-31  Jakub Jelinek  <jakub@redhat.com>

	* stdio-common/perror.c (perror): Save errno early, pass it
	down to perror_internal.
	(perror_internal): Add errnum argument.

2001-08-31  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Remove unused code.
	Don't add old memory content for R_ALPHA_REFQUAD.

2001-08-30  Ulrich Drepper  <drepper@redhat.com>

	* crypt/md5-crypt.c (__md5_crypt_r): Compute used and required
	memory correctly.

	* sysdeps/unix/sysv/linux/ia64/ioperm.c (_ioperm): Use __open
	instead of open, __close instead of close, __getpagesize instead
	of getpagesize.

	* string/argz-stringify.c (__argz_stringify): Use __strnlen
	instead of strnlen.
	* include/string.h (strndupa): Redefine here to use __strnlen
	instead of strnlen.
	* string/strndup.c (__strndup): Use __strnlen not strnlen.

	* misc/syslog.c (vsyslog): Fix typo in last change (connect ->
	connected).

2001-08-30  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Don't handle
	R_ALPHA_RELATIVE if RTLD_BOOTSTRAP and HAVE_Z_COMBRELOC.  Only check
	for rtld map if neither RTLD_BOOTSTRAP nor HAVE_Z_COMBRELOC is defined.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Similarly.
	* sysdeps/ia64/dl-machine.h (elf_machine_rel): Similarly.
	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rel): Similarly.
	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rel): Similarly.

2001-08-30  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/alpha/fpu/libm-test-ulps: Adjust j0 ULPs.

2001-08-30  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/ldbl-128/e_jnl.c: New file,
	contributed Stephen L Moshier.

2001-08-30  Jakub Jelinek  <jakub@redhat.com>

	* sunrpc/etc.rpc (sgi_fam): Add.

2001-08-30  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/alpha/gethostname.c: New file.

2001-08-29  Ulrich Drepper  <drepper@redhat.com>

	* nis/nis_findserv.c (__nis_findfastest): Don't fail if reply received
	first is from a previous call.
	Patch by Alexander Belopolsky <alexb@rentec.com> for [PR libc/3670].

2001-08-29  Andreas Schwab  <schwab@suse.de>

	* sysdeps/ia64/fpu/libm-test-ulps: Updated.

2001-08-25  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>

	* config.make.in (INSTALL_SCRIPT): Define.
	* Makeconfig (INSTALL_SCRIPT): Define.
	* Makerules (do-install-script): New macro to install scripts using
	INSTALL_SCRIPT.
	(install-bin-script): New rule to install scripts with
	do-install-script.
	(install-bin-script-nosubdir): New rule.
	(install-no-libc.a-nosubdir): Add install-bin-script-nosubdir.
	(distinfo-vars): Add $(install-bin-script).
	* Rules (others): Likewise.
	* Makefile (glibcbug): Install with install-bin-script.
	* debug/Makefile (xtrace): Likewise.
	(catchsegv): Likewise.
	* elf/Makefile (ldd): Likewise.
	* malloc/Makefile (mtrace): Likewise.
	* timezone/Makefile (tzselect): Likewise.

2001-08-29  H.J. Lu  <hjl@gnu.org>

	* sysdeps/mips/dl-machine.h (__dl_runtime_resolve): Pass
	ELF_RTYPE_CLASS_PLT, instead of R_MIPS_REL32, to
	_dl_lookup_versioned_symbol () and _dl_lookup_symbol ().

2001-08-29  Andreas Schwab  <schwab@suse.de>

	* sysdeps/m68k/fpu/libm-test-ulps: Updated.

2001-08-28  H.J. Lu  <hjl@gnu.org>

	* Makeconfig (combreloc-LDFLAGS): New variable.
	Add it to LDFLAGS.so, LDFLAGS-rtld, and +link.
	* config.make.in (have-z-combreloc): New variable.
	* configure.in: Substitute libc_cv_z_combreloc.

2001-08-29  Ulrich Drepper  <drepper@redhat.com>

	* po/sv.po: Update from translation team.
	* po/fr.po: Likewise.
	* po/da.po: Likewise.

2001-08-28  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>

	* Makerules: Fix a typo: MD% -> MD5.

2001-08-28  Ulrich Drepper  <drepper@redhat.com>

	* sunrpc/rpc_hout.c (pargdef): Function must take pointer to object.
	Patch by Patrick Duval <Patrick.Duval@devinci.fr>.

2001-08-28  Andreas Jaeger  <aj@suse.de>

	* manual/libc-texinfo.sh: Add entry about free manuals.

	* manual/contrib.texi (Contributors): Fix cross reference.

	* manual/libc.texinfo (Copying): Include freemanuals.

	* manual/Makefile (appendices): Add freemanuals.

	* manual/freemanuals.texi: New file.
	Patch by Brian Youmans <3diff@gnu.org>.

	* manual/libm-err-tab.pl: Pretty print more platforms, print a
	smaller table.

	* manual/math.texi (Errors in Math Functions): Fix grammar, start
	table on separate page.
	Patch by Brian Youmans <3diff@gnu.org>.

2001-08-27  Ulrich Drepper  <drepper@redhat.com>

	* misc/syslog.c (vsyslog): Try a bit harder to use syslogd.  If
	the connection went down after we first used it try to connect
	again and resend the message before printing to the console.
	Reported by Coserea Gh. Tudor <tudore@tudore.gecadsoftware.com>.

2001-08-27  Jakub Jelinek  <jakub@redhat.com>

	* string/tst-strlen.c (main): Test strnlen (, -1) too.
	* sysdeps/generic/strnlen.c (__strnlen): Fix for maxlens with top
	bit set.

2001-08-27  Ulrich Drepper  <drepper@redhat.com>

	* iconv/strtab.c (searchstring): Use correct length for comparison.
	(strtabadd): Account total size correct if new string has old string as
	substring.

2001-08-27  Jakub Jelinek  <jakub@redhat.com>

	* elf/rtld.c (dl_main): Update call to _dl_lookup_symbol.

2001-08-27  Andreas Jaeger  <aj@suse.de>

	* sysdeps/i386/fpu/libm-test-ulps (float): Add ulps for new tests.

	* math/libm-test.inc (j0_test): Add extra tests.
	* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Use |x|,
	not x, in Hankel approximation.
	Patches by Stephen L Moshier.

2001-08-26  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/ia64/dl-lookupcfg.h: Add forward declaration for struct
	link_map.

	* configure.in: Fix test for .rela.dyn section.

	* elf/dl-runtime.c: Update calls to _dl_lookup_*.

2001-08-26  Jakub Jelinek  <jakub@redhat.com>

	* elf/dl-reloc.c (RESOLVE_MAP, RESOLVE): Use elf_machine_type_class
	instead of elf_machine_lookup_noexec_p and elf_machine_lookup_noplt_p.
	Pass type_class to _dl_lookup_*.
	* elf/dl-lookup.c (_dl_lookup_symbol): Take type_class parameter now.
	Pass around just type_class instead of noexec, noplt pair.
	(_dl_lookup_versioned_symbol): Likewise.
	(_dl_lookup_symbol_skip): Pass around just type_class instead of
	noexec, noplt pair.
	(_dl_lookup_versioned_symbol_skip): Likewise.
	(_dl_do_lookup, _dl_do_lookup_versioned): Likewise.
	* elf/do-lookup.h (do_lookup): Likewise.
	* include/link.h (struct link_map): Replace noexec and noplt fields
	in l_lookup_cache with type_class field.
	* sysdeps/generic/ldsodefs.h (ELF_RTYPE_CLASS_PLT,
	ELF_RTYPE_CLASS_COPY): Define.
	Adjust prototypes for _dl_lookup_symbol and
	_dl_lookup_versioned_symbol.
	* sysdeps/alpha/dl-machine.h (elf_machine_lookup_noplt_p,
	elf_machine_lookup_noexec_p): Remove.
	(elf_machine_type_class): Define.
	* sysdeps/arm/dl-machine.h: Likewise.
	* sysdeps/hppa/dl-machine.h: Likewise.
	* sysdeps/cris/dl-machine.h: Likewise.
	* sysdeps/i386/dl-machine.h: Likewise.
	* sysdeps/ia64/dl-machine.h: Likewise.
	* sysdeps/m68k/dl-machine.h: Likewise.
	* sysdeps/mips/mips64/dl-machine.h: Likewise.
	* sysdeps/mips/dl-machine.h: Likewise.
	* sysdeps/powerpc/dl-machine.h: Likewise.
	* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
	* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
	* sysdeps/sh/dl-machine.h: Likewise.
	* sysdeps/s390/s390-32/dl-machine.h: Likewise.
	* sysdeps/s390/s390-64/dl-machine.h: Likewise.

2001-08-26  Ulrich Drepper  <drepper@redhat.com>

	* manual/message.texi (Advanced gettext functions): Change
	description of plural forms for Slovak.
	Reported by Marcel Telka <marcel@telka.sk>.

	* manuaL/time.texi (Low-Level Time String Parsing): Fix description of
	%z.  Reported by C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>.

2001-08-26  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/s390/s390-32/dl-machine.h (elf_machine_lazy_rel): Fix a
	typo.  Patch by Florian La Roche <laroche@redhat.com>.

2001-08-26  Ulrich Drepper  <drepper@redhat.com>

	* include/link.h (struct link_map): Add l_lookup_cache element.
	* elf/dl-reloc.c (RESOLVE): Add symbol caching here.
	(RESOLVE_MAP): Likewise.
	(_dl_relocate_object): Remove cache initialization.
	* elf/dl-lookup.c: Rip out cache handling code.
	* sysdeps/generic/ldsodefs.h: Remove lookup_cache struct and variable
	declarations.

	* elf/dl-lookup.c (_dl_lookup_symbol): Reorder some conditions and
	remove some __builtin_expect.
	(_dl_lookup_versioned_symbol): Likewise.

	* config.h.in: Add HAVE_Z_COMBRELOC.
	* configure.in: Add test for -z combreloc.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Minor cleanups and
	optimizations.  Use HAVE_Z_COMBRELOC to avoid generaton of
	R_386_RELATIVE handling for ld.so startup.  Reduce RTLD_BOOTSTRAP
	case to almost no code.

2001-08-25  Ulrich Drepper  <drepper@redhat.com>

	* po/tr.po: Update from translation team.

2001-08-24  Andreas Jaeger  <aj@suse.de>

	* iconv/Makefile (extra-objs): Add iconvconfig-modules so that
	make clean works.

2001-08-24  Ulrich Drepper  <drepper@redhat.com>

	* elf/rtld.c (print_statistics): Printf % after percent values.
	* elf/dl-misc.c (_dl_debug_vdprintf): Implement %%.

	* elf/dl-lookup.c (_dl_lookup_symbol): If we use the cache we
	don't have to compute the hash value and initialize current_value.
	Move reference_name variable to where it is needed.
	(_dl_lookup_versioned_symbol): Likewise.

2001-08-24  Roland McGrath  <roland@frob.com>

	* string/tester.c (test_strerror): Don't use _sys_errlist/_sys_nerr.
	Just test that strerror returns non-null for a few errno codes.

2001-08-23  Roland McGrath  <roland@frob.com>

	* hurd/Versions (libc: GLIBC_2.2.5): New set; add _hurd_raise_signal,
	_hurdsig_interrupt_timeout, _hurdsig_fault_preemptor.

	* sysdeps/posix/shm_unlink.c (shm_unlink): __unlink -> unlink.

	* mach/Versions (libc: GLIBC_2.2.5): New set; add __mach_msg_destroy,
	__mach_reply_port.

2001-08-24  Ulrich Drepper  <drepper@redhat.com>

	* nss/test-netdb.c (test_hosts): Don't segfault if gethostname
	returns NULL.

	* elf/do-rel.h (elf_dynamic_do_rel): Fix problem with ld.so
	startup.  Explicitly remove lazy part for RTLD_BOOTSTRAP since gcc
	doesn't do it.
	* elf/rtld.c: Include <sys/param.h>.
	* elf/dl-reloc.c: Likewise.

2001-08-24  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>

	* sysdeps/unix/sysv/linux/mips/configure.in: Define AC_SUBST to
	empty to prevent junk from being generated.
	* sysdeps/unix/sysv/linux/mips/configure: Regenerated.

2001-08-24  Jakub Jelinek  <jakub@redhat.com>

	* elf/do-rel.h (elf_dynamic_do_rel): If l_addr is 0, skip relative
	records.  Rename endrel to relative, initialize it to r, and use it
	in elf_machine_rel_relative calls.  Point r after relative relocs.

2001-08-24  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Correct prediction
	of R_386_NONE.

2001-08-24  Jakub Jelinek  <jakub@redhat.com>

	* elf/do-rel.h (elf_machine_rel_relative): Define for rela if
	necessary.  Undefine newly defined macros at the end.
	* sysdeps/hppa/dl-machine.h (elf_machine_rela_relative):
	Rename from elf_machine_rel_relative.
	* sysdeps/cris/dl-machine.h (elf_machine_rela_relative): Likewise.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela_relative): Likewise.
	* sysdeps/powerpc/dl-machine.h (elf_machine_rela_relative): Likewise.
	* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela_relative):
	Likewise.
	* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela_relative):
	Likewise.
	* sysdeps/ia64/dl-machine.h (elf_machine_rela_relative): Likewise.
	Fix argument types.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela_relative): Likewise.
	Fix argument types.
	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela_relative):
	Likewise.  Fix argument types.
	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela_relative):
	Likewise.  Fix argument types.
	* sysdeps/sh/dl-machine.h (elf_machine_rela_relative): Likewise.
	Fix argument types.
	* sysdeps/mips/dl-machine.h (elf_machine_rel_relative): Use
	ElfW(Rel) in argument.
	* sysdeps/mips/mips64/dl-machine.h (elf_machine_rel_relative): New
	function.

2001-08-24  Alexandre Oliva  <aoliva@redhat.com>

	* sysdeps/sh/dl-machine.h (elf_machine_rela): Fix typo.

2001-08-24  Andreas Jaeger  <aj@suse.de>

	* sysdeps/ieee754/ldbl-128/e_j1l.c: New file, contributed by
	Stephen L Moshier <moshier@mediaone.net>.

2001-08-24  Ulrich Drepper  <drepper@redhat.com>

	* elf/do-rel.h (elf_dynamic_do_rel): RELATIVE relocations comes
	first if RELCOUNT is set.

	* elf/do-rel.h (elf_dynamic_do_rel): If not relocating lazily, don't
	call elf_machine_rel for the last DT_RELCOUNT relocations but instead
	elf_machine_rel_relative.
	* sysdeps/alpha/dl-machine.h: Define elf_machine_rel_relative.
	Minor optimizations.
	* sysdeps/arm/dl-machine.h: Likewise.
	* sysdeps/cris/dl-machine.h: Likewise.
	* sysdeps/hppa/dl-machine.h: Likewise.
	* sysdeps/i386/dl-machine.h: Likewise.
	* sysdeps/ia64/dl-machine.h: Likewise.
	* sysdeps/m68k/dl-machine.h: Likewise.
	* sysdeps/mips/dl-machine.h: Likewise.
	* sysdeps/powerpc/dl-machine.h: Likewise.
	* sysdeps/s390/s390-32/dl-machine.h: Likewise.
	* sysdeps/s390/s390-64/dl-machine.h: Likewise.
	* sysdeps/sh/dl-machine.h: Likewise.
	* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
	* sysdeps/sparc/sparc64/dl-machine.h: Likewise.

2001-08-23  Roland McGrath  <roland@frob.com>

	* rt/tst-aio4.c [! SIGRTMIN] (SIGRTMIN, SIGRTMAX): Define as -1.

	* sysdeps/mach/hurd/bits/libc-lock.h: New file, initially copied from
	sysdeps/mach version.  Implement counting ("recursive") mutexes
	on top of cthreads mutexes.
	* sysdeps/mach/hurd/bits/stdio-lock.h: File removed; generic now works.

	* sysdeps/generic/bits/stdio-lock.h (_IO_lock_initializer): Define to
	_LIBC_LOCK_RECURSIVE_INITIALIZER if defined, else do an #error.
	(__libc_cleanup_region_start, __libc_cleanup_region_end,
	__libc_clean_end): Define these to call the cleanup function after
	normal exit when they're supposed to.

	* sysdeps/mach/bits/libc-lock.h (__libc_cleanup_region_start):
	Take new first arg DOIT, a boolean saying whether to really install
	any cleanup handler.
	(__libc_cleanup_region_end): Do nothing if start's DOIT arg was zero.
	(__libc_cleanup_end): Likewise.
	* sysdeps/generic/bits/libc-lock.h: Same changes.
	* stdio-common/vfscanf.c (LOCK_STREAM): Pass new arg.
	* stdio-common/vfprintf.c (buffered_vfprintf, vfprintf): Likewise.
	* sysdeps/mach/hurd/bits/stdio-lock.h (_IO_cleanup_region_start):
	Likewise.
	* misc/syslog.c (vsyslog, openlog, closelog): Likewise.
	* sysdeps/generic/bits/stdio-lock.h
	(_IO_cleanup_region_start, _IO_cleanup_region_start_noarg): Likewise.

2001-08-23  Jakub Jelinek  <jakub@redhat.com>

	* elf/ldconfig.c (search_dir): Remove stale symlinks.

2001-08-23  Jakub Jelinek  <jakub@redhat.com>

	* elf/dl-lookup.c (lookup_cache, lookup_cache_versioned): New.
	(_dl_lookup_symbol): Lookup relocations in cache and store successfull
	lookups in cache.
	(_dl_lookup_versioned_symbol): Likewise.
	* elf/dl-reloc.c (_dl_relocate_object): Initialize cache for
	relocation lookup.
	* elf/rtld.c (print_statistics): Output _dl_num_cache_relocations.
	* sysdeps/generic/ldsodefs.h (struct lookup_cache): New definition.
	(lookup_cache, lookup_cache_versioned): Add declarations.

2001-08-23  Ulrich Drepper  <drepper@redhat.com>

	* stdlib/tst-random.c (main): Swap parameters in fail call.
	Patch by Pete Bevin <pete@petebevin.com>.

2001-08-23  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/inttypes.h: Use __gwchar_t instead of __wchar_t.

2001-08-23  Ulrich Drepper  <drepper@redhat.com>

	* malloc/obstack.c: Indent preprocessor directives.
	Patch by Jim Meyering <meyering@ascend.com>.

	* po/ja.po: Update from translation team.

2001-08-23  Roland McGrath  <roland@frob.com>

	* libio/tst-ungetwc1.c (main): Add a const to quiet a warning.

	* nss/test-netdb.c (test_hosts): Don't use MAXHOSTNAMELEN.
	Instead, use dynamic buffer to test gethostname's ENAMETOOLONG error.

2001-08-22  Roland McGrath  <roland@frob.com>

	* sysdeps/generic/ldsodefs.h (_dl_load_lock): Declare it here with
	__libc_lock_define_recursive.
	* elf/dl-open.c: Don't declare it here any more.
	* elf/dl-close.c: Likewise.
	* elf/dl-lookup.c: Likewise.
	* elf/dl-iteratephdr.c: Likewise.
	* elf/dl-lookup.c (add_dependency): Use __libc_lock_lock_recursive and
	__libc_lock_unlock_recursive.
	* elf/dl-close.c (_dl_close): Likewise
	* elf/dl-iteratephdr.c (__dl_iterate_phdr): Likewise
	* elf/dl-open.c (_dl_open): Likewise

	* sysdeps/generic/bits/libc-lock.h
	(__libc_lock_define_recursive): New macro.
	* sysdeps/generic/bits/stdio-lock.h (_IO_lock_t): Use it.
	(_IO_lock_lock): Use __libc_lock_lock_recursive.
	(_IO_lock_unlock): Use __libc_lock_unlock_recursive.

	* conform/conformtest.pl (checknamespace): Sort the output list.

	* sysdeps/generic/bits/poll.h (POLLWRBAND): New alias for POLLOUT.
	(POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLWRBAND): Make these
	definitions conditional on [__USE_XOPEN].

	* sysdeps/mach/hurd/bits/fcntl.h (O_ASYNC, O_FSYNC, O_SYNC): Define
	these unconditionally, not only use [__USE_BSD], so as to match
	the sysdeps/unix/sysv/linux files.

2001-08-22  Ulrich Drepper  <drepper@redhat.com>

	* test-skeleton.c (add_temp_file): Add __attribute__ ((unused)) to
	avoid warnings.

	* dlfcn/tst-dladdr.c (do_test): Get address of ref1 using
	DL_LOOKUP_ADDRESS.

2001-08-22  Roland McGrath  <roland@frob.com>

	* sysdeps/generic/bits/sigaction.h (struct sigaction): Fix up
	conditionalization of sa_handler/sa_sigaction member types to
	match the sysdeps/unix/sysv/linux file.

2001-08-22  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-addr.c (_dl_addr): Handle broken binaries with zero
	symbol sizes a bit better.

	* sysdeps/ia64/strncpy.S: Complete rewrite.
	Contributed by Jakub Jelinek <jakub@redhat.com>.

	* string/stratcliff.c (main): Add strncpy test.

2001-08-22  Roland McGrath  <roland@frob.com>

	* sysdeps/generic/dl-environ.c: Include <stdlib.h> and <unistd.h>,
	and don't declare unsetenv or _environ directly.
	(unsetenv): Return int, not void.  Use __environ instead of _environ.

2001-08-01  Mark Kettenis  <kettenis@gnu.org>

	* sysdeps/unix/bsd/bsd4.4/Makefile: New file.
	* sysdeps/unix/bsd/bsd4.4/Versions: New file.
	* sysdeps/unix/bsd/bsd4.4/cmsg_nxthdr.c: New file.
	* sysdeps/unix/bsd/bsd4.4/bits/socket.h (__cmsg_nxthdr): Correct
	test for cmsg struct size.

2001-04-23  Paul Eggert  <eggert@twinsun.com>

	* posix/getopt.h (getopt_long, getopt_long_only, _getopt_internal):
	Rename __argc to ___argc in prototypes to avoid compatibility
	problems with systems that reserve the identifier "__argc".
	Similarly for __argv.

2001-08-21  Roland McGrath  <roland@frob.com>

	* stdio-common/tst-fseek.c: Include <time.h> for `time' declaration.

	* mach/Makefile (tests): Removed.
	* mach/hello.c: File removed.

2001-08-22  Ulrich Drepper  <drepper@redhat.com>

	* po/sv.po: Update from translation team.

	* stdio-common/vfscanf.c: Fix handling of %l[].
	Reported by Mitsuru Chinen <mchinen@yamato.ibm.com>.

	* libio/Makefile (tests): Add tst-sscanf.
	* libio/tst-sscanf.c: New file.

	* elf/dl-addr.c (_dl_addr): Fix tests to determine dli_sname.
	* malloc/mtrace.c (tr_where): dli_sname always points to a
	non-empty string if != NULL.
	Reported by Tim Janik <timj@gtk.org>.

2001-08-22  Jakub Jelinek  <jakub@redhat.com>

	* sunrpc/xdr_rec.c (xdrrec_create): Fix buf sizes before allocating
	buf.  Free resources on failure.
	* sunrpc/svc_unix.c (svcunix_create): Free resources on failure.
	(makefd_xprt): Likewise.
	* sunrpc/svc_udp.c (svcudp_bufcreate): Likewise.
	* sunrpc/svc_tcp.c (svctcp_create, makefd_xprt): Likewise.
	* sunrpc/auth_unix.c (authunix_create): Likewise.

2001-08-21  Jakub Jelinek  <jakub@redhat.com>

	* string/strnlen.c: Remove.
	* sysdeps/generic/strnlen.c: New file.
	* sysdeps/i386/i486/bits/string.h (strnlen): Remove.

2001-08-21  Roland McGrath  <roland@frob.com>

	* sysdeps/mach/i386/machine-sp.h (__thread_stack_pointer): Define this
	as a macro, not an extern inline function.

	* hurd/Versions (GLIBC_2.2.5): New set, define __hurd_fail here.
	* Versions.def (libc): Add GLIBC_2.2.5 set.
	* hurd/hurd.h (_HURD_H_EXTERN_INLINE): New macro.
	(__hurd_fail): Use that instead of _EXTERN_INLINE in decl.

2001-08-20  Roland McGrath  <roland@frob.com>

	* hurd/hurdlookup.c (__hurd_file_name_lookup): Fail with ENOENT for "".
	(__hurd_file_name_split, __hurd_directory_name_split): Likewise.

2001-08-21  Ulrich Drepper  <drepper@redhat.com>

	* string/bits/string2.h: Remove strnlen optimization here.
	* sysdeps/i386/i486/bits/string.h: Add it here.

2001-08-21  Wolfram Gloger  <wg@malloc.de>

	* malloc/malloc.c: Make access to ..._hook pointers thread-safe.

2001-08-21  Ulrich Drepper  <drepper@redhat.com>

	* po/gl.po: Update from translation team.

2001-08-20  Ulrich Drepper  <drepper@redhat.com>

	* misc/error.c (error_tail): Use fputws_unlocked instead of fputws.
	* misc/err.c (convert_and_print): Likewise.

	* malloc/obstack.c (print_and_abort): Use fprintf instead of two
	function calls.

2001-08-20  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Revert the
	change of the gregset_t type.
	* sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise.

2001-08-20  kaz Kojima  <kkojima@rr.iij4u.or.jp>

	* sysdeps/unix/sysv/linux/sh/sysdep.S: Align errno.

2001-08-20  Ulrich Drepper  <drepper@redhat.com>

	* posix/regex.c (truncate_wchar): Use wcrtomb not wctomb.

	* string/strnlen.c: Fix the implementation.  We cannot use memchr.

2001-08-18  Mark Kettenis  <kettenis@gnu.org>

	* sysdeps/mach/hurd/i386/init-first.c (init): Initialize __environ
	before calling the cthreads initialization code.

2001-08-20  Ulrich Drepper  <drepper@redhat.com>

	* argp/argp-help.c: Fix two problems introduced in last change.

	* include/dirent.h: Include <dirstream.h> first.

2001-08-19  Ulrich Drepper  <drepper@redhat.com>

	* io/fts.c (fts_safe_changedir): Use __fxstat64 instead of __fstat.

	* sunrpc/svcauth_des.c (_svcauth_des): Avoid using bcopy.
	* sunrpc/xdr_rec.c: Likewise.
	* sunrpc/xdr_mem.c: Likewise.
	* sunrpc/svc_authux.c (_svcauth_unix): Likewise.
	* sunrpc/rpc_cmsg.c: Likewise.
	* sunrpc/getrpcport.c (getrpcport): Likewise.
	* sunrpc/clnt_simp.c (callrpc): Likewise.
	* sunrpc/clnt_gen.c (clnt_create): Likewise.
	* string/envz.c: Likewise.

	* po/ko.po: Update from translation team.

	* argp/argp-help.c: Handle wide oriented stderr stream.

2001-08-18  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/strtol.c: Little optimizations.  Add some
	__builtin_expect.

	* conform/conformtest.pl: <inttypes.h> test requires <stddef.h>.

	* wcsmbs/wchar.h (wcwdith): Change parameter type to wchar_t.
	* wcsmbs/wcwidth.c (wcwdith): Likewise.
	* wcsmbs/wcwidth.h (internal_wcwdith): Likewise.

	* conform/data/unistd.h-data: Remove _SC_MULTIPLE_PROCESS.

	* conform/data/ucontext.h-data: Fix typos in ucontext_t element tests.

	* time/time.h (struct timespec): Use __time_t for tv_sec element.

	* sysdeps/generic/inttypes.h: Define __wchar_t.  Use it instead of
	wchar_t for function declarations and defintions.

	* misc/sys/select.h: Define __need_time_t before including <time.h>.
	Define suseconds_t if it hasn't happened yet.

	* iconv/gconv.h: Define __need_wchar_t before including <stddef.h>.

	* conform/data/sys/uio.h-data: Allow UIO_MAXIOV to be defined.

	* sysdeps/generic/stdint.h: Don't get definition of wchar_t from
	<stddef.h>.

	* conform/data/stddef.h-data: Remove wint_t.

	* conform/conformtest.pl: Change namespace test to take #undef
	lines into account.

	* conform/data/netinet/in.h-data: Fix typo in allow-header line.

	* conform/data/sys/socket.h-data: Add sockatmark.

2001-08-17  Ulrich Drepper  <drepper@redhat.com>

	* io/fts.c: Update from recent BSD source.

2001-08-17  Roland McGrath  <roland@frob.com>

	* stdio-common/perror.c (perror) [! USE_IN_LIBIO]: Don't use _IO_fwide.
	* misc/error.c (error_tail, error, error_at_line) [! USE_IN_LIBIO]:
	Likewise.

2001-08-17  Ulrich Drepper  <drepper@redhat.com>

	* locale/duplocale.c (__duplocale): Also initialize the special
	__ctype_* elements.

	* conform/data/netdb.h-data: Adjust gai_strerror return type.

2001-08-17  Andreas Jaeger  <aj@suse.de>

	* misc/getpass.c: Include wchar.h for prototypes.
	* malloc/obstack.c: Likewise.

2001-08-17  Ulrich Drepper  <drepper@redhat.com>

	* sunrpc/svc_simple.c (universal): Use __write instead of write.

	* wcsmbs/wcscoll.c: Also define __wcscoll.
	* include/wchar.h: Declare __wcscoll.

	* libio/fwprintf.c: Use __vfwprintf instead of vfwprintf.
	* libio/vwprintf.c: Likewise.
	* libio/wprintf.c: Likewise.

	* iconv/gconv_cache.c: Use __munmap instead of munmap.

2001-08-16  Ulrich Drepper  <drepper@redhat.com>

	* posix/regex.c [_LIBC] (convert_mbs_to_wcs): Use __mbrtowc
	instead of mbrtowc.
	[_LIBC]: Use __iswctype instead of iswctype, __wcslen instead of
	wcslen, and __wcscoll instead of wcscoll.

	* sysdeps/unix/sockatmark.c (sockatmark): Use __ioctl instead of ioctl.

	* sysdeps/unix/sysv/linux/gai_sigqueue.c (__gai_sigqueue): Use
	__getuid instead of getuid.

	* stdio-common/perror.c (perror): Use __close instead of close.
	* iconv/gconv_cache.c (__gconv_load_cache): Likewise.
	* libio/freopen.c (freopen): Likewise.
	* libio/freopen64.c (freopen64): Likewise.

	* libio/tst-ungetwc2.c (main): Define str const.

	* include/wchar.h: Add prototypes for __fwprintf and __vfwprintf.
	* libio/fwprintf.c: Also define __fwprintf.
	* stdio-common/vfprintf.c [COMPILE_WPRINTF]: Also define __vfwprintf.
	* argp/argp-fmtstream.c: Handle wide oriented stderr stream.
	* assert/assert-perr.c: Likewise.
	* assert/assert.c: Likewise.
	* gmon/gmon.c: Likewise.
	* inet/rcmd.c: Likewise.
	* malloc/obstack.c: Likewise.
	* misc/err.c: Likewise.
	* misc/error.c: Likewise.
	* misc/getpass.c: Likewise.
	* posix/getopt.c: Likewise.
	* resolv/res_hconf.c: Likewise.
	* stdio-common/perror.c: Likewise.
	* stdio-common/psignal.c: Likewise.
	* stdlib/fmtmsg.c: Likewise.
	* sunrpc/auth_unix.c: Likewise.
	* sunrpc/clnt_perr.c: Likewise.
	* sunrpc/clnt_tcp.c: Likewise.
	* sunrpc/clnt_udp.c: Likewise.
	* sunrpc/clnt_unix.c: Likewise.
	* sunrpc/svc_simple.c: Likewise.
	* sunrpc/svc_tcp.c: Likewise.
	* sunrpc/svc_udp.c: Likewise.
	* sunrpc/svc_unix.c: Likewise.
	* sunrpc/xdr.c: Likewise.
	* sunrpc/xdr_array.c: Likewise.
	* sunrpc/xdr_rec.c: Likewise.
	* sunrpc/xdr_ref.c: Likewise.
	* sysdeps/generic/wordexp.c: Likewise.

	* po/it.po: Update from translation team.

	* misc/err.c: Handle wide oriented stderr stream.

2001-08-14  Tom Rix  <trix@redhat.com>

	* iconv/gconv_cache.c (find_module): Add #ifndef STATIC_GCONV.
	* iconv/Makefile: Fix gconv_cache.c CFLAGS.

2001-08-13  Tom Rix  <trix@redhat.com>

	* sysdeps/unix/sysv/aix/Makefile: Add rule to import kernel symbols.
	* sysdeps/unix/sysv/aix/bits/types.h: Fix type of __id_t, __useconds_t
	and __intptr_t.

2001-08-15  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S (__getcontext):
	Store the access registers to the ucontext structure.
	* sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S (__getcontext):
	Likewise.

	* sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S (__setcontext):
	Load the access registers from the ucontext structure.
	* sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S (__setcontext):
	Likewise.

	* sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h: Adjust the SC_xxx
	offsets to the new ucontext layout.
	* sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h: Likewise.

	* sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Fix the layout
	of the ucontext structure.
	* sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise.

2001-08-15  Ulrich Drepper  <drepper@redhat.com>

	* misc/error.c (error): Handle wide oriented stderr stream correctly.
	(error_at_line): Likewise.

	* stdio-common/perror.c (perror): Implement according to standard.
	The stream orientation must not be changed if the stream was not
	oriented before the call.
	* stdio-common/Makefile (tests): Add tst-perror.
	* stdio-common/tst-perror.c: New file.


See ChangeLog.12 for earlier changes.