11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved.
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *  * Redistributions of source code must retain the above copyright
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    the documentation and/or other materials provided with the
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    distribution.
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
29ed74484dcbc2e156a6e5fa861a62425b12e55128Elliott Hughes#include <private/bionic_asm.h>
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
31f94fd3ccc66e05f53965bc14237778c0d8437bb6Elliott HughesENTRY(syscall)
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    mov     ip, sp
33f94fd3ccc66e05f53965bc14237778c0d8437bb6Elliott Hughes    stmfd   sp!, {r4, r5, r6, r7}
34ed45970ac5a182e512669cfa5c15b9f4fa783ad7Christopher Ferris    .cfi_def_cfa_offset 16
35ed45970ac5a182e512669cfa5c15b9f4fa783ad7Christopher Ferris    .cfi_rel_offset r4, 0
36ed45970ac5a182e512669cfa5c15b9f4fa783ad7Christopher Ferris    .cfi_rel_offset r5, 4
37ed45970ac5a182e512669cfa5c15b9f4fa783ad7Christopher Ferris    .cfi_rel_offset r6, 8
38ed45970ac5a182e512669cfa5c15b9f4fa783ad7Christopher Ferris    .cfi_rel_offset r7, 12
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    mov     r7, r0
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    mov     r0, r1
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    mov     r1, r2
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    mov     r2, r3
43f94fd3ccc66e05f53965bc14237778c0d8437bb6Elliott Hughes    ldmfd   ip, {r3, r4, r5, r6}
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    swi     #0
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    ldmfd   sp!, {r4, r5, r6, r7}
46ed45970ac5a182e512669cfa5c15b9f4fa783ad7Christopher Ferris    .cfi_def_cfa_offset 0
479aceab50155b17741faded1fb22e2daa51a07fb1Elliott Hughes    cmn     r0, #(MAX_ERRNO + 1)
489aceab50155b17741faded1fb22e2daa51a07fb1Elliott Hughes    bxls    lr
499aceab50155b17741faded1fb22e2daa51a07fb1Elliott Hughes    neg     r0, r0
507efad83d430f4d824f2aaa75edea5106f6ff8aaeElliott Hughes    b       __set_errno_internal
51f94fd3ccc66e05f53965bc14237778c0d8437bb6Elliott HughesEND(syscall)
52