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