Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] remove kernel syscalls

The last thing we agreed on was to remove the macros entirely for 2.6.19,
on all architectures. Unfortunately, I think nobody actually _did_ that,
so they are still there.

[akpm@osdl.org: x86_64 fix]
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Greg Schafer <gschafer@zip.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Arnd Bergmann and committed by
Linus Torvalds
f5738cee 28ec24e2

+1 -2701
+1
arch/x86_64/kernel/vsyscall.c
··· 42 42 #include <asm/topology.h> 43 43 44 44 #define __vsyscall(nr) __attribute__ ((unused,__section__(".vsyscall_" #nr))) 45 + #define __syscall_clobber "r11","rcx","memory" 45 46 46 47 int __sysctl_vsyscall __section_sysctl_vsyscall = 1; 47 48 seqlock_t __xtime_lock __section_xtime_lock = SEQLOCK_UNLOCKED;
-182
include/asm-alpha/unistd.h
··· 387 387 388 388 #define NR_SYSCALLS 447 389 389 390 - #if defined(__GNUC__) 391 - 392 - #define _syscall_return(type) \ 393 - return (_sc_err ? errno = _sc_ret, _sc_ret = -1L : 0), (type) _sc_ret 394 - 395 - #define _syscall_clobbers \ 396 - "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \ 397 - "$22", "$23", "$24", "$25", "$27", "$28" \ 398 - 399 - #define _syscall0(type, name) \ 400 - type name(void) \ 401 - { \ 402 - long _sc_ret, _sc_err; \ 403 - { \ 404 - register long _sc_0 __asm__("$0"); \ 405 - register long _sc_19 __asm__("$19"); \ 406 - \ 407 - _sc_0 = __NR_##name; \ 408 - __asm__("callsys # %0 %1 %2" \ 409 - : "=r"(_sc_0), "=r"(_sc_19) \ 410 - : "0"(_sc_0) \ 411 - : _syscall_clobbers); \ 412 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 413 - } \ 414 - _syscall_return(type); \ 415 - } 416 - 417 - #define _syscall1(type,name,type1,arg1) \ 418 - type name(type1 arg1) \ 419 - { \ 420 - long _sc_ret, _sc_err; \ 421 - { \ 422 - register long _sc_0 __asm__("$0"); \ 423 - register long _sc_16 __asm__("$16"); \ 424 - register long _sc_19 __asm__("$19"); \ 425 - \ 426 - _sc_0 = __NR_##name; \ 427 - _sc_16 = (long) (arg1); \ 428 - __asm__("callsys # %0 %1 %2 %3" \ 429 - : "=r"(_sc_0), "=r"(_sc_19) \ 430 - : "0"(_sc_0), "r"(_sc_16) \ 431 - : _syscall_clobbers); \ 432 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 433 - } \ 434 - _syscall_return(type); \ 435 - } 436 - 437 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 438 - type name(type1 arg1,type2 arg2) \ 439 - { \ 440 - long _sc_ret, _sc_err; \ 441 - { \ 442 - register long _sc_0 __asm__("$0"); \ 443 - register long _sc_16 __asm__("$16"); \ 444 - register long _sc_17 __asm__("$17"); \ 445 - register long _sc_19 __asm__("$19"); \ 446 - \ 447 - _sc_0 = __NR_##name; \ 448 - _sc_16 = (long) (arg1); \ 449 - _sc_17 = (long) (arg2); \ 450 - __asm__("callsys # %0 %1 %2 %3 %4" \ 451 - : "=r"(_sc_0), "=r"(_sc_19) \ 452 - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17) \ 453 - : _syscall_clobbers); \ 454 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 455 - } \ 456 - _syscall_return(type); \ 457 - } 458 - 459 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 460 - type name(type1 arg1,type2 arg2,type3 arg3) \ 461 - { \ 462 - long _sc_ret, _sc_err; \ 463 - { \ 464 - register long _sc_0 __asm__("$0"); \ 465 - register long _sc_16 __asm__("$16"); \ 466 - register long _sc_17 __asm__("$17"); \ 467 - register long _sc_18 __asm__("$18"); \ 468 - register long _sc_19 __asm__("$19"); \ 469 - \ 470 - _sc_0 = __NR_##name; \ 471 - _sc_16 = (long) (arg1); \ 472 - _sc_17 = (long) (arg2); \ 473 - _sc_18 = (long) (arg3); \ 474 - __asm__("callsys # %0 %1 %2 %3 %4 %5" \ 475 - : "=r"(_sc_0), "=r"(_sc_19) \ 476 - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ 477 - "r"(_sc_18) \ 478 - : _syscall_clobbers); \ 479 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 480 - } \ 481 - _syscall_return(type); \ 482 - } 483 - 484 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 485 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 486 - { \ 487 - long _sc_ret, _sc_err; \ 488 - { \ 489 - register long _sc_0 __asm__("$0"); \ 490 - register long _sc_16 __asm__("$16"); \ 491 - register long _sc_17 __asm__("$17"); \ 492 - register long _sc_18 __asm__("$18"); \ 493 - register long _sc_19 __asm__("$19"); \ 494 - \ 495 - _sc_0 = __NR_##name; \ 496 - _sc_16 = (long) (arg1); \ 497 - _sc_17 = (long) (arg2); \ 498 - _sc_18 = (long) (arg3); \ 499 - _sc_19 = (long) (arg4); \ 500 - __asm__("callsys # %0 %1 %2 %3 %4 %5 %6" \ 501 - : "=r"(_sc_0), "=r"(_sc_19) \ 502 - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ 503 - "r"(_sc_18), "1"(_sc_19) \ 504 - : _syscall_clobbers); \ 505 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 506 - } \ 507 - _syscall_return(type); \ 508 - } 509 - 510 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 511 - type5,arg5) \ 512 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 513 - { \ 514 - long _sc_ret, _sc_err; \ 515 - { \ 516 - register long _sc_0 __asm__("$0"); \ 517 - register long _sc_16 __asm__("$16"); \ 518 - register long _sc_17 __asm__("$17"); \ 519 - register long _sc_18 __asm__("$18"); \ 520 - register long _sc_19 __asm__("$19"); \ 521 - register long _sc_20 __asm__("$20"); \ 522 - \ 523 - _sc_0 = __NR_##name; \ 524 - _sc_16 = (long) (arg1); \ 525 - _sc_17 = (long) (arg2); \ 526 - _sc_18 = (long) (arg3); \ 527 - _sc_19 = (long) (arg4); \ 528 - _sc_20 = (long) (arg5); \ 529 - __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7" \ 530 - : "=r"(_sc_0), "=r"(_sc_19) \ 531 - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ 532 - "r"(_sc_18), "1"(_sc_19), "r"(_sc_20) \ 533 - : _syscall_clobbers); \ 534 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 535 - } \ 536 - _syscall_return(type); \ 537 - } 538 - 539 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 540 - type5,arg5,type6,arg6) \ 541 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\ 542 - { \ 543 - long _sc_ret, _sc_err; \ 544 - { \ 545 - register long _sc_0 __asm__("$0"); \ 546 - register long _sc_16 __asm__("$16"); \ 547 - register long _sc_17 __asm__("$17"); \ 548 - register long _sc_18 __asm__("$18"); \ 549 - register long _sc_19 __asm__("$19"); \ 550 - register long _sc_20 __asm__("$20"); \ 551 - register long _sc_21 __asm__("$21"); \ 552 - \ 553 - _sc_0 = __NR_##name; \ 554 - _sc_16 = (long) (arg1); \ 555 - _sc_17 = (long) (arg2); \ 556 - _sc_18 = (long) (arg3); \ 557 - _sc_19 = (long) (arg4); \ 558 - _sc_20 = (long) (arg5); \ 559 - _sc_21 = (long) (arg6); \ 560 - __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7 %8" \ 561 - : "=r"(_sc_0), "=r"(_sc_19) \ 562 - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ 563 - "r"(_sc_18), "1"(_sc_19), "r"(_sc_20), "r"(_sc_21) \ 564 - : _syscall_clobbers); \ 565 - _sc_ret = _sc_0, _sc_err = _sc_19; \ 566 - } \ 567 - _syscall_return(type); \ 568 - } 569 - 570 - #endif /* __GNUC__ */ 571 - 572 390 #define __ARCH_WANT_IPC_PARSE_VERSION 573 391 #define __ARCH_WANT_OLD_READDIR 574 392 #define __ARCH_WANT_STAT64
-150
include/asm-arm/unistd.h
··· 377 377 #endif 378 378 379 379 #ifdef __KERNEL__ 380 - #include <linux/err.h> 381 - #include <linux/linkage.h> 382 - 383 - #define __sys2(x) #x 384 - #define __sys1(x) __sys2(x) 385 - 386 - #ifndef __syscall 387 - #if defined(__thumb__) || defined(__ARM_EABI__) 388 - #define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name; 389 - #define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs 390 - #define __syscall(name) "swi\t0" 391 - #else 392 - #define __SYS_REG(name) 393 - #define __SYS_REG_LIST(regs...) regs 394 - #define __syscall(name) "swi\t" __sys1(__NR_##name) "" 395 - #endif 396 - #endif 397 - 398 - #define __syscall_return(type, res) \ 399 - do { \ 400 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 401 - errno = -(res); \ 402 - res = -1; \ 403 - } \ 404 - return (type) (res); \ 405 - } while (0) 406 - 407 - #define _syscall0(type,name) \ 408 - type name(void) { \ 409 - __SYS_REG(name) \ 410 - register long __res_r0 __asm__("r0"); \ 411 - long __res; \ 412 - __asm__ __volatile__ ( \ 413 - __syscall(name) \ 414 - : "=r" (__res_r0) \ 415 - : __SYS_REG_LIST() \ 416 - : "memory" ); \ 417 - __res = __res_r0; \ 418 - __syscall_return(type,__res); \ 419 - } 420 - 421 - #define _syscall1(type,name,type1,arg1) \ 422 - type name(type1 arg1) { \ 423 - __SYS_REG(name) \ 424 - register long __r0 __asm__("r0") = (long)arg1; \ 425 - register long __res_r0 __asm__("r0"); \ 426 - long __res; \ 427 - __asm__ __volatile__ ( \ 428 - __syscall(name) \ 429 - : "=r" (__res_r0) \ 430 - : __SYS_REG_LIST( "0" (__r0) ) \ 431 - : "memory" ); \ 432 - __res = __res_r0; \ 433 - __syscall_return(type,__res); \ 434 - } 435 - 436 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 437 - type name(type1 arg1,type2 arg2) { \ 438 - __SYS_REG(name) \ 439 - register long __r0 __asm__("r0") = (long)arg1; \ 440 - register long __r1 __asm__("r1") = (long)arg2; \ 441 - register long __res_r0 __asm__("r0"); \ 442 - long __res; \ 443 - __asm__ __volatile__ ( \ 444 - __syscall(name) \ 445 - : "=r" (__res_r0) \ 446 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) \ 447 - : "memory" ); \ 448 - __res = __res_r0; \ 449 - __syscall_return(type,__res); \ 450 - } 451 - 452 - 453 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 454 - type name(type1 arg1,type2 arg2,type3 arg3) { \ 455 - __SYS_REG(name) \ 456 - register long __r0 __asm__("r0") = (long)arg1; \ 457 - register long __r1 __asm__("r1") = (long)arg2; \ 458 - register long __r2 __asm__("r2") = (long)arg3; \ 459 - register long __res_r0 __asm__("r0"); \ 460 - long __res; \ 461 - __asm__ __volatile__ ( \ 462 - __syscall(name) \ 463 - : "=r" (__res_r0) \ 464 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) \ 465 - : "memory" ); \ 466 - __res = __res_r0; \ 467 - __syscall_return(type,__res); \ 468 - } 469 - 470 - 471 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ 472 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ 473 - __SYS_REG(name) \ 474 - register long __r0 __asm__("r0") = (long)arg1; \ 475 - register long __r1 __asm__("r1") = (long)arg2; \ 476 - register long __r2 __asm__("r2") = (long)arg3; \ 477 - register long __r3 __asm__("r3") = (long)arg4; \ 478 - register long __res_r0 __asm__("r0"); \ 479 - long __res; \ 480 - __asm__ __volatile__ ( \ 481 - __syscall(name) \ 482 - : "=r" (__res_r0) \ 483 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) \ 484 - : "memory" ); \ 485 - __res = __res_r0; \ 486 - __syscall_return(type,__res); \ 487 - } 488 - 489 - 490 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 491 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ 492 - __SYS_REG(name) \ 493 - register long __r0 __asm__("r0") = (long)arg1; \ 494 - register long __r1 __asm__("r1") = (long)arg2; \ 495 - register long __r2 __asm__("r2") = (long)arg3; \ 496 - register long __r3 __asm__("r3") = (long)arg4; \ 497 - register long __r4 __asm__("r4") = (long)arg5; \ 498 - register long __res_r0 __asm__("r0"); \ 499 - long __res; \ 500 - __asm__ __volatile__ ( \ 501 - __syscall(name) \ 502 - : "=r" (__res_r0) \ 503 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ 504 - "r" (__r3), "r" (__r4) ) \ 505 - : "memory" ); \ 506 - __res = __res_r0; \ 507 - __syscall_return(type,__res); \ 508 - } 509 - 510 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ 511 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ 512 - __SYS_REG(name) \ 513 - register long __r0 __asm__("r0") = (long)arg1; \ 514 - register long __r1 __asm__("r1") = (long)arg2; \ 515 - register long __r2 __asm__("r2") = (long)arg3; \ 516 - register long __r3 __asm__("r3") = (long)arg4; \ 517 - register long __r4 __asm__("r4") = (long)arg5; \ 518 - register long __r5 __asm__("r5") = (long)arg6; \ 519 - register long __res_r0 __asm__("r0"); \ 520 - long __res; \ 521 - __asm__ __volatile__ ( \ 522 - __syscall(name) \ 523 - : "=r" (__res_r0) \ 524 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ 525 - "r" (__r3), "r" (__r4), "r" (__r5) ) \ 526 - : "memory" ); \ 527 - __res = __res_r0; \ 528 - __syscall_return(type,__res); \ 529 - } 530 380 531 381 #define __ARCH_WANT_IPC_PARSE_VERSION 532 382 #define __ARCH_WANT_STAT64
-133
include/asm-arm26/unistd.h
··· 311 311 #define __ARM_NR_usr26 (__ARM_NR_BASE+3) 312 312 313 313 #ifdef __KERNEL__ 314 - #include <linux/err.h> 315 - #include <linux/linkage.h> 316 - 317 - #define __sys2(x) #x 318 - #define __sys1(x) __sys2(x) 319 - 320 - #ifndef __syscall 321 - #define __syscall(name) "swi\t" __sys1(__NR_##name) "" 322 - #endif 323 - 324 - #define __syscall_return(type, res) \ 325 - do { \ 326 - if ((unsigned long)(res) >= (unsigned long)-MAX_ERRNO) { \ 327 - errno = -(res); \ 328 - res = -1; \ 329 - } \ 330 - return (type) (res); \ 331 - } while (0) 332 - 333 - #define _syscall0(type,name) \ 334 - type name(void) { \ 335 - register long __res_r0 __asm__("r0"); \ 336 - long __res; \ 337 - __asm__ __volatile__ ( \ 338 - __syscall(name) \ 339 - : "=r" (__res_r0) \ 340 - : \ 341 - : "lr"); \ 342 - __res = __res_r0; \ 343 - __syscall_return(type,__res); \ 344 - } 345 - 346 - #define _syscall1(type,name,type1,arg1) \ 347 - type name(type1 arg1) { \ 348 - register long __r0 __asm__("r0") = (long)arg1; \ 349 - register long __res_r0 __asm__("r0"); \ 350 - long __res; \ 351 - __asm__ __volatile__ ( \ 352 - __syscall(name) \ 353 - : "=r" (__res_r0) \ 354 - : "r" (__r0) \ 355 - : "lr"); \ 356 - __res = __res_r0; \ 357 - __syscall_return(type,__res); \ 358 - } 359 - 360 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 361 - type name(type1 arg1,type2 arg2) { \ 362 - register long __r0 __asm__("r0") = (long)arg1; \ 363 - register long __r1 __asm__("r1") = (long)arg2; \ 364 - register long __res_r0 __asm__("r0"); \ 365 - long __res; \ 366 - __asm__ __volatile__ ( \ 367 - __syscall(name) \ 368 - : "=r" (__res_r0) \ 369 - : "r" (__r0),"r" (__r1) \ 370 - : "lr"); \ 371 - __res = __res_r0; \ 372 - __syscall_return(type,__res); \ 373 - } 374 - 375 - 376 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 377 - type name(type1 arg1,type2 arg2,type3 arg3) { \ 378 - register long __r0 __asm__("r0") = (long)arg1; \ 379 - register long __r1 __asm__("r1") = (long)arg2; \ 380 - register long __r2 __asm__("r2") = (long)arg3; \ 381 - register long __res_r0 __asm__("r0"); \ 382 - long __res; \ 383 - __asm__ __volatile__ ( \ 384 - __syscall(name) \ 385 - : "=r" (__res_r0) \ 386 - : "r" (__r0),"r" (__r1),"r" (__r2) \ 387 - : "lr"); \ 388 - __res = __res_r0; \ 389 - __syscall_return(type,__res); \ 390 - } 391 - 392 - 393 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ 394 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ 395 - register long __r0 __asm__("r0") = (long)arg1; \ 396 - register long __r1 __asm__("r1") = (long)arg2; \ 397 - register long __r2 __asm__("r2") = (long)arg3; \ 398 - register long __r3 __asm__("r3") = (long)arg4; \ 399 - register long __res_r0 __asm__("r0"); \ 400 - long __res; \ 401 - __asm__ __volatile__ ( \ 402 - __syscall(name) \ 403 - : "=r" (__res_r0) \ 404 - : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3) \ 405 - : "lr"); \ 406 - __res = __res_r0; \ 407 - __syscall_return(type,__res); \ 408 - } 409 - 410 - 411 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 412 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ 413 - register long __r0 __asm__("r0") = (long)arg1; \ 414 - register long __r1 __asm__("r1") = (long)arg2; \ 415 - register long __r2 __asm__("r2") = (long)arg3; \ 416 - register long __r3 __asm__("r3") = (long)arg4; \ 417 - register long __r4 __asm__("r4") = (long)arg5; \ 418 - register long __res_r0 __asm__("r0"); \ 419 - long __res; \ 420 - __asm__ __volatile__ ( \ 421 - __syscall(name) \ 422 - : "=r" (__res_r0) \ 423 - : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3),"r" (__r4) \ 424 - : "lr"); \ 425 - __res = __res_r0; \ 426 - __syscall_return(type,__res); \ 427 - } 428 - 429 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ 430 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ 431 - register long __r0 __asm__("r0") = (long)arg1; \ 432 - register long __r1 __asm__("r1") = (long)arg2; \ 433 - register long __r2 __asm__("r2") = (long)arg3; \ 434 - register long __r3 __asm__("r3") = (long)arg4; \ 435 - register long __r4 __asm__("r4") = (long)arg5; \ 436 - register long __r5 __asm__("r5") = (long)arg6; \ 437 - register long __res_r0 __asm__("r0"); \ 438 - long __res; \ 439 - __asm__ __volatile__ ( \ 440 - __syscall(name) \ 441 - : "=r" (__res_r0) \ 442 - : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3), "r" (__r4),"r" (__r5) \ 443 - : "lr"); \ 444 - __res = __res_r0; \ 445 - __syscall_return(type,__res); \ 446 - } 447 314 448 315 #define __ARCH_WANT_IPC_PARSE_VERSION 449 316 #define __ARCH_WANT_OLD_READDIR
-119
include/asm-frv/unistd.h
··· 320 320 #ifdef __KERNEL__ 321 321 322 322 #define NR_syscalls 310 323 - #include <linux/err.h> 324 - 325 - /* 326 - * process the return value of a syscall, consigning it to one of two possible fates 327 - * - user-visible error numbers are in the range -1 - -4095: see <asm-frv/errno.h> 328 - */ 329 - #undef __syscall_return 330 - #define __syscall_return(type, res) \ 331 - do { \ 332 - unsigned long __sr2 = (res); \ 333 - if (__builtin_expect(__sr2 >= (unsigned long)(-MAX_ERRNO), 0)) { \ 334 - errno = (-__sr2); \ 335 - __sr2 = ~0UL; \ 336 - } \ 337 - return (type) __sr2; \ 338 - } while (0) 339 - 340 - /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ 341 - 342 - #undef _syscall0 343 - #define _syscall0(type,name) \ 344 - type name(void) \ 345 - { \ 346 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 347 - register unsigned long __sc0 __asm__ ("gr8"); \ 348 - __asm__ __volatile__ ("tira gr0,#0" \ 349 - : "=r" (__sc0) \ 350 - : "r" (__scnum)); \ 351 - __syscall_return(type, __sc0); \ 352 - } 353 - 354 - #undef _syscall1 355 - #define _syscall1(type,name,type1,arg1) \ 356 - type name(type1 arg1) \ 357 - { \ 358 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 359 - register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ 360 - __asm__ __volatile__ ("tira gr0,#0" \ 361 - : "+r" (__sc0) \ 362 - : "r" (__scnum)); \ 363 - __syscall_return(type, __sc0); \ 364 - } 365 - 366 - #undef _syscall2 367 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 368 - type name(type1 arg1,type2 arg2) \ 369 - { \ 370 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 371 - register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ 372 - register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ 373 - __asm__ __volatile__ ("tira gr0,#0" \ 374 - : "+r" (__sc0) \ 375 - : "r" (__scnum), "r" (__sc1)); \ 376 - __syscall_return(type, __sc0); \ 377 - } 378 - 379 - #undef _syscall3 380 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 381 - type name(type1 arg1,type2 arg2,type3 arg3) \ 382 - { \ 383 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 384 - register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ 385 - register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ 386 - register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ 387 - __asm__ __volatile__ ("tira gr0,#0" \ 388 - : "+r" (__sc0) \ 389 - : "r" (__scnum), "r" (__sc1), "r" (__sc2)); \ 390 - __syscall_return(type, __sc0); \ 391 - } 392 - 393 - #undef _syscall4 394 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 395 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 396 - { \ 397 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 398 - register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ 399 - register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ 400 - register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ 401 - register unsigned long __sc3 __asm__ ("gr11") = (unsigned long) arg4; \ 402 - __asm__ __volatile__ ("tira gr0,#0" \ 403 - : "+r" (__sc0) \ 404 - : "r" (__scnum), "r" (__sc1), "r" (__sc2), "r" (__sc3)); \ 405 - __syscall_return(type, __sc0); \ 406 - } 407 - 408 - #undef _syscall5 409 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 410 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ 411 - { \ 412 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 413 - register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ 414 - register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ 415 - register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ 416 - register unsigned long __sc3 __asm__ ("gr11") = (unsigned long) arg4; \ 417 - register unsigned long __sc4 __asm__ ("gr12") = (unsigned long) arg5; \ 418 - __asm__ __volatile__ ("tira gr0,#0" \ 419 - : "+r" (__sc0) \ 420 - : "r" (__scnum), "r" (__sc1), "r" (__sc2), \ 421 - "r" (__sc3), "r" (__sc4)); \ 422 - __syscall_return(type, __sc0); \ 423 - } 424 - 425 - #undef _syscall6 426 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5, type6, arg6) \ 427 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ 428 - { \ 429 - register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ 430 - register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ 431 - register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ 432 - register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ 433 - register unsigned long __sc3 __asm__ ("gr11") = (unsigned long) arg4; \ 434 - register unsigned long __sc4 __asm__ ("gr12") = (unsigned long) arg5; \ 435 - register unsigned long __sc5 __asm__ ("gr13") = (unsigned long) arg6; \ 436 - __asm__ __volatile__ ("tira gr0,#0" \ 437 - : "+r" (__sc0) \ 438 - : "r" (__scnum), "r" (__sc1), "r" (__sc2), \ 439 - "r" (__sc3), "r" (__sc4), "r" (__sc5)); \ 440 - __syscall_return(type, __sc0); \ 441 - } 442 323 443 324 #define __ARCH_WANT_IPC_PARSE_VERSION 444 325 /* #define __ARCH_WANT_OLD_READDIR */
-166
include/asm-h8300/unistd.h
··· 295 295 #ifdef __KERNEL__ 296 296 297 297 #define NR_syscalls 289 298 - #include <linux/err.h> 299 - 300 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see 301 - <asm-m68k/errno.h> */ 302 - 303 - #define __syscall_return(type, res) \ 304 - do { \ 305 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 306 - /* avoid using res which is declared to be in register d0; \ 307 - errno might expand to a function call and clobber it. */ \ 308 - int __err = -(res); \ 309 - errno = __err; \ 310 - res = -1; \ 311 - } \ 312 - return (type) (res); \ 313 - } while (0) 314 - 315 - #define _syscall0(type, name) \ 316 - type name(void) \ 317 - { \ 318 - register long __res __asm__("er0"); \ 319 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 320 - "trapa #0\n\t" \ 321 - : "=r" (__res) \ 322 - : "g" (__NR_##name) \ 323 - : "cc", "memory"); \ 324 - __syscall_return(type, __res); \ 325 - } 326 - 327 - #define _syscall1(type, name, atype, a) \ 328 - type name(atype a) \ 329 - { \ 330 - register long __res __asm__("er0"); \ 331 - register long _a __asm__("er1"); \ 332 - _a = (long)a; \ 333 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 334 - "trapa #0\n\t" \ 335 - : "=r" (__res) \ 336 - : "g" (__NR_##name), \ 337 - "g" (_a) \ 338 - : "cc", "memory"); \ 339 - __syscall_return(type, __res); \ 340 - } 341 - 342 - #define _syscall2(type, name, atype, a, btype, b) \ 343 - type name(atype a, btype b) \ 344 - { \ 345 - register long __res __asm__("er0"); \ 346 - register long _a __asm__("er1"); \ 347 - register long _b __asm__("er2"); \ 348 - _a = (long)a; \ 349 - _b = (long)b; \ 350 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 351 - "trapa #0\n\t" \ 352 - : "=r" (__res) \ 353 - : "g" (__NR_##name), \ 354 - "g" (_a), \ 355 - "g" (_b) \ 356 - : "cc", "memory"); \ 357 - __syscall_return(type, __res); \ 358 - } 359 - 360 - #define _syscall3(type, name, atype, a, btype, b, ctype, c) \ 361 - type name(atype a, btype b, ctype c) \ 362 - { \ 363 - register long __res __asm__("er0"); \ 364 - register long _a __asm__("er1"); \ 365 - register long _b __asm__("er2"); \ 366 - register long _c __asm__("er3"); \ 367 - _a = (long)a; \ 368 - _b = (long)b; \ 369 - _c = (long)c; \ 370 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 371 - "trapa #0\n\t" \ 372 - : "=r" (__res) \ 373 - : "g" (__NR_##name), \ 374 - "g" (_a), \ 375 - "g" (_b), \ 376 - "g" (_c) \ 377 - : "cc", "memory"); \ 378 - __syscall_return(type, __res); \ 379 - } 380 - 381 - #define _syscall4(type, name, atype, a, btype, b, \ 382 - ctype, c, dtype, d) \ 383 - type name(atype a, btype b, ctype c, dtype d) \ 384 - { \ 385 - register long __res __asm__("er0"); \ 386 - register long _a __asm__("er1"); \ 387 - register long _b __asm__("er2"); \ 388 - register long _c __asm__("er3"); \ 389 - register long _d __asm__("er4"); \ 390 - _a = (long)a; \ 391 - _b = (long)b; \ 392 - _c = (long)c; \ 393 - _d = (long)d; \ 394 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 395 - "trapa #0\n\t" \ 396 - : "=r" (__res) \ 397 - : "g" (__NR_##name), \ 398 - "g" (_a), \ 399 - "g" (_b), \ 400 - "g" (_c), \ 401 - "g" (_d) \ 402 - : "cc", "memory"); \ 403 - __syscall_return(type, __res); \ 404 - } 405 - 406 - #define _syscall5(type, name, atype, a, btype, b, \ 407 - ctype, c, dtype, d, etype, e) \ 408 - type name(atype a, btype b, ctype c, dtype d, etype e) \ 409 - { \ 410 - register long __res __asm__("er0"); \ 411 - register long _a __asm__("er1"); \ 412 - register long _b __asm__("er2"); \ 413 - register long _c __asm__("er3"); \ 414 - register long _d __asm__("er4"); \ 415 - register long _e __asm__("er5"); \ 416 - _a = (long)a; \ 417 - _b = (long)b; \ 418 - _c = (long)c; \ 419 - _d = (long)d; \ 420 - _e = (long)e; \ 421 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 422 - "trapa #0\n\t" \ 423 - : "=r" (__res) \ 424 - : "g" (__NR_##name), \ 425 - "g" (_a), \ 426 - "g" (_b), \ 427 - "g" (_c), \ 428 - "g" (_d), \ 429 - "g" (_e) \ 430 - : "cc", "memory"); \ 431 - __syscall_return(type, __res); \ 432 - } 433 - 434 - #define _syscall6(type, name, atype, a, btype, b, \ 435 - ctype, c, dtype, d, etype, e, ftype, f) \ 436 - type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \ 437 - { \ 438 - register long __res __asm__("er0"); \ 439 - register long _a __asm__("er1"); \ 440 - register long _b __asm__("er2"); \ 441 - register long _c __asm__("er3"); \ 442 - register long _d __asm__("er4"); \ 443 - register long _e __asm__("er5"); \ 444 - register long _f __asm__("er6"); \ 445 - _a = (long)a; \ 446 - _b = (long)b; \ 447 - _c = (long)c; \ 448 - _d = (long)d; \ 449 - _e = (long)e; \ 450 - _f = (long)f; \ 451 - __asm__ __volatile__ ("mov.l %1,er0\n\t" \ 452 - "trapa #0\n\t" \ 453 - : "=r" (__res) \ 454 - : "g" (__NR_##name), \ 455 - "g" (_a), \ 456 - "g" (_b), \ 457 - "g" (_c), \ 458 - "g" (_d), \ 459 - "g" (_e) \ 460 - "g" (_f) \ 461 - : "cc", "memory"); \ 462 - __syscall_return(type, __res); \ 463 - } 464 298 465 299 #define __ARCH_WANT_IPC_PARSE_VERSION 466 300 #define __ARCH_WANT_OLD_READDIR
-98
include/asm-i386/unistd.h
··· 329 329 #ifdef __KERNEL__ 330 330 331 331 #define NR_syscalls 320 332 - #include <linux/err.h> 333 - 334 - /* 335 - * user-visible error numbers are in the range -1 - -MAX_ERRNO: see 336 - * <asm-i386/errno.h> 337 - */ 338 - #define __syscall_return(type, res) \ 339 - do { \ 340 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 341 - errno = -(res); \ 342 - res = -1; \ 343 - } \ 344 - return (type) (res); \ 345 - } while (0) 346 - 347 - /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ 348 - #define _syscall0(type,name) \ 349 - type name(void) \ 350 - { \ 351 - long __res; \ 352 - __asm__ volatile ("int $0x80" \ 353 - : "=a" (__res) \ 354 - : "0" (__NR_##name)); \ 355 - __syscall_return(type,__res); \ 356 - } 357 - 358 - #define _syscall1(type,name,type1,arg1) \ 359 - type name(type1 arg1) \ 360 - { \ 361 - long __res; \ 362 - __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ 363 - : "=a" (__res) \ 364 - : "0" (__NR_##name),"ri" ((long)(arg1)) : "memory"); \ 365 - __syscall_return(type,__res); \ 366 - } 367 - 368 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 369 - type name(type1 arg1,type2 arg2) \ 370 - { \ 371 - long __res; \ 372 - __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ 373 - : "=a" (__res) \ 374 - : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)) \ 375 - : "memory"); \ 376 - __syscall_return(type,__res); \ 377 - } 378 - 379 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 380 - type name(type1 arg1,type2 arg2,type3 arg3) \ 381 - { \ 382 - long __res; \ 383 - __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ 384 - : "=a" (__res) \ 385 - : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ 386 - "d" ((long)(arg3)) : "memory"); \ 387 - __syscall_return(type,__res); \ 388 - } 389 - 390 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 391 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 392 - { \ 393 - long __res; \ 394 - __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ 395 - : "=a" (__res) \ 396 - : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ 397 - "d" ((long)(arg3)),"S" ((long)(arg4)) : "memory"); \ 398 - __syscall_return(type,__res); \ 399 - } 400 - 401 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 402 - type5,arg5) \ 403 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 404 - { \ 405 - long __res; \ 406 - __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; movl %1,%%eax ; " \ 407 - "int $0x80 ; pop %%ebx" \ 408 - : "=a" (__res) \ 409 - : "i" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ 410 - "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) \ 411 - : "memory"); \ 412 - __syscall_return(type,__res); \ 413 - } 414 - 415 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 416 - type5,arg5,type6,arg6) \ 417 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ 418 - { \ 419 - long __res; \ 420 - struct { long __a1; long __a6; } __s = { (long)arg1, (long)arg6 }; \ 421 - __asm__ volatile ("push %%ebp ; push %%ebx ; movl 4(%2),%%ebp ; " \ 422 - "movl 0(%2),%%ebx ; movl %1,%%eax ; int $0x80 ; " \ 423 - "pop %%ebx ; pop %%ebp" \ 424 - : "=a" (__res) \ 425 - : "i" (__NR_##name),"0" ((long)(&__s)),"c" ((long)(arg2)), \ 426 - "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) \ 427 - : "memory"); \ 428 - __syscall_return(type,__res); \ 429 - } 430 332 431 333 #define __ARCH_WANT_IPC_PARSE_VERSION 432 334 #define __ARCH_WANT_OLD_READDIR
-111
include/asm-m32r/unistd.h
··· 296 296 #ifdef __KERNEL__ 297 297 298 298 #define NR_syscalls 285 299 - #include <linux/err.h> 300 - 301 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see 302 - * <asm-m32r/errno.h> 303 - */ 304 - 305 - #include <asm/syscall.h> /* SYSCALL_* */ 306 - 307 - #define __syscall_return(type, res) \ 308 - do { \ 309 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 310 - /* Avoid using "res" which is declared to be in register r0; \ 311 - errno might expand to a function call and clobber it. */ \ 312 - int __err = -(res); \ 313 - errno = __err; \ 314 - res = -1; \ 315 - } \ 316 - return (type) (res); \ 317 - } while (0) 318 - 319 - #define _syscall0(type,name) \ 320 - type name(void) \ 321 - { \ 322 - register long __scno __asm__ ("r7") = __NR_##name; \ 323 - register long __res __asm__("r0"); \ 324 - __asm__ __volatile__ (\ 325 - "trap #" SYSCALL_VECTOR "|| nop"\ 326 - : "=r" (__res) \ 327 - : "r" (__scno) \ 328 - : "memory"); \ 329 - __syscall_return(type,__res); \ 330 - } 331 - 332 - #define _syscall1(type,name,type1,arg1) \ 333 - type name(type1 arg1) \ 334 - { \ 335 - register long __scno __asm__ ("r7") = __NR_##name; \ 336 - register long __res __asm__ ("r0") = (long)(arg1); \ 337 - __asm__ __volatile__ (\ 338 - "trap #" SYSCALL_VECTOR "|| nop"\ 339 - : "=r" (__res) \ 340 - : "r" (__scno), "0" (__res) \ 341 - : "memory"); \ 342 - __syscall_return(type,__res); \ 343 - } 344 - 345 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 346 - type name(type1 arg1,type2 arg2) \ 347 - { \ 348 - register long __scno __asm__ ("r7") = __NR_##name; \ 349 - register long __arg2 __asm__ ("r1") = (long)(arg2); \ 350 - register long __res __asm__ ("r0") = (long)(arg1); \ 351 - __asm__ __volatile__ (\ 352 - "trap #" SYSCALL_VECTOR "|| nop"\ 353 - : "=r" (__res) \ 354 - : "r" (__scno), "0" (__res), "r" (__arg2) \ 355 - : "memory"); \ 356 - __syscall_return(type,__res); \ 357 - } 358 - 359 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 360 - type name(type1 arg1,type2 arg2,type3 arg3) \ 361 - { \ 362 - register long __scno __asm__ ("r7") = __NR_##name; \ 363 - register long __arg3 __asm__ ("r2") = (long)(arg3); \ 364 - register long __arg2 __asm__ ("r1") = (long)(arg2); \ 365 - register long __res __asm__ ("r0") = (long)(arg1); \ 366 - __asm__ __volatile__ (\ 367 - "trap #" SYSCALL_VECTOR "|| nop"\ 368 - : "=r" (__res) \ 369 - : "r" (__scno), "0" (__res), "r" (__arg2), \ 370 - "r" (__arg3) \ 371 - : "memory"); \ 372 - __syscall_return(type,__res); \ 373 - } 374 - 375 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 376 - type name(type1 arg1,type2 arg2,type3 arg3,type4 arg4) \ 377 - { \ 378 - register long __scno __asm__ ("r7") = __NR_##name; \ 379 - register long __arg4 __asm__ ("r3") = (long)(arg4); \ 380 - register long __arg3 __asm__ ("r2") = (long)(arg3); \ 381 - register long __arg2 __asm__ ("r1") = (long)(arg2); \ 382 - register long __res __asm__ ("r0") = (long)(arg1); \ 383 - __asm__ __volatile__ (\ 384 - "trap #" SYSCALL_VECTOR "|| nop"\ 385 - : "=r" (__res) \ 386 - : "r" (__scno), "0" (__res), "r" (__arg2), \ 387 - "r" (__arg3), "r" (__arg4) \ 388 - : "memory"); \ 389 - __syscall_return(type,__res); \ 390 - } 391 - 392 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 393 - type5,arg5) \ 394 - type name(type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 395 - { \ 396 - register long __scno __asm__ ("r7") = __NR_##name; \ 397 - register long __arg5 __asm__ ("r4") = (long)(arg5); \ 398 - register long __arg4 __asm__ ("r3") = (long)(arg4); \ 399 - register long __arg3 __asm__ ("r2") = (long)(arg3); \ 400 - register long __arg2 __asm__ ("r1") = (long)(arg2); \ 401 - register long __res __asm__ ("r0") = (long)(arg1); \ 402 - __asm__ __volatile__ (\ 403 - "trap #" SYSCALL_VECTOR "|| nop"\ 404 - : "=r" (__res) \ 405 - : "r" (__scno), "0" (__res), "r" (__arg2), \ 406 - "r" (__arg3), "r" (__arg4), "r" (__arg5) \ 407 - : "memory"); \ 408 - __syscall_return(type,__res); \ 409 - } 410 299 411 300 #define __ARCH_WANT_IPC_PARSE_VERSION 412 301 #define __ARCH_WANT_STAT64
-97
include/asm-m68k/unistd.h
··· 317 317 #ifdef __KERNEL__ 318 318 319 319 #define NR_syscalls 311 320 - #include <linux/err.h> 321 - 322 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see 323 - <asm-m68k/errno.h> */ 324 - 325 - #define __syscall_return(type, res) \ 326 - do { \ 327 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 328 - /* avoid using res which is declared to be in register d0; \ 329 - errno might expand to a function call and clobber it. */ \ 330 - int __err = -(res); \ 331 - errno = __err; \ 332 - res = -1; \ 333 - } \ 334 - return (type) (res); \ 335 - } while (0) 336 - 337 - #define _syscall0(type,name) \ 338 - type name(void) \ 339 - { \ 340 - register long __res __asm__ ("%d0") = __NR_##name; \ 341 - __asm__ __volatile__ ("trap #0" \ 342 - : "+d" (__res) ); \ 343 - __syscall_return(type,__res); \ 344 - } 345 - 346 - #define _syscall1(type,name,atype,a) \ 347 - type name(atype a) \ 348 - { \ 349 - register long __res __asm__ ("%d0") = __NR_##name; \ 350 - register long __a __asm__ ("%d1") = (long)(a); \ 351 - __asm__ __volatile__ ("trap #0" \ 352 - : "+d" (__res) \ 353 - : "d" (__a) ); \ 354 - __syscall_return(type,__res); \ 355 - } 356 - 357 - #define _syscall2(type,name,atype,a,btype,b) \ 358 - type name(atype a,btype b) \ 359 - { \ 360 - register long __res __asm__ ("%d0") = __NR_##name; \ 361 - register long __a __asm__ ("%d1") = (long)(a); \ 362 - register long __b __asm__ ("%d2") = (long)(b); \ 363 - __asm__ __volatile__ ("trap #0" \ 364 - : "+d" (__res) \ 365 - : "d" (__a), "d" (__b) \ 366 - ); \ 367 - __syscall_return(type,__res); \ 368 - } 369 - 370 - #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ 371 - type name(atype a,btype b,ctype c) \ 372 - { \ 373 - register long __res __asm__ ("%d0") = __NR_##name; \ 374 - register long __a __asm__ ("%d1") = (long)(a); \ 375 - register long __b __asm__ ("%d2") = (long)(b); \ 376 - register long __c __asm__ ("%d3") = (long)(c); \ 377 - __asm__ __volatile__ ("trap #0" \ 378 - : "+d" (__res) \ 379 - : "d" (__a), "d" (__b), \ 380 - "d" (__c) \ 381 - ); \ 382 - __syscall_return(type,__res); \ 383 - } 384 - 385 - #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ 386 - type name (atype a, btype b, ctype c, dtype d) \ 387 - { \ 388 - register long __res __asm__ ("%d0") = __NR_##name; \ 389 - register long __a __asm__ ("%d1") = (long)(a); \ 390 - register long __b __asm__ ("%d2") = (long)(b); \ 391 - register long __c __asm__ ("%d3") = (long)(c); \ 392 - register long __d __asm__ ("%d4") = (long)(d); \ 393 - __asm__ __volatile__ ("trap #0" \ 394 - : "+d" (__res) \ 395 - : "d" (__a), "d" (__b), \ 396 - "d" (__c), "d" (__d) \ 397 - ); \ 398 - __syscall_return(type,__res); \ 399 - } 400 - 401 - #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ 402 - type name (atype a,btype b,ctype c,dtype d,etype e) \ 403 - { \ 404 - register long __res __asm__ ("%d0") = __NR_##name; \ 405 - register long __a __asm__ ("%d1") = (long)(a); \ 406 - register long __b __asm__ ("%d2") = (long)(b); \ 407 - register long __c __asm__ ("%d3") = (long)(c); \ 408 - register long __d __asm__ ("%d4") = (long)(d); \ 409 - register long __e __asm__ ("%d5") = (long)(e); \ 410 - __asm__ __volatile__ ("trap #0" \ 411 - : "+d" (__res) \ 412 - : "d" (__a), "d" (__b), \ 413 - "d" (__c), "d" (__d), "d" (__e) \ 414 - ); \ 415 - __syscall_return(type,__res); \ 416 - } 417 320 418 321 #define __ARCH_WANT_IPC_PARSE_VERSION 419 322 #define __ARCH_WANT_OLD_READDIR
-150
include/asm-m68knommu/unistd.h
··· 318 318 #ifdef __KERNEL__ 319 319 320 320 #define NR_syscalls 311 321 - #include <linux/err.h> 322 - 323 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see 324 - <asm-m68k/errno.h> */ 325 - 326 - #define __syscall_return(type, res) \ 327 - do { \ 328 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 329 - /* avoid using res which is declared to be in register d0; \ 330 - errno might expand to a function call and clobber it. */ \ 331 - int __err = -(res); \ 332 - errno = __err; \ 333 - res = -1; \ 334 - } \ 335 - return (type) (res); \ 336 - } while (0) 337 - 338 - #define _syscall0(type, name) \ 339 - type name(void) \ 340 - { \ 341 - long __res; \ 342 - __asm__ __volatile__ ("movel %1, %%d0\n\t" \ 343 - "trap #0\n\t" \ 344 - "movel %%d0, %0" \ 345 - : "=g" (__res) \ 346 - : "i" (__NR_##name) \ 347 - : "cc", "%d0"); \ 348 - if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ 349 - errno = -__res; \ 350 - __res = -1; \ 351 - } \ 352 - return (type)__res; \ 353 - } 354 - 355 - #define _syscall1(type, name, atype, a) \ 356 - type name(atype a) \ 357 - { \ 358 - long __res; \ 359 - __asm__ __volatile__ ("movel %2, %%d1\n\t" \ 360 - "movel %1, %%d0\n\t" \ 361 - "trap #0\n\t" \ 362 - "movel %%d0, %0" \ 363 - : "=g" (__res) \ 364 - : "i" (__NR_##name), \ 365 - "g" ((long)a) \ 366 - : "cc", "%d0", "%d1"); \ 367 - if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ 368 - errno = -__res; \ 369 - __res = -1; \ 370 - } \ 371 - return (type)__res; \ 372 - } 373 - 374 - #define _syscall2(type, name, atype, a, btype, b) \ 375 - type name(atype a, btype b) \ 376 - { \ 377 - long __res; \ 378 - __asm__ __volatile__ ("movel %3, %%d2\n\t" \ 379 - "movel %2, %%d1\n\t" \ 380 - "movel %1, %%d0\n\t" \ 381 - "trap #0\n\t" \ 382 - "movel %%d0, %0" \ 383 - : "=g" (__res) \ 384 - : "i" (__NR_##name), \ 385 - "a" ((long)a), \ 386 - "g" ((long)b) \ 387 - : "cc", "%d0", "%d1", "%d2"); \ 388 - if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ 389 - errno = -__res; \ 390 - __res = -1; \ 391 - } \ 392 - return (type)__res; \ 393 - } 394 - 395 - #define _syscall3(type, name, atype, a, btype, b, ctype, c) \ 396 - type name(atype a, btype b, ctype c) \ 397 - { \ 398 - long __res; \ 399 - __asm__ __volatile__ ("movel %4, %%d3\n\t" \ 400 - "movel %3, %%d2\n\t" \ 401 - "movel %2, %%d1\n\t" \ 402 - "movel %1, %%d0\n\t" \ 403 - "trap #0\n\t" \ 404 - "movel %%d0, %0" \ 405 - : "=g" (__res) \ 406 - : "i" (__NR_##name), \ 407 - "a" ((long)a), \ 408 - "a" ((long)b), \ 409 - "g" ((long)c) \ 410 - : "cc", "%d0", "%d1", "%d2", "%d3"); \ 411 - if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ 412 - errno = -__res; \ 413 - __res = -1; \ 414 - } \ 415 - return (type)__res; \ 416 - } 417 - 418 - #define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d) \ 419 - type name(atype a, btype b, ctype c, dtype d) \ 420 - { \ 421 - long __res; \ 422 - __asm__ __volatile__ ("movel %5, %%d4\n\t" \ 423 - "movel %4, %%d3\n\t" \ 424 - "movel %3, %%d2\n\t" \ 425 - "movel %2, %%d1\n\t" \ 426 - "movel %1, %%d0\n\t" \ 427 - "trap #0\n\t" \ 428 - "movel %%d0, %0" \ 429 - : "=g" (__res) \ 430 - : "i" (__NR_##name), \ 431 - "a" ((long)a), \ 432 - "a" ((long)b), \ 433 - "a" ((long)c), \ 434 - "g" ((long)d) \ 435 - : "cc", "%d0", "%d1", "%d2", "%d3", \ 436 - "%d4"); \ 437 - if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ 438 - errno = -__res; \ 439 - __res = -1; \ 440 - } \ 441 - return (type)__res; \ 442 - } 443 - 444 - #define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e) \ 445 - type name(atype a, btype b, ctype c, dtype d, etype e) \ 446 - { \ 447 - long __res; \ 448 - __asm__ __volatile__ ("movel %6, %%d5\n\t" \ 449 - "movel %5, %%d4\n\t" \ 450 - "movel %4, %%d3\n\t" \ 451 - "movel %3, %%d2\n\t" \ 452 - "movel %2, %%d1\n\t" \ 453 - "movel %1, %%d0\n\t" \ 454 - "trap #0\n\t" \ 455 - "movel %%d0, %0" \ 456 - : "=g" (__res) \ 457 - : "i" (__NR_##name), \ 458 - "a" ((long)a), \ 459 - "a" ((long)b), \ 460 - "a" ((long)c), \ 461 - "a" ((long)d), \ 462 - "g" ((long)e) \ 463 - : "cc", "%d0", "%d1", "%d2", "%d3", \ 464 - "%d4", "%d5"); \ 465 - if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ 466 - errno = -__res; \ 467 - __res = -1; \ 468 - } \ 469 - return (type)__res; \ 470 - } 471 321 472 322 #define __ARCH_WANT_IPC_PARSE_VERSION 473 323 #define __ARCH_WANT_OLD_READDIR
-262
include/asm-mips/unistd.h
··· 933 933 934 934 #ifndef __ASSEMBLY__ 935 935 936 - /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ 937 - #define _syscall0(type,name) \ 938 - type name(void) \ 939 - { \ 940 - register unsigned long __a3 asm("$7"); \ 941 - unsigned long __v0; \ 942 - \ 943 - __asm__ volatile ( \ 944 - ".set\tnoreorder\n\t" \ 945 - "li\t$2, %2\t\t\t# " #name "\n\t" \ 946 - "syscall\n\t" \ 947 - "move\t%0, $2\n\t" \ 948 - ".set\treorder" \ 949 - : "=&r" (__v0), "=r" (__a3) \ 950 - : "i" (__NR_##name) \ 951 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 952 - "memory"); \ 953 - \ 954 - if (__a3 == 0) \ 955 - return (type) __v0; \ 956 - errno = __v0; \ 957 - return (type) -1; \ 958 - } 959 - 960 - /* 961 - * DANGER: This macro isn't usable for the pipe(2) call 962 - * which has a unusual return convention. 963 - */ 964 - #define _syscall1(type,name,atype,a) \ 965 - type name(atype a) \ 966 - { \ 967 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 968 - register unsigned long __a3 asm("$7"); \ 969 - unsigned long __v0; \ 970 - \ 971 - __asm__ volatile ( \ 972 - ".set\tnoreorder\n\t" \ 973 - "li\t$2, %3\t\t\t# " #name "\n\t" \ 974 - "syscall\n\t" \ 975 - "move\t%0, $2\n\t" \ 976 - ".set\treorder" \ 977 - : "=&r" (__v0), "=r" (__a3) \ 978 - : "r" (__a0), "i" (__NR_##name) \ 979 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 980 - "memory"); \ 981 - \ 982 - if (__a3 == 0) \ 983 - return (type) __v0; \ 984 - errno = __v0; \ 985 - return (type) -1; \ 986 - } 987 - 988 - #define _syscall2(type,name,atype,a,btype,b) \ 989 - type name(atype a, btype b) \ 990 - { \ 991 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 992 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 993 - register unsigned long __a3 asm("$7"); \ 994 - unsigned long __v0; \ 995 - \ 996 - __asm__ volatile ( \ 997 - ".set\tnoreorder\n\t" \ 998 - "li\t$2, %4\t\t\t# " #name "\n\t" \ 999 - "syscall\n\t" \ 1000 - "move\t%0, $2\n\t" \ 1001 - ".set\treorder" \ 1002 - : "=&r" (__v0), "=r" (__a3) \ 1003 - : "r" (__a0), "r" (__a1), "i" (__NR_##name) \ 1004 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1005 - "memory"); \ 1006 - \ 1007 - if (__a3 == 0) \ 1008 - return (type) __v0; \ 1009 - errno = __v0; \ 1010 - return (type) -1; \ 1011 - } 1012 - 1013 - #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ 1014 - type name(atype a, btype b, ctype c) \ 1015 - { \ 1016 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 1017 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 1018 - register unsigned long __a2 asm("$6") = (unsigned long) c; \ 1019 - register unsigned long __a3 asm("$7"); \ 1020 - unsigned long __v0; \ 1021 - \ 1022 - __asm__ volatile ( \ 1023 - ".set\tnoreorder\n\t" \ 1024 - "li\t$2, %5\t\t\t# " #name "\n\t" \ 1025 - "syscall\n\t" \ 1026 - "move\t%0, $2\n\t" \ 1027 - ".set\treorder" \ 1028 - : "=&r" (__v0), "=r" (__a3) \ 1029 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \ 1030 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1031 - "memory"); \ 1032 - \ 1033 - if (__a3 == 0) \ 1034 - return (type) __v0; \ 1035 - errno = __v0; \ 1036 - return (type) -1; \ 1037 - } 1038 - 1039 - #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ 1040 - type name(atype a, btype b, ctype c, dtype d) \ 1041 - { \ 1042 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 1043 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 1044 - register unsigned long __a2 asm("$6") = (unsigned long) c; \ 1045 - register unsigned long __a3 asm("$7") = (unsigned long) d; \ 1046 - unsigned long __v0; \ 1047 - \ 1048 - __asm__ volatile ( \ 1049 - ".set\tnoreorder\n\t" \ 1050 - "li\t$2, %5\t\t\t# " #name "\n\t" \ 1051 - "syscall\n\t" \ 1052 - "move\t%0, $2\n\t" \ 1053 - ".set\treorder" \ 1054 - : "=&r" (__v0), "+r" (__a3) \ 1055 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \ 1056 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1057 - "memory"); \ 1058 - \ 1059 - if (__a3 == 0) \ 1060 - return (type) __v0; \ 1061 - errno = __v0; \ 1062 - return (type) -1; \ 1063 - } 1064 - 1065 - #if (_MIPS_SIM == _MIPS_SIM_ABI32) 1066 - 1067 - /* 1068 - * Using those means your brain needs more than an oil change ;-) 1069 - */ 1070 - 1071 - #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ 1072 - type name(atype a, btype b, ctype c, dtype d, etype e) \ 1073 - { \ 1074 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 1075 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 1076 - register unsigned long __a2 asm("$6") = (unsigned long) c; \ 1077 - register unsigned long __a3 asm("$7") = (unsigned long) d; \ 1078 - unsigned long __v0; \ 1079 - \ 1080 - __asm__ volatile ( \ 1081 - ".set\tnoreorder\n\t" \ 1082 - "lw\t$2, %6\n\t" \ 1083 - "subu\t$29, 32\n\t" \ 1084 - "sw\t$2, 16($29)\n\t" \ 1085 - "li\t$2, %5\t\t\t# " #name "\n\t" \ 1086 - "syscall\n\t" \ 1087 - "move\t%0, $2\n\t" \ 1088 - "addiu\t$29, 32\n\t" \ 1089 - ".set\treorder" \ 1090 - : "=&r" (__v0), "+r" (__a3) \ 1091 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \ 1092 - "m" ((unsigned long)e) \ 1093 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1094 - "memory"); \ 1095 - \ 1096 - if (__a3 == 0) \ 1097 - return (type) __v0; \ 1098 - errno = __v0; \ 1099 - return (type) -1; \ 1100 - } 1101 - 1102 - #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ 1103 - type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \ 1104 - { \ 1105 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 1106 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 1107 - register unsigned long __a2 asm("$6") = (unsigned long) c; \ 1108 - register unsigned long __a3 asm("$7") = (unsigned long) d; \ 1109 - unsigned long __v0; \ 1110 - \ 1111 - __asm__ volatile ( \ 1112 - ".set\tnoreorder\n\t" \ 1113 - "lw\t$2, %6\n\t" \ 1114 - "lw\t$8, %7\n\t" \ 1115 - "subu\t$29, 32\n\t" \ 1116 - "sw\t$2, 16($29)\n\t" \ 1117 - "sw\t$8, 20($29)\n\t" \ 1118 - "li\t$2, %5\t\t\t# " #name "\n\t" \ 1119 - "syscall\n\t" \ 1120 - "move\t%0, $2\n\t" \ 1121 - "addiu\t$29, 32\n\t" \ 1122 - ".set\treorder" \ 1123 - : "=&r" (__v0), "+r" (__a3) \ 1124 - : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \ 1125 - "m" ((unsigned long)e), "m" ((unsigned long)f) \ 1126 - : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1127 - "memory"); \ 1128 - \ 1129 - if (__a3 == 0) \ 1130 - return (type) __v0; \ 1131 - errno = __v0; \ 1132 - return (type) -1; \ 1133 - } 1134 - 1135 - #endif /* (_MIPS_SIM == _MIPS_SIM_ABI32) */ 1136 - 1137 - #if (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) 1138 - 1139 - #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ 1140 - type name (atype a,btype b,ctype c,dtype d,etype e) \ 1141 - { \ 1142 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 1143 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 1144 - register unsigned long __a2 asm("$6") = (unsigned long) c; \ 1145 - register unsigned long __a3 asm("$7") = (unsigned long) d; \ 1146 - register unsigned long __a4 asm("$8") = (unsigned long) e; \ 1147 - unsigned long __v0; \ 1148 - \ 1149 - __asm__ volatile ( \ 1150 - ".set\tnoreorder\n\t" \ 1151 - "li\t$2, %6\t\t\t# " #name "\n\t" \ 1152 - "syscall\n\t" \ 1153 - "move\t%0, $2\n\t" \ 1154 - ".set\treorder" \ 1155 - : "=&r" (__v0), "+r" (__a3) \ 1156 - : "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), "i" (__NR_##name) \ 1157 - : "$2", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1158 - "memory"); \ 1159 - \ 1160 - if (__a3 == 0) \ 1161 - return (type) __v0; \ 1162 - errno = __v0; \ 1163 - return (type) -1; \ 1164 - } 1165 - 1166 - #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ 1167 - type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \ 1168 - { \ 1169 - register unsigned long __a0 asm("$4") = (unsigned long) a; \ 1170 - register unsigned long __a1 asm("$5") = (unsigned long) b; \ 1171 - register unsigned long __a2 asm("$6") = (unsigned long) c; \ 1172 - register unsigned long __a3 asm("$7") = (unsigned long) d; \ 1173 - register unsigned long __a4 asm("$8") = (unsigned long) e; \ 1174 - register unsigned long __a5 asm("$9") = (unsigned long) f; \ 1175 - unsigned long __v0; \ 1176 - \ 1177 - __asm__ volatile ( \ 1178 - ".set\tnoreorder\n\t" \ 1179 - "li\t$2, %7\t\t\t# " #name "\n\t" \ 1180 - "syscall\n\t" \ 1181 - "move\t%0, $2\n\t" \ 1182 - ".set\treorder" \ 1183 - : "=&r" (__v0), "+r" (__a3) \ 1184 - : "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), "r" (__a5), \ 1185 - "i" (__NR_##name) \ 1186 - : "$2", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 1187 - "memory"); \ 1188 - \ 1189 - if (__a3 == 0) \ 1190 - return (type) __v0; \ 1191 - errno = __v0; \ 1192 - return (type) -1; \ 1193 - } 1194 - 1195 - #endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */ 1196 - 1197 - 1198 936 #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 1199 937 #define __ARCH_WANT_IPC_PARSE_VERSION 1200 938 #define __ARCH_WANT_OLD_READDIR
-109
include/asm-powerpc/unistd.h
··· 334 334 335 335 #ifndef __ASSEMBLY__ 336 336 337 - /* On powerpc a system call basically clobbers the same registers like a 338 - * function call, with the exception of LR (which is needed for the 339 - * "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal 340 - * an error return status). 341 - */ 342 - 343 - #define __syscall_nr(nr, type, name, args...) \ 344 - unsigned long __sc_ret, __sc_err; \ 345 - { \ 346 - register unsigned long __sc_0 __asm__ ("r0"); \ 347 - register unsigned long __sc_3 __asm__ ("r3"); \ 348 - register unsigned long __sc_4 __asm__ ("r4"); \ 349 - register unsigned long __sc_5 __asm__ ("r5"); \ 350 - register unsigned long __sc_6 __asm__ ("r6"); \ 351 - register unsigned long __sc_7 __asm__ ("r7"); \ 352 - register unsigned long __sc_8 __asm__ ("r8"); \ 353 - \ 354 - __sc_loadargs_##nr(name, args); \ 355 - __asm__ __volatile__ \ 356 - ("sc \n\t" \ 357 - "mfcr %0 " \ 358 - : "=&r" (__sc_0), \ 359 - "=&r" (__sc_3), "=&r" (__sc_4), \ 360 - "=&r" (__sc_5), "=&r" (__sc_6), \ 361 - "=&r" (__sc_7), "=&r" (__sc_8) \ 362 - : __sc_asm_input_##nr \ 363 - : "cr0", "ctr", "memory", \ 364 - "r9", "r10","r11", "r12"); \ 365 - __sc_ret = __sc_3; \ 366 - __sc_err = __sc_0; \ 367 - } \ 368 - if (__sc_err & 0x10000000) \ 369 - { \ 370 - errno = __sc_ret; \ 371 - __sc_ret = -1; \ 372 - } \ 373 - return (type) __sc_ret 374 - 375 - #define __sc_loadargs_0(name, dummy...) \ 376 - __sc_0 = __NR_##name 377 - #define __sc_loadargs_1(name, arg1) \ 378 - __sc_loadargs_0(name); \ 379 - __sc_3 = (unsigned long) (arg1) 380 - #define __sc_loadargs_2(name, arg1, arg2) \ 381 - __sc_loadargs_1(name, arg1); \ 382 - __sc_4 = (unsigned long) (arg2) 383 - #define __sc_loadargs_3(name, arg1, arg2, arg3) \ 384 - __sc_loadargs_2(name, arg1, arg2); \ 385 - __sc_5 = (unsigned long) (arg3) 386 - #define __sc_loadargs_4(name, arg1, arg2, arg3, arg4) \ 387 - __sc_loadargs_3(name, arg1, arg2, arg3); \ 388 - __sc_6 = (unsigned long) (arg4) 389 - #define __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5) \ 390 - __sc_loadargs_4(name, arg1, arg2, arg3, arg4); \ 391 - __sc_7 = (unsigned long) (arg5) 392 - #define __sc_loadargs_6(name, arg1, arg2, arg3, arg4, arg5, arg6) \ 393 - __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5); \ 394 - __sc_8 = (unsigned long) (arg6) 395 - 396 - #define __sc_asm_input_0 "0" (__sc_0) 397 - #define __sc_asm_input_1 __sc_asm_input_0, "1" (__sc_3) 398 - #define __sc_asm_input_2 __sc_asm_input_1, "2" (__sc_4) 399 - #define __sc_asm_input_3 __sc_asm_input_2, "3" (__sc_5) 400 - #define __sc_asm_input_4 __sc_asm_input_3, "4" (__sc_6) 401 - #define __sc_asm_input_5 __sc_asm_input_4, "5" (__sc_7) 402 - #define __sc_asm_input_6 __sc_asm_input_5, "6" (__sc_8) 403 - 404 - #define _syscall0(type,name) \ 405 - type name(void) \ 406 - { \ 407 - __syscall_nr(0, type, name); \ 408 - } 409 - 410 - #define _syscall1(type,name,type1,arg1) \ 411 - type name(type1 arg1) \ 412 - { \ 413 - __syscall_nr(1, type, name, arg1); \ 414 - } 415 - 416 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 417 - type name(type1 arg1, type2 arg2) \ 418 - { \ 419 - __syscall_nr(2, type, name, arg1, arg2); \ 420 - } 421 - 422 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 423 - type name(type1 arg1, type2 arg2, type3 arg3) \ 424 - { \ 425 - __syscall_nr(3, type, name, arg1, arg2, arg3); \ 426 - } 427 - 428 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 429 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 430 - { \ 431 - __syscall_nr(4, type, name, arg1, arg2, arg3, arg4); \ 432 - } 433 - 434 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 435 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ 436 - { \ 437 - __syscall_nr(5, type, name, arg1, arg2, arg3, arg4, arg5); \ 438 - } 439 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ 440 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ 441 - { \ 442 - __syscall_nr(6, type, name, arg1, arg2, arg3, arg4, arg5, arg6); \ 443 - } 444 - 445 - 446 337 #include <linux/types.h> 447 338 #include <linux/compiler.h> 448 339 #include <linux/linkage.h>
-154
include/asm-s390/unistd.h
··· 345 345 346 346 #ifdef __KERNEL__ 347 347 348 - #include <linux/err.h> 349 - 350 - #define __syscall_return(type, res) \ 351 - do { \ 352 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 353 - errno = -(res); \ 354 - res = -1; \ 355 - } \ 356 - return (type) (res); \ 357 - } while (0) 358 - 359 - #define _svc_clobber "1", "cc", "memory" 360 - 361 - #define _syscall0(type,name) \ 362 - type name(void) { \ 363 - register long __svcres asm("2"); \ 364 - long __res; \ 365 - asm volatile( \ 366 - " .if %1 < 256\n" \ 367 - " svc %b1\n" \ 368 - " .else\n" \ 369 - " la %%r1,%1\n" \ 370 - " svc 0\n" \ 371 - " .endif" \ 372 - : "=d" (__svcres) \ 373 - : "i" (__NR_##name) \ 374 - : _svc_clobber); \ 375 - __res = __svcres; \ 376 - __syscall_return(type,__res); \ 377 - } 378 - 379 - #define _syscall1(type,name,type1,arg1) \ 380 - type name(type1 arg1) { \ 381 - register type1 __arg1 asm("2") = arg1; \ 382 - register long __svcres asm("2"); \ 383 - long __res; \ 384 - asm volatile( \ 385 - " .if %1 < 256\n" \ 386 - " svc %b1\n" \ 387 - " .else\n" \ 388 - " la %%r1,%1\n" \ 389 - " svc 0\n" \ 390 - " .endif" \ 391 - : "=d" (__svcres) \ 392 - : "i" (__NR_##name), \ 393 - "0" (__arg1) \ 394 - : _svc_clobber); \ 395 - __res = __svcres; \ 396 - __syscall_return(type,__res); \ 397 - } 398 - 399 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 400 - type name(type1 arg1, type2 arg2) { \ 401 - register type1 __arg1 asm("2") = arg1; \ 402 - register type2 __arg2 asm("3") = arg2; \ 403 - register long __svcres asm("2"); \ 404 - long __res; \ 405 - asm volatile( \ 406 - " .if %1 < 256\n" \ 407 - " svc %b1\n" \ 408 - " .else\n" \ 409 - " la %%r1,%1\n" \ 410 - " svc 0\n" \ 411 - " .endif" \ 412 - : "=d" (__svcres) \ 413 - : "i" (__NR_##name), \ 414 - "0" (__arg1), \ 415 - "d" (__arg2) \ 416 - : _svc_clobber ); \ 417 - __res = __svcres; \ 418 - __syscall_return(type,__res); \ 419 - } 420 - 421 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 422 - type name(type1 arg1, type2 arg2, type3 arg3) { \ 423 - register type1 __arg1 asm("2") = arg1; \ 424 - register type2 __arg2 asm("3") = arg2; \ 425 - register type3 __arg3 asm("4") = arg3; \ 426 - register long __svcres asm("2"); \ 427 - long __res; \ 428 - asm volatile( \ 429 - " .if %1 < 256\n" \ 430 - " svc %b1\n" \ 431 - " .else\n" \ 432 - " la %%r1,%1\n" \ 433 - " svc 0\n" \ 434 - " .endif" \ 435 - : "=d" (__svcres) \ 436 - : "i" (__NR_##name), \ 437 - "0" (__arg1), \ 438 - "d" (__arg2), \ 439 - "d" (__arg3) \ 440 - : _svc_clobber); \ 441 - __res = __svcres; \ 442 - __syscall_return(type,__res); \ 443 - } 444 - 445 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ 446 - type4,name4) \ 447 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ 448 - register type1 __arg1 asm("2") = arg1; \ 449 - register type2 __arg2 asm("3") = arg2; \ 450 - register type3 __arg3 asm("4") = arg3; \ 451 - register type4 __arg4 asm("5") = arg4; \ 452 - register long __svcres asm("2"); \ 453 - long __res; \ 454 - asm volatile( \ 455 - " .if %1 < 256\n" \ 456 - " svc %b1\n" \ 457 - " .else\n" \ 458 - " la %%r1,%1\n" \ 459 - " svc 0\n" \ 460 - " .endif" \ 461 - : "=d" (__svcres) \ 462 - : "i" (__NR_##name), \ 463 - "0" (__arg1), \ 464 - "d" (__arg2), \ 465 - "d" (__arg3), \ 466 - "d" (__arg4) \ 467 - : _svc_clobber); \ 468 - __res = __svcres; \ 469 - __syscall_return(type,__res); \ 470 - } 471 - 472 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ 473 - type4,name4,type5,name5) \ 474 - type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ 475 - type5 arg5) { \ 476 - register type1 __arg1 asm("2") = arg1; \ 477 - register type2 __arg2 asm("3") = arg2; \ 478 - register type3 __arg3 asm("4") = arg3; \ 479 - register type4 __arg4 asm("5") = arg4; \ 480 - register type5 __arg5 asm("6") = arg5; \ 481 - register long __svcres asm("2"); \ 482 - long __res; \ 483 - asm volatile( \ 484 - " .if %1 < 256\n" \ 485 - " svc %b1\n" \ 486 - " .else\n" \ 487 - " la %%r1,%1\n" \ 488 - " svc 0\n" \ 489 - " .endif" \ 490 - : "=d" (__svcres) \ 491 - : "i" (__NR_##name), \ 492 - "0" (__arg1), \ 493 - "d" (__arg2), \ 494 - "d" (__arg3), \ 495 - "d" (__arg4), \ 496 - "d" (__arg5) \ 497 - : _svc_clobber); \ 498 - __res = __svcres; \ 499 - __syscall_return(type,__res); \ 500 - } 501 - 502 348 #define __ARCH_WANT_IPC_PARSE_VERSION 503 349 #define __ARCH_WANT_OLD_READDIR 504 350 #define __ARCH_WANT_SYS_ALARM
-137
include/asm-sh/unistd.h
··· 332 332 333 333 #ifdef __KERNEL__ 334 334 335 - #include <linux/err.h> 336 - 337 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: 338 - * see <asm-sh/errno.h> */ 339 - 340 - #define __syscall_return(type, res) \ 341 - do { \ 342 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 343 - /* Avoid using "res" which is declared to be in register r0; \ 344 - errno might expand to a function call and clobber it. */ \ 345 - int __err = -(res); \ 346 - errno = __err; \ 347 - res = -1; \ 348 - } \ 349 - return (type) (res); \ 350 - } while (0) 351 - 352 - #if defined(__sh2__) || defined(__SH2E__) || defined(__SH2A__) 353 - #define SYSCALL_ARG0 "trapa #0x20" 354 - #define SYSCALL_ARG1 "trapa #0x21" 355 - #define SYSCALL_ARG2 "trapa #0x22" 356 - #define SYSCALL_ARG3 "trapa #0x23" 357 - #define SYSCALL_ARG4 "trapa #0x24" 358 - #define SYSCALL_ARG5 "trapa #0x25" 359 - #define SYSCALL_ARG6 "trapa #0x26" 360 - #else 361 - #define SYSCALL_ARG0 "trapa #0x10" 362 - #define SYSCALL_ARG1 "trapa #0x11" 363 - #define SYSCALL_ARG2 "trapa #0x12" 364 - #define SYSCALL_ARG3 "trapa #0x13" 365 - #define SYSCALL_ARG4 "trapa #0x14" 366 - #define SYSCALL_ARG5 "trapa #0x15" 367 - #define SYSCALL_ARG6 "trapa #0x16" 368 - #endif 369 - 370 - /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ 371 - #define _syscall0(type,name) \ 372 - type name(void) \ 373 - { \ 374 - register long __sc0 __asm__ ("r3") = __NR_##name; \ 375 - __asm__ __volatile__ (SYSCALL_ARG0 \ 376 - : "=z" (__sc0) \ 377 - : "0" (__sc0) \ 378 - : "memory" ); \ 379 - __syscall_return(type,__sc0); \ 380 - } 381 - 382 - #define _syscall1(type,name,type1,arg1) \ 383 - type name(type1 arg1) \ 384 - { \ 385 - register long __sc0 __asm__ ("r3") = __NR_##name; \ 386 - register long __sc4 __asm__ ("r4") = (long) arg1; \ 387 - __asm__ __volatile__ (SYSCALL_ARG1 \ 388 - : "=z" (__sc0) \ 389 - : "0" (__sc0), "r" (__sc4) \ 390 - : "memory"); \ 391 - __syscall_return(type,__sc0); \ 392 - } 393 - 394 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 395 - type name(type1 arg1,type2 arg2) \ 396 - { \ 397 - register long __sc0 __asm__ ("r3") = __NR_##name; \ 398 - register long __sc4 __asm__ ("r4") = (long) arg1; \ 399 - register long __sc5 __asm__ ("r5") = (long) arg2; \ 400 - __asm__ __volatile__ (SYSCALL_ARG2 \ 401 - : "=z" (__sc0) \ 402 - : "0" (__sc0), "r" (__sc4), "r" (__sc5) \ 403 - : "memory"); \ 404 - __syscall_return(type,__sc0); \ 405 - } 406 - 407 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 408 - type name(type1 arg1,type2 arg2,type3 arg3) \ 409 - { \ 410 - register long __sc0 __asm__ ("r3") = __NR_##name; \ 411 - register long __sc4 __asm__ ("r4") = (long) arg1; \ 412 - register long __sc5 __asm__ ("r5") = (long) arg2; \ 413 - register long __sc6 __asm__ ("r6") = (long) arg3; \ 414 - __asm__ __volatile__ (SYSCALL_ARG3 \ 415 - : "=z" (__sc0) \ 416 - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6) \ 417 - : "memory"); \ 418 - __syscall_return(type,__sc0); \ 419 - } 420 - 421 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 422 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 423 - { \ 424 - register long __sc0 __asm__ ("r3") = __NR_##name; \ 425 - register long __sc4 __asm__ ("r4") = (long) arg1; \ 426 - register long __sc5 __asm__ ("r5") = (long) arg2; \ 427 - register long __sc6 __asm__ ("r6") = (long) arg3; \ 428 - register long __sc7 __asm__ ("r7") = (long) arg4; \ 429 - __asm__ __volatile__ (SYSCALL_ARG4 \ 430 - : "=z" (__sc0) \ 431 - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), \ 432 - "r" (__sc7) \ 433 - : "memory" ); \ 434 - __syscall_return(type,__sc0); \ 435 - } 436 - 437 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 438 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ 439 - { \ 440 - register long __sc3 __asm__ ("r3") = __NR_##name; \ 441 - register long __sc4 __asm__ ("r4") = (long) arg1; \ 442 - register long __sc5 __asm__ ("r5") = (long) arg2; \ 443 - register long __sc6 __asm__ ("r6") = (long) arg3; \ 444 - register long __sc7 __asm__ ("r7") = (long) arg4; \ 445 - register long __sc0 __asm__ ("r0") = (long) arg5; \ 446 - __asm__ __volatile__ (SYSCALL_ARG5 \ 447 - : "=z" (__sc0) \ 448 - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), "r" (__sc7), \ 449 - "r" (__sc3) \ 450 - : "memory" ); \ 451 - __syscall_return(type,__sc0); \ 452 - } 453 - 454 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ 455 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ 456 - { \ 457 - register long __sc3 __asm__ ("r3") = __NR_##name; \ 458 - register long __sc4 __asm__ ("r4") = (long) arg1; \ 459 - register long __sc5 __asm__ ("r5") = (long) arg2; \ 460 - register long __sc6 __asm__ ("r6") = (long) arg3; \ 461 - register long __sc7 __asm__ ("r7") = (long) arg4; \ 462 - register long __sc0 __asm__ ("r0") = (long) arg5; \ 463 - register long __sc1 __asm__ ("r1") = (long) arg6; \ 464 - __asm__ __volatile__ (SYSCALL_ARG6 \ 465 - : "=z" (__sc0) \ 466 - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), "r" (__sc7), \ 467 - "r" (__sc3), "r" (__sc1) \ 468 - : "memory" ); \ 469 - __syscall_return(type,__sc0); \ 470 - } 471 - 472 335 #define __ARCH_WANT_IPC_PARSE_VERSION 473 336 #define __ARCH_WANT_OLD_READDIR 474 337 #define __ARCH_WANT_OLD_STAT
-142
include/asm-sh64/unistd.h
··· 347 347 #ifdef __KERNEL__ 348 348 349 349 #define NR_syscalls 321 350 - #include <linux/err.h> 351 - 352 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: 353 - * see <asm-sh64/errno.h> */ 354 - 355 - #define __syscall_return(type, res) \ 356 - do { \ 357 - /* Note: when returning from kernel the return value is in r9 \ 358 - ** This prevents conflicts between return value and arg1 \ 359 - ** when dispatching signal handler, in other words makes \ 360 - ** life easier in the system call epilogue (see entry.S) \ 361 - */ \ 362 - register unsigned long __sr2 __asm__ ("r2") = res; \ 363 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 364 - errno = -(res); \ 365 - __sr2 = -1; \ 366 - } \ 367 - return (type) (__sr2); \ 368 - } while (0) 369 - 370 - /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ 371 - 372 - #define _syscall0(type,name) \ 373 - type name(void) \ 374 - { \ 375 - register unsigned long __sc0 __asm__ ("r9") = ((0x10 << 16) | __NR_##name); \ 376 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "()" \ 377 - : "=r" (__sc0) \ 378 - : "r" (__sc0) ); \ 379 - __syscall_return(type,__sc0); \ 380 - } 381 - 382 - /* 383 - * The apparent spurious "dummy" assembler comment is *needed*, 384 - * as without it, the compiler treats the arg<n> variables 385 - * as no longer live just before the asm. The compiler can 386 - * then optimize the storage into any registers it wishes. 387 - * The additional dummy statement forces the compiler to put 388 - * the arguments into the correct registers before the TRAPA. 389 - */ 390 - #define _syscall1(type,name,type1,arg1) \ 391 - type name(type1 arg1) \ 392 - { \ 393 - register unsigned long __sc0 __asm__ ("r9") = ((0x11 << 16) | __NR_##name); \ 394 - register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ 395 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2)" \ 396 - : "=r" (__sc0) \ 397 - : "r" (__sc0), "r" (__sc2)); \ 398 - __asm__ __volatile__ ("!dummy %0 %1" \ 399 - : \ 400 - : "r" (__sc0), "r" (__sc2)); \ 401 - __syscall_return(type,__sc0); \ 402 - } 403 - 404 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 405 - type name(type1 arg1,type2 arg2) \ 406 - { \ 407 - register unsigned long __sc0 __asm__ ("r9") = ((0x12 << 16) | __NR_##name); \ 408 - register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ 409 - register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ 410 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3)" \ 411 - : "=r" (__sc0) \ 412 - : "r" (__sc0), "r" (__sc2), "r" (__sc3) ); \ 413 - __asm__ __volatile__ ("!dummy %0 %1 %2" \ 414 - : \ 415 - : "r" (__sc0), "r" (__sc2), "r" (__sc3) ); \ 416 - __syscall_return(type,__sc0); \ 417 - } 418 - 419 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 420 - type name(type1 arg1,type2 arg2,type3 arg3) \ 421 - { \ 422 - register unsigned long __sc0 __asm__ ("r9") = ((0x13 << 16) | __NR_##name); \ 423 - register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ 424 - register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ 425 - register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ 426 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4)" \ 427 - : "=r" (__sc0) \ 428 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4) ); \ 429 - __asm__ __volatile__ ("!dummy %0 %1 %2 %3" \ 430 - : \ 431 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4) ); \ 432 - __syscall_return(type,__sc0); \ 433 - } 434 - 435 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 436 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 437 - { \ 438 - register unsigned long __sc0 __asm__ ("r9") = ((0x14 << 16) | __NR_##name); \ 439 - register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ 440 - register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ 441 - register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ 442 - register unsigned long __sc5 __asm__ ("r5") = (unsigned long) arg4; \ 443 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4,%5)" \ 444 - : "=r" (__sc0) \ 445 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5) );\ 446 - __asm__ __volatile__ ("!dummy %0 %1 %2 %3 %4" \ 447 - : \ 448 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5) );\ 449 - __syscall_return(type,__sc0); \ 450 - } 451 - 452 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 453 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ 454 - { \ 455 - register unsigned long __sc0 __asm__ ("r9") = ((0x15 << 16) | __NR_##name); \ 456 - register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ 457 - register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ 458 - register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ 459 - register unsigned long __sc5 __asm__ ("r5") = (unsigned long) arg4; \ 460 - register unsigned long __sc6 __asm__ ("r6") = (unsigned long) arg5; \ 461 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4,%5,%6)" \ 462 - : "=r" (__sc0) \ 463 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ 464 - "r" (__sc6)); \ 465 - __asm__ __volatile__ ("!dummy %0 %1 %2 %3 %4 %5" \ 466 - : \ 467 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ 468 - "r" (__sc6)); \ 469 - __syscall_return(type,__sc0); \ 470 - } 471 - 472 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5, type6, arg6) \ 473 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ 474 - { \ 475 - register unsigned long __sc0 __asm__ ("r9") = ((0x16 << 16) | __NR_##name); \ 476 - register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ 477 - register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ 478 - register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ 479 - register unsigned long __sc5 __asm__ ("r5") = (unsigned long) arg4; \ 480 - register unsigned long __sc6 __asm__ ("r6") = (unsigned long) arg5; \ 481 - register unsigned long __sc7 __asm__ ("r7") = (unsigned long) arg6; \ 482 - __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4,%5,%6,%7)" \ 483 - : "=r" (__sc0) \ 484 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ 485 - "r" (__sc6), "r" (__sc7)); \ 486 - __asm__ __volatile__ ("!dummy %0 %1 %2 %3 %4 %5 %6" \ 487 - : \ 488 - : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ 489 - "r" (__sc6), "r" (__sc7)); \ 490 - __syscall_return(type,__sc0); \ 491 - } 492 350 493 351 #define __ARCH_WANT_IPC_PARSE_VERSION 494 352 #define __ARCH_WANT_OLD_READDIR
-130
include/asm-sparc/unistd.h
··· 329 329 * find a free slot in the 0-302 range. 330 330 */ 331 331 332 - #define _syscall0(type,name) \ 333 - type name(void) \ 334 - { \ 335 - long __res; \ 336 - register long __g1 __asm__ ("g1") = __NR_##name; \ 337 - __asm__ __volatile__ ("t 0x10\n\t" \ 338 - "bcc 1f\n\t" \ 339 - "mov %%o0, %0\n\t" \ 340 - "sub %%g0, %%o0, %0\n\t" \ 341 - "1:\n\t" \ 342 - : "=r" (__res)\ 343 - : "r" (__g1) \ 344 - : "o0", "cc"); \ 345 - if (__res < -255 || __res >= 0) \ 346 - return (type) __res; \ 347 - errno = -__res; \ 348 - return -1; \ 349 - } 350 - 351 - #define _syscall1(type,name,type1,arg1) \ 352 - type name(type1 arg1) \ 353 - { \ 354 - long __res; \ 355 - register long __g1 __asm__ ("g1") = __NR_##name; \ 356 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 357 - __asm__ __volatile__ ("t 0x10\n\t" \ 358 - "bcc 1f\n\t" \ 359 - "mov %%o0, %0\n\t" \ 360 - "sub %%g0, %%o0, %0\n\t" \ 361 - "1:\n\t" \ 362 - : "=r" (__res), "=&r" (__o0) \ 363 - : "1" (__o0), "r" (__g1) \ 364 - : "cc"); \ 365 - if (__res < -255 || __res >= 0) \ 366 - return (type) __res; \ 367 - errno = -__res; \ 368 - return -1; \ 369 - } 370 - 371 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 372 - type name(type1 arg1,type2 arg2) \ 373 - { \ 374 - long __res; \ 375 - register long __g1 __asm__ ("g1") = __NR_##name; \ 376 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 377 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 378 - __asm__ __volatile__ ("t 0x10\n\t" \ 379 - "bcc 1f\n\t" \ 380 - "mov %%o0, %0\n\t" \ 381 - "sub %%g0, %%o0, %0\n\t" \ 382 - "1:\n\t" \ 383 - : "=r" (__res), "=&r" (__o0) \ 384 - : "1" (__o0), "r" (__o1), "r" (__g1) \ 385 - : "cc"); \ 386 - if (__res < -255 || __res >= 0) \ 387 - return (type) __res; \ 388 - errno = -__res; \ 389 - return -1; \ 390 - } 391 - 392 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 393 - type name(type1 arg1,type2 arg2,type3 arg3) \ 394 - { \ 395 - long __res; \ 396 - register long __g1 __asm__ ("g1") = __NR_##name; \ 397 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 398 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 399 - register long __o2 __asm__ ("o2") = (long)(arg3); \ 400 - __asm__ __volatile__ ("t 0x10\n\t" \ 401 - "bcc 1f\n\t" \ 402 - "mov %%o0, %0\n\t" \ 403 - "sub %%g0, %%o0, %0\n\t" \ 404 - "1:\n\t" \ 405 - : "=r" (__res), "=&r" (__o0) \ 406 - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \ 407 - : "cc"); \ 408 - if (__res < -255 || __res>=0) \ 409 - return (type) __res; \ 410 - errno = -__res; \ 411 - return -1; \ 412 - } 413 - 414 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 415 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 416 - { \ 417 - long __res; \ 418 - register long __g1 __asm__ ("g1") = __NR_##name; \ 419 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 420 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 421 - register long __o2 __asm__ ("o2") = (long)(arg3); \ 422 - register long __o3 __asm__ ("o3") = (long)(arg4); \ 423 - __asm__ __volatile__ ("t 0x10\n\t" \ 424 - "bcc 1f\n\t" \ 425 - "mov %%o0, %0\n\t" \ 426 - "sub %%g0, %%o0, %0\n\t" \ 427 - "1:\n\t" \ 428 - : "=r" (__res), "=&r" (__o0) \ 429 - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \ 430 - : "cc"); \ 431 - if (__res < -255 || __res>=0) \ 432 - return (type) __res; \ 433 - errno = -__res; \ 434 - return -1; \ 435 - } 436 - 437 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 438 - type5,arg5) \ 439 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 440 - { \ 441 - long __res; \ 442 - register long __g1 __asm__ ("g1") = __NR_##name; \ 443 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 444 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 445 - register long __o2 __asm__ ("o2") = (long)(arg3); \ 446 - register long __o3 __asm__ ("o3") = (long)(arg4); \ 447 - register long __o4 __asm__ ("o4") = (long)(arg5); \ 448 - __asm__ __volatile__ ("t 0x10\n\t" \ 449 - "bcc 1f\n\t" \ 450 - "mov %%o0, %0\n\t" \ 451 - "sub %%g0, %%o0, %0\n\t" \ 452 - "1:\n\t" \ 453 - : "=r" (__res), "=&r" (__o0) \ 454 - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), "r" (__g1) \ 455 - : "cc"); \ 456 - if (__res < -255 || __res>=0) \ 457 - return (type) __res; \ 458 - errno = -__res; \ 459 - return -1; \ 460 - } 461 - 462 332 #define __ARCH_WANT_IPC_PARSE_VERSION 463 333 #define __ARCH_WANT_OLD_READDIR 464 334 #define __ARCH_WANT_STAT64
-118
include/asm-sparc64/unistd.h
··· 332 332 * find a free slot in the 0-302 range. 333 333 */ 334 334 335 - #define _syscall0(type,name) \ 336 - type name(void) \ 337 - { \ 338 - long __res; \ 339 - register long __g1 __asm__ ("g1") = __NR_##name; \ 340 - __asm__ __volatile__ ("t 0x6d\n\t" \ 341 - "sub %%g0, %%o0, %0\n\t" \ 342 - "movcc %%xcc, %%o0, %0\n\t" \ 343 - : "=r" (__res)\ 344 - : "r" (__g1) \ 345 - : "o0", "cc"); \ 346 - if (__res >= 0) \ 347 - return (type) __res; \ 348 - errno = -__res; \ 349 - return -1; \ 350 - } 351 - 352 - #define _syscall1(type,name,type1,arg1) \ 353 - type name(type1 arg1) \ 354 - { \ 355 - long __res; \ 356 - register long __g1 __asm__ ("g1") = __NR_##name; \ 357 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 358 - __asm__ __volatile__ ("t 0x6d\n\t" \ 359 - "sub %%g0, %%o0, %0\n\t" \ 360 - "movcc %%xcc, %%o0, %0\n\t" \ 361 - : "=r" (__res), "=&r" (__o0) \ 362 - : "1" (__o0), "r" (__g1) \ 363 - : "cc"); \ 364 - if (__res >= 0) \ 365 - return (type) __res; \ 366 - errno = -__res; \ 367 - return -1; \ 368 - } 369 - 370 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 371 - type name(type1 arg1,type2 arg2) \ 372 - { \ 373 - long __res; \ 374 - register long __g1 __asm__ ("g1") = __NR_##name; \ 375 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 376 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 377 - __asm__ __volatile__ ("t 0x6d\n\t" \ 378 - "sub %%g0, %%o0, %0\n\t" \ 379 - "movcc %%xcc, %%o0, %0\n\t" \ 380 - : "=r" (__res), "=&r" (__o0) \ 381 - : "1" (__o0), "r" (__o1), "r" (__g1) \ 382 - : "cc"); \ 383 - if (__res >= 0) \ 384 - return (type) __res; \ 385 - errno = -__res; \ 386 - return -1; \ 387 - } 388 - 389 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 390 - type name(type1 arg1,type2 arg2,type3 arg3) \ 391 - { \ 392 - long __res; \ 393 - register long __g1 __asm__ ("g1") = __NR_##name; \ 394 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 395 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 396 - register long __o2 __asm__ ("o2") = (long)(arg3); \ 397 - __asm__ __volatile__ ("t 0x6d\n\t" \ 398 - "sub %%g0, %%o0, %0\n\t" \ 399 - "movcc %%xcc, %%o0, %0\n\t" \ 400 - : "=r" (__res), "=&r" (__o0) \ 401 - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \ 402 - : "cc"); \ 403 - if (__res>=0) \ 404 - return (type) __res; \ 405 - errno = -__res; \ 406 - return -1; \ 407 - } 408 - 409 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 410 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 411 - { \ 412 - long __res; \ 413 - register long __g1 __asm__ ("g1") = __NR_##name; \ 414 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 415 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 416 - register long __o2 __asm__ ("o2") = (long)(arg3); \ 417 - register long __o3 __asm__ ("o3") = (long)(arg4); \ 418 - __asm__ __volatile__ ("t 0x6d\n\t" \ 419 - "sub %%g0, %%o0, %0\n\t" \ 420 - "movcc %%xcc, %%o0, %0\n\t" \ 421 - : "=r" (__res), "=&r" (__o0) \ 422 - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \ 423 - : "cc"); \ 424 - if (__res>=0) \ 425 - return (type) __res; \ 426 - errno = -__res; \ 427 - return -1; \ 428 - } 429 - 430 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 431 - type5,arg5) \ 432 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 433 - { \ 434 - long __res; \ 435 - register long __g1 __asm__ ("g1") = __NR_##name; \ 436 - register long __o0 __asm__ ("o0") = (long)(arg1); \ 437 - register long __o1 __asm__ ("o1") = (long)(arg2); \ 438 - register long __o2 __asm__ ("o2") = (long)(arg3); \ 439 - register long __o3 __asm__ ("o3") = (long)(arg4); \ 440 - register long __o4 __asm__ ("o4") = (long)(arg5); \ 441 - __asm__ __volatile__ ("t 0x6d\n\t" \ 442 - "sub %%g0, %%o0, %0\n\t" \ 443 - "movcc %%xcc, %%o0, %0\n\t" \ 444 - : "=r" (__res), "=&r" (__o0) \ 445 - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), "r" (__g1) \ 446 - : "cc"); \ 447 - if (__res>=0) \ 448 - return (type) __res; \ 449 - errno = -__res; \ 450 - return -1; \ 451 - } 452 - 453 335 /* sysconf options, for SunOS compatibility */ 454 336 #define _SC_ARG_MAX 1 455 337 #define _SC_CHILD_MAX 2
-160
include/asm-v850/unistd.h
··· 204 204 #define __NR_gettid 201 205 205 #define __NR_tkill 202 206 206 207 - 208 - /* Syscall protocol: 209 - Syscall number in r12, args in r6-r9, r13-r14 210 - Return value in r10 211 - Trap 0 for `short' syscalls, where all the args can fit in function 212 - call argument registers, and trap 1 when there are additional args in 213 - r13-r14. */ 214 - 215 - #define SYSCALL_NUM "r12" 216 - #define SYSCALL_ARG0 "r6" 217 - #define SYSCALL_ARG1 "r7" 218 - #define SYSCALL_ARG2 "r8" 219 - #define SYSCALL_ARG3 "r9" 220 - #define SYSCALL_ARG4 "r13" 221 - #define SYSCALL_ARG5 "r14" 222 - #define SYSCALL_RET "r10" 223 - 224 - #define SYSCALL_SHORT_TRAP "0" 225 - #define SYSCALL_LONG_TRAP "1" 226 - 227 - /* Registers clobbered by any syscall. This _doesn't_ include the syscall 228 - number (r12) or the `extended arg' registers (r13, r14), even though 229 - they are actually clobbered too (this is because gcc's `asm' statement 230 - doesn't allow a clobber to be used as an input or output). */ 231 - #define SYSCALL_CLOBBERS "r1", "r5", "r11", "r15", "r16", \ 232 - "r17", "r18", "r19" 233 - 234 - /* Registers clobbered by a `short' syscall. This includes all clobbers 235 - except the syscall number (r12). */ 236 - #define SYSCALL_SHORT_CLOBBERS SYSCALL_CLOBBERS, "r13", "r14" 237 - 238 207 #ifdef __KERNEL__ 239 - 240 - #include <asm/clinkage.h> 241 - #include <linux/err.h> 242 - 243 - #define __syscall_return(type, res) \ 244 - do { \ 245 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO: \ 246 - see <asm-v850/errno.h> */ \ 247 - if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO), 0)) { \ 248 - errno = -(res); \ 249 - res = -1; \ 250 - } \ 251 - return (type) (res); \ 252 - } while (0) 253 - 254 - 255 - #define _syscall0(type, name) \ 256 - type name (void) \ 257 - { \ 258 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 259 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 260 - __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ 261 - : "=r" (__ret), "=r" (__syscall) \ 262 - : "1" (__syscall) \ 263 - : SYSCALL_SHORT_CLOBBERS); \ 264 - __syscall_return (type, __ret); \ 265 - } 266 - 267 - #define _syscall1(type, name, atype, a) \ 268 - type name (atype a) \ 269 - { \ 270 - register atype __a __asm__ (SYSCALL_ARG0) = a; \ 271 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 272 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 273 - __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ 274 - : "=r" (__ret), "=r" (__syscall) \ 275 - : "1" (__syscall), "r" (__a) \ 276 - : SYSCALL_SHORT_CLOBBERS); \ 277 - __syscall_return (type, __ret); \ 278 - } 279 - 280 - #define _syscall2(type, name, atype, a, btype, b) \ 281 - type name (atype a, btype b) \ 282 - { \ 283 - register atype __a __asm__ (SYSCALL_ARG0) = a; \ 284 - register btype __b __asm__ (SYSCALL_ARG1) = b; \ 285 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 286 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 287 - __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ 288 - : "=r" (__ret), "=r" (__syscall) \ 289 - : "1" (__syscall), "r" (__a), "r" (__b) \ 290 - : SYSCALL_SHORT_CLOBBERS); \ 291 - __syscall_return (type, __ret); \ 292 - } 293 - 294 - #define _syscall3(type, name, atype, a, btype, b, ctype, c) \ 295 - type name (atype a, btype b, ctype c) \ 296 - { \ 297 - register atype __a __asm__ (SYSCALL_ARG0) = a; \ 298 - register btype __b __asm__ (SYSCALL_ARG1) = b; \ 299 - register ctype __c __asm__ (SYSCALL_ARG2) = c; \ 300 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 301 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 302 - __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ 303 - : "=r" (__ret), "=r" (__syscall) \ 304 - : "1" (__syscall), "r" (__a), "r" (__b), "r" (__c) \ 305 - : SYSCALL_SHORT_CLOBBERS); \ 306 - __syscall_return (type, __ret); \ 307 - } 308 - 309 - #define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d) \ 310 - type name (atype a, btype b, ctype c, dtype d) \ 311 - { \ 312 - register atype __a __asm__ (SYSCALL_ARG0) = a; \ 313 - register btype __b __asm__ (SYSCALL_ARG1) = b; \ 314 - register ctype __c __asm__ (SYSCALL_ARG2) = c; \ 315 - register dtype __d __asm__ (SYSCALL_ARG3) = d; \ 316 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 317 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 318 - __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ 319 - : "=r" (__ret), "=r" (__syscall) \ 320 - : "1" (__syscall), \ 321 - "r" (__a), "r" (__b), "r" (__c), "r" (__d) \ 322 - : SYSCALL_SHORT_CLOBBERS); \ 323 - __syscall_return (type, __ret); \ 324 - } 325 - 326 - #define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype,e)\ 327 - type name (atype a, btype b, ctype c, dtype d, etype e) \ 328 - { \ 329 - register atype __a __asm__ (SYSCALL_ARG0) = a; \ 330 - register btype __b __asm__ (SYSCALL_ARG1) = b; \ 331 - register ctype __c __asm__ (SYSCALL_ARG2) = c; \ 332 - register dtype __d __asm__ (SYSCALL_ARG3) = d; \ 333 - register etype __e __asm__ (SYSCALL_ARG4) = e; \ 334 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 335 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 336 - __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \ 337 - : "=r" (__ret), "=r" (__syscall), "=r" (__e) \ 338 - : "1" (__syscall), \ 339 - "r" (__a), "r" (__b), "r" (__c), "r" (__d), "2" (__e) \ 340 - : SYSCALL_CLOBBERS); \ 341 - __syscall_return (type, __ret); \ 342 - } 343 - 344 - #define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f) \ 345 - __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \ 346 - : "=r" (ret), "=r" (syscall), \ 347 - "=r" (e), "=r" (f) \ 348 - : "1" (syscall), \ 349 - "r" (a), "r" (b), "r" (c), "r" (d), \ 350 - "2" (e), "3" (f) \ 351 - : SYSCALL_CLOBBERS); 352 - 353 - #define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e, ftype, f) \ 354 - type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \ 355 - { \ 356 - register atype __a __asm__ (SYSCALL_ARG0) = a; \ 357 - register btype __b __asm__ (SYSCALL_ARG1) = b; \ 358 - register ctype __c __asm__ (SYSCALL_ARG2) = c; \ 359 - register dtype __d __asm__ (SYSCALL_ARG3) = d; \ 360 - register etype __e __asm__ (SYSCALL_ARG4) = e; \ 361 - register etype __f __asm__ (SYSCALL_ARG5) = f; \ 362 - register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ 363 - register unsigned long __ret __asm__ (SYSCALL_RET); \ 364 - __SYSCALL6_TRAP(__syscall, __ret, __a, __b, __c, __d, __e, __f); \ 365 - __syscall_return (type, __ret); \ 366 - } 367 - 368 208 369 209 #define __ARCH_WANT_IPC_PARSE_VERSION 370 210 #define __ARCH_WANT_OLD_READDIR
-99
include/asm-x86_64/unistd.h
··· 622 622 623 623 #define __NR_syscall_max __NR_move_pages 624 624 625 - #ifdef __KERNEL__ 626 - #include <linux/err.h> 627 - #endif 628 - 629 625 #ifndef __NO_STUBS 630 - 631 - /* user-visible error numbers are in the range -1 - -MAX_ERRNO */ 632 - 633 - #define __syscall_clobber "r11","rcx","memory" 634 - 635 - #define __syscall_return(type, res) \ 636 - do { \ 637 - if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ 638 - errno = -(res); \ 639 - res = -1; \ 640 - } \ 641 - return (type) (res); \ 642 - } while (0) 643 - 644 626 #define __ARCH_WANT_OLD_READDIR 645 627 #define __ARCH_WANT_OLD_STAT 646 628 #define __ARCH_WANT_SYS_ALARM ··· 645 663 #define __ARCH_WANT_SYS_RT_SIGSUSPEND 646 664 #define __ARCH_WANT_SYS_TIME 647 665 #define __ARCH_WANT_COMPAT_SYS_TIME 648 - 649 - #define __syscall "syscall" 650 - 651 - #define _syscall0(type,name) \ 652 - type name(void) \ 653 - { \ 654 - long __res; \ 655 - __asm__ volatile (__syscall \ 656 - : "=a" (__res) \ 657 - : "0" (__NR_##name) : __syscall_clobber ); \ 658 - __syscall_return(type,__res); \ 659 - } 660 - 661 - #define _syscall1(type,name,type1,arg1) \ 662 - type name(type1 arg1) \ 663 - { \ 664 - long __res; \ 665 - __asm__ volatile (__syscall \ 666 - : "=a" (__res) \ 667 - : "0" (__NR_##name),"D" ((long)(arg1)) : __syscall_clobber ); \ 668 - __syscall_return(type,__res); \ 669 - } 670 - 671 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ 672 - type name(type1 arg1,type2 arg2) \ 673 - { \ 674 - long __res; \ 675 - __asm__ volatile (__syscall \ 676 - : "=a" (__res) \ 677 - : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)) : __syscall_clobber ); \ 678 - __syscall_return(type,__res); \ 679 - } 680 - 681 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 682 - type name(type1 arg1,type2 arg2,type3 arg3) \ 683 - { \ 684 - long __res; \ 685 - __asm__ volatile (__syscall \ 686 - : "=a" (__res) \ 687 - : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ 688 - "d" ((long)(arg3)) : __syscall_clobber); \ 689 - __syscall_return(type,__res); \ 690 - } 691 - 692 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 693 - type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 694 - { \ 695 - long __res; \ 696 - __asm__ volatile ("movq %5,%%r10 ;" __syscall \ 697 - : "=a" (__res) \ 698 - : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ 699 - "d" ((long)(arg3)),"g" ((long)(arg4)) : __syscall_clobber,"r10" ); \ 700 - __syscall_return(type,__res); \ 701 - } 702 - 703 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 704 - type5,arg5) \ 705 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 706 - { \ 707 - long __res; \ 708 - __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; " __syscall \ 709 - : "=a" (__res) \ 710 - : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ 711 - "d" ((long)(arg3)),"g" ((long)(arg4)),"g" ((long)(arg5)) : \ 712 - __syscall_clobber,"r8","r10" ); \ 713 - __syscall_return(type,__res); \ 714 - } 715 - 716 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ 717 - type5,arg5,type6,arg6) \ 718 - type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ 719 - { \ 720 - long __res; \ 721 - __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; movq %7,%%r9 ; " __syscall \ 722 - : "=a" (__res) \ 723 - : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ 724 - "d" ((long)(arg3)), "g" ((long)(arg4)), "g" ((long)(arg5)), \ 725 - "g" ((long)(arg6)) : \ 726 - __syscall_clobber,"r8","r10","r9" ); \ 727 - __syscall_return(type,__res); \ 728 - } 729 666 730 667 #ifdef __KERNEL__ 731 668 #ifndef __ASSEMBLY__
-184
include/asm-xtensa/unistd.h
··· 218 218 219 219 #define SYSXTENSA_COUNT 5 /* count of syscall0 functions*/ 220 220 221 - #ifdef __KERNEL__ 222 - #include <linux/linkage.h> 223 - 224 - #define __syscall_return(type, res) return ((type)(res)) 225 - 226 - /* Tensilica's xt-xcc compiler is much more agressive at code 227 - * optimization than gcc. Multiple __asm__ statements are 228 - * insufficient for xt-xcc because subsequent optimization passes 229 - * (beyond the front-end that knows of __asm__ statements and other 230 - * such GNU Extensions to C) can modify the register selection for 231 - * containment of C variables. 232 - * 233 - * xt-xcc cannot modify the contents of a single __asm__ statement, so 234 - * we create single-asm versions of the syscall macros that are 235 - * suitable and optimal for both xt-xcc and gcc. 236 - * 237 - * Linux takes system-call arguments in registers. The following 238 - * design is optimized for user-land apps (e.g., glibc) which 239 - * typically have a function wrapper around the "syscall" assembly 240 - * instruction. It satisfies the Xtensa ABI while minizing argument 241 - * shifting. 242 - * 243 - * The Xtensa ABI and software conventions require the system-call 244 - * number in a2. If an argument exists in a2, we move it to the next 245 - * available register. Note that for improved efficiency, we do NOT 246 - * shift all parameters down one register to maintain the original 247 - * order. 248 - * 249 - * At best case (zero arguments), we just write the syscall number to 250 - * a2. At worst case (1 to 6 arguments), we move the argument in a2 251 - * to the next available register, then write the syscall number to 252 - * a2. 253 - * 254 - * For clarity, the following truth table enumerates all possibilities. 255 - * 256 - * arguments syscall number arg0, arg1, arg2, arg3, arg4, arg5 257 - * --------- -------------- ---------------------------------- 258 - * 0 a2 259 - * 1 a2 a3 260 - * 2 a2 a4, a3 261 - * 3 a2 a5, a3, a4 262 - * 4 a2 a6, a3, a4, a5 263 - * 5 a2 a7, a3, a4, a5, a6 264 - * 6 a2 a8, a3, a4, a5, a6, a7 265 - */ 266 - 267 - #define _syscall0(type,name) \ 268 - type name(void) \ 269 - { \ 270 - long __res; \ 271 - __asm__ __volatile__ ( \ 272 - " movi a2, %1 \n" \ 273 - " syscall \n" \ 274 - " mov %0, a2 \n" \ 275 - : "=a" (__res) \ 276 - : "i" (__NR_##name) \ 277 - : "a2" \ 278 - ); \ 279 - __syscall_return(type,__res); \ 280 - } 281 - 282 - #define _syscall1(type,name,type0,arg0) \ 283 - type name(type0 arg0) \ 284 - { \ 285 - long __res; \ 286 - __asm__ __volatile__ ( \ 287 - " mov a3, %2 \n" \ 288 - " movi a2, %1 \n" \ 289 - " syscall \n" \ 290 - " mov %0, a2 \n" \ 291 - : "=a" (__res) \ 292 - : "i" (__NR_##name), "a" (arg0) \ 293 - : "a2", "a3" \ 294 - ); \ 295 - __syscall_return(type,__res); \ 296 - } 297 - 298 - #define _syscall2(type,name,type0,arg0,type1,arg1) \ 299 - type name(type0 arg0,type1 arg1) \ 300 - { \ 301 - long __res; \ 302 - __asm__ __volatile__ ( \ 303 - " mov a4, %2 \n" \ 304 - " mov a3, %3 \n" \ 305 - " movi a2, %1 \n" \ 306 - " syscall \n" \ 307 - " mov %0, a2 \n" \ 308 - : "=a" (__res) \ 309 - : "i" (__NR_##name), "a" (arg0), "a" (arg1) \ 310 - : "a2", "a3", "a4" \ 311 - ); \ 312 - __syscall_return(type,__res); \ 313 - } 314 - 315 - #define _syscall3(type,name,type0,arg0,type1,arg1,type2,arg2) \ 316 - type name(type0 arg0,type1 arg1,type2 arg2) \ 317 - { \ 318 - long __res; \ 319 - __asm__ __volatile__ ( \ 320 - " mov a5, %2 \n" \ 321 - " mov a4, %4 \n" \ 322 - " mov a3, %3 \n" \ 323 - " movi a2, %1 \n" \ 324 - " syscall \n" \ 325 - " mov %0, a2 \n" \ 326 - : "=a" (__res) \ 327 - : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2) \ 328 - : "a2", "a3", "a4", "a5" \ 329 - ); \ 330 - __syscall_return(type,__res); \ 331 - } 332 - 333 - #define _syscall4(type,name,type0,arg0,type1,arg1,type2,arg2,type3,arg3) \ 334 - type name(type0 arg0,type1 arg1,type2 arg2,type3 arg3) \ 335 - { \ 336 - long __res; \ 337 - __asm__ __volatile__ ( \ 338 - " mov a6, %2 \n" \ 339 - " mov a5, %5 \n" \ 340 - " mov a4, %4 \n" \ 341 - " mov a3, %3 \n" \ 342 - " movi a2, %1 \n" \ 343 - " syscall \n" \ 344 - " mov %0, a2 \n" \ 345 - : "=a" (__res) \ 346 - : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2), "a" (arg3) \ 347 - : "a2", "a3", "a4", "a5", "a6" \ 348 - ); \ 349 - __syscall_return(type,__res); \ 350 - } 351 - 352 - /* Note that we save and restore the a7 frame pointer. 353 - * Including a7 in the clobber list doesn't do what you'd expect. 354 - */ 355 - #define _syscall5(type,name,type0,arg0,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 356 - type name(type0 arg0,type1 arg1,type2 arg2,type3 arg3,type4 arg4) \ 357 - { \ 358 - long __res; \ 359 - __asm__ __volatile__ ( \ 360 - " mov a9, a7 \n" \ 361 - " mov a7, %2 \n" \ 362 - " mov a6, %6 \n" \ 363 - " mov a5, %5 \n" \ 364 - " mov a4, %4 \n" \ 365 - " mov a3, %3 \n" \ 366 - " movi a2, %1 \n" \ 367 - " syscall \n" \ 368 - " mov a7, a9 \n" \ 369 - " mov %0, a2 \n" \ 370 - : "=a" (__res) \ 371 - : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2), \ 372 - "a" (arg3), "a" (arg4) \ 373 - : "a2", "a3", "a4", "a5", "a6", "a9" \ 374 - ); \ 375 - __syscall_return(type,__res); \ 376 - } 377 - 378 - /* Note that we save and restore the a7 frame pointer. 379 - * Including a7 in the clobber list doesn't do what you'd expect. 380 - */ 381 - #define _syscall6(type,name,type0,arg0,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 382 - type name(type0 arg0,type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ 383 - { \ 384 - long __res; \ 385 - __asm__ __volatile__ ( \ 386 - " mov a9, a7 \n" \ 387 - " mov a8, %2 \n" \ 388 - " mov a7, %7 \n" \ 389 - " mov a6, %6 \n" \ 390 - " mov a5, %5 \n" \ 391 - " mov a4, %4 \n" \ 392 - " mov a3, %3 \n" \ 393 - " movi a2, %1 \n" \ 394 - " syscall \n" \ 395 - " mov a7, a9 \n" \ 396 - " mov %0, a2 \n" \ 397 - : "=a" (__res) \ 398 - : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2), \ 399 - "a" (arg3), "a" (arg4), "a" (arg5) \ 400 - : "a2", "a3", "a4", "a5", "a6", "a8", "a9" \ 401 - ); \ 402 - __syscall_return(type,__res); \ 403 - } 404 - 405 221 /* 406 222 * "Conditional" syscalls 407 223 *