This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] remove nested functions from elf/dl-deps.c
- From: Konstantin Serebryany <konstantin dot s dot serebryany at gmail dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Wed, 1 Oct 2014 14:13:08 -0700
- Subject: Re: [PATCH] remove nested functions from elf/dl-deps.c
- Authentication-results: sourceware.org; auth=none
- References: <CAGQ9bdxGg2zzfCcGOj=MxoEKRqAU1ayLLPr6U1HvCtkHMUvKGg at mail dot gmail dot com> <20141001204919 dot D5B132C3AAD at topped-with-meat dot com>
Fixed all, retested. Please have another look.
On Wed, Oct 1, 2014 at 1:49 PM, Roland McGrath <roland@hack.frob.com> wrote:
>> +static inline
>> +void preload (struct link_map *map, struct list *known, unsigned int *nlist)
>
> The return type goes on the first line. The function name always starts
> its line.
>
> It's general policy not to use the 'inline' keyword for static functions in
> a .c file. Unless there is a strong known reason, just let the compiler
> decide about inlining. (This is a relatively recent policy, so you might
> find counterexamples in the code.)
>
> When a function has some parameters that are the "context" and some that
> are the specific parameters for the specific call, the style I prefer (and
> have used throughout the codebase) is to put all the "context" ones first.
>
>> +{
>> + known[*nlist].done = 0;
>> + known[*nlist].map = map;
>> + known[*nlist].next = &known[*nlist + 1];
>> +
>> + ++(*nlist);
>
> Drop superfluous parens.
>
>
> Thanks,
> Roland
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index c3b0cfc..f66b266 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -138,6 +138,19 @@ cannot load auxiliary `%s' because of empty dynamic string token " \
\
__result; })
+static void
+preload (struct list *known, unsigned int *nlist, struct link_map *map)
+{
+ known[*nlist].done = 0;
+ known[*nlist].map = map;
+ known[*nlist].next = &known[*nlist + 1];
+
+ ++*nlist;
+ /* We use `l_reserved' as a mark bit to detect objects we have
+ already put in the search list and avoid adding duplicate
+ elements later in the list. */
+ map->l_reserved = 1;
+}
void
internal_function
@@ -155,28 +168,15 @@ _dl_map_object_deps (struct link_map *map,
const char *errstring;
const char *objname;
- void preload (struct link_map *map)
- {
- known[nlist].done = 0;
- known[nlist].map = map;
- known[nlist].next = &known[nlist + 1];
-
- ++nlist;
- /* We use `l_reserved' as a mark bit to detect objects we have
- already put in the search list and avoid adding duplicate
- elements later in the list. */
- map->l_reserved = 1;
- }
-
/* No loaded object so far. */
nlist = 0;
/* First load MAP itself. */
- preload (map);
+ preload (known, &nlist, map);
/* Add the preloaded items after MAP but before any of its dependencies. */
for (i = 0; i < npreloads; ++i)
- preload (preloads[i]);
+ preload (known, &nlist, preloads[i]);
/* Terminate the lists. */
known[nlist - 1].next = NULL;