diff options
author | Andrew Cagney <cagney@redhat.com> | 2004-02-28 18:54:31 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2004-02-28 18:54:31 +0000 |
commit | b6d42148e92247b90f3fb828e90582adb216b10c (patch) | |
tree | 82707ff370ea03e3110a616438f48daace783486 /gdb/amd64-linux-nat.c | |
parent | 394023e23822766bbb58405e13b162e16ec2d873 (diff) | |
download | gdb-b6d42148e92247b90f3fb828e90582adb216b10c.zip gdb-b6d42148e92247b90f3fb828e90582adb216b10c.tar.gz gdb-b6d42148e92247b90f3fb828e90582adb216b10c.tar.bz2 |
Oops, wrong patch :-(
Diffstat (limited to 'gdb/amd64-linux-nat.c')
-rw-r--r-- | gdb/amd64-linux-nat.c | 76 |
1 files changed, 19 insertions, 57 deletions
diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c index c3b5765..1b6d0c5 100644 --- a/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c @@ -350,71 +350,33 @@ amd64_linux_dr_get_status (void) } -/* This function is called by libthread_db as part of its handling of - a request for a thread's local storage address. */ - ps_err_e ps_get_thread_area (const struct ps_prochandle *ph, lwpid_t lwpid, int idx, void **base) { - switch (gdbarch_ptr_bit (current_gdbarch) == 32) - { - case bfd_mach_i386_i386: - case bfd_mach_i386_i386_intel_syntax: - { - /* The full structure is found in <asm-i386/ldt.h>. The - second integer is the LDT's base_address and that is used - to locate the thread's local storage. See i386-linux-nat.c - more info. */ - unsigned int desc[4]; - - /* This code assumes that "int" is 32 bits and that - GET_THREAD_AREA returns no more than 4 int values. */ - gdb_assert (sizeof (int) == 4); -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 25 -#endif - if (ptrace (PTRACE_GET_THREAD_AREA, - lwpid, (void *) (long) idx, (unsigned long) &desc) < 0) - return PS_ERR; - - /* Extend the value to 64 bits. Here it's assumed that a - "long" and a "void *" are the same. */ - (*base) = (void *) (long) desc[1]; - return PS_OK; - } - - case bfd_mach_x86_64: - case bfd_mach_x86_64_intel_syntax: - /* This definition comes from prctl.h, but some kernels may not - have it. */ +/* This definition comes from prctl.h, but some kernels may not have it. */ #ifndef PTRACE_ARCH_PRCTL #define PTRACE_ARCH_PRCTL 30 #endif - /* FIXME: ezannoni-2003-07-09 see comment above about include - file order. We could be getting bogus values for these two. */ - gdb_assert (FS < ELF_NGREG); - gdb_assert (GS < ELF_NGREG); - switch (idx) - { - case FS: - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0) - return PS_OK; - break; - case GS: - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0) - return PS_OK; - break; - default: /* Should not happen. */ - return PS_BADADDR; - } - return PS_ERR; /* ptrace failed. */ - - case bfd_mach_i386_i8086: - internal_error (__FILE__, __LINE__, "bad i8086 machine"); - default: - internal_error (__FILE__, __LINE__, "bad_switch"); + + /* FIXME: ezannoni-2003-07-09 see comment above about include file order. + We could be getting bogus values for these two. */ + gdb_assert (FS < ELF_NGREG); + gdb_assert (GS < ELF_NGREG); + switch (idx) + { + case FS: + if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0) + return PS_OK; + break; + case GS: + if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0) + return PS_OK; + break; + default: /* Should not happen. */ + return PS_BADADDR; } + return PS_ERR; /* ptrace failed. */ } |