|
|
@@ -832,9 +832,25 @@ static int machine__create_modules(struct machine *machine)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+const char *ref_reloc_sym_names[] = {"_text", "_stext", NULL};
|
|
|
+
|
|
|
int machine__create_kernel_maps(struct machine *machine)
|
|
|
{
|
|
|
struct dso *kernel = machine__get_kernel(machine);
|
|
|
+ char filename[PATH_MAX];
|
|
|
+ const char *name;
|
|
|
+ u64 addr = 0;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ machine__get_kallsyms_filename(machine, filename, PATH_MAX);
|
|
|
+
|
|
|
+ for (i = 0; (name = ref_reloc_sym_names[i]) != NULL; i++) {
|
|
|
+ addr = kallsyms__get_function_start(filename, name);
|
|
|
+ if (addr)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!addr)
|
|
|
+ return -1;
|
|
|
|
|
|
if (kernel == NULL ||
|
|
|
__machine__create_kernel_maps(machine, kernel) < 0)
|
|
|
@@ -853,6 +869,13 @@ int machine__create_kernel_maps(struct machine *machine)
|
|
|
* Now that we have all the maps created, just set the ->end of them:
|
|
|
*/
|
|
|
map_groups__fixup_end(&machine->kmaps);
|
|
|
+
|
|
|
+ if (maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name,
|
|
|
+ addr)) {
|
|
|
+ machine__destroy_kernel_maps(machine);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|