@@ -552,6 +552,28 @@ static void *sort_orctable(void *arg)
552
552
553
553
#ifdef MCOUNT_SORT_ENABLED
554
554
555
+ static int compare_values_64 (const void * a , const void * b )
556
+ {
557
+ uint64_t av = * (uint64_t * )a ;
558
+ uint64_t bv = * (uint64_t * )b ;
559
+
560
+ if (av < bv )
561
+ return -1 ;
562
+ return av > bv ;
563
+ }
564
+
565
+ static int compare_values_32 (const void * a , const void * b )
566
+ {
567
+ uint32_t av = * (uint32_t * )a ;
568
+ uint32_t bv = * (uint32_t * )b ;
569
+
570
+ if (av < bv )
571
+ return -1 ;
572
+ return av > bv ;
573
+ }
574
+
575
+ static int (* compare_values )(const void * a , const void * b );
576
+
555
577
/* Only used for sorting mcount table */
556
578
static void rela_write_addend (Elf_Rela * rela , uint64_t val )
557
579
{
@@ -583,6 +605,8 @@ static void *sort_relocs(Elf_Ehdr *ehdr, uint64_t start_loc, uint64_t size)
583
605
void * vals ;
584
606
void * ptr ;
585
607
608
+ compare_values = long_size == 4 ? compare_values_32 : compare_values_64 ;
609
+
586
610
shdr_start = (Elf_Shdr * )((char * )ehdr + ehdr_shoff (ehdr ));
587
611
shentsize = ehdr_shentsize (ehdr );
588
612
@@ -640,7 +664,7 @@ static void *sort_relocs(Elf_Ehdr *ehdr, uint64_t start_loc, uint64_t size)
640
664
}
641
665
}
642
666
count = ptr - vals ;
643
- qsort (vals , count / long_size , long_size , compare_extable );
667
+ qsort (vals , count / long_size , long_size , compare_values );
644
668
645
669
ptr = vals ;
646
670
for (int i = 0 ; i < shnum ; i ++ ) {
0 commit comments