aboutsummaryrefslogtreecommitdiff
path: root/test_runner_list.h
blob: d84026b7fe63461d41cdb605dd6dc1c0ac5a90b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once

/*
 * This file is a derivative work of include/linker_lists.h from the U-Boot
 * project <https://www.denx.de/wiki/U-Boot> and is licensed under GPL-2.0+.
 *
 * Copyright (C) 2012 Marek Vasut <marex@denx.de>
 * Copyright (C) 2021 David Phillips <david@yeah.nah.nz>
 */
#define list_head(entry_type, list_name) \
	({ static char head[0] __attribute__((__aligned__(4), unused, section(".test_runner_list_2_"#list_name"_1")));(entry_type*)&head; })

#define list_tail(entry_type, list_name) \
	({ static char tail[0] __attribute__((__aligned__(4), unused, section(".test_runner_list_2_"#list_name"_3")));(entry_type*)&tail; })

#define list_entry_count(entry_type, list_name) \
	({ \
		entry_type* head = list_head(entry_type, list_name); \
		entry_type* tail = list_tail(entry_type, list_name); \
		(size_t)(tail - head); \
	})

#define list_entry(entry_type, list_name, entry_name) \
	entry_type _test_runner_list_2_##list_name_2_##entry_name __attribute__((__aligned__(4), unused, section(".test_runner_list_2_"#list_name"_2_"#entry_name)))