summaryrefslogtreecommitdiff
path: root/tests/analysis/disass/evalcommand.c
blob: f6effc335fd90503b1f9f16a59c209ef4ca0e1c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243


/**
 * On reproduit un code similaire à celui d'un fichier de Busybox (busybox-1.30.0/shell/ash.c).
 *
 * La commande de compilation est :
 *
 * arm-linux-gnueabi-gcc -Wp,-MD,shell/.ash.o.d   -std=gnu99 -Iinclude -Ilibbb  -include include/autoconf.h -D_GNU_SOURCE -DNDEBUG  -D"BB_VER=KBUILD_STR(1.30.0)"  -Wall -Wshadow -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function -Wunused-value -Wmissing-prototypes -Wmissing-declarations -Wno-format-security -Wdeclaration-after-statement -Wold-style-definition -fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer -ffunction-sections -fdata-sections -fno-guess-branch-probability -funsigned-char -static-libgcc -falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1 -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-builtin-printf -Os     -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(ash)"  -D"KBUILD_MODNAME=KBUILD_STR(ash)" -c -o shell/ash.o shell/ash.c
 *
 */

#if 0

static int
evalcommand(union node *cmd, int flags)
{
	static const struct builtincmd null_bltin = {
		"\0\0", bltincmd /* why three NULs? */
	};

	union node *argp;
	struct arglist arglist;
	char **argv;
	int argc;
	const struct strlist *sp;
	struct cmdentry cmdentry;
	const char *path;
	char **nargv;


	/* First expand the arguments. */

	cmdentry.cmdtype = CMDBUILTIN;
	cmdentry.u.cmd = &null_bltin;
	arglist.lastp = &arglist.list;
	*arglist.lastp = NULL;

	argc = 0;
	if (cmd->ncmd.args) {
		smallint pseudovarflag;

		for (argp = cmd->ncmd.args; argp; argp = argp->narg.next) {
			struct strlist **spp;

			spp = arglist.lastp;
			if (pseudovarflag)
				expandarg(argp, &arglist, EXP_VARTILDE);

			for (sp = *spp; sp; sp = sp->next)
				argc++;
		}
	}

	/* Reserve one extra spot at the front for shellexec. */
	nargv = NULL;//stalloc(sizeof(char *) * (argc + 2));
	argv = ++nargv;
	*nargv = NULL;




	path = vpath.var_text;

	/* Now locate the command. */

		for (;;) {
			find_command(argv[0], &cmdentry, DO_ERR, path);

#if ENABLE_ASH_CMDCMD
			if (cmdentry.u.cmd == COMMANDCMD) {
				nargv = parse_command_args(argv, &path);
                break;

			} else
#endif
				break;
		}



	return 0;

}

#endif


