162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#include <stdio.h> 462306a36Sopenharmony_ci#include <string.h> 562306a36Sopenharmony_ci#include <sdt.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#define __PASTE(a, b) a##b 862306a36Sopenharmony_ci#define PASTE(a, b) __PASTE(a, b) 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define NAME(name, idx) PASTE(name, idx) 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define DEF(name, idx) int NAME(name, idx)(void) { return 0; } 1362306a36Sopenharmony_ci#define CALL(name, idx) NAME(name, idx)(); 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define F(body, name, idx) body(name, idx) 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define F10(body, name, idx) \ 1862306a36Sopenharmony_ci F(body, PASTE(name, idx), 0) F(body, PASTE(name, idx), 1) F(body, PASTE(name, idx), 2) \ 1962306a36Sopenharmony_ci F(body, PASTE(name, idx), 3) F(body, PASTE(name, idx), 4) F(body, PASTE(name, idx), 5) \ 2062306a36Sopenharmony_ci F(body, PASTE(name, idx), 6) F(body, PASTE(name, idx), 7) F(body, PASTE(name, idx), 8) \ 2162306a36Sopenharmony_ci F(body, PASTE(name, idx), 9) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define F100(body, name, idx) \ 2462306a36Sopenharmony_ci F10(body, PASTE(name, idx), 0) F10(body, PASTE(name, idx), 1) F10(body, PASTE(name, idx), 2) \ 2562306a36Sopenharmony_ci F10(body, PASTE(name, idx), 3) F10(body, PASTE(name, idx), 4) F10(body, PASTE(name, idx), 5) \ 2662306a36Sopenharmony_ci F10(body, PASTE(name, idx), 6) F10(body, PASTE(name, idx), 7) F10(body, PASTE(name, idx), 8) \ 2762306a36Sopenharmony_ci F10(body, PASTE(name, idx), 9) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define F1000(body, name, idx) \ 3062306a36Sopenharmony_ci F100(body, PASTE(name, idx), 0) F100(body, PASTE(name, idx), 1) F100(body, PASTE(name, idx), 2) \ 3162306a36Sopenharmony_ci F100(body, PASTE(name, idx), 3) F100(body, PASTE(name, idx), 4) F100(body, PASTE(name, idx), 5) \ 3262306a36Sopenharmony_ci F100(body, PASTE(name, idx), 6) F100(body, PASTE(name, idx), 7) F100(body, PASTE(name, idx), 8) \ 3362306a36Sopenharmony_ci F100(body, PASTE(name, idx), 9) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define F10000(body, name, idx) \ 3662306a36Sopenharmony_ci F1000(body, PASTE(name, idx), 0) F1000(body, PASTE(name, idx), 1) F1000(body, PASTE(name, idx), 2) \ 3762306a36Sopenharmony_ci F1000(body, PASTE(name, idx), 3) F1000(body, PASTE(name, idx), 4) F1000(body, PASTE(name, idx), 5) \ 3862306a36Sopenharmony_ci F1000(body, PASTE(name, idx), 6) F1000(body, PASTE(name, idx), 7) F1000(body, PASTE(name, idx), 8) \ 3962306a36Sopenharmony_ci F1000(body, PASTE(name, idx), 9) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciF10000(DEF, uprobe_multi_func_, 0) 4262306a36Sopenharmony_ciF10000(DEF, uprobe_multi_func_, 1) 4362306a36Sopenharmony_ciF10000(DEF, uprobe_multi_func_, 2) 4462306a36Sopenharmony_ciF10000(DEF, uprobe_multi_func_, 3) 4562306a36Sopenharmony_ciF10000(DEF, uprobe_multi_func_, 4) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistatic int bench(void) 4862306a36Sopenharmony_ci{ 4962306a36Sopenharmony_ci F10000(CALL, uprobe_multi_func_, 0) 5062306a36Sopenharmony_ci F10000(CALL, uprobe_multi_func_, 1) 5162306a36Sopenharmony_ci F10000(CALL, uprobe_multi_func_, 2) 5262306a36Sopenharmony_ci F10000(CALL, uprobe_multi_func_, 3) 5362306a36Sopenharmony_ci F10000(CALL, uprobe_multi_func_, 4) 5462306a36Sopenharmony_ci return 0; 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define PROBE STAP_PROBE(test, usdt); 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define PROBE10 PROBE PROBE PROBE PROBE PROBE \ 6062306a36Sopenharmony_ci PROBE PROBE PROBE PROBE PROBE 6162306a36Sopenharmony_ci#define PROBE100 PROBE10 PROBE10 PROBE10 PROBE10 PROBE10 \ 6262306a36Sopenharmony_ci PROBE10 PROBE10 PROBE10 PROBE10 PROBE10 6362306a36Sopenharmony_ci#define PROBE1000 PROBE100 PROBE100 PROBE100 PROBE100 PROBE100 \ 6462306a36Sopenharmony_ci PROBE100 PROBE100 PROBE100 PROBE100 PROBE100 6562306a36Sopenharmony_ci#define PROBE10000 PROBE1000 PROBE1000 PROBE1000 PROBE1000 PROBE1000 \ 6662306a36Sopenharmony_ci PROBE1000 PROBE1000 PROBE1000 PROBE1000 PROBE1000 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_cistatic int usdt(void) 6962306a36Sopenharmony_ci{ 7062306a36Sopenharmony_ci PROBE10000 7162306a36Sopenharmony_ci PROBE10000 7262306a36Sopenharmony_ci PROBE10000 7362306a36Sopenharmony_ci PROBE10000 7462306a36Sopenharmony_ci PROBE10000 7562306a36Sopenharmony_ci return 0; 7662306a36Sopenharmony_ci} 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciint main(int argc, char **argv) 7962306a36Sopenharmony_ci{ 8062306a36Sopenharmony_ci if (argc != 2) 8162306a36Sopenharmony_ci goto error; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci if (!strcmp("bench", argv[1])) 8462306a36Sopenharmony_ci return bench(); 8562306a36Sopenharmony_ci if (!strcmp("usdt", argv[1])) 8662306a36Sopenharmony_ci return usdt(); 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_cierror: 8962306a36Sopenharmony_ci fprintf(stderr, "usage: %s <bench|usdt>\n", argv[0]); 9062306a36Sopenharmony_ci return -1; 9162306a36Sopenharmony_ci} 92