|
@@ -856,13 +856,10 @@ static int machine__get_running_kernel_start(struct machine *machine,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-int __machine__create_kernel_maps(struct machine *machine, struct dso *kernel)
|
|
|
|
|
|
+static int
|
|
|
|
+__machine__create_kernel_maps(struct machine *machine, struct dso *kernel)
|
|
{
|
|
{
|
|
int type;
|
|
int type;
|
|
- u64 start = 0;
|
|
|
|
-
|
|
|
|
- if (machine__get_running_kernel_start(machine, NULL, &start))
|
|
|
|
- return -1;
|
|
|
|
|
|
|
|
/* In case of renewal the kernel map, destroy previous one */
|
|
/* In case of renewal the kernel map, destroy previous one */
|
|
machine__destroy_kernel_maps(machine);
|
|
machine__destroy_kernel_maps(machine);
|
|
@@ -871,7 +868,7 @@ int __machine__create_kernel_maps(struct machine *machine, struct dso *kernel)
|
|
struct kmap *kmap;
|
|
struct kmap *kmap;
|
|
struct map *map;
|
|
struct map *map;
|
|
|
|
|
|
- machine->vmlinux_maps[type] = map__new2(start, kernel, type);
|
|
|
|
|
|
+ machine->vmlinux_maps[type] = map__new2(0, kernel, type);
|
|
if (machine->vmlinux_maps[type] == NULL)
|
|
if (machine->vmlinux_maps[type] == NULL)
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
@@ -1222,6 +1219,24 @@ static int machine__create_modules(struct machine *machine)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void machine__set_kernel_mmap(struct machine *machine,
|
|
|
|
+ u64 start, u64 end)
|
|
|
|
+{
|
|
|
|
+ int i;
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < MAP__NR_TYPES; i++) {
|
|
|
|
+ machine->vmlinux_maps[i]->start = start;
|
|
|
|
+ machine->vmlinux_maps[i]->end = end;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Be a bit paranoid here, some perf.data file came with
|
|
|
|
+ * a zero sized synthesized MMAP event for the kernel.
|
|
|
|
+ */
|
|
|
|
+ if (machine->vmlinux_maps[i]->end == 0)
|
|
|
|
+ machine->vmlinux_maps[i]->end = ~0ULL;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
int machine__create_kernel_maps(struct machine *machine)
|
|
int machine__create_kernel_maps(struct machine *machine)
|
|
{
|
|
{
|
|
struct dso *kernel = machine__get_kernel(machine);
|
|
struct dso *kernel = machine__get_kernel(machine);
|
|
@@ -1246,40 +1261,22 @@ int machine__create_kernel_maps(struct machine *machine)
|
|
"continuing anyway...\n", machine->pid);
|
|
"continuing anyway...\n", machine->pid);
|
|
}
|
|
}
|
|
|
|
|
|
- /*
|
|
|
|
- * Now that we have all the maps created, just set the ->end of them:
|
|
|
|
- */
|
|
|
|
- map_groups__fixup_end(&machine->kmaps);
|
|
|
|
-
|
|
|
|
if (!machine__get_running_kernel_start(machine, &name, &addr)) {
|
|
if (!machine__get_running_kernel_start(machine, &name, &addr)) {
|
|
if (name &&
|
|
if (name &&
|
|
maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name, addr)) {
|
|
maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name, addr)) {
|
|
machine__destroy_kernel_maps(machine);
|
|
machine__destroy_kernel_maps(machine);
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
+ machine__set_kernel_mmap(machine, addr, 0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Now that we have all the maps created, just set the ->end of them:
|
|
|
|
+ */
|
|
|
|
+ map_groups__fixup_end(&machine->kmaps);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static void machine__set_kernel_mmap(struct machine *machine,
|
|
|
|
- u64 start, u64 end)
|
|
|
|
-{
|
|
|
|
- int i;
|
|
|
|
-
|
|
|
|
- for (i = 0; i < MAP__NR_TYPES; i++) {
|
|
|
|
- machine->vmlinux_maps[i]->start = start;
|
|
|
|
- machine->vmlinux_maps[i]->end = end;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Be a bit paranoid here, some perf.data file came with
|
|
|
|
- * a zero sized synthesized MMAP event for the kernel.
|
|
|
|
- */
|
|
|
|
- if (machine->vmlinux_maps[i]->end == 0)
|
|
|
|
- machine->vmlinux_maps[i]->end = ~0ULL;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static bool machine__uses_kcore(struct machine *machine)
|
|
static bool machine__uses_kcore(struct machine *machine)
|
|
{
|
|
{
|
|
struct dso *dso;
|
|
struct dso *dso;
|