xref: /kernel/linux/linux-6.6/tools/perf/util/find-map.c
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /kernel/linux/linux-6.6/tools/perf/util/
162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_cistatic int find_map(void **start, void **end, const char *name)
362306a36Sopenharmony_ci{
462306a36Sopenharmony_ci	FILE *maps;
562306a36Sopenharmony_ci	char line[128];
662306a36Sopenharmony_ci	int found = 0;
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci	maps = fopen("/proc/self/maps", "r");
962306a36Sopenharmony_ci	if (!maps) {
1062306a36Sopenharmony_ci		fprintf(stderr, "cannot open maps\n");
1162306a36Sopenharmony_ci		return -1;
1262306a36Sopenharmony_ci	}
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci	while (!found && fgets(line, sizeof(line), maps)) {
1562306a36Sopenharmony_ci		int m = -1;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci		/* We care only about private r-x mappings. */
1862306a36Sopenharmony_ci		if (2 != sscanf(line, "%p-%p r-xp %*x %*x:%*x %*u %n",
1962306a36Sopenharmony_ci				start, end, &m))
2062306a36Sopenharmony_ci			continue;
2162306a36Sopenharmony_ci		if (m < 0)
2262306a36Sopenharmony_ci			continue;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci		if (!strncmp(&line[m], name, strlen(name)))
2562306a36Sopenharmony_ci			found = 1;
2662306a36Sopenharmony_ci	}
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	fclose(maps);
2962306a36Sopenharmony_ci	return !found;
3062306a36Sopenharmony_ci}
31

Indexes created Thu Nov 07 10:32:03 CST 2024