|
Message-ID: <20120824081227.GG10731@port70.net> Date: Fri, 24 Aug 2012 10:12:27 +0200 From: Szabolcs Nagy <nsz@...t70.net> To: musl@...ts.openwall.com Subject: Re: ldso : dladdr support * Rich Felker <dalias@...ifal.cx> [2012-08-23 18:21:13 -0400]: > +static Sym *gnu_lookup(const char *s, uint32_t h1, struct dso *dso) > +{ > + Sym *sym; > + char *strings; > + uint32_t *hashtab = dso->ghashtab; > + uint32_t nbuckets = hashtab[0]; > + uint32_t *buckets = hashtab + 4 + hashtab[2]*(sizeof(size_t)/4); > + uint32_t h2; > + uint32_t *hashval; > + uint32_t n = buckets[h1 % nbuckets]; > + > + if (!n) return 0; > + > + strings = dso->strings; > + sym = dso->syms + n; > + hashval = buckets + nbuckets + (n - hashtab[1]); > + > + for (h1 |= 1; ; sym++) { > + h2 = *hashval++; > + if ((h1 == (h2|1)) && !strcmp(s, strings + sym->st_name)) > + return sym; > + if (h2 & 1) break; > + } heh, is this really the gnuhash lookup logic? they drop a valuable low bit with h1 |= 1 high bits are less important for short strings because of the *33 logic (last 3-4 chars have no effect on the msb) not that it matters much of course.. but seems silly design to me especially when nbuckets is a power-of-2, then highbits are not used for much and could be used as flags for whatever
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.