static int __attribute__ ((naked)) evalcommand(void /*union node*/ *cmd, int flags)
{

    /*
   138ac:       e92d401f        push    {r0, r1, r2, r3, r4, lr}
   138b0:       e3a03002        mov     r3, #2
   138b4:       e58d3008        str     r3, [sp, #8]
   138b8:       e59f30b8        ldr     r3, [pc, #184]  ; 13978 <evalcommand+0xcc>
   138bc:       e58dd004        str     sp, [sp, #4]
   138c0:       e58d300c        str     r3, [sp, #12]
   138c4:       e3a03000        mov     r3, #0
   138c8:       e58d3000        str     r3, [sp]
   138cc:       e590300c        ldr     r3, [r0, #12]
   138d0:       e3530000        cmp     r3, #0
   138d4:       1a00000d        bne     13910 <evalcommand+0x64>
   138d8:       e3a00000        mov     r0, #0
   138dc:       e59f3098        ldr     r3, [pc, #152]  ; 1397c <evalcommand+0xd0>
   138e0:       e5800004        str     r0, [r0, #4]
   138e4:       e5933000        ldr     r3, [r3]
   138e8:       e3a02001        mov     r2, #1
   138ec:       e59330f0        ldr     r3, [r3, #240]  ; 0xf0
   138f0:       e28d1008        add     r1, sp, #8
   138f4:       ebfffe71        bl      132c0 <find_command>
   138f8:       e59d200c        ldr     r2, [sp, #12]
   138fc:       e59f307c        ldr     r3, [pc, #124]  ; 13980 <evalcommand+0xd4>
   13900:       e1520003        cmp     r2, r3
   13904:       1a000018        bne     1396c <evalcommand+0xc0>
   13908:       e3a01004        mov     r1, #4
   1390c:       ea00000f        b       13950 <evalcommand+0xa4>
   13910:       e5933004        ldr     r3, [r3, #4]
   13914:       eaffffed        b       138d0 <evalcommand+0x24>
   13918:       e5d23000        ldrb    r3, [r2]
   1391c:       e353002d        cmp     r3, #45 ; 0x2d
   13920:       1a000011        bne     1396c <evalcommand+0xc0>
   13924:       e5d23001        ldrb    r3, [r2, #1]
   13928:       e2820002        add     r0, r2, #2
   1392c:       e3530000        cmp     r3, #0
   13930:       0a00000d        beq     1396c <evalcommand+0xc0>
   13934:       e353002d        cmp     r3, #45 ; 0x2d
   13938:       0a000008        beq     13960 <evalcommand+0xb4>
   1393c:       e3530070        cmp     r3, #112        ; 0x70
   13940:       1a000009        bne     1396c <evalcommand+0xc0>
   13944:       e4d03001        ldrb    r3, [r0], #1
   13948:       e3530000        cmp     r3, #0
   1394c:       1afffffa        bne     1393c <evalcommand+0x90>
   13950:       e5b12004        ldr     r2, [r1, #4]!
   13954:       e3520000        cmp     r2, #0
   13958:       0a000003        beq     1396c <evalcommand+0xc0>
   1395c:       eaffffed        b       13918 <evalcommand+0x6c>
   13960:       e5d22002        ldrb    r2, [r2, #2]
   13964:       e3520000        cmp     r2, #0
   13968:       1afffff3        bne     1393c <evalcommand+0x90>
   1396c:       e3a00000        mov     r0, #0
   13970:       e28dd014        add     sp, sp, #20
   13974:       e49df004        pop     {pc}            ; (ldr pc, [sp], #4)
   13978:       00017fa4        .word   0x00017fa4
   1397c:       000213f4        .word   0x000213f4
   13980:       00017e60        .word   0x00017e60
    */


asm (

     "push    {r0, r1, r2, r3, r4, lr}" "\n"
     "mov     r3, #2"                   "\n"
     "str     r3, [sp, #8]"             "\n"
     "ldr     r3, [pc, #184]"           "\n"
     "str     sp, [sp, #4]"             "\n"
     "str     r3, [sp, #12]"            "\n"
     "mov     r3, #0"                   "\n"
     "str     r3, [sp]"                 "\n"
     "ldr     r3, [r0, #12]"            "\n"

     ".Lbl_138d0%=:"                    "\n"

     "cmp     r3, #0"                   "\n"
     "bne     .Lbl_13910%="             "\n"

     "mov     r0, #0"                   "\n"
     "ldr     r3, [pc, #152]"           "\n"
     "str     r0, [r0, #4]"             "\n"
     "ldr     r3, [r3]"                 "\n"
     "mov     r2, #1"                   "\n"
     "ldr     r3, [r3, #240]"           "\n"
     "add     r1, sp, #8"               "\n"
     "bl      .Lbl_find%="              "\n" /* <find_command> */
     "ldr     r2, [sp, #12]"            "\n"
     "ldr     r3, [pc, #124]"           "\n"
     "cmp     r2, r3"                   "\n"
     "bne     .Lbl_1396c%="             "\n"

     "mov     r1, #4"                   "\n"
     "b       .Lbl_13950%="             "\n"

     ".Lbl_13910%=:"                    "\n"

     "ldr     r3, [r3, #4]"             "\n"
     "b       .Lbl_138d0%="             "\n"

     ".Lbl_13918%=:"                    "\n"

     "ldrb    r3, [r2]"                 "\n"
     "cmp     r3, #45"                  "\n"
     "bne     .Lbl_1396c%="             "\n"

     "ldrb    r3, [r2, #1]"             "\n"
     "add     r0, r2, #2"               "\n"
     "cmp     r3, #0"                   "\n"
     "beq     .Lbl_1396c%="             "\n"

     "cmp     r3, #45"                  "\n"
     "beq     .Lbl_13960%="             "\n"

     ".Lbl_1393c%=:"                    "\n"

     "cmp     r3, #112"                 "\n"
     "bne     .Lbl_1396c%="             "\n"

     "ldrb    r3, [r0], #1"             "\n"
     "cmp     r3, #0"                   "\n"
     "bne     .Lbl_1393c%="             "\n"

     ".Lbl_13950%=:"                    "\n"

     "ldr     r2, [r1, #4]!"            "\n"
     "cmp     r2, #0"                   "\n"
     "beq     .Lbl_1396c%="             "\n"
     "b       .Lbl_13918%="             "\n"

     ".Lbl_13960%=:"                    "\n"

     "ldrb    r2, [r2, #2]"             "\n"
     "cmp     r2, #0"                   "\n"
     "bne     .Lbl_1393c%="             "\n"

     ".Lbl_1396c%=:"                    "\n"

     "mov     r0, #0"                   "\n"
     "add     sp, sp, #20"              "\n"
     "pop     {pc}"                     "\n"

     ".word   0x00017fa4"               "\n"
     ".word   0x000213f4"               "\n"
     ".word   0x00017e60"               "\n"

     ".Lbl_find%=:"                     "\n"

     ::"r" (cmd, flags));

}

int main(int argc, char **argv)
{
    return evalcommand((void *)0, 0);

}