Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
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.