diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2020-06-25 13:43:46 +0200 |
---|---|---|
committer | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2020-06-25 13:43:46 +0200 |
commit | d412e69677c6ca145ea8f5ff8c61a22952cb0855 (patch) | |
tree | 85fb98a2122dfff9a1ff8602d140735e32fe1c5c /gdb/i386-sol2-tdep.c | |
parent | 42cc83080dee2c23635130c11b3f71f1ca1f5871 (diff) | |
download | fsf-binutils-gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.zip fsf-binutils-gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.tar.gz fsf-binutils-gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.tar.bz2 |
Move common handlers to sol2_init_abi
There's some overlap and duplication between 32 and 64-bit Solaris/SPARC
and x86 tdep files, in particular
sol2_core_pid_to_str
*_sol2_sigtramp_p
sol2_skip_solib_resolver
*_sol2_static_transform_name (forgotten on amd64)
set_gdbarch_sofun_address_maybe_missing (likewise)
This patch avoids this by centralizing common code in sol2-tdep.c.
While sparc_sol2_pc_in_sigtramp and sparc_sol2_static_transform_name
were declared in the shared sparc-tdep.h, they were only used in Solaris
files.
Tested on amd64-pc-solaris2.11, i386-pc-solaris2.11,
sparcv9-sun-solaris2.11, and sparc-sun-solaris2.11, and
sparc64-unknown-linux-gnu.
* amd64-sol2-tdep.c (amd64_sol2_sigtramp_p): Remove.
(amd64_sol2_init_abi): Use sol2_sigtramp_p.
Call sol2_init_abi.
Remove calls to set_gdbarch_skip_solib_resolver,
set_gdbarch_core_pid_to_str.
* i386-sol2-tdep.c (i386_sol2_sigtramp_p): Remove.
(i386_sol2_static_transform_name): Remove.
(i386_sol2_init_abi): Call sol2_init_abi.
Remove calls to set_gdbarch_sofun_address_maybe_missing,
set_gdbarch_static_transform_name,
set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str.
Use sol2_sigtramp_p.
* sol2-tdep.c (sol2_pc_in_sigtramp): New function.
(sol2_sigtramp_p): New function.
(sol2_static_transform_name): New function.
(sol2_skip_solib_resolver, sol2_core_pid_to_str): Make static.
(sol2_init_abi): New function.
* sol2-tdep.h (sol2_sigtramp_p, sol2_init_abi): Declare.
(sol2_skip_solib_resolver, sol2_core_pid_to_str): Remove.
* sparc-sol2-tdep.c (sparc_sol2_pc_in_sigtramp): Remove.
(sparc32_sol2_sigtramp_frame_sniffer): Just call sol2_sigtramp_p.
(sparc_sol2_static_transform_name): Remove.
(sparc32_sol2_init_abi): Call sol2_init_abi.
Remove calls to set_gdbarch_sofun_address_maybe_missing,
set_gdbarch_static_transform_name,
set_gdbarch_skip_solib_resolver,
set_gdbarch_core_pid_to_str.
* sparc-tdep.h (sparc_sol2_pc_in_sigtramp)
(sparc_sol2_static_transform_name): Remove
* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_sniffer): Just
call sol2_sigtramp_p.
(sparc64_sol2_init_abi): Call sol2_init_abi.
Remove calls to set_gdbarch_sofun_address_maybe_missing,
set_gdbarch_static_transform_name,
set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str.
Diffstat (limited to 'gdb/i386-sol2-tdep.c')
-rw-r--r-- | gdb/i386-sol2-tdep.c | 52 |
1 files changed, 2 insertions, 50 deletions
diff --git a/gdb/i386-sol2-tdep.c b/gdb/i386-sol2-tdep.c index 1980485..0d8eb40 100644 --- a/gdb/i386-sol2-tdep.c +++ b/gdb/i386-sol2-tdep.c @@ -46,21 +46,6 @@ static int i386_sol2_gregset_reg_offset[] = 0 * 4 /* %gs */ }; -/* Return whether THIS_FRAME corresponds to a Solaris sigtramp - routine. */ - -static int -i386_sol2_sigtramp_p (struct frame_info *this_frame) -{ - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - return (name && (strcmp ("sigacthandler", name) == 0 - || strcmp (name, "ucbsigvechandler") == 0 - || strcmp (name, "__sighndlr") == 0)); -} - /* Solaris doesn't have a `struct sigcontext', but it does have a `mcontext_t' that contains the saved set of machine registers. */ @@ -75,30 +60,6 @@ i386_sol2_mcontext_addr (struct frame_info *this_frame) return ucontext_addr + 36; } -/* SunPRO encodes the static variables. This is not related to C++ - mangling, it is done for C too. */ - -static const char * -i386_sol2_static_transform_name (const char *name) -{ - if (name[0] == '.') - { - const char *p; - - /* For file-local statics there will be a period, a bunch of - junk (the contents of which match a string given in the - N_OPT), a period and the name. For function-local statics - there will be a bunch of junk (which seems to change the - second character from 'A' to 'B'), a period, the name of the - function, and the name. So just skip everything before the - last period. */ - p = strrchr (name, '.'); - if (p != NULL) - name = p + 1; - } - return name; -} - /* Solaris 2. */ static void @@ -109,12 +70,7 @@ i386_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* Solaris is SVR4-based. */ i386_svr4_init_abi (info, gdbarch); - /* The SunPRO compiler puts out 0 instead of the address in N_SO symbols, - and for SunPRO 3.0, N_FUN symbols too. */ - set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); - - /* Handle SunPRO encoding of static symbols. */ - set_gdbarch_static_transform_name (gdbarch, i386_sol2_static_transform_name); + sol2_init_abi (info, gdbarch); /* Solaris reserves space for its FPU emulator in `fpregset_t'. There is also some space reserved for the registers of a Weitek @@ -125,18 +81,14 @@ i386_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) tdep->sizeof_fpregset = 380; /* Signal trampolines are slightly different from SVR4. */ - tdep->sigtramp_p = i386_sol2_sigtramp_p; + tdep->sigtramp_p = sol2_sigtramp_p; tdep->sigcontext_addr = i386_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris has SVR4-style shared libraries. */ - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } |