1 --- elf/do-lookup.h.base 2003-05-15 09:29:25.000000000 -0700
2 +++ elf/do-lookup.h 2003-05-15 09:24:24.000000000 -0700
3 @@ -52,7 +52,8 @@ FCT (const char *undef_name, unsigned lo
7 - const ElfW(Sym) *versioned_sym = NULL;
8 + const ElfW(Sym) *default_version = NULL;
9 + const ElfW(Sym) *first_version = NULL;
13 @@ -155,16 +156,29 @@ FCT (const char *undef_name, unsigned lo
14 public interface should be returned. */
17 - if ((verstab[symidx] & 0x7fff)
18 - >= ((flags & DL_LOOKUP_RETURN_NEWEST) ? 2 : 3))
19 + ElfW(Half) ndx = verstab[symidx] & 0x7fff;
20 + if (ndx >= ((flags & DL_LOOKUP_RETURN_NEWEST) ? 2 : 3))
22 /* Don't accept hidden symbols. */
23 if ((verstab[symidx] & 0x8000) == 0 && num_versions++ == 0)
24 /* No version so far. */
25 - versioned_sym = sym;
26 + default_version = sym;
30 + if ((flags & DL_LOOKUP_RETURN_NEWEST) == 0 && ndx != 0)
32 + /* ndx == 1 is the base version. We will use it for
33 + old unversioned application. */
36 + /* We remember the first version and keep looking
37 + for the base version. */
39 + first_version = sym;
46 @@ -179,7 +193,8 @@ FCT (const char *undef_name, unsigned lo
50 - sym = num_versions == 1 ? versioned_sym : NULL;
51 + sym = first_version ?: (num_versions == 1
52 + ? default_version : NULL);