mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 06:20:06 +00:00
misc: Add twalk_r function
The twalk function is very difficult to use in a multi-threaded program because there is no way to pass external state to the iterator function. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
20aa581958
commit
7b807a35a8
69
ChangeLog
69
ChangeLog
@ -1,3 +1,72 @@
|
|||||||
|
2019-05-02 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
misc: Add twalk_r function.
|
||||||
|
* include/search.h (__twalk_r): Declare.
|
||||||
|
* manual/examples/twalk.c: New file.
|
||||||
|
* manual/search.texi (Tree Search Function): Document twalk_r.
|
||||||
|
* misc/Versions (2.30): Export twalk_r.
|
||||||
|
(GLIBC_PRIVATE): Export __twalk_r.
|
||||||
|
* misc/search.h [__USE_GNU] (twalk_r): Declare.
|
||||||
|
* misc/tsearch.c (trecurse_r, __twalk_r): New functions.
|
||||||
|
(twalk_r): Add weak alias.
|
||||||
|
* misc/tst-tsearch.c (struct walk_trace_element): Define.
|
||||||
|
(walk_trace): New variable.
|
||||||
|
(struct twalk_with_twalk_r_closure): Define.
|
||||||
|
(twalk_with_twalk_r_action): New function.
|
||||||
|
(twalk_with_twalk_r): Likewise.
|
||||||
|
(walk_action): Call walk_trace_add.
|
||||||
|
(walk_tree_with): Rename from walk_tree. Add walk argument.
|
||||||
|
(walk_tree): New function.
|
||||||
|
* sysdeps/mach/hurd/i386/libc.abilist (GLIBC_2.30): Add twalk_r.
|
||||||
|
* sysdeps/unix/sysv/linux/aarch64/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/arm/libc.abilist (GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/csky/libc.abilist (GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/hppa/libc.abilist (GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/libc.abilist (GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/libc.abilist (GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/microblaze/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
|
||||||
|
(GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sh/libc.abilist (GLIBC_2.30): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist (GLIBC_2.30):
|
||||||
|
Likewise.
|
||||||
|
|
||||||
2019-04-30 Paul Eggert <eggert@cs.ucla.edu>
|
2019-04-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
Make mktime etc. compatible with __time64_t
|
Make mktime etc. compatible with __time64_t
|
||||||
|
4
NEWS
4
NEWS
@ -16,6 +16,10 @@ Major new features:
|
|||||||
* The dynamic linker accepts the --preload argument to preload shared
|
* The dynamic linker accepts the --preload argument to preload shared
|
||||||
objects, in addition to the LD_PRELOAD environment variable.
|
objects, in addition to the LD_PRELOAD environment variable.
|
||||||
|
|
||||||
|
* The twalk_r function has been added. It is similar to the existing
|
||||||
|
twalk function, but it passes an additional caller-supplied argument
|
||||||
|
to the callback function.
|
||||||
|
|
||||||
* On Linux, the gettid function has been added.
|
* On Linux, the gettid function has been added.
|
||||||
|
|
||||||
* Minguo (Republic of China) calendar support has been added as an
|
* Minguo (Republic of China) calendar support has been added as an
|
||||||
|
@ -23,6 +23,8 @@ extern void *__tdelete (const void *__key, void **__rootp,
|
|||||||
libc_hidden_proto (__tdelete)
|
libc_hidden_proto (__tdelete)
|
||||||
extern void __twalk (const void *__root, __action_fn_t action);
|
extern void __twalk (const void *__root, __action_fn_t action);
|
||||||
libc_hidden_proto (__twalk)
|
libc_hidden_proto (__twalk)
|
||||||
|
extern __typeof__ (twalk_r) __twalk_r;
|
||||||
|
libc_hidden_proto (__twalk_r)
|
||||||
extern void __tdestroy (void *__root, __free_fn_t freefct);
|
extern void __tdestroy (void *__root, __free_fn_t freefct);
|
||||||
libc_hidden_proto (__tdestroy)
|
libc_hidden_proto (__tdestroy)
|
||||||
#endif
|
#endif
|
||||||
|
56
manual/examples/twalk.c
Normal file
56
manual/examples/twalk.c
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* Implement twalk using twalk_r.
|
||||||
|
Copyright (C) 2019 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <search.h>
|
||||||
|
|
||||||
|
struct twalk_with_twalk_r_closure
|
||||||
|
{
|
||||||
|
void (*action) (const void *, VISIT, int);
|
||||||
|
int depth;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
twalk_with_twalk_r_action (const void *nodep, VISIT which, void *closure0)
|
||||||
|
{
|
||||||
|
struct twalk_with_twalk_r_closure *closure = closure0;
|
||||||
|
|
||||||
|
switch (which)
|
||||||
|
{
|
||||||
|
case leaf:
|
||||||
|
closure->action (nodep, which, closure->depth);
|
||||||
|
break;
|
||||||
|
case preorder:
|
||||||
|
closure->action (nodep, which, closure->depth);
|
||||||
|
++closure->depth;
|
||||||
|
break;
|
||||||
|
case postorder:
|
||||||
|
/* The preorder action incremented the depth. */
|
||||||
|
closure->action (nodep, which, closure->depth - 1);
|
||||||
|
break;
|
||||||
|
case endorder:
|
||||||
|
--closure->depth;
|
||||||
|
closure->action (nodep, which, closure->depth);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
twalk (const void *root, void (*action) (const void *, VISIT, int))
|
||||||
|
{
|
||||||
|
struct twalk_with_twalk_r_closure closure = { action, 0 };
|
||||||
|
twalk_r (root, twalk_with_twalk_r_action, &closure);
|
||||||
|
}
|
@ -618,5 +618,28 @@ Since the functions used for the @var{action} parameter to @code{twalk}
|
|||||||
must not modify the tree data, it is safe to run @code{twalk} in more
|
must not modify the tree data, it is safe to run @code{twalk} in more
|
||||||
than one thread at the same time, working on the same tree. It is also
|
than one thread at the same time, working on the same tree. It is also
|
||||||
safe to call @code{tfind} in parallel. Functions which modify the tree
|
safe to call @code{tfind} in parallel. Functions which modify the tree
|
||||||
must not be used, otherwise the behavior is undefined.
|
must not be used, otherwise the behavior is undefined. However, it is
|
||||||
|
difficult to pass data external to the tree to the callback function
|
||||||
|
without resorting to global variables (and thread safety issues), so
|
||||||
|
see the @code{twalk_r} function below.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
@deftypefun void twalk_r (const void *@var{root}, void (*@var{action}) (const void *@var{key}, VISIT @var{which}, void *@var{closure}), void *@var{closure})
|
||||||
|
@standards{GNU, search.h}
|
||||||
|
@safety{@prelim{}@mtsafe{@mtsrace{:root}}@assafe{}@acsafe{}}
|
||||||
|
For each node in the tree with a node pointed to by @var{root}, the
|
||||||
|
@code{twalk_r} function calls the function provided by the parameter
|
||||||
|
@var{action}. For leaf nodes the function is called exactly once with
|
||||||
|
@var{value} set to @code{leaf}. For internal nodes the function is
|
||||||
|
called three times, setting the @var{value} parameter or @var{action} to
|
||||||
|
the appropriate value. The @var{closure} parameter is passed down to
|
||||||
|
each call of the @var{action} function, unmodified.
|
||||||
|
|
||||||
|
It is possible to implement the @code{twalk} function on top of the
|
||||||
|
@code{twalk_r} function, which is why there is no separate level
|
||||||
|
parameter.
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
@include twalk.c.texi
|
||||||
|
@end smallexample
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
@ -158,11 +158,14 @@ libc {
|
|||||||
GLIBC_2.26 {
|
GLIBC_2.26 {
|
||||||
preadv2; preadv64v2; pwritev2; pwritev64v2;
|
preadv2; preadv64v2; pwritev2; pwritev64v2;
|
||||||
}
|
}
|
||||||
|
GLIBC_2.30 {
|
||||||
|
twalk_r;
|
||||||
|
}
|
||||||
GLIBC_PRIVATE {
|
GLIBC_PRIVATE {
|
||||||
__madvise;
|
__madvise;
|
||||||
__mktemp;
|
__mktemp;
|
||||||
__libc_ifunc_impl_list;
|
__libc_ifunc_impl_list;
|
||||||
__tdelete; __tfind; __tsearch; __twalk;
|
__tdelete; __tfind; __tsearch; __twalk; __twalk_r;
|
||||||
__mmap; __munmap; __mprotect;
|
__mmap; __munmap; __mprotect;
|
||||||
__sched_get_priority_min; __sched_get_priority_max;
|
__sched_get_priority_min; __sched_get_priority_max;
|
||||||
__libc_allocate_once_slow;
|
__libc_allocate_once_slow;
|
||||||
|
@ -150,6 +150,13 @@ typedef void (*__action_fn_t) (const void *__nodep, VISIT __value,
|
|||||||
extern void twalk (const void *__root, __action_fn_t __action);
|
extern void twalk (const void *__root, __action_fn_t __action);
|
||||||
|
|
||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
|
/* Like twalk, but pass down a closure parameter instead of the
|
||||||
|
level. */
|
||||||
|
extern void twalk_r (const void *__root,
|
||||||
|
void (*) (const void *__nodep, VISIT __value,
|
||||||
|
void *__closure),
|
||||||
|
void *__closure);
|
||||||
|
|
||||||
/* Callback type for function to free a tree node. If the keys are atomic
|
/* Callback type for function to free a tree node. If the keys are atomic
|
||||||
data this function should do nothing. */
|
data this function should do nothing. */
|
||||||
typedef void (*__free_fn_t) (void *__nodep);
|
typedef void (*__free_fn_t) (void *__nodep);
|
||||||
|
@ -719,7 +719,41 @@ __twalk (const void *vroot, __action_fn_t action)
|
|||||||
libc_hidden_def (__twalk)
|
libc_hidden_def (__twalk)
|
||||||
weak_alias (__twalk, twalk)
|
weak_alias (__twalk, twalk)
|
||||||
|
|
||||||
|
/* twalk_r is the same as twalk, but with a closure parameter instead
|
||||||
|
of the level. */
|
||||||
|
static void
|
||||||
|
trecurse_r (const void *vroot, void (*action) (const void *, VISIT, void *),
|
||||||
|
void *closure)
|
||||||
|
{
|
||||||
|
const_node root = (const_node) vroot;
|
||||||
|
|
||||||
|
if (LEFT(root) == NULL && RIGHT(root) == NULL)
|
||||||
|
(*action) (root, leaf, closure);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*action) (root, preorder, closure);
|
||||||
|
if (LEFT(root) != NULL)
|
||||||
|
trecurse_r (LEFT(root), action, closure);
|
||||||
|
(*action) (root, postorder, closure);
|
||||||
|
if (RIGHT(root) != NULL)
|
||||||
|
trecurse_r (RIGHT(root), action, closure);
|
||||||
|
(*action) (root, endorder, closure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
__twalk_r (const void *vroot, void (*action) (const void *, VISIT, void *),
|
||||||
|
void *closure)
|
||||||
|
{
|
||||||
|
const_node root = (const_node) vroot;
|
||||||
|
|
||||||
|
CHECK_TREE ((node) root);
|
||||||
|
|
||||||
|
if (root != NULL && action != NULL)
|
||||||
|
trecurse_r (root, action, closure);
|
||||||
|
}
|
||||||
|
libc_hidden_def (__twalk_r)
|
||||||
|
weak_alias (__twalk_r, twalk_r)
|
||||||
|
|
||||||
/* The standardized functions miss an important functionality: the
|
/* The standardized functions miss an important functionality: the
|
||||||
tree cannot be removed easily. We provide a function to do this. */
|
tree cannot be removed easily. We provide a function to do this. */
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <search.h>
|
#include <search.h>
|
||||||
#include <tst-stack-align.h>
|
#include <tst-stack-align.h>
|
||||||
|
#include <support/check.h>
|
||||||
|
|
||||||
#define SEED 0
|
#define SEED 0
|
||||||
#define BALANCED 1
|
#define BALANCED 1
|
||||||
@ -74,6 +75,20 @@ static int max_depth;
|
|||||||
|
|
||||||
static int stack_align_check[2];
|
static int stack_align_check[2];
|
||||||
|
|
||||||
|
/* Used to compare walk traces between the two implementations. */
|
||||||
|
struct walk_trace_element
|
||||||
|
{
|
||||||
|
const void *key;
|
||||||
|
VISIT which;
|
||||||
|
int depth;
|
||||||
|
};
|
||||||
|
#define DYNARRAY_STRUCT walk_trace_list
|
||||||
|
#define DYNARRAY_ELEMENT struct walk_trace_element
|
||||||
|
#define DYNARRAY_PREFIX walk_trace_
|
||||||
|
#define DYNARRAY_INITIAL_SIZE 0
|
||||||
|
#include <malloc/dynarray-skeleton.c>
|
||||||
|
static struct walk_trace_list walk_trace;
|
||||||
|
|
||||||
/* Compare two keys. */
|
/* Compare two keys. */
|
||||||
static int
|
static int
|
||||||
cmp_fn (const void *a, const void *b)
|
cmp_fn (const void *a, const void *b)
|
||||||
@ -102,11 +117,54 @@ memfry (int *string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct twalk_with_twalk_r_closure
|
||||||
|
{
|
||||||
|
void (*action) (const void *, VISIT, int);
|
||||||
|
int depth;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
twalk_with_twalk_r_action (const void *nodep, VISIT which, void *closure0)
|
||||||
|
{
|
||||||
|
struct twalk_with_twalk_r_closure *closure = closure0;
|
||||||
|
|
||||||
|
switch (which)
|
||||||
|
{
|
||||||
|
case leaf:
|
||||||
|
closure->action (nodep, which, closure->depth);
|
||||||
|
break;
|
||||||
|
case preorder:
|
||||||
|
closure->action (nodep, which, closure->depth);
|
||||||
|
++closure->depth;
|
||||||
|
break;
|
||||||
|
case postorder:
|
||||||
|
/* The preorder action incremented the depth. */
|
||||||
|
closure->action (nodep, which, closure->depth - 1);
|
||||||
|
break;
|
||||||
|
case endorder:
|
||||||
|
--closure->depth;
|
||||||
|
closure->action (nodep, which, closure->depth);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
twalk_with_twalk_r (const void *root,
|
||||||
|
void (*action) (const void *, VISIT, int))
|
||||||
|
{
|
||||||
|
struct twalk_with_twalk_r_closure closure = { action, 0 };
|
||||||
|
twalk_r (root, twalk_with_twalk_r_action, &closure);
|
||||||
|
TEST_COMPARE (closure.depth, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
walk_action (const void *nodep, const VISIT which, const int depth)
|
walk_action (const void *nodep, const VISIT which, const int depth)
|
||||||
{
|
{
|
||||||
int key = **(int **) nodep;
|
int key = **(int **) nodep;
|
||||||
|
|
||||||
|
walk_trace_add (&walk_trace,
|
||||||
|
(struct walk_trace_element) { nodep, which, depth });
|
||||||
|
|
||||||
if (!stack_align_check[1])
|
if (!stack_align_check[1])
|
||||||
stack_align_check[1] = TEST_STACK_ALIGN () ? -1 : 1;
|
stack_align_check[1] = TEST_STACK_ALIGN () ? -1 : 1;
|
||||||
|
|
||||||
@ -128,14 +186,16 @@ walk_action (const void *nodep, const VISIT which, const int depth)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
walk_tree (void *root, int expected_count)
|
walk_tree_with (void *root, int expected_count,
|
||||||
|
void (*walk) (const void *,
|
||||||
|
void (*) (const void *, VISIT, int)))
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset (z, 0, sizeof z);
|
memset (z, 0, sizeof z);
|
||||||
max_depth = 0;
|
max_depth = 0;
|
||||||
|
|
||||||
twalk (root, walk_action);
|
walk (root, walk_action);
|
||||||
for (i = 0; i < expected_count; ++i)
|
for (i = 0; i < expected_count; ++i)
|
||||||
if (z[i] != 1)
|
if (z[i] != 1)
|
||||||
{
|
{
|
||||||
@ -154,6 +214,31 @@ walk_tree (void *root, int expected_count)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
walk_tree (void *root, int expected_count)
|
||||||
|
{
|
||||||
|
walk_trace_clear (&walk_trace);
|
||||||
|
walk_tree_with (root, expected_count, twalk);
|
||||||
|
TEST_VERIFY (!walk_trace_has_failed (&walk_trace));
|
||||||
|
size_t first_list_size;
|
||||||
|
struct walk_trace_element *first_list
|
||||||
|
= walk_trace_finalize (&walk_trace, &first_list_size);
|
||||||
|
|
||||||
|
walk_tree_with (root, expected_count, twalk_with_twalk_r);
|
||||||
|
|
||||||
|
/* Compare the two traces. */
|
||||||
|
TEST_COMPARE (first_list_size, walk_trace_size (&walk_trace));
|
||||||
|
for (size_t i = 0; i < first_list_size && i < walk_trace_size (&walk_trace);
|
||||||
|
++i)
|
||||||
|
{
|
||||||
|
TEST_VERIFY (first_list[i].key == walk_trace_at (&walk_trace, i)->key);
|
||||||
|
TEST_COMPARE (first_list[i].which, walk_trace_at (&walk_trace, i)->which);
|
||||||
|
TEST_COMPARE (first_list[i].depth, walk_trace_at (&walk_trace, i)->depth);
|
||||||
|
}
|
||||||
|
|
||||||
|
walk_trace_free (&walk_trace);
|
||||||
|
}
|
||||||
|
|
||||||
/* Perform an operation on a tree. */
|
/* Perform an operation on a tree. */
|
||||||
static void
|
static void
|
||||||
mangle_tree (enum order how, enum action what, void **root, int lag)
|
mangle_tree (enum order how, enum action what, void **root, int lag)
|
||||||
|
@ -2175,6 +2175,7 @@ GLIBC_2.3.4 setipv4sourcefilter F
|
|||||||
GLIBC_2.3.4 setsourcefilter F
|
GLIBC_2.3.4 setsourcefilter F
|
||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2142,3 +2142,4 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
@ -2217,6 +2217,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -127,6 +127,7 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _Exit F
|
GLIBC_2.4 _Exit F
|
||||||
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
|
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
|
||||||
GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
|
GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
|
||||||
|
@ -2086,3 +2086,4 @@ GLIBC_2.29 xencrypt F
|
|||||||
GLIBC_2.29 xprt_register F
|
GLIBC_2.29 xprt_register F
|
||||||
GLIBC_2.29 xprt_unregister F
|
GLIBC_2.29 xprt_unregister F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
@ -2038,6 +2038,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2204,6 +2204,7 @@ GLIBC_2.3.4 vm86 F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2070,6 +2070,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -128,6 +128,7 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _Exit F
|
GLIBC_2.4 _Exit F
|
||||||
GLIBC_2.4 _IO_2_1_stderr_ D 0x98
|
GLIBC_2.4 _IO_2_1_stderr_ D 0x98
|
||||||
GLIBC_2.4 _IO_2_1_stdin_ D 0x98
|
GLIBC_2.4 _IO_2_1_stdin_ D 0x98
|
||||||
|
@ -2147,6 +2147,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2134,3 +2134,4 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
@ -2121,6 +2121,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2119,6 +2119,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2127,6 +2127,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2121,6 +2121,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2175,3 +2175,4 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
@ -2177,6 +2177,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -2210,6 +2210,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -2040,6 +2040,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -2244,3 +2244,4 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
@ -2104,3 +2104,4 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
@ -2172,6 +2172,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -2076,6 +2076,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -2042,6 +2042,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2166,6 +2166,7 @@ GLIBC_2.30 __nldbl_vwarnx F
|
|||||||
GLIBC_2.30 __nldbl_warn F
|
GLIBC_2.30 __nldbl_warn F
|
||||||
GLIBC_2.30 __nldbl_warnx F
|
GLIBC_2.30 __nldbl_warnx F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 _IO_fprintf F
|
GLIBC_2.4 _IO_fprintf F
|
||||||
GLIBC_2.4 _IO_printf F
|
GLIBC_2.4 _IO_printf F
|
||||||
GLIBC_2.4 _IO_sprintf F
|
GLIBC_2.4 _IO_sprintf F
|
||||||
|
@ -2093,6 +2093,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2051,6 +2051,7 @@ GLIBC_2.3.4 setsourcefilter F
|
|||||||
GLIBC_2.3.4 xdr_quad_t F
|
GLIBC_2.3.4 xdr_quad_t F
|
||||||
GLIBC_2.3.4 xdr_u_quad_t F
|
GLIBC_2.3.4 xdr_u_quad_t F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
GLIBC_2.4 __confstr_chk F
|
GLIBC_2.4 __confstr_chk F
|
||||||
GLIBC_2.4 __fgets_chk F
|
GLIBC_2.4 __fgets_chk F
|
||||||
GLIBC_2.4 __fgets_unlocked_chk F
|
GLIBC_2.4 __fgets_unlocked_chk F
|
||||||
|
@ -2150,3 +2150,4 @@ GLIBC_2.29 getcpu F
|
|||||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||||
GLIBC_2.30 gettid F
|
GLIBC_2.30 gettid F
|
||||||
|
GLIBC_2.30 twalk_r F
|
||||||
|
Loading…
Reference in New Issue
Block a user