diff options
author | Christian Biesinger <cbiesinger@google.com> | 2019-10-03 00:36:35 -0500 |
---|---|---|
committer | Christian Biesinger <cbiesinger@google.com> | 2019-10-19 15:45:33 -0500 |
commit | 39ef2f6256737db92f5d60fa201fe0b301bb8100 (patch) | |
tree | 13ff1a57f5ecac08df8f0ecdc2f3544cb4d97564 /gdb/dwarf2-frame.c | |
parent | 18338fcee6c75bf0b41f803b84ae15221676f8cd (diff) | |
download | gdb-39ef2f6256737db92f5d60fa201fe0b301bb8100.zip gdb-39ef2f6256737db92f5d60fa201fe0b301bb8100.tar.gz gdb-39ef2f6256737db92f5d60fa201fe0b301bb8100.tar.bz2 |
Replace some more qsort calls with std::sort
This has better typesafety, avoids a function pointer indirection,
and can benefit from inlining.
gdb/ChangeLog:
2019-10-19 Christian Biesinger <cbiesinger@google.com>
* bcache.c (bcache::print_statistics): Use std::sort instead of qsort.
* breakpoint.c (bp_locations_compare): Rename to...
(bp_location_is_less_than): ...this, and change to std::sort semantics.
(update_global_location_list): Use std::sort instead of qsort.
* buildsym.c (compare_line_numbers): Rename to...
(lte_is_less_than): ...this, and change to std::sort semantics.
(buildsym_compunit::end_symtab_with_blockvector): Use std::sort
instead of qsort.
* disasm.c (compare_lines): Rename to...
(line_is_less_than): ...this, and change to std::sort semantics.
(do_mixed_source_and_assembly_deprecated): Call std::sort instead
of qsort.
* dwarf2-frame.c (qsort_fde_cmp): Rename to...
(fde_is_less_than): ...this, and change to std::sort semantics.
(dwarf2_build_frame_info): Call std::sort instead of qsort.
* mdebugread.c (compare_blocks):
(block_is_less_than): ...this, and change to std::sort semantics.
(sort_blocks): Call std::sort instead of qsort.
* objfiles.c (qsort_cmp): Rename to...
(sort_cmp): ...this, and change to std::sort semantics.
(update_section_map): Call std::sort instead of qsort.
* remote.c (compare_pnums): Remove.
(map_regcache_remote_table): Call std::sort instead of qsort.
* utils.c (compare_positive_ints): Remove.
* utils.h (compare_positive_ints): Remove.
* xcoffread.c (compare_lte): Remove.
(arrange_linetable): Call std::sort instead of qsort.
Change-Id: Ibcddce12a3d07448701e731b7150fa23611d86de
Diffstat (limited to 'gdb/dwarf2-frame.c')
-rw-r--r-- | gdb/dwarf2-frame.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index 3c8f0a1..45af947 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -44,6 +44,8 @@ #include "selftest-arch.h" #endif +#include <algorithm> + struct comp_unit; /* Call Frame Information (CFI). */ @@ -2181,25 +2183,22 @@ Corrupt data in %s:%s; align 8 workaround apparently succeeded"), return ret; } -static int -qsort_fde_cmp (const void *a, const void *b) +static bool +fde_is_less_than (const dwarf2_fde *aa, const dwarf2_fde *bb) { - struct dwarf2_fde *aa = *(struct dwarf2_fde **)a; - struct dwarf2_fde *bb = *(struct dwarf2_fde **)b; - if (aa->initial_location == bb->initial_location) { if (aa->address_range != bb->address_range && aa->eh_frame_p == 0 && bb->eh_frame_p == 0) /* Linker bug, e.g. gold/10400. Work around it by keeping stable sort order. */ - return (a < b) ? -1 : 1; + return aa < bb; else /* Put eh_frame entries after debug_frame ones. */ - return aa->eh_frame_p - bb->eh_frame_p; + return aa->eh_frame_p < bb->eh_frame_p; } - return (aa->initial_location < bb->initial_location) ? -1 : 1; + return aa->initial_location < bb->initial_location; } void @@ -2347,8 +2346,8 @@ dwarf2_build_frame_info (struct objfile *objfile) int i; /* Prepare FDE table for lookups. */ - qsort (fde_table.entries, fde_table.num_entries, - sizeof (fde_table.entries[0]), qsort_fde_cmp); + std::sort (fde_table.entries, fde_table.entries + fde_table.num_entries, + fde_is_less_than); /* Check for leftovers from --gc-sections. The GNU linker sets the relevant symbols to zero, but doesn't zero the FDE *end* |