mirror of https://github.com/aria2/aria2
				
				
				
			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.pull/128/merge
							parent
							
								
									fa09dc9115
								
							
						
					
					
						commit
						e3a41a51da
					
				|  | @ -869,6 +869,7 @@ AC_SUBST([bashcompletiondir]) | ||||||
| 
 | 
 | ||||||
| case "$host" in | case "$host" in | ||||||
|   *android*) |   *android*) | ||||||
|  |     android=yes | ||||||
|     LIBS="$LIBS -lstdc++ -lsupc++" |     LIBS="$LIBS -lstdc++ -lsupc++" | ||||||
|     case "$host" in |     case "$host" in | ||||||
|       arm-*) |       arm-*) | ||||||
|  | @ -886,6 +887,7 @@ case "$host" in | ||||||
|     ;; |     ;; | ||||||
| esac | esac | ||||||
| 
 | 
 | ||||||
|  | AM_CONDITIONAL([ANDROID], [test "x$android" = "xyes"]) | ||||||
| AM_CONDITIONAL([ANDROID_ARM], [test "x$android_arm" = "xyes"]) | AM_CONDITIONAL([ANDROID_ARM], [test "x$android_arm" = "xyes"]) | ||||||
| AM_CONDITIONAL([ANDROID_MIPS], [test "x$android_mips" = "xyes"]) | AM_CONDITIONAL([ANDROID_MIPS], [test "x$android_mips" = "xyes"]) | ||||||
| AM_CONDITIONAL([ANDROID_X86], [test "x$android_x86" = "xyes"]) | AM_CONDITIONAL([ANDROID_X86], [test "x$android_x86" = "xyes"]) | ||||||
|  |  | ||||||
|  | @ -253,6 +253,10 @@ SRCS =  option_processing.cc\ | ||||||
| 	FtpTunnelRequestConnectChain.h\
 | 	FtpTunnelRequestConnectChain.h\
 | ||||||
| 	Lock.h | 	Lock.h | ||||||
| 
 | 
 | ||||||
|  | if ANDROID | ||||||
|  | SRCS += android/android.c | ||||||
|  | endif # ANDROID
 | ||||||
|  | 
 | ||||||
| # Android NDK R8e does not provide ftruncate64. Use assembly code from
 | # Android NDK R8e does not provide ftruncate64. Use assembly code from
 | ||||||
| # android source code and link it.
 | # android source code and link it.
 | ||||||
| if ANDROID_ARM | if ANDROID_ARM | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
|  | } | ||||||
|  | @ -11,5 +11,5 @@ ENTRY(ftruncate64) | ||||||
|     cmn     r0, #(MAX_ERRNO + 1) |     cmn     r0, #(MAX_ERRNO + 1) | ||||||
|     bxls    lr |     bxls    lr | ||||||
|     neg     r0, r0 |     neg     r0, r0 | ||||||
|     b       __set_errno |     b       a2_set_errno | ||||||
| END(ftruncate64) | END(ftruncate64) | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ ftruncate64: | ||||||
|     j $ra |     j $ra | ||||||
|     nop |     nop | ||||||
| 1: | 1: | ||||||
|     la $t9,__set_errno |     la $t9,a2_set_errno | ||||||
|     j $t9 |     j $t9 | ||||||
|     nop |     nop | ||||||
|     .set reorder
 |     .set reorder
 | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ ENTRY(ftruncate64) | ||||||
|     jb      1f |     jb      1f | ||||||
|     negl    %eax |     negl    %eax | ||||||
|     pushl   %eax |     pushl   %eax | ||||||
|     call    __set_errno |     call    a2_set_errno | ||||||
|     addl    $4, %esp |     addl    $4, %esp | ||||||
|     orl     $-1, %eax |     orl     $-1, %eax | ||||||
| 1: | 1: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Tatsuhiro Tsujikawa
						Tatsuhiro Tsujikawa