mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-22 16:03:31 +08:00
* i386-linux-nat.c (ps_get_thread_area): Don't define as extern.
Only define PTRACE_GET_THREAD_AREA is not already defined. Various style fixes in code and comments and some additional spelling fixes in comments. Move after functions dealing with debug registers. * x86-64-linux-nat.c (ps_get_thread_area): Don't define as extern. Fix coding-style.
This commit is contained in:
parent
bda34dc2c9
commit
5bca7895b7
@ -1,5 +1,13 @@
|
||||
2003-08-31 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* i386-linux-nat.c (ps_get_thread_area): Don't define as extern.
|
||||
Only define PTRACE_GET_THREAD_AREA is not already defined.
|
||||
Various style fixes in code and comments and some additional
|
||||
spelling fixes in comments. Move after functions dealing with
|
||||
debug registers.
|
||||
* x86-64-linux-nat.c (ps_get_thread_area): Don't define as extern.
|
||||
Fix coding-style.
|
||||
|
||||
* alphafbsd-tdep.c (alphafbsd_sigcontext_addr): Use
|
||||
frame_unwind_register_unsigned instead of
|
||||
frame_unwind_unsigned_register.
|
||||
|
@ -687,41 +687,6 @@ i386_linux_dr_set (int regnum, unsigned long value)
|
||||
perror_with_name ("Couldn't write debug register");
|
||||
}
|
||||
|
||||
/* Called by libthread_db. Return's a pointer to the thread local
|
||||
storage (or it's descriptor). */
|
||||
extern ps_err_e
|
||||
ps_get_thread_area(const struct ps_prochandle *ph,
|
||||
lwpid_t lwpid, int idx, void **base)
|
||||
{
|
||||
/* NOTE: cagney/2003-08-26: The definition of this buffer is found
|
||||
in the kernel header <asm-i386/ldt.h>. It, after padding, is 4 x
|
||||
4 byte integers in size: "entry_number", "base_addr", "limit",
|
||||
and a bunch of status bits.
|
||||
|
||||
The values returned by this ptrace call should be part of the
|
||||
regcache buffer, and ps_get_thread_area should channel its
|
||||
request through the regcache. That way remote targets could
|
||||
provide the value using the remote protocol and not this direct
|
||||
call.
|
||||
|
||||
Is this function needed? I'm guessing that the "base" is the
|
||||
address of a a descriptor that libthread_db uses to find the
|
||||
thread local address base that GDB needs. Perhaphs that
|
||||
descriptor is defined by the ABI. Anyway, given that
|
||||
libthread_db calls this function without prompting (gdb
|
||||
requesting tls base) I guess it needs info in there anyway. */
|
||||
unsigned int desc[4];
|
||||
gdb_assert (sizeof (int) == 4);
|
||||
#define PTRACE_GET_THREAD_AREA 25
|
||||
|
||||
if (ptrace (PTRACE_GET_THREAD_AREA,
|
||||
lwpid, (void *) idx, (unsigned long) &desc) < 0)
|
||||
return PS_ERR;
|
||||
|
||||
*(int *)base = desc[1];
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
i386_linux_dr_set_control (unsigned long control)
|
||||
{
|
||||
@ -751,6 +716,46 @@ i386_linux_dr_get_status (void)
|
||||
}
|
||||
|
||||
|
||||
/* Called by libthread_db. Returns a pointer to the thread local
|
||||
storage (or its descriptor). */
|
||||
|
||||
ps_err_e
|
||||
ps_get_thread_area (const struct ps_prochandle *ph,
|
||||
lwpid_t lwpid, int idx, void **base)
|
||||
{
|
||||
/* NOTE: cagney/2003-08-26: The definition of this buffer is found
|
||||
in the kernel header <asm-i386/ldt.h>. It, after padding, is 4 x
|
||||
4 byte integers in size: `entry_number', `base_addr', `limit',
|
||||
and a bunch of status bits.
|
||||
|
||||
The values returned by this ptrace call should be part of the
|
||||
regcache buffer, and ps_get_thread_area should channel its
|
||||
request through the regcache. That way remote targets could
|
||||
provide the value using the remote protocol and not this direct
|
||||
call.
|
||||
|
||||
Is this function needed? I'm guessing that the `base' is the
|
||||
address of a a descriptor that libthread_db uses to find the
|
||||
thread local address base that GDB needs. Perhaphs that
|
||||
descriptor is defined by the ABI. Anyway, given that
|
||||
libthread_db calls this function without prompting (gdb
|
||||
requesting tls base) I guess it needs info in there anyway. */
|
||||
unsigned int desc[4];
|
||||
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 *) idx, (unsigned long) &desc) < 0)
|
||||
return PS_ERR;
|
||||
|
||||
*(int *)base = desc[1];
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
|
||||
/* Interpreting register set info found in core files. */
|
||||
|
||||
/* Provide registers to GDB from a core file.
|
||||
|
@ -348,12 +348,12 @@ x86_64_linux_dr_get_status (void)
|
||||
{
|
||||
return x86_64_linux_dr_get (DR_STATUS);
|
||||
}
|
||||
|
||||
|
||||
extern ps_err_e
|
||||
ps_err_e
|
||||
ps_get_thread_area (const struct ps_prochandle *ph,
|
||||
lwpid_t lwpid, int idx, void **base)
|
||||
{
|
||||
|
||||
/* This definition comes from prctl.h, but some kernels may not have it. */
|
||||
#ifndef PTRACE_ARCH_PRCTL
|
||||
#define PTRACE_ARCH_PRCTL 30
|
||||
@ -367,17 +367,18 @@ ps_get_thread_area (const struct ps_prochandle *ph,
|
||||
{
|
||||
case FS:
|
||||
if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0)
|
||||
return PS_OK;
|
||||
return PS_OK;
|
||||
break;
|
||||
case GS:
|
||||
if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0)
|
||||
return PS_OK;
|
||||
return PS_OK;
|
||||
break;
|
||||
default: /* Should not happen. */
|
||||
return PS_BADADDR;
|
||||
}
|
||||
return PS_ERR; /* ptrace failed. */
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
child_post_startup_inferior (ptid_t ptid)
|
||||
|
Loading…
Reference in New Issue
Block a user