@@ -1599,7 +1599,8 @@ static int machine__process_extra_kernel_map(struct machine *machine,
15991599}
16001600
16011601static int machine__process_kernel_mmap_event (struct machine * machine ,
1602- struct extra_kernel_map * xm )
1602+ struct extra_kernel_map * xm ,
1603+ struct build_id * bid )
16031604{
16041605 struct map * map ;
16051606 enum dso_space_type dso_space ;
@@ -1624,6 +1625,10 @@ static int machine__process_kernel_mmap_event(struct machine *machine,
16241625 goto out_problem ;
16251626
16261627 map -> end = map -> start + xm -> end - xm -> start ;
1628+
1629+ if (build_id__is_defined (bid ))
1630+ dso__set_build_id (map -> dso , bid );
1631+
16271632 } else if (is_kernel_mmap ) {
16281633 const char * symbol_name = (xm -> name + strlen (machine -> mmap_name ));
16291634 /*
@@ -1681,6 +1686,9 @@ static int machine__process_kernel_mmap_event(struct machine *machine,
16811686
16821687 machine__update_kernel_mmap (machine , xm -> start , xm -> end );
16831688
1689+ if (build_id__is_defined (bid ))
1690+ dso__set_build_id (kernel , bid );
1691+
16841692 /*
16851693 * Avoid using a zero address (kptr_restrict) for the ref reloc
16861694 * symbol. Effectively having zero here means that at record
@@ -1718,11 +1726,17 @@ int machine__process_mmap2_event(struct machine *machine,
17181726 .ino = event -> mmap2 .ino ,
17191727 .ino_generation = event -> mmap2 .ino_generation ,
17201728 };
1729+ struct build_id __bid , * bid = NULL ;
17211730 int ret = 0 ;
17221731
17231732 if (dump_trace )
17241733 perf_event__fprintf_mmap2 (event , stdout );
17251734
1735+ if (event -> header .misc & PERF_RECORD_MISC_MMAP_BUILD_ID ) {
1736+ bid = & __bid ;
1737+ build_id__init (bid , event -> mmap2 .build_id , event -> mmap2 .build_id_size );
1738+ }
1739+
17261740 if (sample -> cpumode == PERF_RECORD_MISC_GUEST_KERNEL ||
17271741 sample -> cpumode == PERF_RECORD_MISC_KERNEL ) {
17281742 struct extra_kernel_map xm = {
@@ -1732,7 +1746,7 @@ int machine__process_mmap2_event(struct machine *machine,
17321746 };
17331747
17341748 strlcpy (xm .name , event -> mmap2 .filename , KMAP_NAME_LEN );
1735- ret = machine__process_kernel_mmap_event (machine , & xm );
1749+ ret = machine__process_kernel_mmap_event (machine , & xm , bid );
17361750 if (ret < 0 )
17371751 goto out_problem ;
17381752 return 0 ;
@@ -1746,7 +1760,7 @@ int machine__process_mmap2_event(struct machine *machine,
17461760 map = map__new (machine , event -> mmap2 .start ,
17471761 event -> mmap2 .len , event -> mmap2 .pgoff ,
17481762 & dso_id , event -> mmap2 .prot ,
1749- event -> mmap2 .flags ,
1763+ event -> mmap2 .flags , bid ,
17501764 event -> mmap2 .filename , thread );
17511765
17521766 if (map == NULL )
@@ -1789,7 +1803,7 @@ int machine__process_mmap_event(struct machine *machine, union perf_event *event
17891803 };
17901804
17911805 strlcpy (xm .name , event -> mmap .filename , KMAP_NAME_LEN );
1792- ret = machine__process_kernel_mmap_event (machine , & xm );
1806+ ret = machine__process_kernel_mmap_event (machine , & xm , NULL );
17931807 if (ret < 0 )
17941808 goto out_problem ;
17951809 return 0 ;
@@ -1805,7 +1819,7 @@ int machine__process_mmap_event(struct machine *machine, union perf_event *event
18051819
18061820 map = map__new (machine , event -> mmap .start ,
18071821 event -> mmap .len , event -> mmap .pgoff ,
1808- NULL , prot , 0 , event -> mmap .filename , thread );
1822+ NULL , prot , 0 , NULL , event -> mmap .filename , thread );
18091823
18101824 if (map == NULL )
18111825 goto out_problem_map ;
0 commit comments