Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(748)

Side by Side Diff: lss/linux_syscall_support.h

Issue 389673002: MIPS: The new ABI should be allowed to use r8 and r9 for syscalls. (Closed) Base URL: http://linux-syscall-support.googlecode.com/svn/trunk/lss/
Patch Set: for committing, just rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Copyright (c) 2005-2011, Google Inc. 1 /* Copyright (c) 2005-2011, Google Inc.
2 * All rights reserved. 2 * All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2353 matching lines...) Expand 10 before | Expand all | Expand 10 after
2364 { 2364 {
2365 register int __flags __asm__("r0") = flags; 2365 register int __flags __asm__("r0") = flags;
2366 register void *__stack __asm__("r1") = child_stack; 2366 register void *__stack __asm__("r1") = child_stack;
2367 register void *__ptid __asm__("r2") = parent_tidptr; 2367 register void *__ptid __asm__("r2") = parent_tidptr;
2368 register void *__tls __asm__("r3") = newtls; 2368 register void *__tls __asm__("r3") = newtls;
2369 register int *__ctid __asm__("r4") = child_tidptr; 2369 register int *__ctid __asm__("r4") = child_tidptr;
2370 __asm__ __volatile__(/* if (fn == NULL || child_stack == NULL) 2370 __asm__ __volatile__(/* if (fn == NULL || child_stack == NULL)
2371 * return -EINVAL; 2371 * return -EINVAL;
2372 */ 2372 */
2373 #ifdef __thumb2__ 2373 #ifdef __thumb2__
2374 » » » "push {r7}\n" 2374 "push {r7}\n"
2375 #endif 2375 #endif
2376 "cmp %2,#0\n" 2376 "cmp %2,#0\n"
2377 "it ne\n" 2377 "it ne\n"
2378 "cmpne %3,#0\n" 2378 "cmpne %3,#0\n"
2379 "it eq\n" 2379 "it eq\n"
2380 "moveq %0,%1\n" 2380 "moveq %0,%1\n"
2381 "beq 1f\n" 2381 "beq 1f\n"
2382 2382
2383 /* Push "arg" and "fn" onto the stack that will be 2383 /* Push "arg" and "fn" onto the stack that will be
2384 * used by the child. 2384 * used by the child.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2422 "mov lr,pc\n" 2422 "mov lr,pc\n"
2423 "ldr pc,[sp]\n" 2423 "ldr pc,[sp]\n"
2424 #endif 2424 #endif
2425 2425
2426 /* Call _exit(%r0). 2426 /* Call _exit(%r0).
2427 */ 2427 */
2428 "mov r7, %10\n" 2428 "mov r7, %10\n"
2429 "swi 0x0\n" 2429 "swi 0x0\n"
2430 "1:\n" 2430 "1:\n"
2431 #ifdef __thumb2__ 2431 #ifdef __thumb2__
2432 » » » "pop {r7}" 2432 "pop {r7}"
2433 #endif 2433 #endif
2434 : "=r" (__res) 2434 : "=r" (__res)
2435 : "i"(-EINVAL), 2435 : "i"(-EINVAL),
2436 "r"(fn), "r"(__stack), "r"(__flags), "r"(arg), 2436 "r"(fn), "r"(__stack), "r"(__flags), "r"(arg),
2437 "r"(__ptid), "r"(__tls), "r"(__ctid), 2437 "r"(__ptid), "r"(__tls), "r"(__ctid),
2438 "i"(__NR_clone), "i"(__NR_exit) 2438 "i"(__NR_clone), "i"(__NR_exit)
2439 #ifdef __thumb2__ 2439 #ifdef __thumb2__
2440 » » » : "cc", "lr", "memory"); 2440 : "cc", "lr", "memory");
2441 #else 2441 #else
2442 : "cc", "r7", "lr", "memory"); 2442 : "cc", "r7", "lr", "memory");
2443 #endif 2443 #endif
2444 } 2444 }
2445 LSS_RETURN(int, __res); 2445 LSS_RETURN(int, __res);
2446 } 2446 }
2447 #elif defined(__aarch64__) 2447 #elif defined(__aarch64__)
2448 /* Most definitions of _syscallX() neglect to mark "memory" as being 2448 /* Most definitions of _syscallX() neglect to mark "memory" as being
2449 * clobbered. This causes problems with compilers, that do a better job 2449 * clobbered. This causes problems with compilers, that do a better job
2450 * at optimizing across __asm__ calls. 2450 * at optimizing across __asm__ calls.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2559 "i"(__NR_clone), "i"(__NR_exit) 2559 "i"(__NR_clone), "i"(__NR_exit)
2560 : "cc", "x8", "memory"); 2560 : "cc", "x8", "memory");
2561 } 2561 }
2562 LSS_RETURN(int, __res); 2562 LSS_RETURN(int, __res);
2563 } 2563 }
2564 #elif defined(__mips__) 2564 #elif defined(__mips__)
2565 #undef LSS_REG 2565 #undef LSS_REG
2566 #define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) = \ 2566 #define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) = \
2567 (unsigned long)(a) 2567 (unsigned long)(a)
2568 #undef LSS_BODY 2568 #undef LSS_BODY
2569 #undef LSS_SYSCALL_CLOBBERS
2570 #if _MIPS_SIM == _MIPS_SIM_ABI32
2571 #define LSS_SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", \
2572 "$11", "$12", "$13", "$14", "$15", \
2573 "$24", "$25", "hi", "lo", "memory"
2574 #else
2575 #define LSS_SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", \
2576 "$13", "$14", "$15", "$24", "$25", \
2577 "hi", "lo", "memory"
2578 #endif
2569 #define LSS_BODY(type,name,r7,...) \ 2579 #define LSS_BODY(type,name,r7,...) \
2570 register unsigned long __v0 __asm__("$2") = __NR_##name; \ 2580 register unsigned long __v0 __asm__("$2") = __NR_##name; \
2571 __asm__ __volatile__ ("syscall\n" \ 2581 __asm__ __volatile__ ("syscall\n" \
2572 : "+r"(__v0), r7 (__r7) \ 2582 : "+r"(__v0), r7 (__r7) \
2573 : "0"(__v0), ##__VA_ARGS__ \ 2583 : "0"(__v0), ##__VA_ARGS__ \
2574 : "$8", "$9", "$10", "$11", "$12", \ 2584 : LSS_SYSCALL_CLOBBERS); \
2575 "$13", "$14", "$15", "$24", "$25", \
2576 "memory"); \
2577 LSS_RETURN(type, __v0, __r7) 2585 LSS_RETURN(type, __v0, __r7)
2578 #undef _syscall0 2586 #undef _syscall0
2579 #define _syscall0(type, name) \ 2587 #define _syscall0(type, name) \
2580 type LSS_NAME(name)(void) { \ 2588 type LSS_NAME(name)(void) { \
2581 register unsigned long __r7 __asm__("$7"); \ 2589 register unsigned long __r7 __asm__("$7"); \
2582 LSS_BODY(type, name, "=r"); \ 2590 LSS_BODY(type, name, "=r"); \
2583 } 2591 }
2584 #undef _syscall1 2592 #undef _syscall1
2585 #define _syscall1(type, name, type1, arg1) \ 2593 #define _syscall1(type, name, type1, arg1) \
2586 type LSS_NAME(name)(type1 arg1) { \ 2594 type LSS_NAME(name)(type1 arg1) { \
(...skipping 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after
4012 # pragma pop_macro("fstat64") 4020 # pragma pop_macro("fstat64")
4013 # pragma pop_macro("lstat64") 4021 # pragma pop_macro("lstat64")
4014 #endif 4022 #endif
4015 4023
4016 #if defined(__cplusplus) && !defined(SYS_CPLUSPLUS) 4024 #if defined(__cplusplus) && !defined(SYS_CPLUSPLUS)
4017 } 4025 }
4018 #endif 4026 #endif
4019 4027
4020 #endif 4028 #endif
4021 #endif 4029 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698