110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file opd_cookie.c
310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * cookie -> name cache
410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002, 2005 OProfile authors
610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING
710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon
910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "opd_cookie.h"
1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "oprofiled.h"
1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_list.h"
1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_libiberty.h"
1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <sys/syscall.h>
1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <unistd.h>
1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <limits.h>
1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdio.h>
2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdlib.h>
2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <errno.h>
2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef __NR_lookup_dcookie
2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#if defined(__i386__)
2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 253
2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__x86_64__)
2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 212
2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__powerpc__)
2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 235
3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__alpha__)
3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 406
3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__hppa__)
3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 223
3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__ia64__)
3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 1237
3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__sparc__)
3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* untested */
3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 208
3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__s390__) || defined (__s390x__)
4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 110
4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__arm__)
4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie (__NR_SYSCALL_BASE+249)
4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif defined(__mips__)
4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <sgidefs.h>
4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* O32 */
4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#if _MIPS_SIM == _MIPS_SIM_ABI32
4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 4247
4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* N64 */
4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif _MIPS_SIM == _MIPS_SIM_ABI64
5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 5206
5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* N32 */
5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif _MIPS_SIM == _MIPS_SIM_NABI32
5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define __NR_lookup_dcookie 6206
5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#else
5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#error Unknown MIPS ABI: Dunno __NR_lookup_dcookie
5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#else
5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#error Please define __NR_lookup_dcookie for your architecture
5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* __NR_lookup_dcookie */
6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#if (defined(__powerpc__) && !defined(__powerpc64__)) || defined(__hppa__)\
6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	|| (defined(__s390__) && !defined(__s390x__)) \
6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	|| (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32) \
6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	    && defined(__MIPSEB__)) \
6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project        || (defined(__arm__) && defined(__ARM_EABI__) \
6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project            && defined(__ARMEB__))
6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return syscall(__NR_lookup_dcookie, (unsigned long)(cookie >> 32),
7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		       (unsigned long)(cookie & 0xffffffff), buf, size);
7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#elif (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32)) \
7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	|| (defined(__arm__) && defined(__ARM_EABI__))
7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return syscall(__NR_lookup_dcookie,
7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		       (unsigned long)(cookie & 0xffffffff),
7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		       (unsigned long)(cookie >> 32), buf, size);
8010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
8110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#else
8210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
8310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
8410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return syscall(__NR_lookup_dcookie, cookie, buf, size);
8510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
8610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
8710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
8810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
8910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstruct cookie_entry {
9010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	cookie_t value;
9110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	char * name;
9210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	int ignored;
9310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct list_head list;
9410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project};
9510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
9610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
9710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define HASH_SIZE 512
9810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define HASH_BITS (HASH_SIZE - 1)
9910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
10010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic struct list_head hashes[HASH_SIZE];
10110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
10210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic struct cookie_entry * create_cookie(cookie_t cookie)
10310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
10410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	int err;
10510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct cookie_entry * entry = xmalloc(sizeof(struct cookie_entry));
10610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
10710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	entry->value = cookie;
10810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	entry->name = xmalloc(PATH_MAX + 1);
10910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
11010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	err = lookup_dcookie(cookie, entry->name, PATH_MAX);
11110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
11210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	if (err < 0) {
11310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		fprintf(stderr, "Lookup of cookie %llx failed, errno=%d\n",
11410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		       cookie, errno);
11510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		free(entry->name);
11610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		entry->name = NULL;
11710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		entry->ignored = 0;
11810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	} else {
11910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		entry->ignored = is_image_ignored(entry->name);
12010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	}
12110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
12210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return entry;
12310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
12410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
12510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
12610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* Cookie monster want cookie! */
12710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic unsigned long hash_cookie(cookie_t cookie)
12810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
12910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return (cookie >> DCOOKIE_SHIFT) & (HASH_SIZE - 1);
13010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
13110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
13210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
13310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar const * find_cookie(cookie_t cookie)
13410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
13510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long hash = hash_cookie(cookie);
13610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct list_head * pos;
13710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct cookie_entry * entry;
13810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
13910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	if (cookie == INVALID_COOKIE || cookie == NO_COOKIE)
14010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		return NULL;
14110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
14210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	list_for_each(pos, &hashes[hash]) {
14310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		entry = list_entry(pos, struct cookie_entry, list);
14410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		if (entry->value == cookie)
14510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project			goto out;
14610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	}
14710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
14810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	/* not sure this can ever happen due to is_cookie_ignored */
14910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	entry = create_cookie(cookie);
15010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	list_add(&entry->list, &hashes[hash]);
15110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectout:
15210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return entry->name;
15310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
15410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
15510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
15610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint is_cookie_ignored(cookie_t cookie)
15710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
15810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long hash = hash_cookie(cookie);
15910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct list_head * pos;
16010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct cookie_entry * entry;
16110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
16210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	if (cookie == INVALID_COOKIE || cookie == NO_COOKIE)
16310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		return 1;
16410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
16510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	list_for_each(pos, &hashes[hash]) {
16610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		entry = list_entry(pos, struct cookie_entry, list);
16710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		if (entry->value == cookie)
16810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project			goto out;
16910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	}
17010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
17110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	entry = create_cookie(cookie);
17210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	list_add(&entry->list, &hashes[hash]);
17310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectout:
17410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return entry->ignored;
17510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
17610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
17710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
17810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar const * verbose_cookie(cookie_t cookie)
17910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
18010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long hash = hash_cookie(cookie);
18110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct list_head * pos;
18210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct cookie_entry * entry;
18310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
18410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	if (cookie == INVALID_COOKIE)
18510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		return "invalid";
18610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
18710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	if (cookie == NO_COOKIE)
18810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		return "anonymous";
18910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
19010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	list_for_each(pos, &hashes[hash]) {
19110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		entry = list_entry(pos, struct cookie_entry, list);
19210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		if (entry->value == cookie) {
19310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project			if (!entry->name)
19410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project				return "failed lookup";
19510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project			return entry->name;
19610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		}
19710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	}
19810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
19910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return "not hashed";
20010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
20110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
20210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
20310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid cookie_init(void)
20410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
20510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	size_t i;
20610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
20710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	for (i = 0; i < HASH_SIZE; ++i)
20810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		list_init(&hashes[i]);
20910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
210