1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>SystemTap: SystemTap Runtime Library</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
<!-- Generated by Doxygen 1.4.1 -->
<h1>copy.c</h1><a href="copy_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="keywordtype">long</span> <a class="code" href="copy_8c.html#a0">_stp_strncpy_from_user</a>(<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">long</span> count);
00002 <span class="comment">//static long __stp_strncpy_from_user(char *dst, const char __user *src, long count);</span>
00003
00004 <span class="preprocessor">#if defined (__i386__)</span>
00005 <span class="preprocessor"></span><span class="preprocessor">#define __stp_strncpy_from_user(dst,src,count,res) \</span>
00006 <span class="preprocessor">do { \</span>
00007 <span class="preprocessor"> int __d0, __d1, __d2; \</span>
00008 <span class="preprocessor"> __asm__ __volatile__( \</span>
00009 <span class="preprocessor"> " testl %1,%1\n" \</span>
00010 <span class="preprocessor"> " jz 2f\n" \</span>
00011 <span class="preprocessor"> "0: lodsb\n" \</span>
00012 <span class="preprocessor"> " stosb\n" \</span>
00013 <span class="preprocessor"> " testb %%al,%%al\n" \</span>
00014 <span class="preprocessor"> " jz 1f\n" \</span>
00015 <span class="preprocessor"> " decl %1\n" \</span>
00016 <span class="preprocessor"> " jnz 0b\n" \</span>
00017 <span class="preprocessor"> "1: subl %1,%0\n" \</span>
00018 <span class="preprocessor"> "2:\n" \</span>
00019 <span class="preprocessor"> ".section .fixup,\"ax\"\n" \</span>
00020 <span class="preprocessor"> "3: movl %5,%0\n" \</span>
00021 <span class="preprocessor"> " jmp 2b\n" \</span>
00022 <span class="preprocessor"> ".previous\n" \</span>
00023 <span class="preprocessor"> ".section __ex_table,\"a\"\n" \</span>
00024 <span class="preprocessor"> " .align 4\n" \</span>
00025 <span class="preprocessor"> " .long 0b,3b\n" \</span>
00026 <span class="preprocessor"> ".previous" \</span>
00027 <span class="preprocessor"> : "=d"(res), "=c"(count), "=&a" (__d0), "=&S" (__d1), \</span>
00028 <span class="preprocessor"> "=&D" (__d2) \</span>
00029 <span class="preprocessor"> : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), "4"(dst) \</span>
00030 <span class="preprocessor"> : "memory"); \</span>
00031 <span class="preprocessor">} while (0)</span>
00032 <span class="preprocessor"></span><span class="preprocessor">#elif defined (__x86_64__)</span>
00033 <span class="preprocessor"></span><span class="preprocessor">#define __stp_strncpy_from_user(dst,src,count,res) \</span>
00034 <span class="preprocessor">do { \</span>
00035 <span class="preprocessor"> long __d0, __d1, __d2; \</span>
00036 <span class="preprocessor"> __asm__ __volatile__( \</span>
00037 <span class="preprocessor"> " testq %1,%1\n" \</span>
00038 <span class="preprocessor"> " jz 2f\n" \</span>
00039 <span class="preprocessor"> "0: lodsb\n" \</span>
00040 <span class="preprocessor"> " stosb\n" \</span>
00041 <span class="preprocessor"> " testb %%al,%%al\n" \</span>
00042 <span class="preprocessor"> " jz 1f\n" \</span>
00043 <span class="preprocessor"> " decq %1\n" \</span>
00044 <span class="preprocessor"> " jnz 0b\n" \</span>
00045 <span class="preprocessor"> "1: subq %1,%0\n" \</span>
00046 <span class="preprocessor"> "2:\n" \</span>
00047 <span class="preprocessor"> ".section .fixup,\"ax\"\n" \</span>
00048 <span class="preprocessor"> "3: movq %5,%0\n" \</span>
00049 <span class="preprocessor"> " jmp 2b\n" \</span>
00050 <span class="preprocessor"> ".previous\n" \</span>
00051 <span class="preprocessor"> ".section __ex_table,\"a\"\n" \</span>
00052 <span class="preprocessor"> " .align 8\n" \</span>
00053 <span class="preprocessor"> " .quad 0b,3b\n" \</span>
00054 <span class="preprocessor"> ".previous" \</span>
00055 <span class="preprocessor"> : "=r"(res), "=c"(count), "=&a" (__d0), "=&S" (__d1), \</span>
00056 <span class="preprocessor"> "=&D" (__d2) \</span>
00057 <span class="preprocessor"> : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), "4"(dst) \</span>
00058 <span class="preprocessor"> : "memory"); \</span>
00059 <span class="preprocessor">} while (0)</span>
00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00061 <span class="preprocessor"></span>
00078 <span class="keywordtype">long</span>
<a name="l00079"></a><a class="code" href="copy_8c.html#a0">00079</a> <a class="code" href="copy_8c.html#a0">_stp_strncpy_from_user</a>(<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">long</span> count)
00080 {
00081 <span class="keywordtype">long</span> res;
00082 __stp_strncpy_from_user(dst, src, count, res);
00083 <span class="keywordflow">return</span> res;
00084 }
00085
00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">inline</span>
<a name="l00100"></a><a class="code" href="copy_8c.html#a1">00100</a> <a class="code" href="copy_8c.html#a1">_stp_copy_from_user</a> (<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count)
00101 {
00102 <span class="keywordflow">return</span> __copy_from_user_inatomic(dst, src, count);
00103 }
00104
<a name="l00115"></a><a class="code" href="copy_8c.html#a2">00115</a> <span class="keywordtype">int</span> <a class="code" href="copy_8c.html#a2">_stp_copy_argv_from_user</a> (<a class="code" href="structmap__root.html">MAP</a> list, <span class="keywordtype">char</span> __user *__user *argv)
00116 {
00117 <span class="keywordtype">char</span> str[128];
00118 <span class="keywordtype">char</span> __user *vstr;
00119 <span class="keywordtype">int</span> len;
00120
00121 <span class="keywordflow">if</span> (argv)
00122 argv++;
00123
00124 <span class="keywordflow">while</span> (argv != NULL) {
00125 <span class="keywordflow">if</span> (get_user (vstr, argv))
00126 <span class="keywordflow">break</span>;
00127
00128 <span class="keywordflow">if</span> (vstr == NULL)
00129 <span class="keywordflow">break</span>;
00130
00131 len = <a class="code" href="copy_8c.html#a0">_stp_strncpy_from_user</a>(str, vstr, 128);
00132 str[len] = 0;
00133 <a class="code" href="map_8c.html#a27">_stp_list_add_str</a> (list, str);
00134 argv++;
00135 }
00136 <span class="keywordflow">return</span> list-><a class="code" href="structmap__root.html#o2">num</a>;
00137 }
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
</body>
</html>
|