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 | |
parent | 42cc83080dee2c23635130c11b3f71f1ca1f5871 (diff) | |
download | gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.zip gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.tar.gz 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')
-rw-r--r-- | gdb/ChangeLog | 38 | ||||
-rw-r--r-- | gdb/amd64-sol2-tdep.c | 23 | ||||
-rw-r--r-- | gdb/i386-sol2-tdep.c | 52 | ||||
-rw-r--r-- | gdb/sol2-tdep.c | 116 | ||||
-rw-r--r-- | gdb/sol2-tdep.h | 4 | ||||
-rw-r--r-- | gdb/sparc-sol2-tdep.c | 77 | ||||
-rw-r--r-- | gdb/sparc-tdep.h | 4 | ||||
-rw-r--r-- | gdb/sparc64-sol2-tdep.c | 24 |
8 files changed, 158 insertions, 180 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 12ef02b..0799ec3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,41 @@ +2020-06-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * 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. + 2020-06-24 Philippe Waroquiers <philippe.waroquiers@skynet.be> * symfile-add-flags.h: New flag SYMFILE_ALWAYS_CONFIRM. diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c index 8d8600b..f1eba81 100644 --- a/gdb/amd64-sol2-tdep.c +++ b/gdb/amd64-sol2-tdep.c @@ -63,21 +63,6 @@ static int amd64_sol2_gregset_reg_offset[] = { }; -/* Return whether THIS_FRAME corresponds to a Solaris sigtramp - routine. */ - -static int -amd64_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. */ @@ -104,18 +89,16 @@ amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); - tdep->sigtramp_p = amd64_sol2_sigtramp_p; + sol2_init_abi (info, gdbarch); + + tdep->sigtramp_p = sol2_sigtramp_p; tdep->sigcontext_addr = amd64_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris uses SVR4-style shared libraries. */ - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } void _initialize_amd64_sol2_tdep (); 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); } diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c index 03b510c..179c8ae 100644 --- a/gdb/sol2-tdep.c +++ b/gdb/sol2-tdep.c @@ -25,7 +25,89 @@ #include "sol2-tdep.h" -CORE_ADDR +/* The Solaris signal trampolines reside in libc. For normal signals, + the function `sigacthandler' is used. This signal trampoline will + call the signal handler using the System V calling convention, + where the third argument is a pointer to an instance of + `ucontext_t', which has a member `uc_mcontext' that contains the + saved registers. Incidentally, the kernel passes the `ucontext_t' + pointer as the third argument of the signal trampoline too, and + `sigacthandler' simply passes it on. However, if you link your + program with "-L/usr/ucblib -R/usr/ucblib -lucb", the function + `ucbsigvechandler' will be used, which invokes the using the BSD + convention, where the third argument is a pointer to an instance of + `struct sigcontext'. It is the `ucbsigvechandler' function that + converts the `ucontext_t' to a `sigcontext', and back. Unless the + signal handler modifies the `struct sigcontext' we can safely + ignore this. */ + +static int +sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name) +{ + return (name && (strcmp (name, "sigacthandler") == 0 + || strcmp (name, "ucbsigvechandler") == 0 + || strcmp (name, "__sighndlr") == 0)); +} + +/* Return whether THIS_FRAME corresponds to a Solaris sigtramp routine. */ + +int +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 sol2_pc_in_sigtramp (pc, name); +} + +/* Unglobalize NAME. */ + +static const char * +sol2_static_transform_name (const char *name) +{ + /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, + SunPRO) convert file static variables into global values, a + process known as globalization. In order to do this, the + compiler will create a unique prefix and prepend it to each file + static variable. For static variables within a function, this + globalization prefix is followed by the function name (nested + static variables within a function are supposed to generate a + warning message, and are left alone). The procedure is + documented in the Stabs Interface Manual, which is distributed + with the compilers, although version 4.0 of the manual seems to + be incorrect in some places, at least for SPARC. The + globalization prefix is encoded into an N_OPT stab, with the form + "G=<prefix>". The globalization prefix always seems to start + with a dollar sign '$' (sparc) resp. a dot '.' (x86); a dot '.' + is used as a separator. So we simply strip everything up until + the last dot. */ + int prefix; + + switch (gdbarch_bfd_arch_info (target_gdbarch ())->arch) + { + case bfd_arch_i386: + prefix = '.'; + break; + case bfd_arch_sparc: + prefix = '$'; + break; + default: + internal_error (__FILE__, __LINE__, "Unexpected arch"); + break; + } + + if (name[0] == prefix) + { + const char *p = strrchr (name, '.'); + if (p) + return p + 1; + } + + return name; +} + +static CORE_ADDR sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) { struct bound_minimal_symbol msym; @@ -37,17 +119,15 @@ sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) return 0; } -/* This is how we want PTIDs from Solaris core files to be - printed. */ +/* This is how we want PTIDs from Solaris core files to be printed. */ -std::string +static std::string sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) { struct inferior *inf; int pid; - /* Check whether we're printing an LWP (gdb thread) or a - process. */ + /* Check whether we're printing an LWP (gdb thread) or a process. */ pid = ptid.lwp (); if (pid != 0) { @@ -56,8 +136,7 @@ sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) } /* GDB didn't use to put a NT_PSTATUS note in Solaris cores. If - that's missing, then we're dealing with a fake PID corelow.c made - up. */ + that's missing, then we're dealing with a fake PID corelow.c made up. */ inf = find_inferior_ptid (current_inferior ()->process_target (), ptid); if (inf == NULL || inf->fake_pid_p) return "<core>"; @@ -65,3 +144,24 @@ sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) /* Not fake; print as usual. */ return normal_pid_to_str (ptid); } + +/* To be called from GDB_OSABI_SOLARIS handlers. */ + +void +sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) + compiler puts out 0 instead of the address in N_SO stabs. Starting with + SunPRO 3.0, the compiler does this for N_FUN stabs too. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + + /* The Sun compilers also do "globalization"; see the comment in + sol2_static_transform_name for more information. */ + set_gdbarch_static_transform_name (gdbarch, sol2_static_transform_name); + + /* Solaris uses SVR4-style shared libraries. */ + set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); + + /* How to print LWP PTIDs from core files. */ + set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); +} diff --git a/gdb/sol2-tdep.h b/gdb/sol2-tdep.h index b3f01a0..ecace99 100644 --- a/gdb/sol2-tdep.h +++ b/gdb/sol2-tdep.h @@ -22,8 +22,8 @@ struct gdbarch; -CORE_ADDR sol2_skip_solib_resolver (struct gdbarch *, CORE_ADDR); +int sol2_sigtramp_p (struct frame_info *this_frame); -std::string sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid); +void sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch); #endif /* sol2-tdep.h */ diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c index 2df66d5..dfd6e34 100644 --- a/gdb/sparc-sol2-tdep.c +++ b/gdb/sparc-sol2-tdep.c @@ -99,30 +99,6 @@ static const struct regset sparc32_sol2_fpregset = }; -/* The Solaris signal trampolines reside in libc. For normal signals, - the function `sigacthandler' is used. This signal trampoline will - call the signal handler using the System V calling convention, - where the third argument is a pointer to an instance of - `ucontext_t', which has a member `uc_mcontext' that contains the - saved registers. Incidentally, the kernel passes the `ucontext_t' - pointer as the third argument of the signal trampoline too, and - `sigacthandler' simply passes it on. However, if you link your - program with "-L/usr/ucblib -R/usr/ucblib -lucb", the function - `ucbsigvechandler' will be used, which invokes the using the BSD - convention, where the third argument is a pointer to an instance of - `struct sigcontext'. It is the `ucbsigvechandler' function that - converts the `ucontext_t' to a `sigcontext', and back. Unless the - signal handler modifies the `struct sigcontext' we can safely - ignore this. */ - -int -sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name) -{ - return (name && (strcmp (name, "sigacthandler") == 0 - || strcmp (name, "ucbsigvechandler") == 0 - || strcmp (name, "__sighndlr") == 0)); -} - static struct sparc_frame_cache * sparc32_sol2_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache) @@ -201,14 +177,7 @@ sparc32_sol2_sigtramp_frame_sniffer (const struct frame_unwind *self, struct frame_info *this_frame, void **this_cache) { - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - if (sparc_sol2_pc_in_sigtramp (pc, name)) - return 1; - - return 0; + return sol2_sigtramp_p (this_frame); } static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind = @@ -221,36 +190,6 @@ static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind = sparc32_sol2_sigtramp_frame_sniffer }; -/* Unglobalize NAME. */ - -const char * -sparc_sol2_static_transform_name (const char *name) -{ - /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, - SunPRO) convert file static variables into global values, a - process known as globalization. In order to do this, the - compiler will create a unique prefix and prepend it to each file - static variable. For static variables within a function, this - globalization prefix is followed by the function name (nested - static variables within a function are supposed to generate a - warning message, and are left alone). The procedure is - documented in the Stabs Interface Manual, which is distributed - with the compilers, although version 4.0 of the manual seems to - be incorrect in some places, at least for SPARC. The - globalization prefix is encoded into an N_OPT stab, with the form - "G=<prefix>". The globalization prefix always seems to start - with a dollar sign '$'; a dot '.' is used as a separator. So we - simply strip everything up until the last dot. */ - - if (name[0] == '$') - { - const char *p = strrchr (name, '.'); - if (p) - return p + 1; - } - - return name; -} void @@ -264,19 +203,10 @@ sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) tdep->fpregset = &sparc32_sol2_fpregset; tdep->sizeof_fpregset = 400; - /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) - compiler puts out 0 instead of the address in N_SO stabs. Starting with - SunPRO 3.0, the compiler does this for N_FUN stabs too. */ - set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); - - /* The Sun compilers also do "globalization"; see the comment in - sparc_sol2_static_transform_name for more information. */ - set_gdbarch_static_transform_name - (gdbarch, sparc_sol2_static_transform_name); + sol2_init_abi (info, gdbarch); /* Solaris has SVR4-style shared libraries... */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); @@ -288,9 +218,6 @@ sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_software_single_step (gdbarch, NULL); frame_unwind_append_unwinder (gdbarch, &sparc32_sol2_sigtramp_frame_unwind); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } void _initialize_sparc_sol2_tdep (); diff --git a/gdb/sparc-tdep.h b/gdb/sparc-tdep.h index 37fe3ad..59eaf29 100644 --- a/gdb/sparc-tdep.h +++ b/gdb/sparc-tdep.h @@ -245,10 +245,6 @@ extern int sparc_is_annulled_branch_insn (CORE_ADDR pc); extern const struct sparc_gregmap sparc32_sol2_gregmap; extern const struct sparc_fpregmap sparc32_sol2_fpregmap; -extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name); - -extern const char *sparc_sol2_static_transform_name (const char *name); - extern void sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch); diff --git a/gdb/sparc64-sol2-tdep.c b/gdb/sparc64-sol2-tdep.c index 550fed7..31ee873 100644 --- a/gdb/sparc64-sol2-tdep.c +++ b/gdb/sparc64-sol2-tdep.c @@ -180,15 +180,9 @@ sparc64_sol2_sigtramp_frame_sniffer (const struct frame_unwind *self, struct frame_info *this_frame, void **this_cache) { - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - if (sparc_sol2_pc_in_sigtramp (pc, name)) - return 1; - - return 0; + return sol2_sigtramp_p (this_frame); } + static const struct frame_unwind sparc64_sol2_sigtramp_frame_unwind = { SIGTRAMP_FRAME, @@ -216,19 +210,10 @@ sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) sparc64_init_abi (info, gdbarch); - /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) - compiler puts out 0 instead of the address in N_SO stabs. Starting with - SunPRO 3.0, the compiler does this for N_FUN stabs too. */ - set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); - - /* The Sun compilers also do "globalization"; see the comment in - sparc_sol2_static_transform_name for more information. */ - set_gdbarch_static_transform_name - (gdbarch, sparc_sol2_static_transform_name); + sol2_init_abi (info, gdbarch); /* Solaris has SVR4-style shared libraries... */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); @@ -238,9 +223,6 @@ sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* Solaris has kernel-assisted single-stepping support. */ set_gdbarch_software_single_step (gdbarch, NULL); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } void _initialize_sparc64_sol2_tdep (); |