diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-09-18 23:10:25 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-09-18 23:10:25 +0900 |
| commit | e3a41a51dab04d346db6d64bd202aa72cdff80c5 (patch) | |
| tree | 2120d1f8a32033e3f28d03c2472781a9bb7f4d0a /src | |
| parent | fa09dc9115c4d34da6c5797287ee2ba61d6f162e (diff) | |
Fix link error with Android NDK r9
Since Android ndk r9, __set_errno is deprecated. It is now defined as
inline function in errno.h. The syscall assembly calls __set_errno,
but since libc.so does not export it, the link fails. To workaround
this, replace all occurrences of __set_errno with a2_set_errno and
define it as normal C function.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 4 | ||||
| -rw-r--r-- | src/android/android.c | 48 | ||||
| -rw-r--r-- | src/android/arm-ftruncate64.S | 2 | ||||
| -rw-r--r-- | src/android/mips-ftruncate64.S | 2 | ||||
| -rw-r--r-- | src/android/x86-ftruncate64.S | 2 |
5 files changed, 55 insertions, 3 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index b9f8edc4..01532752 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -253,6 +253,10 @@ SRCS = option_processing.cc\ FtpTunnelRequestConnectChain.h\ Lock.h +if ANDROID +SRCS += android/android.c +endif # ANDROID + # Android NDK R8e does not provide ftruncate64. Use assembly code from # android source code and link it. if ANDROID_ARM diff --git a/src/android/android.c b/src/android/android.c new file mode 100644 index 00000000..73ac29b2 --- /dev/null +++ b/src/android/android.c @@ -0,0 +1,48 @@ +/* <!-- copyright */ +/* + * aria2 - The high speed download utility + * + * Copyright (C) 2013 Tatsuhiro Tsujikawa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ +/* copyright --> */ +#include <errno.h> + +/* + * Since Android ndk r9, __set_errno is deprecated. It is now defined + * as inline function in errno.h. The syscall assembly calls + * __set_errno, but since libc.so does not export it, the link + * fails. To workaround this, replace all occurrences of __set_errno + * with a2_set_errno and define it here. + */ +int a2_set_errno(int n) +{ + errno = n; + return -1; +} diff --git a/src/android/arm-ftruncate64.S b/src/android/arm-ftruncate64.S index 123897dc..7addbc40 100644 --- a/src/android/arm-ftruncate64.S +++ b/src/android/arm-ftruncate64.S @@ -11,5 +11,5 @@ ENTRY(ftruncate64) cmn r0, #(MAX_ERRNO + 1) bxls lr neg r0, r0 - b __set_errno + b a2_set_errno END(ftruncate64) diff --git a/src/android/mips-ftruncate64.S b/src/android/mips-ftruncate64.S index 398069c4..ff507ba5 100644 --- a/src/android/mips-ftruncate64.S +++ b/src/android/mips-ftruncate64.S @@ -15,7 +15,7 @@ ftruncate64: j $ra nop 1: - la $t9,__set_errno + la $t9,a2_set_errno j $t9 nop .set reorder diff --git a/src/android/x86-ftruncate64.S b/src/android/x86-ftruncate64.S index 021cc8fe..46dc5d84 100644 --- a/src/android/x86-ftruncate64.S +++ b/src/android/x86-ftruncate64.S @@ -17,7 +17,7 @@ ENTRY(ftruncate64) jb 1f negl %eax pushl %eax - call __set_errno + call a2_set_errno addl $4, %esp orl $-1, %eax 1: |
