11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  linux/arch/arm/kernel/armksyms.c
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Copyright (C) 2000 Russell King
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License version 2 as
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * published by the Free Software Foundation.
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
10ecea4ab6d3d8bb4122522398200f1cd2a06af6d5Paul Gortmaker#include <linux/export.h>
1187c52578bd050ba395b0cae7079b1128abd2422dRussell King#include <linux/sched.h>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/string.h>
13d07ad967e3c1cb955c4f9ee6a4eba4e6e1edb1e8Nicolas Pitre#include <linux/cryptohash.h>
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/delay.h>
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/in6.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/syscalls.h>
1733fa9b13285e76fb95d940120964562e4c7081c2Russell King#include <linux/uaccess.h>
18fced80c735941fa518ac67c0b61bbe153fb8c050Russell King#include <linux/io.h>
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/checksum.h>
21395a59d0f8e86bb39cd700c3d185d30c670bb958Abhishek Sagar#include <asm/ftrace.h>
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * libgcc functions - functions that are used internally by the
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * compiler...  (prototypes are not correct though, but that
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * doesn't really matter since they're not versioned).
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __ashldi3(void);
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __ashrdi3(void);
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __divsi3(void);
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __lshrdi3(void);
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __modsi3(void);
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __muldi3(void);
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __ucmpdi2(void);
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __udivsi3(void);
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __umodsi3(void);
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __do_div64(void);
38017f161a55b48807a73fc9dff0b69f081bf43ee3Kim Phillipsextern void __bswapsi2(void);
39017f161a55b48807a73fc9dff0b69f081bf43ee3Kim Phillipsextern void __bswapdi2(void);
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_idiv(void);
42ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_idivmod(void);
43ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_lasr(void);
44ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_llsl(void);
45ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_llsr(void);
46ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_lmul(void);
47ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_uidiv(void);
48ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_uidivmod(void);
49ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitreextern void __aeabi_ulcmp(void);
50ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitre
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void fpundefinstr(void);
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* platform dependent support */
54d0a533b18235d36206b9b422efadb7cee444dfdbWill DeaconEXPORT_SYMBOL(arm_delay_ops);
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* networking */
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(csum_partial);
58487194a19d2069bfcc9791c3ab2204bed59b136aFrederik DeweerdtEXPORT_SYMBOL(csum_partial_copy_from_user);
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(csum_partial_copy_nocheck);
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__csum_ipv6_magic);
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* io */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __raw_readsb
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__raw_readsb);
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __raw_readsw
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__raw_readsw);
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __raw_readsl
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__raw_readsl);
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __raw_writesb
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__raw_writesb);
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __raw_writesw
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__raw_writesw);
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __raw_writesl
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__raw_writesl);
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* string / mem functions */
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(strchr);
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(strrchr);
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(memset);
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(memcpy);
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(memmove);
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(memchr);
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__memzero);
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
919641c7cc5a7f6d5c9dc9b43eea4e5f8c3c08c94eRussell King#ifdef CONFIG_MMU
92674a0a6939a954ab92fdd9833943e2277550bb0aNicolas PitreEXPORT_SYMBOL(copy_page);
93674a0a6939a954ab92fdd9833943e2277550bb0aNicolas Pitre
9402fcb974369d21c3df61d4ac5a2e1a58dce86495Russell KingEXPORT_SYMBOL(__copy_from_user);
9502fcb974369d21c3df61d4ac5a2e1a58dce86495Russell KingEXPORT_SYMBOL(__copy_to_user);
9602fcb974369d21c3df61d4ac5a2e1a58dce86495Russell KingEXPORT_SYMBOL(__clear_user);
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__get_user_1);
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__get_user_2);
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__get_user_4);
1017a0bd49713aca3040099e1413d1cc9f08802d97aVictor KamenskyEXPORT_SYMBOL(__get_user_8);
1027a0bd49713aca3040099e1413d1cc9f08802d97aVictor Kamensky
1037a0bd49713aca3040099e1413d1cc9f08802d97aVictor Kamensky#ifdef __ARMEB__
1047a0bd49713aca3040099e1413d1cc9f08802d97aVictor KamenskyEXPORT_SYMBOL(__get_user_64t_1);
1057a0bd49713aca3040099e1413d1cc9f08802d97aVictor KamenskyEXPORT_SYMBOL(__get_user_64t_2);
1067a0bd49713aca3040099e1413d1cc9f08802d97aVictor KamenskyEXPORT_SYMBOL(__get_user_64t_4);
1077a0bd49713aca3040099e1413d1cc9f08802d97aVictor KamenskyEXPORT_SYMBOL(__get_user_32t_8);
1087a0bd49713aca3040099e1413d1cc9f08802d97aVictor Kamensky#endif
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__put_user_1);
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__put_user_2);
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__put_user_4);
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__put_user_8);
1149641c7cc5a7f6d5c9dc9b43eea4e5f8c3c08c94eRussell King#endif
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* gcc lib functions */
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__ashldi3);
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__ashrdi3);
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__divsi3);
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__lshrdi3);
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__modsi3);
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__muldi3);
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__ucmpdi2);
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__udivsi3);
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__umodsi3);
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(__do_div64);
127017f161a55b48807a73fc9dff0b69f081bf43ee3Kim PhillipsEXPORT_SYMBOL(__bswapsi2);
128017f161a55b48807a73fc9dff0b69f081bf43ee3Kim PhillipsEXPORT_SYMBOL(__bswapdi2);
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
130ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitre#ifdef CONFIG_AEABI
131ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_idiv);
132ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_idivmod);
133ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_lasr);
134ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_llsl);
135ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_llsr);
136ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_lmul);
137ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_uidiv);
138ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_uidivmod);
139ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreEXPORT_SYMBOL(__aeabi_ulcmp);
140ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitre#endif
141ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas Pitre
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* bitops */
1436323f0ccedf756dfe5f46549cec69a2d6d97937bRussell KingEXPORT_SYMBOL(_set_bit);
1446323f0ccedf756dfe5f46549cec69a2d6d97937bRussell KingEXPORT_SYMBOL(_test_and_set_bit);
1456323f0ccedf756dfe5f46549cec69a2d6d97937bRussell KingEXPORT_SYMBOL(_clear_bit);
1466323f0ccedf756dfe5f46549cec69a2d6d97937bRussell KingEXPORT_SYMBOL(_test_and_clear_bit);
1476323f0ccedf756dfe5f46549cec69a2d6d97937bRussell KingEXPORT_SYMBOL(_change_bit);
1486323f0ccedf756dfe5f46549cec69a2d6d97937bRussell KingEXPORT_SYMBOL(_test_and_change_bit);
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_first_zero_bit_le);
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_next_zero_bit_le);
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_first_bit_le);
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_next_bit_le);
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __ARMEB__
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_first_zero_bit_be);
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_next_zero_bit_be);
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_first_bit_be);
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(_find_next_bit_be);
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
160db2c4392907524fa376ffbd04f5781d6394e2666Russell King
161606576ce816603d9fe1fb453a88bc6eea16ca709Steven Rostedt#ifdef CONFIG_FUNCTION_TRACER
16209bfafac3e237415cc4b6adde49f9f28b3a42659Rabin Vincent#ifdef CONFIG_OLD_MCOUNT
163395a59d0f8e86bb39cd700c3d185d30c670bb958Abhishek SagarEXPORT_SYMBOL(mcount);
16409bfafac3e237415cc4b6adde49f9f28b3a42659Rabin Vincent#endif
165181f817eaaca4c1f8a9c265d339d2b96de8b245dUwe Kleine-KönigEXPORT_SYMBOL(__gnu_mcount_nc);
166395a59d0f8e86bb39cd700c3d185d30c670bb958Abhishek Sagar#endif
167dc21af99fadcfa0ae65b52fd0895f85824f0c288Russell King
168dc21af99fadcfa0ae65b52fd0895f85824f0c288Russell King#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
169e26a9e00afc482b971afcaef1db8c9034d4d6d7cRussell KingEXPORT_SYMBOL(__pv_phys_pfn_offset);
170f52bb722547f43caeaecbcc62db9f3c3b80ead9bSricharan REXPORT_SYMBOL(__pv_offset);
171dc21af99fadcfa0ae65b52fd0895f85824f0c288Russell King#endif
172