usys.S 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. /*****************************************************************
  2. * usys.S
  3. * by Zhiyi Huang, [email protected]
  4. * University of Otago
  5. *
  6. ********************************************************************/
  7. #include "syscall.h"
  8. #include "traps.h"
  9. /* This is clumsy, but don't know how to make it smart */
  10. .globl fork
  11. fork:
  12. push {lr}
  13. push {r3}
  14. push {r2}
  15. push {r1}
  16. push {r0}
  17. mov r0, #SYS_fork
  18. swi #T_SYSCALL
  19. pop {r1} /* to avoid overwrite of r0 */
  20. pop {r1}
  21. pop {r2}
  22. pop {r3}
  23. pop {lr}
  24. bx lr
  25. .globl exit
  26. exit:
  27. push {lr}
  28. push {r3}
  29. push {r2}
  30. push {r1}
  31. push {r0}
  32. mov r0, #SYS_exit
  33. swi #T_SYSCALL
  34. pop {r1} /* to avoid overwrite of r0 */
  35. pop {r1}
  36. pop {r2}
  37. pop {r3}
  38. pop {lr}
  39. bx lr
  40. .globl wait
  41. wait:
  42. push {lr}
  43. push {r3}
  44. push {r2}
  45. push {r1}
  46. push {r0}
  47. mov r0, #SYS_wait
  48. swi #T_SYSCALL
  49. pop {r1} /* to avoid overwrite of r0 */
  50. pop {r1}
  51. pop {r2}
  52. pop {r3}
  53. pop {lr}
  54. bx lr
  55. .globl pipe
  56. pipe:
  57. push {lr}
  58. push {r3}
  59. push {r2}
  60. push {r1}
  61. push {r0}
  62. mov r0, #SYS_pipe
  63. swi #T_SYSCALL
  64. pop {r1} /* to avoid overwrite of r0 */
  65. pop {r1}
  66. pop {r2}
  67. pop {r3}
  68. pop {lr}
  69. bx lr
  70. .globl read
  71. read:
  72. push {lr}
  73. push {r3}
  74. push {r2}
  75. push {r1}
  76. push {r0}
  77. mov r0, #SYS_read
  78. swi #T_SYSCALL
  79. pop {r1} /* to avoid overwrite of r0 */
  80. pop {r1}
  81. pop {r2}
  82. pop {r3}
  83. pop {lr}
  84. bx lr
  85. .globl write
  86. write:
  87. push {lr}
  88. push {r3}
  89. push {r2}
  90. push {r1}
  91. push {r0}
  92. mov r0, #SYS_write
  93. swi #T_SYSCALL
  94. pop {r1} /* to avoid overwrite of r0 */
  95. pop {r1}
  96. pop {r2}
  97. pop {r3}
  98. pop {lr}
  99. bx lr
  100. .globl close
  101. close:
  102. push {lr}
  103. push {r3}
  104. push {r2}
  105. push {r1}
  106. push {r0}
  107. mov r0, #SYS_close
  108. swi #T_SYSCALL
  109. pop {r1} /* to avoid overwrite of r0 */
  110. pop {r1}
  111. pop {r2}
  112. pop {r3}
  113. pop {lr}
  114. bx lr
  115. .globl kill
  116. kill:
  117. push {lr}
  118. push {r3}
  119. push {r2}
  120. push {r1}
  121. push {r0}
  122. mov r0, #SYS_kill
  123. swi #T_SYSCALL
  124. pop {r1} /* to avoid overwrite of r0 */
  125. pop {r1}
  126. pop {r2}
  127. pop {r3}
  128. pop {lr}
  129. bx lr
  130. .globl exec
  131. exec:
  132. push {lr}
  133. push {r3}
  134. push {r2}
  135. push {r1}
  136. push {r0}
  137. mov r0, #SYS_exec
  138. swi #T_SYSCALL
  139. pop {r1} /* to avoid overwrite of r0 */
  140. pop {r1}
  141. pop {r2}
  142. pop {r3}
  143. pop {lr}
  144. bx lr
  145. .globl open
  146. open:
  147. push {lr}
  148. push {r3}
  149. push {r2}
  150. push {r1}
  151. push {r0}
  152. mov r0, #SYS_open
  153. swi #T_SYSCALL
  154. pop {r1} /* to avoid overwrite of r0 */
  155. pop {r1}
  156. pop {r2}
  157. pop {r3}
  158. pop {lr}
  159. bx lr
  160. .globl mknod
  161. mknod:
  162. push {lr}
  163. push {r3}
  164. push {r2}
  165. push {r1}
  166. push {r0}
  167. mov r0, #SYS_mknod
  168. swi #T_SYSCALL
  169. pop {r1} /* to avoid overwrite of r0 */
  170. pop {r1}
  171. pop {r2}
  172. pop {r3}
  173. pop {lr}
  174. bx lr
  175. .globl unlink
  176. unlink:
  177. push {lr}
  178. push {r3}
  179. push {r2}
  180. push {r1}
  181. push {r0}
  182. mov r0, #SYS_unlink
  183. swi #T_SYSCALL
  184. pop {r1} /* to avoid overwrite of r0 */
  185. pop {r1}
  186. pop {r2}
  187. pop {r3}
  188. pop {lr}
  189. bx lr
  190. .globl fstat
  191. fstat:
  192. push {lr}
  193. push {r3}
  194. push {r2}
  195. push {r1}
  196. push {r0}
  197. mov r0, #SYS_fstat
  198. swi #T_SYSCALL
  199. pop {r1} /* to avoid overwrite of r0 */
  200. pop {r1}
  201. pop {r2}
  202. pop {r3}
  203. pop {lr}
  204. bx lr
  205. .globl link
  206. link:
  207. push {lr}
  208. push {r3}
  209. push {r2}
  210. push {r1}
  211. push {r0}
  212. mov r0, #SYS_link
  213. swi #T_SYSCALL
  214. pop {r1} /* to avoid overwrite of r0 */
  215. pop {r1}
  216. pop {r2}
  217. pop {r3}
  218. pop {lr}
  219. bx lr
  220. .globl mkdir
  221. mkdir:
  222. push {lr}
  223. push {r3}
  224. push {r2}
  225. push {r1}
  226. push {r0}
  227. mov r0, #SYS_mkdir
  228. swi #T_SYSCALL
  229. pop {r1} /* to avoid overwrite of r0 */
  230. pop {r1}
  231. pop {r2}
  232. pop {r3}
  233. pop {lr}
  234. bx lr
  235. .globl chdir
  236. chdir:
  237. push {lr}
  238. push {r3}
  239. push {r2}
  240. push {r1}
  241. push {r0}
  242. mov r0, #SYS_chdir
  243. swi #T_SYSCALL
  244. pop {r1} /* to avoid overwrite of r0 */
  245. pop {r1}
  246. pop {r2}
  247. pop {r3}
  248. pop {lr}
  249. bx lr
  250. .globl dup
  251. dup:
  252. push {lr}
  253. push {r3}
  254. push {r2}
  255. push {r1}
  256. push {r0}
  257. mov r0, #SYS_dup
  258. swi #T_SYSCALL
  259. pop {r1} /* to avoid overwrite of r0 */
  260. pop {r1}
  261. pop {r2}
  262. pop {r3}
  263. pop {lr}
  264. bx lr
  265. .globl getpid
  266. getpid:
  267. push {lr}
  268. push {r3}
  269. push {r2}
  270. push {r1}
  271. push {r0}
  272. mov r0, #SYS_getpid
  273. swi #T_SYSCALL
  274. pop {r1} /* to avoid overwrite of r0 */
  275. pop {r1}
  276. pop {r2}
  277. pop {r3}
  278. pop {lr}
  279. bx lr
  280. .globl sbrk
  281. sbrk:
  282. push {lr}
  283. push {r3}
  284. push {r2}
  285. push {r1}
  286. push {r0}
  287. mov r0, #SYS_sbrk
  288. swi #T_SYSCALL
  289. pop {r1} /* to avoid overwrite of r0 */
  290. pop {r1}
  291. pop {r2}
  292. pop {r3}
  293. pop {lr}
  294. bx lr
  295. .globl sleep
  296. sleep:
  297. push {lr}
  298. push {r3}
  299. push {r2}
  300. push {r1}
  301. push {r0}
  302. mov r0, #SYS_sleep
  303. swi #T_SYSCALL
  304. pop {r1} /* to avoid overwrite of r0 */
  305. pop {r1}
  306. pop {r2}
  307. pop {r3}
  308. pop {lr}
  309. bx lr
  310. .globl uptime
  311. uptime:
  312. push {lr}
  313. push {r3}
  314. push {r2}
  315. push {r1}
  316. push {r0}
  317. mov r0, #SYS_uptime
  318. swi #T_SYSCALL
  319. pop {r1} /* to avoid overwrite of r0 */
  320. pop {r1}
  321. pop {r2}
  322. pop {r3}
  323. pop {lr}
  324. bx lr
  325. /*
  326. SYSCALL(fork)
  327. SYSCALL(exit)
  328. SYSCALL(wait)
  329. SYSCALL(pipe)
  330. SYSCALL(read)
  331. SYSCALL(write)
  332. SYSCALL(close)
  333. SYSCALL(kill)
  334. SYSCALL(exec)
  335. SYSCALL(open)
  336. SYSCALL(mknod)
  337. SYSCALL(unlink)
  338. SYSCALL(fstat)
  339. SYSCALL(link)
  340. SYSCALL(mkdir)
  341. SYSCALL(chdir)
  342. SYSCALL(dup)
  343. SYSCALL(getpid)
  344. SYSCALL(sbrk)
  345. SYSCALL(sleep)
  346. SYSCALL(uptime)
  347. */