|  | // SPDX-License-Identifier: GPL-2.0 | 
|  | /* | 
|  | * Copyright (C) 2024 Google LLC | 
|  | */ | 
|  |  | 
|  | #include "gendwarfksyms.h" | 
|  |  | 
|  | struct cache_item { | 
|  | unsigned long key; | 
|  | int value; | 
|  | struct hlist_node hash; | 
|  | }; | 
|  |  | 
|  | void cache_set(struct cache *cache, unsigned long key, int value) | 
|  | { | 
|  | struct cache_item *ci; | 
|  |  | 
|  | ci = xmalloc(sizeof(*ci)); | 
|  | ci->key = key; | 
|  | ci->value = value; | 
|  | hash_add(cache->cache, &ci->hash, hash_32(key)); | 
|  | } | 
|  |  | 
|  | int cache_get(struct cache *cache, unsigned long key) | 
|  | { | 
|  | struct cache_item *ci; | 
|  |  | 
|  | hash_for_each_possible(cache->cache, ci, hash, hash_32(key)) { | 
|  | if (ci->key == key) | 
|  | return ci->value; | 
|  | } | 
|  |  | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | void cache_init(struct cache *cache) | 
|  | { | 
|  | hash_init(cache->cache); | 
|  | } | 
|  |  | 
|  | void cache_free(struct cache *cache) | 
|  | { | 
|  | struct hlist_node *tmp; | 
|  | struct cache_item *ci; | 
|  |  | 
|  | hash_for_each_safe(cache->cache, ci, tmp, hash) { | 
|  | free(ci); | 
|  | } | 
|  |  | 
|  | hash_init(cache->cache); | 
|  | } |