2002-12-15 Roland McGrath <roland@redhat.com>
* mem.c: Add sys_{get,set}_thread_area. * linux/syscall.h: Declare them. * linux/syscallent.h: Update the table for these. * linux/dummy.h (sys_modify_ldt): Define only #ifndef I386. (sys_get_thread_area, sys_set_thread_area): New macros #ifndef I386.
This commit is contained in:
parent
882eda809c
commit
34e4a6984c
89
mem.c
89
mem.c
@ -505,6 +505,28 @@ struct tcb *tcp;
|
||||
}
|
||||
|
||||
#if defined(LINUX) && defined(__i386__)
|
||||
static void
|
||||
print_ldt_entry (ldt_entry)
|
||||
struct modify_ldt_ldt_s *ldt_entry;
|
||||
{
|
||||
tprintf("base_addr:%#08lx, "
|
||||
"limit:%d, "
|
||||
"seg_32bit:%d, "
|
||||
"contents:%d, "
|
||||
"read_exec_only:%d, "
|
||||
"limit_in_pages:%d, "
|
||||
"seg_not_present:%d, "
|
||||
"useable:%d}",
|
||||
ldt_entry->base_addr,
|
||||
ldt_entry->limit,
|
||||
ldt_entry->seg_32bit,
|
||||
ldt_entry->contents,
|
||||
ldt_entry->read_exec_only,
|
||||
ldt_entry->limit_in_pages,
|
||||
ldt_entry->seg_not_present,
|
||||
ldt_entry->useable);
|
||||
}
|
||||
|
||||
int
|
||||
sys_modify_ldt(tcp)
|
||||
struct tcb *tcp;
|
||||
@ -521,27 +543,62 @@ struct tcb *tcp;
|
||||
if (!verbose(tcp))
|
||||
tprintf("...}");
|
||||
else {
|
||||
tprintf("base_addr:%#08lx, "
|
||||
"limit:%d, "
|
||||
"seg_32bit:%d, "
|
||||
"contents:%d, "
|
||||
"read_exec_only:%d, "
|
||||
"limit_in_pages:%d, "
|
||||
"seg_not_present:%d, "
|
||||
"useable:%d}",
|
||||
copy.base_addr,
|
||||
copy.limit,
|
||||
copy.seg_32bit,
|
||||
copy.contents,
|
||||
copy.read_exec_only,
|
||||
copy.limit_in_pages,
|
||||
copy.seg_not_present,
|
||||
copy.useable);
|
||||
print_ldt_entry(©);
|
||||
}
|
||||
}
|
||||
tprintf(", %lu", tcp->u_arg[2]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
sys_set_thread_area(tcp)
|
||||
struct tcb *tcp;
|
||||
{
|
||||
struct modify_ldt_ldt_s copy;
|
||||
if (entering(tcp)) {
|
||||
if (umove(tcp, tcp->u_arg[0], ©) != -1) {
|
||||
if (copy.entry_number == -1)
|
||||
tprintf("{entry_number:%d -> ",
|
||||
copy.entry_number);
|
||||
else
|
||||
tprintf("{entry_number:");
|
||||
}
|
||||
} else {
|
||||
if (umove(tcp, tcp->u_arg[0], ©) != -1) {
|
||||
tprintf("%d, ", copy.entry_number);
|
||||
if (!verbose(tcp))
|
||||
tprintf("...}");
|
||||
else {
|
||||
print_ldt_entry(©);
|
||||
}
|
||||
} else {
|
||||
tprintf("%lx", tcp->u_arg[0]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
sys_get_thread_area(tcp)
|
||||
struct tcb *tcp;
|
||||
{
|
||||
struct modify_ldt_ldt_s copy;
|
||||
if (exiting(tcp)) {
|
||||
if (umove(tcp, tcp->u_arg[0], ©) != -1) {
|
||||
tprintf("{entry_number:%d, ", copy.entry_number);
|
||||
if (!verbose(tcp))
|
||||
tprintf("...}");
|
||||
else {
|
||||
print_ldt_entry(©);
|
||||
}
|
||||
} else {
|
||||
tprintf("%lx", tcp->u_arg[0]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
#endif /* LINUX && __i386__ */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user