diff options
Diffstat (limited to 'tools/perf/util/probe-finder.c')
-rw-r--r-- | tools/perf/util/probe-finder.c | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index e5e589fdef9b..4f6e277c457c 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c | |||
@@ -89,79 +89,6 @@ error: | |||
89 | return -ENOENT; | 89 | return -ENOENT; |
90 | } | 90 | } |
91 | 91 | ||
92 | #if _ELFUTILS_PREREQ(0, 148) | ||
93 | /* This method is buggy if elfutils is older than 0.148 */ | ||
94 | static int __linux_kernel_find_elf(Dwfl_Module *mod, | ||
95 | void **userdata, | ||
96 | const char *module_name, | ||
97 | Dwarf_Addr base, | ||
98 | char **file_name, Elf **elfp) | ||
99 | { | ||
100 | int fd; | ||
101 | const char *path = kernel_get_module_path(module_name); | ||
102 | |||
103 | pr_debug2("Use file %s for %s\n", path, module_name); | ||
104 | if (path) { | ||
105 | fd = open(path, O_RDONLY); | ||
106 | if (fd >= 0) { | ||
107 | *file_name = strdup(path); | ||
108 | return fd; | ||
109 | } | ||
110 | } | ||
111 | /* If failed, try to call standard method */ | ||
112 | return dwfl_linux_kernel_find_elf(mod, userdata, module_name, base, | ||
113 | file_name, elfp); | ||
114 | } | ||
115 | |||
116 | static const Dwfl_Callbacks kernel_callbacks = { | ||
117 | .find_debuginfo = dwfl_standard_find_debuginfo, | ||
118 | .debuginfo_path = &debuginfo_path, | ||
119 | |||
120 | .find_elf = __linux_kernel_find_elf, | ||
121 | .section_address = dwfl_linux_kernel_module_section_address, | ||
122 | }; | ||
123 | |||
124 | /* Get a Dwarf from live kernel image */ | ||
125 | static int debuginfo__init_online_kernel_dwarf(struct debuginfo *dbg, | ||
126 | Dwarf_Addr addr) | ||
127 | { | ||
128 | dbg->dwfl = dwfl_begin(&kernel_callbacks); | ||
129 | if (!dbg->dwfl) | ||
130 | return -EINVAL; | ||
131 | |||
132 | /* Load the kernel dwarves: Don't care the result here */ | ||
133 | dwfl_linux_kernel_report_kernel(dbg->dwfl); | ||
134 | dwfl_linux_kernel_report_modules(dbg->dwfl); | ||
135 | |||
136 | dbg->dbg = dwfl_addrdwarf(dbg->dwfl, addr, &dbg->bias); | ||
137 | /* Here, check whether we could get a real dwarf */ | ||
138 | if (!dbg->dbg) { | ||
139 | pr_debug("Failed to find kernel dwarf at %lx\n", | ||
140 | (unsigned long)addr); | ||
141 | dwfl_end(dbg->dwfl); | ||
142 | memset(dbg, 0, sizeof(*dbg)); | ||
143 | return -ENOENT; | ||
144 | } | ||
145 | |||
146 | return 0; | ||
147 | } | ||
148 | #else | ||
149 | /* With older elfutils, this just support kernel module... */ | ||
150 | static int debuginfo__init_online_kernel_dwarf(struct debuginfo *dbg, | ||
151 | Dwarf_Addr addr __maybe_unused) | ||
152 | { | ||
153 | const char *path = kernel_get_module_path("kernel"); | ||
154 | |||
155 | if (!path) { | ||
156 | pr_err("Failed to find vmlinux path\n"); | ||
157 | return -ENOENT; | ||
158 | } | ||
159 | |||
160 | pr_debug2("Use file %s for debuginfo\n", path); | ||
161 | return debuginfo__init_offline_dwarf(dbg, path); | ||
162 | } | ||
163 | #endif | ||
164 | |||
165 | struct debuginfo *debuginfo__new(const char *path) | 92 | struct debuginfo *debuginfo__new(const char *path) |
166 | { | 93 | { |
167 | struct debuginfo *dbg = zalloc(sizeof(*dbg)); | 94 | struct debuginfo *dbg = zalloc(sizeof(*dbg)); |
@@ -174,19 +101,6 @@ struct debuginfo *debuginfo__new(const char *path) | |||
174 | return dbg; | 101 | return dbg; |
175 | } | 102 | } |
176 | 103 | ||
177 | struct debuginfo *debuginfo__new_online_kernel(unsigned long addr) | ||
178 | { | ||
179 | struct debuginfo *dbg = zalloc(sizeof(*dbg)); | ||
180 | |||
181 | if (!dbg) | ||
182 | return NULL; | ||
183 | |||
184 | if (debuginfo__init_online_kernel_dwarf(dbg, (Dwarf_Addr)addr) < 0) | ||
185 | zfree(&dbg); | ||
186 | |||
187 | return dbg; | ||
188 | } | ||
189 | |||
190 | void debuginfo__delete(struct debuginfo *dbg) | 104 | void debuginfo__delete(struct debuginfo *dbg) |
191 | { | 105 | { |
192 | if (dbg) { | 106 | if (dbg) { |