Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] Fix CRISv32 compilation
@ 2013-08-30 13:30 Ricard Wanderlof
  2013-09-02 18:04 ` [PATCH][CRISv32] Add support for threaded debugging Pedro Alves
  0 siblings, 1 reply; 11+ messages in thread
From: Ricard Wanderlof @ 2013-08-30 13:30 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 2734 bytes --]


This patch adds support for threaded debugging on the CRISv32
architecture. It's been floating around for several years now in our local
repository so it's way overdue pushing upstream.

Patch included inline for review and as attachement for use.


Suggested-by: Edgar Iglisias <edgar.iglesias@gmail.com>
Signed-off-by: Ricard Wanderlof <ricardw@axis.com>


2013-08-30  Ricard Wanderlof  <ricardw@axis.com>

  	* cris-tdep.c: Fix typedef for elf_greg_t.
  	  (cris_gdbarch_init): Add call to
  	  set_gdbarch_fetch_tls_load_module_address.

gdbserver

    	* linux-crisv32-low.c (ps_get_thread_area): New function.



diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 03041e4..dce2724 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -3820,7 +3820,7 @@ cris_delayed_get_disassembler (bfd_vma addr, struct disassemble_info *info)
   }

   /* Copied from <asm/elf.h>.  */
-typedef unsigned long elf_greg_t;
+typedef uint32_t elf_greg_t;

   /* Same as user_regs_struct struct in <asm/user.h>.  */
   #define CRISV10_ELF_NGREG 35
@@ -4137,6 +4137,9 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
         set_gdbarch_single_step_through_delay
   	(gdbarch, crisv32_single_step_through_delay);

+      set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                                 svr4_fetch_objfile_link_map);
+
         break;

       default:
diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c
index 2849d02..84cb7ff 100644
--- a/gdb/gdbserver/linux-crisv32-low.c
+++ b/gdb/gdbserver/linux-crisv32-low.c
@@ -27,6 +27,10 @@ extern const struct target_desc *tdesc_crisv32;
   /* CRISv32 */
   #define cris_num_regs 49

+#ifndef PTRACE_GET_THREAD_AREA
+#define PTRACE_GET_THREAD_AREA 25
+#endif
+
   /* Note: Ignoring USP (having the stack pointer in two locations causes trouble
      without any significant gain).  */

@@ -339,6 +343,20 @@ cris_stopped_data_address (void)
     return eda;
   }

+ps_err_e
+ps_get_thread_area (const struct ps_prochandle *ph,
+                    lwpid_t lwpid, int idx, void **base)
+{
+  if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
+    return PS_ERR;
+
+  /* IDX is the bias from the thread pointer to the beginning of the
+     thread descriptor.  It has to be subtracted due to implementation
+     quirks in libthread_db.  */
+  *base = (void *) ((char *)*base - idx);
+  return PS_OK;
+}
+
   static void
   cris_fill_gregset (struct regcache *regcache, void *buf)
   {


/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch file.patch --]
[-- Type: text/x-diff; name="cris-head-thread.patch", Size: 1934 bytes --]

diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 03041e4..dce2724 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -3820,7 +3820,7 @@ cris_delayed_get_disassembler (bfd_vma addr, struct disassemble_info *info)
 }
 
 /* Copied from <asm/elf.h>.  */
-typedef unsigned long elf_greg_t;
+typedef uint32_t elf_greg_t;
 
 /* Same as user_regs_struct struct in <asm/user.h>.  */
 #define CRISV10_ELF_NGREG 35
@@ -4137,6 +4137,9 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_single_step_through_delay 
 	(gdbarch, crisv32_single_step_through_delay);
 
+      set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                                 svr4_fetch_objfile_link_map);
+
       break;
 
     default:
diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c
index 2849d02..84cb7ff 100644
--- a/gdb/gdbserver/linux-crisv32-low.c
+++ b/gdb/gdbserver/linux-crisv32-low.c
@@ -27,6 +27,10 @@ extern const struct target_desc *tdesc_crisv32;
 /* CRISv32 */
 #define cris_num_regs 49
 
+#ifndef PTRACE_GET_THREAD_AREA
+#define PTRACE_GET_THREAD_AREA 25
+#endif
+
 /* Note: Ignoring USP (having the stack pointer in two locations causes trouble
    without any significant gain).  */
 
@@ -339,6 +343,20 @@ cris_stopped_data_address (void)
   return eda;
 }
 
+ps_err_e
+ps_get_thread_area (const struct ps_prochandle *ph,
+                    lwpid_t lwpid, int idx, void **base)
+{
+  if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
+    return PS_ERR;
+
+  /* IDX is the bias from the thread pointer to the beginning of the
+     thread descriptor.  It has to be subtracted due to implementation
+     quirks in libthread_db.  */
+  *base = (void *) ((char *)*base - idx);
+  return PS_OK;
+}
+
 static void
 cris_fill_gregset (struct regcache *regcache, void *buf)
 {

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [PATCH] Fix CRISv32 compilation
@ 2013-08-30 13:13 Ricard Wanderlof
  2013-09-02 17:29 ` Pedro Alves
  0 siblings, 1 reply; 11+ messages in thread
