Merge "Add O_APPEND flag for __libc_write_stderr."
diff --git a/libc/arch-arm/bionic/setjmp.S b/libc/arch-arm/bionic/setjmp.S
index 8d7786c..8220c08 100644
--- a/libc/arch-arm/bionic/setjmp.S
+++ b/libc/arch-arm/bionic/setjmp.S
@@ -169,7 +169,5 @@
bx lr
END(siglongjmp)
- .globl longjmp
- .equ longjmp, siglongjmp
- .globl _longjmp
- .equ _longjmp, siglongjmp
+ALIAS_SYMBOL(longjmp, siglongjmp)
+ALIAS_SYMBOL(_longjmp, siglongjmp)
diff --git a/libc/arch-arm/syscalls/_exit.S b/libc/arch-arm/syscalls/_exit.S
index 328a5ce..77da743 100644
--- a/libc/arch-arm/syscalls/_exit.S
+++ b/libc/arch-arm/syscalls/_exit.S
@@ -13,5 +13,4 @@
b __set_errno_internal
END(_exit)
- .globl _Exit
- .equ _Exit, _exit
+ALIAS_SYMBOL(_Exit, _exit)
diff --git a/libc/arch-arm/syscalls/fstat64.S b/libc/arch-arm/syscalls/fstat64.S
index c60e7ee..798bba7 100644
--- a/libc/arch-arm/syscalls/fstat64.S
+++ b/libc/arch-arm/syscalls/fstat64.S
@@ -13,5 +13,4 @@
b __set_errno_internal
END(fstat64)
- .globl fstat
- .equ fstat, fstat64
+ALIAS_SYMBOL(fstat, fstat64)
diff --git a/libc/arch-arm/syscalls/fstatat64.S b/libc/arch-arm/syscalls/fstatat64.S
index ce56c36..03e0052 100644
--- a/libc/arch-arm/syscalls/fstatat64.S
+++ b/libc/arch-arm/syscalls/fstatat64.S
@@ -13,5 +13,4 @@
b __set_errno_internal
END(fstatat64)
- .globl fstatat
- .equ fstatat, fstatat64
+ALIAS_SYMBOL(fstatat, fstatat64)
diff --git a/libc/arch-arm64/bionic/setjmp.S b/libc/arch-arm64/bionic/setjmp.S
index 6e119dc..ba0a226 100644
--- a/libc/arch-arm64/bionic/setjmp.S
+++ b/libc/arch-arm64/bionic/setjmp.S
@@ -146,7 +146,5 @@
ret
END(siglongjmp)
- .globl longjmp
- .equ longjmp, siglongjmp
- .globl _longjmp
- .equ _longjmp, siglongjmp
+ALIAS_SYMBOL(longjmp, siglongjmp)
+ALIAS_SYMBOL(_longjmp, siglongjmp)
diff --git a/libc/arch-arm64/syscalls/_exit.S b/libc/arch-arm64/syscalls/_exit.S
index edf6744..d50f38d 100644
--- a/libc/arch-arm64/syscalls/_exit.S
+++ b/libc/arch-arm64/syscalls/_exit.S
@@ -13,5 +13,4 @@
ret
END(_exit)
- .globl _Exit
- .equ _Exit, _exit
+ALIAS_SYMBOL(_Exit, _exit)
diff --git a/libc/arch-arm64/syscalls/fallocate.S b/libc/arch-arm64/syscalls/fallocate.S
index ef3d4a4..d42a0ba 100644
--- a/libc/arch-arm64/syscalls/fallocate.S
+++ b/libc/arch-arm64/syscalls/fallocate.S
@@ -13,5 +13,4 @@
ret
END(fallocate)
- .globl fallocate64
- .equ fallocate64, fallocate
+ALIAS_SYMBOL(fallocate64, fallocate)
diff --git a/libc/arch-arm64/syscalls/fstat64.S b/libc/arch-arm64/syscalls/fstat64.S
index 85a07f5..f7c9f54 100644
--- a/libc/arch-arm64/syscalls/fstat64.S
+++ b/libc/arch-arm64/syscalls/fstat64.S
@@ -13,5 +13,4 @@
ret
END(fstat64)
- .globl fstat
- .equ fstat, fstat64
+ALIAS_SYMBOL(fstat, fstat64)
diff --git a/libc/arch-arm64/syscalls/fstatat64.S b/libc/arch-arm64/syscalls/fstatat64.S
index dafd982..9f8f2c5 100644
--- a/libc/arch-arm64/syscalls/fstatat64.S
+++ b/libc/arch-arm64/syscalls/fstatat64.S
@@ -13,5 +13,4 @@
ret
END(fstatat64)
- .globl fstatat
- .equ fstatat, fstatat64
+ALIAS_SYMBOL(fstatat, fstatat64)
diff --git a/libc/arch-arm64/syscalls/ftruncate.S b/libc/arch-arm64/syscalls/ftruncate.S
index c6e99f5..c21e098 100644
--- a/libc/arch-arm64/syscalls/ftruncate.S
+++ b/libc/arch-arm64/syscalls/ftruncate.S
@@ -13,5 +13,4 @@
ret
END(ftruncate)
- .globl ftruncate64
- .equ ftruncate64, ftruncate
+ALIAS_SYMBOL(ftruncate64, ftruncate)
diff --git a/libc/arch-arm64/syscalls/getrlimit.S b/libc/arch-arm64/syscalls/getrlimit.S
index 518ab73..03ee9a8 100644
--- a/libc/arch-arm64/syscalls/getrlimit.S
+++ b/libc/arch-arm64/syscalls/getrlimit.S
@@ -13,5 +13,4 @@
ret
END(getrlimit)
- .globl getrlimit64
- .equ getrlimit64, getrlimit
+ALIAS_SYMBOL(getrlimit64, getrlimit)
diff --git a/libc/arch-arm64/syscalls/lseek.S b/libc/arch-arm64/syscalls/lseek.S
index de96df0..93afeb7 100644
--- a/libc/arch-arm64/syscalls/lseek.S
+++ b/libc/arch-arm64/syscalls/lseek.S
@@ -13,5 +13,4 @@
ret
END(lseek)
- .globl lseek64
- .equ lseek64, lseek
+ALIAS_SYMBOL(lseek64, lseek)
diff --git a/libc/arch-arm64/syscalls/mmap.S b/libc/arch-arm64/syscalls/mmap.S
index 64b955e..65371bc 100644
--- a/libc/arch-arm64/syscalls/mmap.S
+++ b/libc/arch-arm64/syscalls/mmap.S
@@ -13,5 +13,4 @@
ret
END(mmap)
- .globl mmap64
- .equ mmap64, mmap
+ALIAS_SYMBOL(mmap64, mmap)
diff --git a/libc/arch-arm64/syscalls/pread64.S b/libc/arch-arm64/syscalls/pread64.S
index eafc044..6c9f0e9 100644
--- a/libc/arch-arm64/syscalls/pread64.S
+++ b/libc/arch-arm64/syscalls/pread64.S
@@ -13,5 +13,4 @@
ret
END(pread64)
- .globl pread
- .equ pread, pread64
+ALIAS_SYMBOL(pread, pread64)
diff --git a/libc/arch-arm64/syscalls/prlimit64.S b/libc/arch-arm64/syscalls/prlimit64.S
index 2bece99..9c018ba 100644
--- a/libc/arch-arm64/syscalls/prlimit64.S
+++ b/libc/arch-arm64/syscalls/prlimit64.S
@@ -13,5 +13,4 @@
ret
END(prlimit64)
- .globl prlimit
- .equ prlimit, prlimit64
+ALIAS_SYMBOL(prlimit, prlimit64)
diff --git a/libc/arch-arm64/syscalls/pwrite64.S b/libc/arch-arm64/syscalls/pwrite64.S
index 6970954..1599c14 100644
--- a/libc/arch-arm64/syscalls/pwrite64.S
+++ b/libc/arch-arm64/syscalls/pwrite64.S
@@ -13,5 +13,4 @@
ret
END(pwrite64)
- .globl pwrite
- .equ pwrite, pwrite64
+ALIAS_SYMBOL(pwrite, pwrite64)
diff --git a/libc/arch-arm64/syscalls/sendfile.S b/libc/arch-arm64/syscalls/sendfile.S
index 17a0d46..50ac12d 100644
--- a/libc/arch-arm64/syscalls/sendfile.S
+++ b/libc/arch-arm64/syscalls/sendfile.S
@@ -13,5 +13,4 @@
ret
END(sendfile)
- .globl sendfile64
- .equ sendfile64, sendfile
+ALIAS_SYMBOL(sendfile64, sendfile)
diff --git a/libc/arch-arm64/syscalls/setrlimit.S b/libc/arch-arm64/syscalls/setrlimit.S
index 6cb6b98..52c75a1 100644
--- a/libc/arch-arm64/syscalls/setrlimit.S
+++ b/libc/arch-arm64/syscalls/setrlimit.S
@@ -13,5 +13,4 @@
ret
END(setrlimit)
- .globl setrlimit64
- .equ setrlimit64, setrlimit
+ALIAS_SYMBOL(setrlimit64, setrlimit)
diff --git a/libc/arch-arm64/syscalls/truncate.S b/libc/arch-arm64/syscalls/truncate.S
index 0e5a33e..e01cc7d 100644
--- a/libc/arch-arm64/syscalls/truncate.S
+++ b/libc/arch-arm64/syscalls/truncate.S
@@ -13,5 +13,4 @@
ret
END(truncate)
- .globl truncate64
- .equ truncate64, truncate
+ALIAS_SYMBOL(truncate64, truncate)
diff --git a/libc/arch-mips/bionic/setjmp.S b/libc/arch-mips/bionic/setjmp.S
index 1c26553..bed9562 100644
--- a/libc/arch-mips/bionic/setjmp.S
+++ b/libc/arch-mips/bionic/setjmp.S
@@ -352,12 +352,5 @@
jal abort
END(siglongjmp)
-
- .globl longjmp
- .type longjmp, @function
- .equ longjmp, siglongjmp # alias for siglongjmp
-
-
- .globl _longjmp
- .type _longjmp, @function
- .equ _longjmp, siglongjmp # alias for siglongjmp
+ALIAS_SYMBOL(longjmp, siglongjmp)
+ALIAS_SYMBOL(_longjmp, siglongjmp)
diff --git a/libc/arch-mips/syscalls/_exit.S b/libc/arch-mips/syscalls/_exit.S
index 5ac1324..6e97aac 100644
--- a/libc/arch-mips/syscalls/_exit.S
+++ b/libc/arch-mips/syscalls/_exit.S
@@ -18,5 +18,4 @@
.set reorder
END(_exit)
- .globl _Exit
- .equ _Exit, _exit
+ALIAS_SYMBOL(_Exit, _exit)
diff --git a/libc/arch-mips/syscalls/fstat64.S b/libc/arch-mips/syscalls/fstat64.S
index 525c23c..16e2791 100644
--- a/libc/arch-mips/syscalls/fstat64.S
+++ b/libc/arch-mips/syscalls/fstat64.S
@@ -18,5 +18,4 @@
.set reorder
END(fstat64)
- .globl fstat
- .equ fstat, fstat64
+ALIAS_SYMBOL(fstat, fstat64)
diff --git a/libc/arch-mips/syscalls/fstatat64.S b/libc/arch-mips/syscalls/fstatat64.S
index f7b8e1d..ebcf6b0 100644
--- a/libc/arch-mips/syscalls/fstatat64.S
+++ b/libc/arch-mips/syscalls/fstatat64.S
@@ -18,5 +18,4 @@
.set reorder
END(fstatat64)
- .globl fstatat
- .equ fstatat, fstatat64
+ALIAS_SYMBOL(fstatat, fstatat64)
diff --git a/libc/arch-mips64/syscalls/_exit.S b/libc/arch-mips64/syscalls/_exit.S
index da5a2f7..37f8119 100644
--- a/libc/arch-mips64/syscalls/_exit.S
+++ b/libc/arch-mips64/syscalls/_exit.S
@@ -24,5 +24,4 @@
.set pop
END(_exit)
- .globl _Exit
- .equ _Exit, _exit
+ALIAS_SYMBOL(_Exit, _exit)
diff --git a/libc/arch-mips64/syscalls/fallocate.S b/libc/arch-mips64/syscalls/fallocate.S
index c1ef0ed..14e25a0 100644
--- a/libc/arch-mips64/syscalls/fallocate.S
+++ b/libc/arch-mips64/syscalls/fallocate.S
@@ -24,5 +24,4 @@
.set pop
END(fallocate)
- .globl fallocate64
- .equ fallocate64, fallocate
+ALIAS_SYMBOL(fallocate64, fallocate)
diff --git a/libc/arch-mips64/syscalls/ftruncate.S b/libc/arch-mips64/syscalls/ftruncate.S
index 58b847b..063e8f3 100644
--- a/libc/arch-mips64/syscalls/ftruncate.S
+++ b/libc/arch-mips64/syscalls/ftruncate.S
@@ -24,5 +24,4 @@
.set pop
END(ftruncate)
- .globl ftruncate64
- .equ ftruncate64, ftruncate
+ALIAS_SYMBOL(ftruncate64, ftruncate)
diff --git a/libc/arch-mips64/syscalls/getrlimit.S b/libc/arch-mips64/syscalls/getrlimit.S
index 7576c17..5e2a82a 100644
--- a/libc/arch-mips64/syscalls/getrlimit.S
+++ b/libc/arch-mips64/syscalls/getrlimit.S
@@ -24,5 +24,4 @@
.set pop
END(getrlimit)
- .globl getrlimit64
- .equ getrlimit64, getrlimit
+ALIAS_SYMBOL(getrlimit64, getrlimit)
diff --git a/libc/arch-mips64/syscalls/lseek.S b/libc/arch-mips64/syscalls/lseek.S
index 5c92d70..3bfc29d 100644
--- a/libc/arch-mips64/syscalls/lseek.S
+++ b/libc/arch-mips64/syscalls/lseek.S
@@ -24,5 +24,4 @@
.set pop
END(lseek)
- .globl lseek64
- .equ lseek64, lseek
+ALIAS_SYMBOL(lseek64, lseek)
diff --git a/libc/arch-mips64/syscalls/mmap.S b/libc/arch-mips64/syscalls/mmap.S
index 393271a..cc53eb2 100644
--- a/libc/arch-mips64/syscalls/mmap.S
+++ b/libc/arch-mips64/syscalls/mmap.S
@@ -24,5 +24,4 @@
.set pop
END(mmap)
- .globl mmap64
- .equ mmap64, mmap
+ALIAS_SYMBOL(mmap64, mmap)
diff --git a/libc/arch-mips64/syscalls/pread64.S b/libc/arch-mips64/syscalls/pread64.S
index 90e0612..7965ba9 100644
--- a/libc/arch-mips64/syscalls/pread64.S
+++ b/libc/arch-mips64/syscalls/pread64.S
@@ -24,5 +24,4 @@
.set pop
END(pread64)
- .globl pread
- .equ pread, pread64
+ALIAS_SYMBOL(pread, pread64)
diff --git a/libc/arch-mips64/syscalls/prlimit64.S b/libc/arch-mips64/syscalls/prlimit64.S
index 5f0ba1d..e04a5b6 100644
--- a/libc/arch-mips64/syscalls/prlimit64.S
+++ b/libc/arch-mips64/syscalls/prlimit64.S
@@ -24,5 +24,4 @@
.set pop
END(prlimit64)
- .globl prlimit
- .equ prlimit, prlimit64
+ALIAS_SYMBOL(prlimit, prlimit64)
diff --git a/libc/arch-mips64/syscalls/pwrite64.S b/libc/arch-mips64/syscalls/pwrite64.S
index e34f8db..97e0183 100644
--- a/libc/arch-mips64/syscalls/pwrite64.S
+++ b/libc/arch-mips64/syscalls/pwrite64.S
@@ -24,5 +24,4 @@
.set pop
END(pwrite64)
- .globl pwrite
- .equ pwrite, pwrite64
+ALIAS_SYMBOL(pwrite, pwrite64)
diff --git a/libc/arch-mips64/syscalls/sendfile.S b/libc/arch-mips64/syscalls/sendfile.S
index f330242..a50459e 100644
--- a/libc/arch-mips64/syscalls/sendfile.S
+++ b/libc/arch-mips64/syscalls/sendfile.S
@@ -24,5 +24,4 @@
.set pop
END(sendfile)
- .globl sendfile64
- .equ sendfile64, sendfile
+ALIAS_SYMBOL(sendfile64, sendfile)
diff --git a/libc/arch-mips64/syscalls/setrlimit.S b/libc/arch-mips64/syscalls/setrlimit.S
index 0e5e80e..be6fdc3 100644
--- a/libc/arch-mips64/syscalls/setrlimit.S
+++ b/libc/arch-mips64/syscalls/setrlimit.S
@@ -24,5 +24,4 @@
.set pop
END(setrlimit)
- .globl setrlimit64
- .equ setrlimit64, setrlimit
+ALIAS_SYMBOL(setrlimit64, setrlimit)
diff --git a/libc/arch-mips64/syscalls/truncate.S b/libc/arch-mips64/syscalls/truncate.S
index fb3b7eb..b832796 100644
--- a/libc/arch-mips64/syscalls/truncate.S
+++ b/libc/arch-mips64/syscalls/truncate.S
@@ -24,5 +24,4 @@
.set pop
END(truncate)
- .globl truncate64
- .equ truncate64, truncate
+ALIAS_SYMBOL(truncate64, truncate)
diff --git a/libc/arch-x86/bionic/setjmp.S b/libc/arch-x86/bionic/setjmp.S
index 25a016d..18ad810 100644
--- a/libc/arch-x86/bionic/setjmp.S
+++ b/libc/arch-x86/bionic/setjmp.S
@@ -123,7 +123,5 @@
ret
END(siglongjmp)
- .globl longjmp
- .equ longjmp, siglongjmp
- .globl _longjmp
- .equ _longjmp, siglongjmp
+ALIAS_SYMBOL(longjmp, siglongjmp)
+ALIAS_SYMBOL(_longjmp, siglongjmp)
diff --git a/libc/arch-x86/syscalls/_exit.S b/libc/arch-x86/syscalls/_exit.S
index 8528ee4..9945b35 100644
--- a/libc/arch-x86/syscalls/_exit.S
+++ b/libc/arch-x86/syscalls/_exit.S
@@ -20,5 +20,4 @@
ret
END(_exit)
- .globl _Exit
- .equ _Exit, _exit
+ALIAS_SYMBOL(_Exit, _exit)
diff --git a/libc/arch-x86/syscalls/fstat64.S b/libc/arch-x86/syscalls/fstat64.S
index fc16233..ba385a4 100644
--- a/libc/arch-x86/syscalls/fstat64.S
+++ b/libc/arch-x86/syscalls/fstat64.S
@@ -25,5 +25,4 @@
ret
END(fstat64)
- .globl fstat
- .equ fstat, fstat64
+ALIAS_SYMBOL(fstat, fstat64)
diff --git a/libc/arch-x86/syscalls/fstatat64.S b/libc/arch-x86/syscalls/fstatat64.S
index a3697e6..90e87b6 100644
--- a/libc/arch-x86/syscalls/fstatat64.S
+++ b/libc/arch-x86/syscalls/fstatat64.S
@@ -35,5 +35,4 @@
ret
END(fstatat64)
- .globl fstatat
- .equ fstatat, fstatat64
+ALIAS_SYMBOL(fstatat, fstatat64)
diff --git a/libc/arch-x86_64/bionic/setjmp.S b/libc/arch-x86_64/bionic/setjmp.S
index 28981fa..5559f54 100644
--- a/libc/arch-x86_64/bionic/setjmp.S
+++ b/libc/arch-x86_64/bionic/setjmp.S
@@ -129,7 +129,5 @@
ret
END(siglongjmp)
- .globl longjmp
- .equ longjmp, siglongjmp
- .globl _longjmp
- .equ _longjmp, siglongjmp
+ALIAS_SYMBOL(longjmp, siglongjmp)
+ALIAS_SYMBOL(_longjmp, siglongjmp)
diff --git a/libc/arch-x86_64/syscalls/_exit.S b/libc/arch-x86_64/syscalls/_exit.S
index c79091d..1ab4d4f 100644
--- a/libc/arch-x86_64/syscalls/_exit.S
+++ b/libc/arch-x86_64/syscalls/_exit.S
@@ -14,5 +14,4 @@
ret
END(_exit)
- .globl _Exit
- .equ _Exit, _exit
+ALIAS_SYMBOL(_Exit, _exit)
diff --git a/libc/arch-x86_64/syscalls/fallocate.S b/libc/arch-x86_64/syscalls/fallocate.S
index 8307f7e..f6f891b 100644
--- a/libc/arch-x86_64/syscalls/fallocate.S
+++ b/libc/arch-x86_64/syscalls/fallocate.S
@@ -15,5 +15,4 @@
ret
END(fallocate)
- .globl fallocate64
- .equ fallocate64, fallocate
+ALIAS_SYMBOL(fallocate64, fallocate)
diff --git a/libc/arch-x86_64/syscalls/fstat64.S b/libc/arch-x86_64/syscalls/fstat64.S
index de57668..a0d4fa1 100644
--- a/libc/arch-x86_64/syscalls/fstat64.S
+++ b/libc/arch-x86_64/syscalls/fstat64.S
@@ -14,5 +14,4 @@
ret
END(fstat64)
- .globl fstat
- .equ fstat, fstat64
+ALIAS_SYMBOL(fstat, fstat64)
diff --git a/libc/arch-x86_64/syscalls/fstatat64.S b/libc/arch-x86_64/syscalls/fstatat64.S
index 47785bb..1984d68 100644
--- a/libc/arch-x86_64/syscalls/fstatat64.S
+++ b/libc/arch-x86_64/syscalls/fstatat64.S
@@ -15,5 +15,4 @@
ret
END(fstatat64)
- .globl fstatat
- .equ fstatat, fstatat64
+ALIAS_SYMBOL(fstatat, fstatat64)
diff --git a/libc/arch-x86_64/syscalls/ftruncate.S b/libc/arch-x86_64/syscalls/ftruncate.S
index 0365368..7917468 100644
--- a/libc/arch-x86_64/syscalls/ftruncate.S
+++ b/libc/arch-x86_64/syscalls/ftruncate.S
@@ -14,5 +14,4 @@
ret
END(ftruncate)
- .globl ftruncate64
- .equ ftruncate64, ftruncate
+ALIAS_SYMBOL(ftruncate64, ftruncate)
diff --git a/libc/arch-x86_64/syscalls/getrlimit.S b/libc/arch-x86_64/syscalls/getrlimit.S
index 2d272a1..00ed08a 100644
--- a/libc/arch-x86_64/syscalls/getrlimit.S
+++ b/libc/arch-x86_64/syscalls/getrlimit.S
@@ -14,5 +14,4 @@
ret
END(getrlimit)
- .globl getrlimit64
- .equ getrlimit64, getrlimit
+ALIAS_SYMBOL(getrlimit64, getrlimit)
diff --git a/libc/arch-x86_64/syscalls/lseek.S b/libc/arch-x86_64/syscalls/lseek.S
index 153b935..69d60c2 100644
--- a/libc/arch-x86_64/syscalls/lseek.S
+++ b/libc/arch-x86_64/syscalls/lseek.S
@@ -14,5 +14,4 @@
ret
END(lseek)
- .globl lseek64
- .equ lseek64, lseek
+ALIAS_SYMBOL(lseek64, lseek)
diff --git a/libc/arch-x86_64/syscalls/mmap.S b/libc/arch-x86_64/syscalls/mmap.S
index 8aa4780..0c25473 100644
--- a/libc/arch-x86_64/syscalls/mmap.S
+++ b/libc/arch-x86_64/syscalls/mmap.S
@@ -15,5 +15,4 @@
ret
END(mmap)
- .globl mmap64
- .equ mmap64, mmap
+ALIAS_SYMBOL(mmap64, mmap)
diff --git a/libc/arch-x86_64/syscalls/pread64.S b/libc/arch-x86_64/syscalls/pread64.S
index 3aa56e5..eaa47b1 100644
--- a/libc/arch-x86_64/syscalls/pread64.S
+++ b/libc/arch-x86_64/syscalls/pread64.S
@@ -15,5 +15,4 @@
ret
END(pread64)
- .globl pread
- .equ pread, pread64
+ALIAS_SYMBOL(pread, pread64)
diff --git a/libc/arch-x86_64/syscalls/prlimit64.S b/libc/arch-x86_64/syscalls/prlimit64.S
index 63ec492..737b863 100644
--- a/libc/arch-x86_64/syscalls/prlimit64.S
+++ b/libc/arch-x86_64/syscalls/prlimit64.S
@@ -15,5 +15,4 @@
ret
END(prlimit64)
- .globl prlimit
- .equ prlimit, prlimit64
+ALIAS_SYMBOL(prlimit, prlimit64)
diff --git a/libc/arch-x86_64/syscalls/pwrite64.S b/libc/arch-x86_64/syscalls/pwrite64.S
index 2779fb4..edb60af 100644
--- a/libc/arch-x86_64/syscalls/pwrite64.S
+++ b/libc/arch-x86_64/syscalls/pwrite64.S
@@ -15,5 +15,4 @@
ret
END(pwrite64)
- .globl pwrite
- .equ pwrite, pwrite64
+ALIAS_SYMBOL(pwrite, pwrite64)
diff --git a/libc/arch-x86_64/syscalls/sendfile.S b/libc/arch-x86_64/syscalls/sendfile.S
index 117b0aa..c0fa4ee 100644
--- a/libc/arch-x86_64/syscalls/sendfile.S
+++ b/libc/arch-x86_64/syscalls/sendfile.S
@@ -15,5 +15,4 @@
ret
END(sendfile)
- .globl sendfile64
- .equ sendfile64, sendfile
+ALIAS_SYMBOL(sendfile64, sendfile)
diff --git a/libc/arch-x86_64/syscalls/setrlimit.S b/libc/arch-x86_64/syscalls/setrlimit.S
index ef03068..3843ff9 100644
--- a/libc/arch-x86_64/syscalls/setrlimit.S
+++ b/libc/arch-x86_64/syscalls/setrlimit.S
@@ -14,5 +14,4 @@
ret
END(setrlimit)
- .globl setrlimit64
- .equ setrlimit64, setrlimit
+ALIAS_SYMBOL(setrlimit64, setrlimit)
diff --git a/libc/arch-x86_64/syscalls/truncate.S b/libc/arch-x86_64/syscalls/truncate.S
index 2ecd05b..4b953a3 100644
--- a/libc/arch-x86_64/syscalls/truncate.S
+++ b/libc/arch-x86_64/syscalls/truncate.S
@@ -14,5 +14,4 @@
ret
END(truncate)
- .globl truncate64
- .equ truncate64, truncate
+ALIAS_SYMBOL(truncate64, truncate)
diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index 7e11418..4d0afe2 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -56,12 +56,6 @@
"""
-function_alias = """
- .globl %(alias)s
- .equ %(alias)s, %(func)s
-"""
-
-
#
# ARM assembler templates for each syscall stub
#
@@ -284,7 +278,7 @@
# Add any aliases for this syscall.
aliases = syscall["aliases"]
for alias in aliases:
- stub += function_alias % { "func" : syscall["func"], "alias" : alias }
+ stub += "\nALIAS_SYMBOL(%s, %s)\n" % (alias, syscall["func"])
# Use hidden visibility on LP64 for any functions beginning with underscores.
# Force hidden visibility for any functions which begin with 3 underscores
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 44ae4d4..8e8ba84 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -40,6 +40,8 @@
#include <unistd.h>
#include <new>
+#include <string>
+#include <vector>
// Private C library headers.
#include "private/bionic_tls.h"
@@ -98,19 +100,10 @@
nullptr
};
-#define LDPATH_BUFSIZE (LDPATH_MAX*64)
-#define LDPATH_MAX 8
+static std::vector<std::string> g_ld_library_paths;
+static std::vector<std::string> g_ld_preload_names;
-#define LDPRELOAD_BUFSIZE (LDPRELOAD_MAX*64)
-#define LDPRELOAD_MAX 8
-
-static char g_ld_library_paths_buffer[LDPATH_BUFSIZE];
-static const char* g_ld_library_paths[LDPATH_MAX + 1];
-
-static char g_ld_preloads_buffer[LDPRELOAD_BUFSIZE];
-static const char* g_ld_preload_names[LDPRELOAD_MAX + 1];
-
-static soinfo* g_ld_preloads[LDPRELOAD_MAX + 1];
+static std::vector<soinfo*> g_ld_preloads;
__LIBC_HIDDEN__ int g_ld_debug_verbosity;
@@ -295,39 +288,36 @@
}
static void parse_path(const char* path, const char* delimiters,
- const char** array, char* buf, size_t buf_size, size_t max_count) {
+ std::vector<std::string>* paths) {
if (path == nullptr) {
return;
}
- size_t len = strlcpy(buf, path, buf_size);
+ paths->clear();
- size_t i = 0;
- char* buf_p = buf;
- while (i < max_count && (array[i] = strsep(&buf_p, delimiters))) {
- if (*array[i] != '\0') {
- ++i;
+ for (const char *p = path; ; ++p) {
+ size_t len = strcspn(p, delimiters);
+ // skip empty tokens
+ if (len == 0) {
+ continue;
}
- }
- // Forget the last path if we had to truncate; this occurs if the 2nd to
- // last char isn't '\0' (i.e. wasn't originally a delimiter).
- if (i > 0 && len >= buf_size && buf[buf_size - 2] != '\0') {
- array[i - 1] = nullptr;
- } else {
- array[i] = nullptr;
+ paths->push_back(std::string(p, len));
+ p += len;
+
+ if (*p == '\0') {
+ break;
+ }
}
}
static void parse_LD_LIBRARY_PATH(const char* path) {
- parse_path(path, ":", g_ld_library_paths,
- g_ld_library_paths_buffer, sizeof(g_ld_library_paths_buffer), LDPATH_MAX);
+ parse_path(path, ":", &g_ld_library_paths);
}
static void parse_LD_PRELOAD(const char* path) {
// We have historically supported ':' as well as ' ' in LD_PRELOAD.
- parse_path(path, " :", g_ld_preload_names,
- g_ld_preloads_buffer, sizeof(g_ld_preloads_buffer), LDPRELOAD_MAX);
+ parse_path(path, " :", &g_ld_preload_names);
}
#if defined(__arm__)
@@ -883,23 +873,43 @@
return fd;
}
-static int open_library_on_path(const char* name,
- const char* const paths[],
- off64_t* file_offset) {
- char buf[512];
- int fd = -1;
+static bool format_path(char* buf, size_t buf_size, const char* path, const char* name) {
+ int n = __libc_format_buffer(buf, buf_size, "%s/%s", path, name);
+ if (n < 0 || n >= static_cast<int>(buf_size)) {
+ PRINT("Warning: ignoring very long library path: %s/%s", path, name);
+ return false;
+ }
- for (size_t i = 0; paths[i] != nullptr && fd == -1; ++i) {
- const char* const path = paths[i];
- int n = __libc_format_buffer(buf, sizeof(buf), "%s/%s", path, name);
- if (n < 0 || n >= static_cast<int>(sizeof(buf))) {
- PRINT("Warning: ignoring very long library path: %s/%s", path, name);
- return -1;
+ return true;
+}
+
+static int open_library_on_default_path(const char* name, off64_t* file_offset) {
+ for (size_t i = 0; kDefaultLdPaths[i] != nullptr; ++i) {
+ char buf[512];
+ if(!format_path(buf, sizeof(buf), kDefaultLdPaths[i], name)) {
+ continue;
}
- const char* separator = strchr(path, '!');
+ int fd = TEMP_FAILURE_RETRY(open(buf, O_RDONLY | O_CLOEXEC));
+ if (fd != -1) {
+ *file_offset = 0;
+ return fd;
+ }
+ }
- if (separator != nullptr) {
+ return -1;
+}
+
+static int open_library_on_ld_library_path(const char* name, off64_t* file_offset) {
+ for (const auto& path_str : g_ld_library_paths) {
+ char buf[512];
+ const char* const path = path_str.c_str();
+ if (!format_path(buf, sizeof(buf), path, name)) {
+ continue;
+ }
+
+ int fd = -1;
+ if (strchr(buf, '!') != nullptr) {
fd = open_library_in_zipfile(buf, file_offset);
}
@@ -909,9 +919,13 @@
*file_offset = 0;
}
}
+
+ if (fd != -1) {
+ return fd;
+ }
}
- return fd;
+ return -1;
}
static int open_library(const char* name, off64_t* file_offset) {
@@ -934,9 +948,9 @@
}
// Otherwise we try LD_LIBRARY_PATH first, and fall back to the built-in well known paths.
- int fd = open_library_on_path(name, g_ld_library_paths, file_offset);
+ int fd = open_library_on_ld_library_path(name, file_offset);
if (fd == -1) {
- fd = open_library_on_path(name, kDefaultLdPaths, file_offset);
+ fd = open_library_on_default_path(name, file_offset);
}
return fd;
}
@@ -1086,8 +1100,9 @@
return global_group;
}
-static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[],
- soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) {
+static bool find_libraries(soinfo* start_with, const char* const library_names[],
+ size_t library_names_count, soinfo* soinfos[], std::vector<soinfo*>* ld_preloads,
+ size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) {
// Step 0: prepare.
LoadTaskList load_tasks;
for (size_t i = 0; i < library_names_count; ++i) {
@@ -1150,7 +1165,7 @@
// for this run because they are going to appear in the local
// group in the correct order.
si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL);
- ld_preloads[soinfos_count] = si;
+ ld_preloads->push_back(si);
}
if (soinfos_count < library_names_count) {
@@ -2674,8 +2689,9 @@
StringLinkedList needed_library_name_list;
size_t needed_libraries_count = 0;
size_t ld_preloads_count = 0;
- while (g_ld_preload_names[ld_preloads_count] != nullptr) {
- needed_library_name_list.push_back(g_ld_preload_names[ld_preloads_count++]);
+
+ for (const auto& ld_preload_name : g_ld_preload_names) {
+ needed_library_name_list.push_back(ld_preload_name.c_str());
++needed_libraries_count;
}
@@ -2689,7 +2705,9 @@
memset(needed_library_names, 0, sizeof(needed_library_names));
needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count);
- if (needed_libraries_count > 0 && !find_libraries(si, needed_library_names, needed_libraries_count, nullptr, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) {
+ if (needed_libraries_count > 0 &&
+ !find_libraries(si, needed_library_names, needed_libraries_count, nullptr,
+ &g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) {
__libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer());
exit(EXIT_FAILURE);
} else if (needed_libraries_count == 0) {
diff --git a/tools/bionicbb/gerrit.py b/tools/bionicbb/gerrit.py
index 76e42b4..40719b4 100644
--- a/tools/bionicbb/gerrit.py
+++ b/tools/bionicbb/gerrit.py
@@ -62,8 +62,8 @@
}
}
"""
- details = call('/changes/{}/revisions/{}/review'.format(
- change_id, patch_set))
+ details = json.loads(call('/changes/{}/revisions/{}/review'.format(
+ change_id, patch_set)))
labels = {'Code-Review': {}, 'Verified': {}}
for review in details['labels']['Code-Review']['all']:
if 'value' in review and 'email' in review: