From 3e5d3a5aaf64994809c15f0af12dd9260cf456e3 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Mon, 24 Jun 2013 22:18:32 +0000 Subject: [PATCH] * objfiles.h (pc_in_section): New prototype. (in_plt_section): Remove name argument, replace prototype with static inline function. * mips-tdep.h: Include "objfiles.h". (in_mips_stubs_section): New function. * hppa-tdep.h (gdbarch_tdep): Remove name argument of in_solib_call_trampoline member. (hppa_in_solib_call_trampoline): Remove name argument. * objfiles.c (pc_in_section): New function. (in_plt_section): Remove function. * mips-linux-tdep.c: Include "objfiles.h". (mips_linux_in_dynsym_stub): Call in_mips_stubs_section. Remove name argument. Return 1 rather than the low 16-bit halfword of any instruction examined. (mips_linux_in_dynsym_resolve_code): Update mips_linux_in_dynsym_stub call accordingly. * mips-tdep.c (mips_stub_frame_sniffer): Use in_mips_stubs_section rather than an equivalent hand-coded sequence. * hppa-hpux-tdep.c (in_opd_section): Remove function. (hppa32_hpux_in_solib_call_trampoline): Remove name argument. (hppa64_hpux_in_solib_call_trampoline): Likewise. (hppa64_hpux_find_global_pointer): Use pc_in_section rather than in_opd_section. * hppa-tdep.c (hppa_stub_unwind_sniffer): Remove name argument on call to tdep->in_solib_call_trampoline. (hppa_in_solib_call_trampoline): Remove name argument, update according to in_plt_section change. (hppa_skip_trampoline_code): Update according to in_plt_section change. * aarch64-tdep.c (aarch64_stub_unwind_sniffer): Likewise. * arm-symbian-tdep.c (arm_symbian_skip_trampoline_code): Likewise. * arm-tdep.c (arm_stub_unwind_sniffer): Likewise. * hppa-linux-tdep.c (hppa_linux_find_global_pointer): Likewise. * hppabsd-tdep.c (hppabsd_find_global_pointer): Likewise. * nios2-tdep.c (nios2_stub_frame_sniffer): Likewise. * nto-tdep.c (nto_relocate_section_addresses): Likewise. * s390-tdep.c (s390_stub_frame_sniffer): Likewise. * sh-tdep.c (sh_stub_unwind_sniffer): Likewise. * solib-dsbt.c (dsbt_in_dynsym_resolve_code): Likewise. * solib-frv.c (frv_in_dynsym_resolve_code): Likewise. * solib-svr4.c (svr4_in_dynsym_resolve_code): Likewise. * solib-target.c (solib_target_in_dynsym_resolve_code): Likewise. * sparc-tdep.c (sparc_analyze_prologue): Likewise. * tic6x-tdep.c (tic6x_stub_unwind_sniffer): Likewise. --- gdb/ChangeLog | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ gdb/aarch64-tdep.c | 2 +- gdb/arm-symbian-tdep.c | 2 +- gdb/arm-tdep.c | 2 +- gdb/hppa-hpux-tdep.c | 22 +++------------------- gdb/hppa-linux-tdep.c | 2 +- gdb/hppa-tdep.c | 11 +++++------ gdb/hppa-tdep.h | 10 ++++------ gdb/hppabsd-tdep.c | 2 +- gdb/mips-linux-tdep.c | 29 ++++++++++++++++++++--------- gdb/mips-tdep.c | 10 +--------- gdb/mips-tdep.h | 10 ++++++++++ gdb/nios2-tdep.c | 2 +- gdb/nto-tdep.c | 2 +- gdb/objfiles.c | 8 +++----- gdb/objfiles.h | 12 +++++++++++- gdb/s390-tdep.c | 2 +- gdb/sh-tdep.c | 2 +- gdb/solib-dsbt.c | 2 +- gdb/solib-frv.c | 2 +- gdb/solib-svr4.c | 2 +- gdb/solib-target.c | 2 +- gdb/sparc-tdep.c | 2 +- gdb/tic6x-tdep.c | 2 +- 24 files changed, 120 insertions(+), 70 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index adaf463..ff02319 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,51 @@ +2013-06-24 Maciej W. Rozycki + + * objfiles.h (pc_in_section): New prototype. + (in_plt_section): Remove name argument, replace prototype with + static inline function. + * mips-tdep.h: Include "objfiles.h". + (in_mips_stubs_section): New function. + * hppa-tdep.h (gdbarch_tdep): Remove name argument of + in_solib_call_trampoline member. + (hppa_in_solib_call_trampoline): Remove name argument. + * objfiles.c (pc_in_section): New function. + (in_plt_section): Remove function. + * mips-linux-tdep.c: Include "objfiles.h". + (mips_linux_in_dynsym_stub): Call in_mips_stubs_section. Remove + name argument. Return 1 rather than the low 16-bit halfword of + any instruction examined. + (mips_linux_in_dynsym_resolve_code): Update + mips_linux_in_dynsym_stub call accordingly. + * mips-tdep.c (mips_stub_frame_sniffer): Use in_mips_stubs_section + rather than an equivalent hand-coded sequence. + * hppa-hpux-tdep.c (in_opd_section): Remove function. + (hppa32_hpux_in_solib_call_trampoline): Remove name argument. + (hppa64_hpux_in_solib_call_trampoline): Likewise. + (hppa64_hpux_find_global_pointer): Use pc_in_section rather than + in_opd_section. + * hppa-tdep.c (hppa_stub_unwind_sniffer): Remove name argument + on call to tdep->in_solib_call_trampoline. + (hppa_in_solib_call_trampoline): Remove name argument, update + according to in_plt_section change. + (hppa_skip_trampoline_code): Update according to in_plt_section + change. + * aarch64-tdep.c (aarch64_stub_unwind_sniffer): Likewise. + * arm-symbian-tdep.c (arm_symbian_skip_trampoline_code): + Likewise. + * arm-tdep.c (arm_stub_unwind_sniffer): Likewise. + * hppa-linux-tdep.c (hppa_linux_find_global_pointer): Likewise. + * hppabsd-tdep.c (hppabsd_find_global_pointer): Likewise. + * nios2-tdep.c (nios2_stub_frame_sniffer): Likewise. + * nto-tdep.c (nto_relocate_section_addresses): Likewise. + * s390-tdep.c (s390_stub_frame_sniffer): Likewise. + * sh-tdep.c (sh_stub_unwind_sniffer): Likewise. + * solib-dsbt.c (dsbt_in_dynsym_resolve_code): Likewise. + * solib-frv.c (frv_in_dynsym_resolve_code): Likewise. + * solib-svr4.c (svr4_in_dynsym_resolve_code): Likewise. + * solib-target.c (solib_target_in_dynsym_resolve_code): Likewise. + * sparc-tdep.c (sparc_analyze_prologue): Likewise. + * tic6x-tdep.c (tic6x_stub_unwind_sniffer): Likewise. + 2013-06-24 Joel Brobecker * common/create-version.sh: Fix expansion of $host_alias diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 2d74429..ea25cf6 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -1094,7 +1094,7 @@ aarch64_stub_unwind_sniffer (const struct frame_unwind *self, gdb_byte dummy[4]; addr_in_block = get_frame_address_in_block (this_frame); - if (in_plt_section (addr_in_block, NULL) + if (in_plt_section (addr_in_block) /* We also use the stub winder if the target memory is unreadable to avoid having the prologue unwinder trying to read it. */ || target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0) diff --git a/gdb/arm-symbian-tdep.c b/gdb/arm-symbian-tdep.c index c1ac92b..d7d34fd 100644 --- a/gdb/arm-symbian-tdep.c +++ b/gdb/arm-symbian-tdep.c @@ -38,7 +38,7 @@ arm_symbian_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) CORE_ADDR dest; gdb_byte buf[4]; - if (!in_plt_section (pc, NULL)) + if (!in_plt_section (pc)) return 0; if (target_read_memory (pc, buf, 4) != 0) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index b169e35..7c78a61 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -2907,7 +2907,7 @@ arm_stub_unwind_sniffer (const struct frame_unwind *self, gdb_byte dummy[4]; addr_in_block = get_frame_address_in_block (this_frame); - if (in_plt_section (addr_in_block, NULL) + if (in_plt_section (addr_in_block) /* We also use the stub winder if the target memory is unreadable to avoid having the prologue unwinder trying to read it. */ || target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0) diff --git a/gdb/hppa-hpux-tdep.c b/gdb/hppa-hpux-tdep.c index 667904e..88e59ba 100644 --- a/gdb/hppa-hpux-tdep.c +++ b/gdb/hppa-hpux-tdep.c @@ -65,28 +65,13 @@ extern void _initialize_hppa_hpux_tdep (void); extern initialize_file_ftype _initialize_hppa_hpux_tdep; -static int -in_opd_section (CORE_ADDR pc) -{ - struct obj_section *s; - int retval = 0; - - s = find_pc_section (pc); - - retval = (s != NULL - && s->the_bfd_section->name != NULL - && strcmp (s->the_bfd_section->name, ".opd") == 0); - return (retval); -} - /* Return one if PC is in the call path of a trampoline, else return zero. Note we return one for *any* call trampoline (long-call, arg-reloc), not just shared library trampolines (import, export). */ static int -hppa32_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch, - CORE_ADDR pc, char *name) +hppa32_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct bound_minimal_symbol minsym; @@ -156,8 +141,7 @@ hppa32_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch, } static int -hppa64_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch, - CORE_ADDR pc, char *name) +hppa64_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); @@ -798,7 +782,7 @@ hppa64_hpux_find_global_pointer (struct gdbarch *gdbarch, faddr = value_as_address (function); - if (in_opd_section (faddr)) + if (pc_in_section (faddr, ".opd")) { target_read_memory (faddr, buf, sizeof (buf)); return extract_unsigned_integer (&buf[24], 8, byte_order); diff --git a/gdb/hppa-linux-tdep.c b/gdb/hppa-linux-tdep.c index dde2374..52efea1 100644 --- a/gdb/hppa-linux-tdep.c +++ b/gdb/hppa-linux-tdep.c @@ -356,7 +356,7 @@ hppa_linux_find_global_pointer (struct gdbarch *gdbarch, /* If the address is in the plt section, then the real function hasn't yet been fixed up by the linker so we cannot determine the gp of that function. */ - if (in_plt_section (faddr, NULL)) + if (in_plt_section (faddr)) return 0; faddr_sect = find_pc_section (faddr); diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index fe1b45b..53f8ed7 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -2417,7 +2417,7 @@ hppa_stub_unwind_sniffer (const struct frame_unwind *self, if (pc == 0 || (tdep->in_solib_call_trampoline != NULL - && tdep->in_solib_call_trampoline (gdbarch, pc, NULL)) + && tdep->in_solib_call_trampoline (gdbarch, pc)) || gdbarch_in_solib_return_trampoline (gdbarch, pc, NULL)) return 1; return 0; @@ -2855,13 +2855,12 @@ hppa_in_dyncall (CORE_ADDR pc) } int -hppa_in_solib_call_trampoline (struct gdbarch *gdbarch, - CORE_ADDR pc, char *name) +hppa_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc) { unsigned int insn[HPPA_MAX_INSN_PATTERN_LEN]; struct unwind_table_entry *u; - if (in_plt_section (pc, name) || hppa_in_dyncall (pc)) + if (in_plt_section (pc) || hppa_in_dyncall (pc)) return 1; /* The GNU toolchain produces linker stubs without unwind @@ -2918,13 +2917,13 @@ hppa_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) /* fallthrough */ } - if (in_plt_section (pc, NULL)) + if (in_plt_section (pc)) { pc = read_memory_typed_address (pc, func_ptr_type); /* If the PLT slot has not yet been resolved, the target will be the PLT stub. */ - if (in_plt_section (pc, NULL)) + if (in_plt_section (pc)) { /* Sanity check: are we pointing to the PLT stub? */ if (!hppa_match_insns (gdbarch, pc, hppa_plt_stub, insn)) diff --git a/gdb/hppa-tdep.h b/gdb/hppa-tdep.h index 3b10066..d2ce459 100644 --- a/gdb/hppa-tdep.h +++ b/gdb/hppa-tdep.h @@ -90,11 +90,9 @@ struct gdbarch_tdep CORE_ADDR (*find_global_pointer) (struct gdbarch *, struct value *); /* For shared libraries, each call goes through a small piece of - trampoline code in the ".plt", or equivalent, section. - IN_SOLIB_CALL_TRAMPOLINE evaluates to nonzero if we are currently - stopped in one of these. */ - int (*in_solib_call_trampoline) (struct gdbarch *gdbarch, - CORE_ADDR pc, char *name); + trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE + evaluates to nonzero if we are currently stopped in one of these. */ + int (*in_solib_call_trampoline) (struct gdbarch *gdbarch, CORE_ADDR pc); /* For targets that support multiple spaces, we may have additional stubs in the return path. These stubs are internal to the ABI, and users are @@ -242,7 +240,7 @@ extern struct minimal_symbol * extern struct hppa_objfile_private *hppa_init_objfile_priv_data (struct objfile *objfile); extern int hppa_in_solib_call_trampoline (struct gdbarch *gdbarch, - CORE_ADDR pc, char *name); + CORE_ADDR pc); extern CORE_ADDR hppa_skip_trampoline_code (struct frame_info *, CORE_ADDR pc); #endif /* hppa-tdep.h */ diff --git a/gdb/hppabsd-tdep.c b/gdb/hppabsd-tdep.c index 18cf9a2..4cfb101 100644 --- a/gdb/hppabsd-tdep.c +++ b/gdb/hppabsd-tdep.c @@ -47,7 +47,7 @@ hppabsd_find_global_pointer (struct gdbarch *gdbarch, struct value *function) /* If the address is in the .plt section, then the real function hasn't yet been fixed up by the linker so we cannot determine the Global Pointer for that function. */ - if (in_plt_section (faddr, NULL)) + if (in_plt_section (faddr)) return 0; faddr_sec = find_pc_section (faddr); diff --git a/gdb/mips-linux-tdep.c b/gdb/mips-linux-tdep.c index 1628645..484b39f 100644 --- a/gdb/mips-linux-tdep.c +++ b/gdb/mips-linux-tdep.c @@ -30,6 +30,7 @@ #include "trad-frame.h" #include "tramp-frame.h" #include "gdbtypes.h" +#include "objfiles.h" #include "solib.h" #include "solib-svr4.h" #include "solist.h" @@ -666,25 +667,34 @@ mips_linux_core_read_description (struct gdbarch *gdbarch, /* Check the code at PC for a dynamic linker lazy resolution stub. - Because they aren't in the .plt section, we pattern-match on the - code generated by GNU ld. They look like this: + GNU ld for MIPS has put lazy resolution stubs into a ".MIPS.stubs" + section uniformly since version 2.15. If the pc is in that section, + then we are in such a stub. Before that ".stub" was used in 32-bit + ELF binaries, however we do not bother checking for that since we + have never had and that case should be extremely rare these days. + Instead we pattern-match on the code generated by GNU ld. They look + like this: lw t9,0x8010(gp) addu t7,ra jalr t9,ra addiu t8,zero,INDEX - (with the appropriate doubleword instructions for N64). Also - return the dynamic symbol index used in the last instruction. */ + (with the appropriate doubleword instructions for N64). As any lazy + resolution stubs in microMIPS binaries will always be in a + ".MIPS.stubs" section we only ever verify standard MIPS patterns. */ static int -mips_linux_in_dynsym_stub (CORE_ADDR pc, char *name) +mips_linux_in_dynsym_stub (CORE_ADDR pc) { gdb_byte buf[28], *p; ULONGEST insn, insn1; int n64 = (mips_abi (target_gdbarch ()) == MIPS_ABI_N64); enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); + if (in_mips_stubs_section (pc)) + return 1; + read_memory (pc - 12, buf, 28); if (n64) @@ -742,7 +752,7 @@ mips_linux_in_dynsym_stub (CORE_ADDR pc, char *name) return 0; } - return (insn & 0xffff); + return 1; } /* Return non-zero iff PC belongs to the dynamic linker resolution @@ -756,9 +766,10 @@ mips_linux_in_dynsym_resolve_code (CORE_ADDR pc) if (svr4_in_dynsym_resolve_code (pc)) return 1; - /* Pattern match for the stub. It would be nice if there were a - more efficient way to avoid this check. */ - if (mips_linux_in_dynsym_stub (pc, NULL)) + /* Likewise for the stubs. They live in the .MIPS.stubs section these + days, so we check if the PC is within, than fall back to a pattern + match. */ + if (mips_linux_in_dynsym_stub (pc)) return 1; return 0; diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 245ffd6..5a4e26c 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -3588,15 +3588,7 @@ mips_stub_frame_sniffer (const struct frame_unwind *self, if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0) return 1; - if (in_plt_section (pc, NULL)) - return 1; - - /* Binutils for MIPS puts lazy resolution stubs into .MIPS.stubs. */ - s = find_pc_section (pc); - - if (s != NULL - && strcmp (bfd_get_section_name (s->objfile->obfd, s->the_bfd_section), - ".MIPS.stubs") == 0) + if (in_plt_section (pc) || in_mips_stubs_section (pc)) return 1; /* Calling a PIC function from a non-PIC function passes through a diff --git a/gdb/mips-tdep.h b/gdb/mips-tdep.h index 096bceb..91d7cb0 100644 --- a/gdb/mips-tdep.h +++ b/gdb/mips-tdep.h @@ -20,6 +20,8 @@ #ifndef MIPS_TDEP_H #define MIPS_TDEP_H +#include "objfiles.h" + struct gdbarch; /* All the possible MIPS ABIs. */ @@ -184,4 +186,12 @@ extern void mips_write_pc (struct regcache *regcache, CORE_ADDR pc); extern struct target_desc *mips_tdesc_gp32; extern struct target_desc *mips_tdesc_gp64; +/* Return non-zero if PC is in a MIPS SVR4 lazy binding stub section. */ + +static inline int +in_mips_stubs_section (CORE_ADDR pc) +{ + return pc_in_section (pc, ".MIPS.stubs"); +} + #endif /* MIPS_TDEP_H */ diff --git a/gdb/nios2-tdep.c b/gdb/nios2-tdep.c index 49f8271..5b9e2e6 100644 --- a/gdb/nios2-tdep.c +++ b/gdb/nios2-tdep.c @@ -1324,7 +1324,7 @@ nios2_stub_frame_sniffer (const struct frame_unwind *self, if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0) return 1; - if (in_plt_section (pc, NULL)) + if (in_plt_section (pc)) return 1; return 0; diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c index 748869f..b1a431c 100644 --- a/gdb/nto-tdep.c +++ b/gdb/nto-tdep.c @@ -318,7 +318,7 @@ nto_relocate_section_addresses (struct so_list *so, struct target_section *sec) int nto_in_dynsym_resolve_code (CORE_ADDR pc) { - if (in_plt_section (pc, NULL)) + if (in_plt_section (pc)) return 1; return 0; } diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 1e1b7bc..759159c 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -1410,12 +1410,10 @@ find_pc_section (CORE_ADDR pc) } -/* In SVR4, we recognize a trampoline by it's section name. - That is, if the pc is in a section named ".plt" then we are in - a trampoline. */ +/* Return non-zero if PC is in a section called NAME. */ int -in_plt_section (CORE_ADDR pc, char *name) +pc_in_section (CORE_ADDR pc, char *name) { struct obj_section *s; int retval = 0; @@ -1424,7 +1422,7 @@ in_plt_section (CORE_ADDR pc, char *name) retval = (s != NULL && s->the_bfd_section->name != NULL - && strcmp (s->the_bfd_section->name, ".plt") == 0); + && strcmp (s->the_bfd_section->name, name) == 0); return (retval); } diff --git a/gdb/objfiles.h b/gdb/objfiles.h index adb1ef8..84167e0 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -495,7 +495,17 @@ extern int have_minimal_symbols (void); extern struct obj_section *find_pc_section (CORE_ADDR pc); -extern int in_plt_section (CORE_ADDR, char *); +/* Return non-zero if PC is in a section called NAME. */ +extern int pc_in_section (CORE_ADDR, char *); + +/* Return non-zero if PC is in a SVR4-style procedure linkage table + section. */ + +static inline int +in_plt_section (CORE_ADDR pc) +{ + return pc_in_section (pc, ".plt"); +} /* Keep a registry of per-objfile data-pointers required by other GDB modules. */ diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c index 641bc80..6111bbf 100644 --- a/gdb/s390-tdep.c +++ b/gdb/s390-tdep.c @@ -2116,7 +2116,7 @@ s390_stub_frame_sniffer (const struct frame_unwind *self, have trapped due to an invalid function pointer call. We handle the non-existing current function like a PLT stub. */ addr_in_block = get_frame_address_in_block (this_frame); - if (in_plt_section (addr_in_block, NULL) + if (in_plt_section (addr_in_block) || s390_readinstruction (insn, get_frame_pc (this_frame)) < 0) return 1; return 0; diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index 53de7a2..e8f1917 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -2036,7 +2036,7 @@ sh_stub_unwind_sniffer (const struct frame_unwind *self, CORE_ADDR addr_in_block; addr_in_block = get_frame_address_in_block (this_frame); - if (in_plt_section (addr_in_block, NULL)) + if (in_plt_section (addr_in_block)) return 1; return 0; diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c index 01dc4b7..4fe24f8 100644 --- a/gdb/solib-dsbt.c +++ b/gdb/solib-dsbt.c @@ -764,7 +764,7 @@ dsbt_in_dynsym_resolve_code (CORE_ADDR pc) return ((pc >= info->interp_text_sect_low && pc < info->interp_text_sect_high) || (pc >= info->interp_plt_sect_low && pc < info->interp_plt_sect_high) - || in_plt_section (pc, NULL)); + || in_plt_section (pc)); } /* Print a warning about being unable to set the dynamic linker diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index 28fb4a4..65c7e01 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -448,7 +448,7 @@ frv_in_dynsym_resolve_code (CORE_ADDR pc) { return ((pc >= interp_text_sect_low && pc < interp_text_sect_high) || (pc >= interp_plt_sect_low && pc < interp_plt_sect_high) - || in_plt_section (pc, NULL)); + || in_plt_section (pc)); } /* Given a loadmap and an address, return the displacement needed diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 2c8d893..6f8d0ef 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -1532,7 +1532,7 @@ svr4_in_dynsym_resolve_code (CORE_ADDR pc) && pc < info->interp_text_sect_high) || (pc >= info->interp_plt_sect_low && pc < info->interp_plt_sect_high) - || in_plt_section (pc, NULL) + || in_plt_section (pc) || in_gnu_ifunc_stub (pc)); } diff --git a/gdb/solib-target.c b/gdb/solib-target.c index 483e5f9..5708276 100644 --- a/gdb/solib-target.c +++ b/gdb/solib-target.c @@ -476,7 +476,7 @@ solib_target_in_dynsym_resolve_code (CORE_ADDR pc) /* We don't have a range of addresses for the dynamic linker; there may not be one in the program's address space. So only report PLT entries (which may be import stubs). */ - return in_plt_section (pc, NULL); + return in_plt_section (pc); } struct target_so_ops solib_target_so_ops; diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index 2b38521..880d276 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -855,7 +855,7 @@ sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, dynamic linker patches up the first PLT with some code that starts with a SAVE instruction. Patch up PC such that it points at the start of our PLT entry. */ - if (tdep->plt_entry_size > 0 && in_plt_section (current_pc, NULL)) + if (tdep->plt_entry_size > 0 && in_plt_section (current_pc)) pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size); insn = sparc_fetch_instruction (pc); diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c index 045fc73..d382b3d 100644 --- a/gdb/tic6x-tdep.c +++ b/gdb/tic6x-tdep.c @@ -530,7 +530,7 @@ tic6x_stub_unwind_sniffer (const struct frame_unwind *self, CORE_ADDR addr_in_block; addr_in_block = get_frame_address_in_block (this_frame); - if (in_plt_section (addr_in_block, NULL)) + if (in_plt_section (addr_in_block)) return 1; return 0; -- 2.7.4