aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2000-02-29 13:53:59 +0000
committerAndrew Cagney <cagney@redhat.com>2000-02-29 13:53:59 +0000
commit05e28a7bbf77a063303591ea3ba713c7a990264f (patch)
tree5ad8ea5e26960deb6831070ca2161a4dd08dc7a8 /gdb
parentb241ba8eab18119f11a6c95f7e577045e535ad39 (diff)
downloadgdb-05e28a7bbf77a063303591ea3ba713c7a990264f.zip
gdb-05e28a7bbf77a063303591ea3ba713c7a990264f.tar.gz
gdb-05e28a7bbf77a063303591ea3ba713c7a990264f.tar.bz2
From Peter Schauer: Fix Solaris/x86 threads by copying linux code.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/inferior.h2
-rw-r--r--gdb/procfs.c17
-rw-r--r--gdb/sol-thread.c53
4 files changed, 18 insertions, 64 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 420316a..9f8b50c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+Wed Mar 1 00:49:06 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ From 2000-02-28 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>:
+ Make NEW_PROC_ABI interface functional on Solaris x86.
+ * sol-thread.c (ps_lgetLDT): Rewrite to use new
+ procfs_find_LDT_entry function from procfs.c, mostly copied from
+ lin-thread.c.
+ * inferior.h, procfs.c (procfs_get_pid_fd): Removed, no longer
+ needed.
+
Wed Mar 1 00:34:55 2000 Andrew Cagney <cagney@b1.cygnus.com>
From 2000-02-26 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>:
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 38c9ed6..5965f04 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -224,8 +224,6 @@ extern int proc_iterate_over_mappings PARAMS ((int (*)(int, CORE_ADDR)));
extern int procfs_first_available PARAMS ((void));
-extern int procfs_get_pid_fd PARAMS ((int));
-
/* From fork-child.c */
extern void fork_inferior PARAMS ((char *, char *, char **,
diff --git a/gdb/procfs.c b/gdb/procfs.c
index b108078..257de12 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -5254,20 +5254,3 @@ procfs_first_available ()
else
return -1;
}
-
-int
-procfs_get_pid_fd (pid)
- int pid;
-{
- procinfo *pi;
-
- if (pid == -1 && inferior_pid != 0)
- pi = find_procinfo (PIDGET (inferior_pid), 0);
- else
- pi = find_procinfo (PIDGET (pid), 0);
-
- if (pi)
- return pi->ctl_fd;
- else
- return -1;
-}
diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c
index 71e9216..0ec10a4 100644
--- a/gdb/sol-thread.c
+++ b/gdb/sol-thread.c
@@ -1318,61 +1318,24 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
#ifdef TM_I386SOL2_H
-/* Get local descriptor table. */
-
-#include <sys/procfs.h>
-#include <sys/reg.h>
-#include <sys/sysi86.h>
-
-static int nldt_allocated = 0;
-static struct ssd *ldt_bufp = NULL;
-
/* Reads the local descriptor table of a LWP. */
ps_err_e
ps_lgetLDT (gdb_ps_prochandle_t ph, lwpid_t lwpid,
struct ssd *pldt)
{
- gregset_t gregset;
- int lwp_fd;
- ps_err_e val;
- int nldt;
- int i;
-
- /* Get procfs file descriptor for the LWP. */
- lwp_fd = procfs_get_pid_fd (BUILD_LWP (lwpid, PIDGET (inferior_pid)));
- if (lwp_fd < 0)
- return PS_BADLID;
-
- /* Fetch registers und LDT descriptors. */
- if (ioctl (lwp_fd, PIOCGREG, &gregset) == -1)
- return PS_ERR;
+ /* NOTE: only used on Solaris, therefore OK to refer to procfs.c */
+ extern struct ssd *procfs_find_LDT_entry (int);
+ struct ssd *ret;
- if (ioctl (lwp_fd, PIOCNLDT, &nldt) == -1)
- return PS_ERR;
-
- if (nldt_allocated < nldt)
+ ret = procfs_find_LDT_entry (BUILD_LWP (lwpid, PIDGET (inferior_pid)));
+ if (ret)
{
- ldt_bufp
- = (struct ssd *) xrealloc (ldt_bufp, (nldt + 1) * sizeof (struct ssd));
- nldt_allocated = nldt;
+ memcpy (pldt, ret, sizeof (struct ssd));
+ return PS_OK;
}
-
- if (ioctl (lwp_fd, PIOCLDT, ldt_bufp) == -1)
+ else /* LDT not found. */
return PS_ERR;
-
- /* Search LDT for the LWP via register GS. */
- for (i = 0; i < nldt; i++)
- {
- if (ldt_bufp[i].sel == (gregset[GS] & 0xffff))
- {
- *pldt = ldt_bufp[i];
- return PS_OK;
- }
- }
-
- /* LDT not found. */
- return PS_ERR;
}
#endif /* TM_I386SOL2_H */