xref: /OK3568_Linux_fs/kernel/arch/um/os-Linux/user_syms.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include <linux/types.h>
3*4882a593Smuzhiyun #include <linux/module.h>
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun /* Some of this are builtin function (some are not but could in the future),
6*4882a593Smuzhiyun  * so I *must* declare good prototypes for them and then EXPORT them.
7*4882a593Smuzhiyun  * The kernel code uses the macro defined by include/linux/string.h,
8*4882a593Smuzhiyun  * so I undef macros; the userspace code does not include that and I
9*4882a593Smuzhiyun  * add an EXPORT for the glibc one.
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #undef strlen
13*4882a593Smuzhiyun #undef strstr
14*4882a593Smuzhiyun #undef memcpy
15*4882a593Smuzhiyun #undef memset
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun extern size_t strlen(const char *);
18*4882a593Smuzhiyun extern void *memmove(void *, const void *, size_t);
19*4882a593Smuzhiyun extern void *memset(void *, int, size_t);
20*4882a593Smuzhiyun extern int printf(const char *, ...);
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* If it's not defined, the export is included in lib/string.c.*/
23*4882a593Smuzhiyun #ifdef __HAVE_ARCH_STRSTR
24*4882a593Smuzhiyun EXPORT_SYMBOL(strstr);
25*4882a593Smuzhiyun #endif
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #ifndef __x86_64__
28*4882a593Smuzhiyun extern void *memcpy(void *, const void *, size_t);
29*4882a593Smuzhiyun EXPORT_SYMBOL(memcpy);
30*4882a593Smuzhiyun #endif
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun EXPORT_SYMBOL(memmove);
33*4882a593Smuzhiyun EXPORT_SYMBOL(memset);
34*4882a593Smuzhiyun EXPORT_SYMBOL(printf);
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun /* Here, instead, I can provide a fake prototype. Yes, someone cares: genksyms.
37*4882a593Smuzhiyun  * However, the modules will use the CRC defined *here*, no matter if it is
38*4882a593Smuzhiyun  * good; so the versions of these symbols will always match
39*4882a593Smuzhiyun  */
40*4882a593Smuzhiyun #define EXPORT_SYMBOL_PROTO(sym)       \
41*4882a593Smuzhiyun 	int sym(void);                  \
42*4882a593Smuzhiyun 	EXPORT_SYMBOL(sym);
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun extern void readdir64(void) __attribute__((weak));
45*4882a593Smuzhiyun EXPORT_SYMBOL(readdir64);
46*4882a593Smuzhiyun extern void truncate64(void) __attribute__((weak));
47*4882a593Smuzhiyun EXPORT_SYMBOL(truncate64);
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #ifdef CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA
50*4882a593Smuzhiyun EXPORT_SYMBOL(vsyscall_ehdr);
51*4882a593Smuzhiyun EXPORT_SYMBOL(vsyscall_end);
52*4882a593Smuzhiyun #endif
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(__errno_location);
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(access);
57*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(open);
58*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(open64);
59*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(close);
60*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(read);
61*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(write);
62*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(dup2);
63*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(__xstat);
64*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(__lxstat);
65*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(__lxstat64);
66*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(__fxstat64);
67*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(lseek);
68*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(lseek64);
69*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(chown);
70*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(fchown);
71*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(truncate);
72*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(ftruncate64);
73*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(utime);
74*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(utimes);
75*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(futimes);
76*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(chmod);
77*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(fchmod);
78*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(rename);
79*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(__xmknod);
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(symlink);
82*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(link);
83*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(unlink);
84*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(readlink);
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(mkdir);
87*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(rmdir);
88*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(opendir);
89*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(readdir);
90*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(closedir);
91*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(seekdir);
92*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(telldir);
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(ioctl);
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(pread64);
97*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(pwrite64);
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(statfs);
100*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(statfs64);
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(getuid);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(fsync);
105*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(fdatasync);
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(lstat64);
108*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(fstat64);
109*4882a593Smuzhiyun EXPORT_SYMBOL_PROTO(mknod);
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun /* Export symbols used by GCC for the stack protector. */
112*4882a593Smuzhiyun extern void __stack_smash_handler(void *) __attribute__((weak));
113*4882a593Smuzhiyun EXPORT_SYMBOL(__stack_smash_handler);
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun extern long __guard __attribute__((weak));
116*4882a593Smuzhiyun EXPORT_SYMBOL(__guard);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #ifdef _FORTIFY_SOURCE
119*4882a593Smuzhiyun extern int __sprintf_chk(char *str, int flag, size_t strlen, const char *format);
120*4882a593Smuzhiyun EXPORT_SYMBOL(__sprintf_chk);
121*4882a593Smuzhiyun #endif
122