Diff markup
001 001
002 002
003 003
004 004
005 005
006 006
007 007
008 008
009 009
010 010
011 011
012 012
013 013
014 014
015 015
016 016
017 017
018 018
019 019
020 020
021 021
022 022
023 023
024 024
025 025
026 026
027 027
028 #include <hwcore/swintr.h> 028 #include <hwcore/swintr.h>
029 #include <string.h> 029 #include <string.h>
030 #include "crt.h" 030 #include "crt.h"
031 031
032 032
033 033
034 034
035 void _start(void) __attribute__((noreturn)); 035 void _start(void) __attribute__((noreturn));
036 void _start(void) 036 void _start(void)
037 { 037 {
038 038
039 extern int main(void); 039 extern int main(void);
040 040
041 041
042 extern char _bbss, _ebss; 042 extern char _bbss, _ebss;
043 memset(& _bbss, 0x0, (& _ebss) - (& _bbss)); 043 memset(& _bbss, 0x0, (& _ebss) - (& _bbss));
044 044
045 _sos_exit(main()); 045 _sos_exit(main());
046 } 046 }
047 047
048 048
049 049
050 050
051 051
052 052
053 053
054 054
055 055
056 056
057 057
058 058
059 inline 059 inline
060 int _sos_syscall3(int id, 060 int _sos_syscall3(int id,
061 unsigned int arg1, 061 unsigned int arg1,
062 unsigned int arg2, 062 unsigned int arg2,
063 unsigned int arg3) 063 unsigned int arg3)
064 { 064 {
065 int ret; 065 int ret;
066 066
067 asm volatile("movl %1,%%eax \n" 067 asm volatile("movl %1,%%eax \n"
068 "movl %2,%%ebx \n" 068 "movl %2,%%ebx \n"
069 "movl %3,%%ecx \n" 069 "movl %3,%%ecx \n"
070 "movl %4,%%edx \n" 070 "movl %4,%%edx \n"
071 "int %5\n" 071 "int %5\n"
072 "movl %%eax, %0" 072 "movl %%eax, %0"
073 :"=g"(ret) 073 :"=g"(ret)
074 :"g"(id),"g"(arg1),"g"(arg2),"g 074 :"g"(id),"g"(arg1),"g"(arg2),"g"(arg3)
075 ,"i"(SOS_SWINTR_SOS_SYSCALL) 075 ,"i"(SOS_SWINTR_SOS_SYSCALL)
076 :"eax","ebx","ecx","edx","memor 076 :"eax","ebx","ecx","edx","memory");
077 077
078 return ret; 078 return ret;
079 } 079 }
080 080
081 081
082 int _sos_syscall0(int id) 082 int _sos_syscall0(int id)
083 { 083 {
084 return _sos_syscall3(id, 0, 0, 0); 084 return _sos_syscall3(id, 0, 0, 0);
085 } 085 }
086 086
087 087
088 int _sos_syscall1(int id, 088 int _sos_syscall1(int id,
089 unsigned int arg1) 089 unsigned int arg1)
090 { 090 {
091 return _sos_syscall3(id, arg1, 0, 0); 091 return _sos_syscall3(id, arg1, 0, 0);
092 } 092 }
093 093
094 094
095 int _sos_syscall2(int id, 095 int _sos_syscall2(int id,
096 unsigned int arg1, 096 unsigned int arg1,
097 unsigned int arg2) 097 unsigned int arg2)
098 { 098 {
099 return _sos_syscall3(id, arg1, arg2, 0); 099 return _sos_syscall3(id, arg1, arg2, 0);
100 } 100 }
101 101
102 102
103 int _sos_syscall4(int id, 103 int _sos_syscall4(int id,
104 unsigned int arg1, 104 unsigned int arg1,
105 unsigned int arg2, 105 unsigned int arg2,
106 unsigned int arg3, 106 unsigned int arg3,
107 unsigned int arg4) 107 unsigned int arg4)
108 { 108 {
109 unsigned int args[] = { arg3, arg4 }; 109 unsigned int args[] = { arg3, arg4 };
110 return _sos_syscall3(id, arg1, arg2, (unsign 110 return _sos_syscall3(id, arg1, arg2, (unsigned)args);
111 } 111 }
112 112
113 113
114 int _sos_syscall5(int id, 114 int _sos_syscall5(int id,
115 unsigned int arg1, 115 unsigned int arg1,
116 unsigned int arg2, 116 unsigned int arg2,
117 unsigned int arg3, 117 unsigned int arg3,
118 unsigned int arg4, 118 unsigned int arg4,
119 unsigned int arg5) 119 unsigned int arg5)
120 { 120 {
121 unsigned int args[] = { arg3, arg4, arg5 }; 121 unsigned int args[] = { arg3, arg4, arg5 };
122 return _sos_syscall3(id, arg1, arg2, (unsign 122 return _sos_syscall3(id, arg1, arg2, (unsigned)args);
123 } 123 }
124 124
125 125
126 int _sos_syscall6(int id, 126 int _sos_syscall6(int id,
127 unsigned int arg1, 127 unsigned int arg1,
128 unsigned int arg2, 128 unsigned int arg2,
129 unsigned int arg3, 129 unsigned int arg3,
130 unsigned int arg4, 130 unsigned int arg4,
131 unsigned int arg5, 131 unsigned int arg5,
132 unsigned int arg6) 132 unsigned int arg6)
133 { 133 {
134 unsigned int args[] = { arg3, arg4, arg5, ar 134 unsigned int args[] = { arg3, arg4, arg5, arg6 };
135 return _sos_syscall3(id, arg1, arg2, (unsign 135 return _sos_syscall3(id, arg1, arg2, (unsigned)args);
136 } 136 }
137 137
138 138
139 int _sos_syscall7(int id, 139 int _sos_syscall7(int id,
140 unsigned int arg1, 140 unsigned int arg1,
141 unsigned int arg2, 141 unsigned int arg2,
142 unsigned int arg3, 142 unsigned int arg3,
143 unsigned int arg4, 143 unsigned int arg4,
144 unsigned int arg5, 144 unsigned int arg5,
145 unsigned int arg6, 145 unsigned int arg6,
146 unsigned int arg7) 146 unsigned int arg7)
147 { 147 {
148 unsigned int args[] = { arg3, arg4, arg5, ar 148 unsigned int args[] = { arg3, arg4, arg5, arg6, arg7 };
149 return _sos_syscall3(id, arg1, arg2, (unsign 149 return _sos_syscall3(id, arg1, arg2, (unsigned)args);
150 } 150 }
151 151
152 152
153 int _sos_syscall8(int id, 153 int _sos_syscall8(int id,
154 unsigned int arg1, 154 unsigned int arg1,
155 unsigned int arg2, 155 unsigned int arg2,
156 unsigned int arg3, 156 unsigned int arg3,
157 unsigned int arg4, 157 unsigned int arg4,
158 unsigned int arg5, 158 unsigned int arg5,
159 unsigned int arg6, 159 unsigned int arg6,
160 unsigned int arg7, 160 unsigned int arg7,
161 unsigned int arg8) 161 unsigned int arg8)
162 { 162 {
163 unsigned int args[] = { arg3, arg4, arg5, ar 163 unsigned int args[] = { arg3, arg4, arg5, arg6, arg7, arg8 };
164 return _sos_syscall3(id, arg1, arg2, (unsign 164 return _sos_syscall3(id, arg1, arg2, (unsigned)args);
165 } 165 }
166 166
167 167
168 void _sos_exit(int status) 168 void _sos_exit(int status)
169 { 169 {
170 _sos_syscall1(SOS_SYSCALL_ID_EXIT, (unsigned 170 _sos_syscall1(SOS_SYSCALL_ID_EXIT, (unsigned)status);
171 171
172 172
173 for ( ; ; ) 173 for ( ; ; )
174 ; 174 ;
175 } 175 }
176 176
177 177
178 int _sos_bochs_write(const char * str, unsigne 178 int _sos_bochs_write(const char * str, unsigned length)
179 { 179 {
180 return _sos_syscall2(SOS_SYSCALL_ID_BOCHS_WR 180 return _sos_syscall2(SOS_SYSCALL_ID_BOCHS_WRITE,
181 (unsigned)str, 181 (unsigned)str,
182 length); 182 length);
183 } 183 }
184 184
185 185
186 int _sos_fork() 186 int _sos_fork()
187 { 187 {
188 return _sos_syscall0(SOS_SYSCALL_ID_FORK); 188 return _sos_syscall0(SOS_SYSCALL_ID_FORK);
189 } 189 }
190 190
191 191
192 int _sos_exec(const char * prog) 192 int _sos_exec(const char * prog)
193 { 193 {
194 return _sos_syscall2(SOS_SYSCALL_ID_EXEC, (u 194 return _sos_syscall2(SOS_SYSCALL_ID_EXEC, (unsigned int)prog,
195 (unsigned int)strlen(pr 195 (unsigned int)strlen(prog));
196 } 196 }
197 197
198 198
199 int _sos_munmap(void * start, size_t length) 199 int _sos_munmap(void * start, size_t length)
200 { 200 {
201 return _sos_syscall2(SOS_SYSCALL_ID_MUNMAP, 201 return _sos_syscall2(SOS_SYSCALL_ID_MUNMAP,
202 (unsigned int)start, 202 (unsigned int)start,
203 length); 203 length);
204 } 204 }
205 205
206 206
207 int _sos_mprotect(const void *addr, size_t len 207 int _sos_mprotect(const void *addr, size_t len, int prot)
208 { 208 {
209 return _sos_syscall3(SOS_SYSCALL_ID_MPROTECT 209 return _sos_syscall3(SOS_SYSCALL_ID_MPROTECT,
210 (unsigned int)addr, 210 (unsigned int)addr,
211 len, 211 len,
212 (unsigned int)prot); 212 (unsigned int)prot);
213 } 213 }
214 214
215 215
216 int _sos_mresize(void * old_addr, size_t old_l 216 int _sos_mresize(void * old_addr, size_t old_len,
217 void * *new_addr, size_t new_ 217 void * *new_addr, size_t new_len,
218 unsigned long flags) 218 unsigned long flags)
219 { 219 {
220 return _sos_syscall5(SOS_SYSCALL_ID_MRESIZE, 220 return _sos_syscall5(SOS_SYSCALL_ID_MRESIZE,
221 (unsigned int)old_addr, 221 (unsigned int)old_addr,
222 old_len, 222 old_len,
223 (unsigned int)new_addr, 223 (unsigned int)new_addr,
224 new_len, 224 new_len,
225 flags); 225 flags);
226 } 226 }
227 227
228 228
229 int _sos_msync(void *start, size_t length, int 229 int _sos_msync(void *start, size_t length, int flags)
230 { 230 {
231 return _sos_syscall3(SOS_SYSCALL_ID_MSYNC, 231 return _sos_syscall3(SOS_SYSCALL_ID_MSYNC,
232 (unsigned int)start, 232 (unsigned int)start,
233 length, 233 length,
234 flags); 234 flags);
235 } 235 }
236 236
237 237
238 238
239 239
240 240
241 241
242 242
243 243
244 244
245 static void thread_routine(void) 245 static void thread_routine(void)
246 { 246 {
247 247
248 register unsigned long int reg_arg1 asm("%ea 248 register unsigned long int reg_arg1 asm("%eax");
249 register unsigned long int reg_arg2 asm("%eb 249 register unsigned long int reg_arg2 asm("%ebx");
250 250
251 sos_thread_func_t * func = (sos_thread_func_ 251 sos_thread_func_t * func = (sos_thread_func_t*)reg_arg1;
252 unsigned long int arg = reg_arg2; 252 unsigned long int arg = reg_arg2;
253 253
254 func(arg); 254 func(arg);
255 _sos_exit(0); 255 _sos_exit(0);
256 } 256 }
257 257
258 258
259 int _sos_new_thread(sos_thread_func_t *func, 259 int _sos_new_thread(sos_thread_func_t *func,
260 void* arg, 260 void* arg,
261 size_t stack_size) 261 size_t stack_size)
262 { 262 {
263 return _sos_syscall4(SOS_SYSCALL_ID_NEW_THRE 263 return _sos_syscall4(SOS_SYSCALL_ID_NEW_THREAD,
264 (unsigned)thread_routin 264 (unsigned)thread_routine,
265 (unsigned)func, (unsign 265 (unsigned)func, (unsigned)arg,
266 stack_size); 266 stack_size);
267 } 267 }
268 268
269 269
270 int _sos_nanosleep(unsigned long int sec, 270 int _sos_nanosleep(unsigned long int sec,
271 unsigned long int nanosec) 271 unsigned long int nanosec)
272 { 272 {
273 return _sos_syscall2(SOS_SYSCALL_ID_NANOSLEE 273 return _sos_syscall2(SOS_SYSCALL_ID_NANOSLEEP,
274 sec, nanosec); 274 sec, nanosec);
275 } 275 }
276 276
277 277
278 void * _sos_brk(void * new_top_address) 278 void * _sos_brk(void * new_top_address)
279 { 279 {
280 return (void*)_sos_syscall1(SOS_SYSCALL_ID_B 280 return (void*)_sos_syscall1(SOS_SYSCALL_ID_BRK,
281 (unsigned)new_to 281 (unsigned)new_top_address);
282 } 282 }
283 283
284 284
285 int _sos_mount(const char *source, const char 285 int _sos_mount(const char *source, const char *target,
286 const char *filesystemtype, uns 286 const char *filesystemtype, unsigned long mountflags,
287 const char *args) 287 const char *args)
288 { 288 {
289 if (!target || !filesystemtype) 289 if (!target || !filesystemtype)
290 return -1; 290 return -1;
291 291
292 return _sos_syscall7(SOS_SYSCALL_ID_MOUNT, 292 return _sos_syscall7(SOS_SYSCALL_ID_MOUNT,
293 (unsigned int)source, s 293 (unsigned int)source, source?strlen(source):0,
294 (unsigned int)target, s 294 (unsigned int)target, strlen(target),
295 (unsigned int)filesyste 295 (unsigned int)filesystemtype,
296 mountflags, 296 mountflags,
297 (unsigned int)args); 297 (unsigned int)args);
298 } 298 }
299 299
300 300
301 int _sos_umount(const char *target) 301 int _sos_umount(const char *target)
302 { 302 {
303 if (!target) 303 if (!target)
304 return -1; 304 return -1;
305 305
306 return _sos_syscall2(SOS_SYSCALL_ID_UMOUNT, 306 return _sos_syscall2(SOS_SYSCALL_ID_UMOUNT,
307 (unsigned int)target, 307 (unsigned int)target,
308 strlen(target)); 308 strlen(target));
309 } 309 }
310 310
311 311
312 void _sos_sync(void) 312 void _sos_sync(void)
313 { 313 {
314 _sos_syscall0(SOS_SYSCALL_ID_SYNC); 314 _sos_syscall0(SOS_SYSCALL_ID_SYNC);
315 } 315 }
316 316
317 317
318 int _sos_statvfs(const char *path, struct stat 318 int _sos_statvfs(const char *path, struct statvfs *buf)
319 { 319 {
320 if (! path) 320 if (! path)
321 return -1; 321 return -1;
322 322
323 return _sos_syscall3(SOS_SYSCALL_ID_VFSTAT64 323 return _sos_syscall3(SOS_SYSCALL_ID_VFSTAT64,
324 (unsigned)path, 324 (unsigned)path,
325 strlen(path), 325 strlen(path),
326 (unsigned)buf); 326 (unsigned)buf);
327 } 327 }
328 328
329 329
330 int _sos_open(const char * pathname, int flags 330 int _sos_open(const char * pathname, int flags, int mode)
331 { 331 {
332 if (! pathname) 332 if (! pathname)
333 return -1; 333 return -1;
334 334
335 return _sos_syscall4(SOS_SYSCALL_ID_OPEN, 335 return _sos_syscall4(SOS_SYSCALL_ID_OPEN,
336 (unsigned)pathname, 336 (unsigned)pathname,
337 strlen(pathname), 337 strlen(pathname),
338 flags, 338 flags,
339 mode); 339 mode);
340 } 340 }
341 341
342 342
343 int _sos_close(int fd) 343 int _sos_close(int fd)
344 { 344 {
345 return _sos_syscall1(SOS_SYSCALL_ID_CLOSE, f 345 return _sos_syscall1(SOS_SYSCALL_ID_CLOSE, fd);
346 } 346 }
347 347
348 348
349 int _sos_read(int fd, char * buf, size_t * len 349 int _sos_read(int fd, char * buf, size_t * len)
350 { 350 {
351 return _sos_syscall3(SOS_SYSCALL_ID_READ, fd 351 return _sos_syscall3(SOS_SYSCALL_ID_READ, fd,
352 (unsigned int) buf, 352 (unsigned int) buf,
353 (unsigned int) len); 353 (unsigned int) len);
354 } 354 }
355 355
356 356
357 int _sos_write(int fd, const char * buf, size_ 357 int _sos_write(int fd, const char * buf, size_t * len)
358 { 358 {
359 return _sos_syscall3(SOS_SYSCALL_ID_WRITE, f 359 return _sos_syscall3(SOS_SYSCALL_ID_WRITE, fd,
360 (unsigned int) buf, 360 (unsigned int) buf,
361 (unsigned int) len); 361 (unsigned int) len);
362 } 362 }
363 363
364 364
365 int _sos_seek64(int fd, loff_t * offset, int w 365 int _sos_seek64(int fd, loff_t * offset, int whence)
366 { 366 {
367 return _sos_syscall3(SOS_SYSCALL_ID_SEEK64, 367 return _sos_syscall3(SOS_SYSCALL_ID_SEEK64, fd,
368 (unsigned int)offset, 368 (unsigned int)offset,
369 (unsigned int)whence); 369 (unsigned int)whence);
370 } 370 }
371 371
372 372
373 int _sos_fmmap(void ** ptr_hint_addr, size_t l 373 int _sos_fmmap(void ** ptr_hint_addr, size_t len, int prot, int flags,
374 int fd, loff_t offset) 374 int fd, loff_t offset)
375 { 375 {
376 return _sos_syscall7(SOS_SYSCALL_ID_FSMMAP, 376 return _sos_syscall7(SOS_SYSCALL_ID_FSMMAP,
377 (unsigned int)ptr_hint_ 377 (unsigned int)ptr_hint_addr, len, prot, flags,
378 (unsigned int)fd, 378 (unsigned int)fd,
379 (offset 379 (offset >> 32),
380 (offset 380 (offset & 0xffffffff));
381 } 381 }
382 382
383 383
384 int _sos_ftruncate64(int fd, loff_t length) 384 int _sos_ftruncate64(int fd, loff_t length)
385 { 385 {
386 return _sos_syscall2(SOS_SYSCALL_ID_FTRUNCAT 386 return _sos_syscall2(SOS_SYSCALL_ID_FTRUNCATE64, fd,
387 (unsigned int)length); 387 (unsigned int)length);
388 } 388 }
389 389
390 390
391 int _sos_fcntl(int fd, int cmd, int arg) 391 int _sos_fcntl(int fd, int cmd, int arg)
392 { 392 {
393 return _sos_syscall3(SOS_SYSCALL_ID_FCNTL, f 393 return _sos_syscall3(SOS_SYSCALL_ID_FCNTL, fd,
394 (unsigned int)cmd, 394 (unsigned int)cmd,
395 (unsigned int)arg); 395 (unsigned int)arg);
396 } 396 }
397 397
398 398
399 int _sos_ioctl(int fd, int cmd, int arg) 399 int _sos_ioctl(int fd, int cmd, int arg)
400 { 400 {
401 return _sos_syscall3(SOS_SYSCALL_ID_IOCTL, f 401 return _sos_syscall3(SOS_SYSCALL_ID_IOCTL, fd,
402 (unsigned int)cmd, 402 (unsigned int)cmd,
403 (unsigned int)arg); 403 (unsigned int)arg);
404 } 404 }
405 405
406 406
407 int _sos_creat(const char *pathname, int mode) 407 int _sos_creat(const char *pathname, int mode)
408 { 408 {
409 if (! pathname) 409 if (! pathname)
410 return -1; 410 return -1;
411 411
412 return _sos_syscall3(SOS_SYSCALL_ID_CREAT, 412 return _sos_syscall3(SOS_SYSCALL_ID_CREAT,
413 (unsigned int)pathname, 413 (unsigned int)pathname,
414 strlen(pathname), 414 strlen(pathname),
415 mode); 415 mode);
416 } 416 }
417 417
418 418
419 int _sos_link (const char *oldpath, const char 419 int _sos_link (const char *oldpath, const char *newpath)
420 { 420 {
421 if (!oldpath || !newpath) 421 if (!oldpath || !newpath)
422 return -1; 422 return -1;
423 423
424 return _sos_syscall4(SOS_SYSCALL_ID_LINK, 424 return _sos_syscall4(SOS_SYSCALL_ID_LINK,
425 (unsigned int)oldpath, 425 (unsigned int)oldpath,
426 strlen(oldpath), 426 strlen(oldpath),
427 (unsigned int)newpath, 427 (unsigned int)newpath,
428 strlen(newpath)); 428 strlen(newpath));
429 } 429 }
430 430
431 431
432 int _sos_unlink(const char *pathname) 432 int _sos_unlink(const char *pathname)
433 { 433 {
434 if (! pathname) 434 if (! pathname)
435 return -1; 435 return -1;
436 436
437 return _sos_syscall2(SOS_SYSCALL_ID_UNLINK, 437 return _sos_syscall2(SOS_SYSCALL_ID_UNLINK,
438 (unsigned int)pathname, 438 (unsigned int)pathname,
439 strlen(pathname)); 439 strlen(pathname));
440 } 440 }
441 441
442 442
443 int _sos_rename (const char *oldpath, const ch 443 int _sos_rename (const char *oldpath, const char *newpath)
444 { 444 {
445 if (!oldpath || !newpath) 445 if (!oldpath || !newpath)
446 return -1; 446 return -1;
447 447
448 return _sos_syscall4(SOS_SYSCALL_ID_RENAME, 448 return _sos_syscall4(SOS_SYSCALL_ID_RENAME,
449 (unsigned int)oldpath, 449 (unsigned int)oldpath,
450 strlen(oldpath), 450 strlen(oldpath),
451 (unsigned int)newpath, 451 (unsigned int)newpath,
452 strlen(newpath)); 452 strlen(newpath));
453 } 453 }
454 454
455 455
456 int _sos_symlink(const char *target, const cha 456 int _sos_symlink(const char *target, const char *path)
457 { 457 {
458 if (!path || !target) 458 if (!path || !target)
459 return -1; 459 return -1;
460 460
461 return _sos_syscall4(SOS_SYSCALL_ID_SYMLINK, 461 return _sos_syscall4(SOS_SYSCALL_ID_SYMLINK,
462 (unsigned int)path, 462 (unsigned int)path,
463 strlen(path), 463 strlen(path),
464 (unsigned int)target, 464 (unsigned int)target,
465 strlen(target)); 465 strlen(target));
466 } 466 }
467 467
468 468
469 int _sos_mknod(const char *pathname, mode_t mo 469 int _sos_mknod(const char *pathname, mode_t mode,
470 int type, 470 int type,
471 unsigned int major, unsigned mi 471 unsigned int major, unsigned minor)
472 { 472 {
473 if (!pathname) 473 if (!pathname)
474 return -1; 474 return -1;
475 475
476 return _sos_syscall6(SOS_SYSCALL_ID_MKNOD, 476 return _sos_syscall6(SOS_SYSCALL_ID_MKNOD,
477 (unsigned int)pathname, 477 (unsigned int)pathname,
478 strlen(pathname), 478 strlen(pathname),
479 type, mode, major, mino 479 type, mode, major, minor);
480 } 480 }
481 481
482 482
483 struct dirent; 483 struct dirent;
484 int _sos_readdir(int fd, struct dirent * diren 484 int _sos_readdir(int fd, struct dirent * dirent)
485 { 485 {
486 return _sos_syscall2(SOS_SYSCALL_ID_READDIR, 486 return _sos_syscall2(SOS_SYSCALL_ID_READDIR,
487 fd, 487 fd,
488 (unsigned int)dirent); 488 (unsigned int)dirent);
489 } 489 }
490 490
491 491
492 int _sos_mkdir(const char *pathname, mode_t mo 492 int _sos_mkdir(const char *pathname, mode_t mode)
493 { 493 {
494 if (!pathname) 494 if (!pathname)
495 return -1; 495 return -1;
496 496
497 return _sos_syscall3(SOS_SYSCALL_ID_MKDIR, 497 return _sos_syscall3(SOS_SYSCALL_ID_MKDIR,
498 (unsigned int)pathname, 498 (unsigned int)pathname,
499 strlen(pathname), 499 strlen(pathname),
500 mode); 500 mode);
501 } 501 }
502 502
503 503
504 int _sos_rmdir(const char *pathname) 504 int _sos_rmdir(const char *pathname)
505 { 505 {
506 if (!pathname) 506 if (!pathname)
507 return -1; 507 return -1;
508 508
509 return _sos_syscall2(SOS_SYSCALL_ID_RMDIR, 509 return _sos_syscall2(SOS_SYSCALL_ID_RMDIR,
510 (unsigned int)pathname, 510 (unsigned int)pathname,
511 strlen(pathname)); 511 strlen(pathname));
512 } 512 }
513 513
514 514
515 int _sos_chmod(const char *pathname, mode_t mo 515 int _sos_chmod(const char *pathname, mode_t mode)
516 { 516 {
517 if (!pathname) 517 if (!pathname)
518 return -1; 518 return -1;
519 519
520 return _sos_syscall3(SOS_SYSCALL_ID_CHMOD, 520 return _sos_syscall3(SOS_SYSCALL_ID_CHMOD,
521 (unsigned int)pathname, 521 (unsigned int)pathname,
522 strlen(pathname), 522 strlen(pathname),
523 mode); 523 mode);
524 } 524 }
525 525
526 526
527 int _sos_stat(const char *pathname, int nofoll 527 int _sos_stat(const char *pathname, int nofollow, struct stat * st)
528 { 528 {
529 if (!pathname || !st) 529 if (!pathname || !st)
530 return -1; 530 return -1;
531 531
532 return _sos_syscall4(SOS_SYSCALL_ID_STAT64, 532 return _sos_syscall4(SOS_SYSCALL_ID_STAT64,
533 (unsigned int)pathname, 533 (unsigned int)pathname,
534 strlen(pathname), 534 strlen(pathname),
535 nofollow, 535 nofollow,
536 (unsigned int)st); 536 (unsigned int)st);
537 } 537 }
538 538
539 539
540 int _sos_chroot(const char *dirname) 540 int _sos_chroot(const char *dirname)
541 { 541 {
542 if (!dirname) 542 if (!dirname)
543 return -1; 543 return -1;
544 544
545 return _sos_syscall2(SOS_SYSCALL_ID_CHROOT, 545 return _sos_syscall2(SOS_SYSCALL_ID_CHROOT,
546 (unsigned int)dirname, 546 (unsigned int)dirname,
547 strlen(dirname)); 547 strlen(dirname));
548 } 548 }
549 549
550 550
551 int _sos_chdir(const char *dirname) 551 int _sos_chdir(const char *dirname)
552 { 552 {
553 if (!dirname) 553 if (!dirname)
554 return -1; 554 return -1;
555 555
556 return _sos_syscall2(SOS_SYSCALL_ID_CHDIR, 556 return _sos_syscall2(SOS_SYSCALL_ID_CHDIR,
557 (unsigned int)dirname, 557 (unsigned int)dirname,
558 strlen(dirname)); 558 strlen(dirname));
559 } 559 }
560 560
561 561
562 int _sos_fchdir(int fd) 562 int _sos_fchdir(int fd)
563 { 563 {
564 return _sos_syscall1(SOS_SYSCALL_ID_FCHDIR, 564 return _sos_syscall1(SOS_SYSCALL_ID_FCHDIR,
565 (unsigned int)fd); 565 (unsigned int)fd);
566 } 566 }