From 47f6ff2f9e679cd1f7af6fecbba5f62daf3bee95 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 14 Oct 2019 13:53:40 +1030 Subject: [PATCH] qsort: syms.c stab sorting * syms.c (struct indexentry): Add idx field. (cmpindexentry): Final sort on idx. (_bfd_stab_section_find_nearest_line): Set idx. --- bfd/ChangeLog | 6 ++++++ bfd/syms.c | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3593fa815a..a1eaef95d8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-10-14 Alan Modra + + * syms.c (struct indexentry): Add idx field. + (cmpindexentry): Final sort on idx. + (_bfd_stab_section_find_nearest_line): Set idx. + 2019-10-14 Alan Modra * dwarf2.c (struct lookup_funcinfo): Add idx field. diff --git a/bfd/syms.c b/bfd/syms.c index 9a2754ebe6..146f674a13 100644 --- a/bfd/syms.c +++ b/bfd/syms.c @@ -884,6 +884,7 @@ struct indexentry char *directory_name; char *file_name; char *function_name; + int idx; }; /* Compare two indexentry structures. This is called via qsort. */ @@ -896,10 +897,9 @@ cmpindexentry (const void *a, const void *b) if (contestantA->val < contestantB->val) return -1; - else if (contestantA->val > contestantB->val) + if (contestantA->val > contestantB->val) return 1; - else - return 0; + return contestantA->idx - contestantB->idx; } /* A pointer to this structure is stored in *pinfo. */ @@ -1198,6 +1198,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, info->indextable[i].directory_name = directory_name; info->indextable[i].file_name = file_name; info->indextable[i].function_name = NULL; + info->indextable[i].idx = i; ++i; } @@ -1257,6 +1258,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, info->indextable[i].directory_name = directory_name; info->indextable[i].file_name = file_name; info->indextable[i].function_name = function_name; + info->indextable[i].idx = i; ++i; break; } @@ -1270,6 +1272,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, info->indextable[i].directory_name = directory_name; info->indextable[i].file_name = file_name; info->indextable[i].function_name = NULL; + info->indextable[i].idx = i; ++i; } @@ -1279,6 +1282,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, info->indextable[i].directory_name = NULL; info->indextable[i].file_name = NULL; info->indextable[i].function_name = NULL; + info->indextable[i].idx = i; ++i; info->indextablesize = i; -- 2.34.1