162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include "addr_location.h"
362306a36Sopenharmony_ci#include "map.h"
462306a36Sopenharmony_ci#include "maps.h"
562306a36Sopenharmony_ci#include "thread.h"
662306a36Sopenharmony_ci
762306a36Sopenharmony_civoid addr_location__init(struct addr_location *al)
862306a36Sopenharmony_ci{
962306a36Sopenharmony_ci	al->thread = NULL;
1062306a36Sopenharmony_ci	al->maps = NULL;
1162306a36Sopenharmony_ci	al->map = NULL;
1262306a36Sopenharmony_ci	al->sym = NULL;
1362306a36Sopenharmony_ci	al->srcline = NULL;
1462306a36Sopenharmony_ci	al->addr = 0;
1562306a36Sopenharmony_ci	al->level = 0;
1662306a36Sopenharmony_ci	al->filtered = 0;
1762306a36Sopenharmony_ci	al->cpumode = 0;
1862306a36Sopenharmony_ci	al->cpu = 0;
1962306a36Sopenharmony_ci	al->socket = 0;
2062306a36Sopenharmony_ci}
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/*
2362306a36Sopenharmony_ci * The preprocess_sample method will return with reference counts for the
2462306a36Sopenharmony_ci * in it, when done using (and perhaps getting ref counts if needing to
2562306a36Sopenharmony_ci * keep a pointer to one of those entries) it must be paired with
2662306a36Sopenharmony_ci * addr_location__put(), so that the refcounts can be decremented.
2762306a36Sopenharmony_ci */
2862306a36Sopenharmony_civoid addr_location__exit(struct addr_location *al)
2962306a36Sopenharmony_ci{
3062306a36Sopenharmony_ci	map__zput(al->map);
3162306a36Sopenharmony_ci	thread__zput(al->thread);
3262306a36Sopenharmony_ci	maps__zput(al->maps);
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_civoid addr_location__copy(struct addr_location *dst, struct addr_location *src)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	thread__put(dst->thread);
3862306a36Sopenharmony_ci	maps__put(dst->maps);
3962306a36Sopenharmony_ci	map__put(dst->map);
4062306a36Sopenharmony_ci	*dst = *src;
4162306a36Sopenharmony_ci	dst->thread = thread__get(src->thread);
4262306a36Sopenharmony_ci	dst->maps = maps__get(src->maps);
4362306a36Sopenharmony_ci	dst->map = map__get(src->map);
4462306a36Sopenharmony_ci}
45