chiark / gitweb /
Make run_directory.c stat the place it is going to try to run.
[elogind.git] / klibc / klibc / arch / arm / sysstub.ph
1 # -*- perl -*-
2 #
3 # arch/arm/sysstub.ph
4 #
5 # Script to generate system call stubs
6 #
7
8
9 sub make_sysstub($$$$$@) {
10     my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
11
12     open(OUT, '>', "${outputdir}/${fname}.S");
13     print  OUT "#include <asm/unistd.h>\n";
14         
15     print  OUT "\t.text\n";
16     print  OUT "\t.type\t${fname}, #function\n";
17     print  OUT "\t.globl ${fname}\n";
18     print  OUT "\t.align\t4\n";
19
20     print  OUT "#ifndef __thumb__\n";
21
22     # ARM version first
23     print  OUT "${fname}:\n";
24     print  OUT "\tstmfd\tsp!,{r4,r5,lr}\n";
25     print  OUT "\tldr\tr4,[sp,#12]\n";
26     print  OUT "\tldr\tr5,[sp,#16]\n";
27     print  OUT "\tswi\t# __NR_${sname}\n";
28     print  OUT "\tb\t__syscall_common\n";
29
30     print  OUT "#else\n";
31
32     # Thumb version
33     print  OUT "\t.thumb_func\n";
34     print  OUT "${fname}:\n";
35     print  OUT "\tpush\t{r4,r5,r7,pc}\n";
36     print  OUT "\tmov\tr7, # __NR_${sname}\n";
37     print  OUT "\tb\t__syscall_common\n";
38     
39     print  OUT "#endif\n";
40
41     print  OUT "\t.size\t__syscall${i},.-__syscall${i}\n";
42 }
43
44 1;