]> git.ipfire.org Git - thirdparty/libbsd.git/commitdiff
test: Fix nlist() unit test on IA64 and PowerPC 64-bit ELFv1
authorGuillem Jover <guillem@hadrons.org>
Sat, 24 Jun 2017 23:51:30 +0000 (01:51 +0200)
committerGuillem Jover <guillem@hadrons.org>
Sun, 25 Jun 2017 00:10:26 +0000 (02:10 +0200)
At least on IA64 and PowerPC 64-bit ELFv1, the functions are stored in
the .text sections but they are accessed through a function descriptor
stored in a data section, for example for PowerPC 64-bit ELFv1 that
section is called .opd.

We should take this into account when checking the n_type for the
functions we have requested information from nlist().

Rationale-by: James Clarke <jrtc27@jrtc27.com>
test/nlist.c

index 096d4ae047220afb28edcfb1946a7b43fe1c4b79..893176e24f372bf870101bcee767702882f2bb14 100644 (file)
@@ -69,8 +69,17 @@ main(int argc, char **argv)
        rc = nlist(argv[0], nl);
        assert(rc == 0);
 
+#if defined(__ia64__) || (defined(__powerpc64__) && _CALL_ELF == 1)
+       /* On IA64 and PowerPC 64-bit ELFv1, the functions are stored in
+        * the .text sections but they are accessed through a function
+        * descriptor stored in a data section, for example for PowerPC
+        * 64-bit that section is called .opd. */
+       assert(nl[0].n_type == (N_DATA | N_EXT));
+       assert(nl[1].n_type == (N_DATA | N_EXT));
+#else
        assert(nl[0].n_type == (N_TEXT | N_EXT));
        assert(nl[1].n_type == (N_TEXT | N_EXT));
+#endif
        assert(nl[2].n_type == (N_BSS | N_EXT));
        assert(nl[3].n_type == (N_DATA | N_EXT));
        assert(nl[4].n_type == (N_DATA));