]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
elf: Fix elf/tst-pldd with --enable-hardcoded-path-in-tests (BZ#24506)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 30 Apr 2019 19:11:57 +0000 (16:11 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 2 May 2019 11:44:12 +0000 (08:44 -0300)
The elf/tst-pldd (added by 1a4c27355e146 to fix BZ#18035) test does
not expect the hardcoded paths that are output by pldd when the test
is built with --enable-hardcoded-path-in-tests.  Instead of showing
the ABI installed library names for loader and libc (such as
ld-linux-x86-64.so.2 and libc.so.6 for x86_64), pldd shows the default
built ld.so and libc.so.

It makes the tests fail with an invalid expected loader/libc name.

This patch fixes the elf-pldd test by adding the canonical ld.so and
libc.so names in the expected list of possible outputs when parsing
the result output from pldd.  The test now handles both default
build and --enable-hardcoded-path-in-tests option.

Checked on x86_64-linux-gnu (built with and without
--enable-hardcoded-path-in-tests) and i686-linux-gnu.

* elf/tst-pldd.c (in_str_list): New function.
(do_test): Add default names for ld and libc as one option.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
ChangeLog
elf/tst-pldd.c

index 4473569abcdc25754d0198a03c9708053d726521..88b34f800cbcf9d65d8398b36f5d4b2f9874b123 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-02  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+       * elf/tst-pldd.c (in_str_list): New function.
+       (do_test): Add default names for ld and libc as one option.
+
 2019-05-02  Florian Weimer  <fweimer@redhat.com>
 
        misc: Add twalk_r function.
index ed19cedd0598c8dda2fcb9c40c291818e89d7ac5..2a9f58936f00c01dbeb6e6fd798993605f8ac0a7 100644 (file)
@@ -20,7 +20,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <stdint.h>
-#include <libgen.h>
 #include <stdbool.h>
 
 #include <array_length.h>
@@ -39,6 +38,15 @@ target_process (void *arg)
 /* The test runs in a container because pldd does not support tracing
    a binary started by the loader iself (as with testrun.sh).  */
 
+static bool
+in_str_list (const char *libname, const char *const strlist[])
+{
+  for (const char *const *str = strlist; *str != NULL; str++)
+    if (strcmp (libname, *str) == 0)
+      return true;
+  return false;
+}
+
 static int
 do_test (void)
 {
@@ -89,14 +97,20 @@ do_test (void)
        if (buffer[strlen(buffer)-1] == '\n')
          buffer[strlen(buffer)-1] = '\0';
 
-       if (strcmp (basename (buffer), LD_SO) == 0)
+       const char *libname = basename (buffer);
+
+       /* It checks for default names in case of build configure with
+          --enable-hardcoded-path-in-tests (BZ #24506).  */
+       if (in_str_list (libname,
+                        (const char *const []) { "ld.so", LD_SO, NULL }))
          {
            TEST_COMPARE (interpreter_found, false);
            interpreter_found = true;
            continue;
          }
 
-       if (strcmp (basename (buffer), LIBC_SO) == 0)
+       if (in_str_list (libname,
+                        (const char *const []) { "libc.so", LIBC_SO, NULL }))
          {
            TEST_COMPARE (libc_found, false);
            libc_found = true;