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