]> granicus.if.org Git - strace/blob - ldt.c
Use printnum_int64 instead of print_loff_t
[strace] / ldt.c
1 #include "defs.h"
2
3 #if defined I386 || defined X86_64 || defined X32
4
5 # include <asm/ldt.h>
6
7 void
8 print_user_desc(struct tcb *tcp, const long addr)
9 {
10         struct user_desc desc;
11
12         if (umove_or_printaddr(tcp, addr, &desc))
13                 return;
14
15         tprintf("{entry_number:%d, "
16                 "base_addr:%#08x, "
17                 "limit:%d, "
18                 "seg_32bit:%d, "
19                 "contents:%d, "
20                 "read_exec_only:%d, "
21                 "limit_in_pages:%d, "
22                 "seg_not_present:%d, "
23                 "useable:%d}",
24                 desc.entry_number,
25                 desc.base_addr,
26                 desc.limit,
27                 desc.seg_32bit,
28                 desc.contents,
29                 desc.read_exec_only,
30                 desc.limit_in_pages,
31                 desc.seg_not_present,
32                 desc.useable);
33 }
34
35 SYS_FUNC(modify_ldt)
36 {
37         tprintf("%ld, ", tcp->u_arg[0]);
38         if (tcp->u_arg[2] != sizeof(struct user_desc))
39                 printaddr(tcp->u_arg[1]);
40         else
41                 print_user_desc(tcp, tcp->u_arg[1]);
42         tprintf(", %lu", tcp->u_arg[2]);
43
44         return RVAL_DECODED;
45 }
46
47 SYS_FUNC(set_thread_area)
48 {
49         if (entering(tcp)) {
50                 print_user_desc(tcp, tcp->u_arg[0]);
51         } else {
52                 struct user_desc desc;
53
54                 if (!verbose(tcp) || syserror(tcp) ||
55                     umove(tcp, tcp->u_arg[0], &desc) < 0) {
56                         /* returned entry_number is not available */
57                 } else {
58                         static char outstr[32];
59
60                         sprintf(outstr, "entry_number:%d", desc.entry_number);
61                         tcp->auxstr = outstr;
62                         return RVAL_STR;
63                 }
64         }
65         return 0;
66 }
67
68 SYS_FUNC(get_thread_area)
69 {
70         if (exiting(tcp))
71                 print_user_desc(tcp, tcp->u_arg[0]);
72         return 0;
73 }
74
75 #endif /* I386 || X86_64 || X32 */
76
77 #if defined(M68K) || defined(MIPS)
78 SYS_FUNC(set_thread_area)
79 {
80         printaddr(tcp->u_arg[0]);
81
82         return RVAL_DECODED;
83
84 }
85 #endif
86
87 #if defined(M68K)
88 SYS_FUNC(get_thread_area)
89 {
90         return RVAL_DECODED | RVAL_HEX;
91 }
92 #endif