From: Ricard Wanderlof @ 2013-08-30 13:13 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1356 bytes --]


The following patch fixes gdbserver compilation for CRISv32. I've done
a quick test that the resulting gdbserver can be used to do at least
rudimentary debugging.

Patch included inline for review and as attachement for use.


Signed-off-by: Ricard Wanderlof <ricardw@axis.com>


2013-08-30  Ricard Wanderlof  <ricardw@axis.com>

gdbserver

   	* linux-crisv32-low.c: Fix compilation errors.


diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c
index efe50a7..2849d02 100644
--- a/gdb/gdbserver/linux-crisv32-low.c
+++ b/gdb/gdbserver/linux-crisv32-low.c
@@ -369,8 +369,6 @@ cris_arch_setup (void)
      current_process ()->tdesc = tdesc_crisv32;
    }

-typedef unsigned long elf_gregset_t[cris_num_regs];
-
    static struct regset_info cris_regsets[] = {
      { PTRACE_GETREGS, PTRACE_SETREGS, 0, cris_num_regs * 4,
        GENERAL_REGS, cris_fill_gregset, cris_store_gregset },
@@ -426,7 +424,7 @@ struct linux_target_ops the_low_target = {
    void
    initialize_low_arch (void)
    {
-  init_register_crisv32 ();
+  init_registers_crisv32 ();

      initialize_regsets_info (&cris_regsets_info);
    }


/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch file.patch --]
[-- Type: text/x-diff; name="cris-head-compilation.patch", Size: 742 bytes --]

diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c
index efe50a7..2849d02 100644
--- a/gdb/gdbserver/linux-crisv32-low.c
+++ b/gdb/gdbserver/linux-crisv32-low.c
@@ -369,8 +369,6 @@ cris_arch_setup (void)
   current_process ()->tdesc = tdesc_crisv32;
 }
 
-typedef unsigned long elf_gregset_t[cris_num_regs];
-
 static struct regset_info cris_regsets[] = {
   { PTRACE_GETREGS, PTRACE_SETREGS, 0, cris_num_regs * 4,
     GENERAL_REGS, cris_fill_gregset, cris_store_gregset },
@@ -426,7 +424,7 @@ struct linux_target_ops the_low_target = {
 void
 initialize_low_arch (void)
 {
-  init_register_crisv32 ();
+  init_registers_crisv32 ();
 
   initialize_regsets_info (&cris_regsets_info);
 }

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-09-06  8:09 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-30 13:30 [PATCH] Fix CRISv32 compilation Ricard Wanderlof
2013-09-02 18:04 ` [PATCH][CRISv32] Add support for threaded debugging Pedro Alves
2013-09-03 12:35   ` Ricard Wanderlof
2013-09-03 14:32     ` Pedro Alves
2013-09-03 14:58       ` Ricard Wanderlof
2013-09-03 15:02         ` Pedro Alves
  -- strict thread matches above, loose matches on Subject: below --
2013-08-30 13:13 [PATCH] Fix CRISv32 compilation Ricard Wanderlof
2013-09-02 17:29 ` Pedro Alves
     [not found]   ` <alpine.DEB.2.00.1309030857010.10770@lnxricardw.se.axis.com>
2013-09-03 12:03     ` Pedro Alves
2013-09-03 14:23       ` Ricard Wanderlof
2013-09-06  8:09   ` Ricard Wanderlof

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox