xref: /openbmc/linux/tools/perf/arch/s390/util/machine.c (revision 6738028dd57df064b969d8392c943ef3b3ae705d)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2203d8a4aSSong Shan Gong #include <unistd.h>
3203d8a4aSSong Shan Gong #include <stdio.h>
4203d8a4aSSong Shan Gong #include <string.h>
5203d8a4aSSong Shan Gong #include "util.h"
6203d8a4aSSong Shan Gong #include "machine.h"
7203d8a4aSSong Shan Gong #include "api/fs/fs.h"
8*6738028dSThomas Richter #include "debug.h"
9203d8a4aSSong Shan Gong 
10203d8a4aSSong Shan Gong int arch__fix_module_text_start(u64 *start, const char *name)
11203d8a4aSSong Shan Gong {
12*6738028dSThomas Richter 	u64 m_start = *start;
13203d8a4aSSong Shan Gong 	char path[PATH_MAX];
14203d8a4aSSong Shan Gong 
15203d8a4aSSong Shan Gong 	snprintf(path, PATH_MAX, "module/%.*s/sections/.text",
16203d8a4aSSong Shan Gong 				(int)strlen(name) - 2, name + 1);
17*6738028dSThomas Richter 	if (sysfs__read_ull(path, (unsigned long long *)start) < 0) {
18*6738028dSThomas Richter 		pr_debug2("Using module %s start:%#lx\n", path, m_start);
19*6738028dSThomas Richter 		*start = m_start;
20*6738028dSThomas Richter 	}
21203d8a4aSSong Shan Gong 
22203d8a4aSSong Shan Gong 	return 0;
23203d8a4aSSong Shan Gong }
24