example.com
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

devel

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
devel@uclibc-ng.org

  • 1171 discussions
uClibc-ng - small C library for embedded systems branch upstream updated. 409f14d9b5e47513d5c939120a33965997c8ceb2
by wbx@helium.waldemar-brodkorb.de 20 Feb '15

20 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, upstream has been updated via 409f14d9b5e47513d5c939120a33965997c8ceb2 (commit) via 30a92760abebf268c255aa8a15c35ca0c865fe88 (commit) via cf8e466f8959fb22ab41cfe5e16951ef4bd19a80 (commit) via be58779614b2fe9aa57a9315be9dc004dfd77b3b (commit) via cd03281d3c2c168f32e42783ee78995772a1763a (commit) via 2a2b1d2a3e97b4353eec5a40c0de4b932340b3fc (commit) via df273fedf4fef25983ef6ec7e42b03d54f44960d (commit) via afab56958f1cbb47b831ee3ebff231dfbae74af2 (commit) via 89b63496e88c31c2714e42656212078388718b78 (commit) via 5d5c77daae197b00f89ad1517ffb5a7a01a78cff (commit) via 9fc6da20daeac3f06116630764c36fc4943b1f3a (commit) via 31b0af2da8120e2b3f176d955eeca034e434b1b7 (commit) via f74294bd6768af59e33dc14c6fed41f01d0adc5b (commit) via 65bc357213f1c08e339757923740f5d68212cf76 (commit) via 90b115c036d68c4c581ae974cdbf5352ad7daa84 (commit) via 7bb51423cccff0b524ba4ddd0679e8c7c1e4a7b1 (commit) via c2460b9b7b8c76098dfb1313be4aa4a4a65ff619 (commit) via c049c4d872af18d668bb98094ce4334e44508fbe (commit) via 181d410ad00cddd1d6c9f4835e129136b74c5187 (commit) from 673c426bfbe58ee626d346b13365b73712f961ba (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 409f14d9b5e47513d5c939120a33965997c8ceb2 Author: Steve Ellcey <sellcey(a)imgtec.com> Date: Thu Feb 19 16:03:26 2015 -0800 Allow use of executable RUNPATH/RPATH when finding libraries. This option will modify ldso so that it will use the executables RUNPATH/RPATH to find to find libraries even though this behavour is not standard. Setting this option causes the uclibc dynamic linker behavour to match the glibc dynamic linker. Signed-off-by: Steve Ellcey <sellcey(a)imgtec.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 30a92760abebf268c255aa8a15c35ca0c865fe88 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Fri Feb 20 17:13:26 2015 +0530 ARC: Remove unused EM_ARC_A5 Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit cf8e466f8959fb22ab41cfe5e16951ef4bd19a80 Author: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> Date: Fri Feb 20 12:35:36 2015 +0100 include/elf.h: bump EM_NUM and remove a few ancient entries Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit be58779614b2fe9aa57a9315be9dc004dfd77b3b Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Fri Feb 20 15:27:08 2015 +0530 elf: Add STT_GNU_IFUNC from glibc perf in upstream Linux kernel 3.17 onwards expects STT_GNU_IFUNC replicate it from glibc Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit cd03281d3c2c168f32e42783ee78995772a1763a Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Thu Feb 19 19:14:02 2015 +0530 sync_file_range: fix standard UCLIBC_SYSCALL_ALIGN_64BIT handling Currently UCLIBC_SYSCALL_ALIGN_64BIT is not explicitly handled. Fix that and make sure the special handling is done for powerpc/xtensa which use UCLIBC_SYSCALL_ALIGN_64BIT but don't use hole punched syscall handler in kernel. Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Cc: Baruch Siach <baruch(a)tkos.co.il> Cc: Max Filippov <jcmvbkbc(a)gmail.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 2a2b1d2a3e97b4353eec5a40c0de4b932340b3fc Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Thu Feb 19 19:14:01 2015 +0530 posix_fadvise: handle 2 variants for SYSCALL_ALIGN_64BIT arm/powerpc/xtensa pass @advice as 2nd arg to syscall (vs. canonical 4th) Current code however does this for UCLIBC_SYSCALL_ALIGN_64BIT which powerpc/xtensa also happen to define. This is not true for ARCv2 ISA and possibly other arch of future with 64-bit even register requirement, which uses the standard syscall handler in kernel. Fix that by providing 2 variants of SYSCALL_ALIGN_64BIT Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Cc: Baruch Siach <baruch(a)tkos.co.il> Cc: Max Filippov <jcmvbkbc(a)gmail.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit df273fedf4fef25983ef6ec7e42b03d54f44960d Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Thu Feb 19 19:14:00 2015 +0530 ARCv2: optimised string routines Signed-off-by: Claudiu Zissulescu <claziss(a)synopsys.com> Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit afab56958f1cbb47b831ee3ebff231dfbae74af2 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Thu Feb 19 19:13:59 2015 +0530 ARCv2 ISA support This is next gen Instruction Set Architecture from Synopsys and basis for the ARC HS family of processors. http://www.synopsys.com/dw/ipdir.php?ds=arc-hs38-processor&elq_mid=5732&elq… http://www.synopsys.com/IP/ProcessorIP/ARCProcessors/arc-hs/Pages/default.a… Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 89b63496e88c31c2714e42656212078388718b78 Author: Anton Kolesov <anton.kolesov(a)synopsys.com> Date: Wed Feb 4 15:34:51 2015 +0300 ARC: Add GNU glob to ARC defconfigs GNU glob is required by make. Signed-off-by: Anton Kolesov <anton.kolesov(a)synopsys.com> Cc: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 5d5c77daae197b00f89ad1517ffb5a7a01a78cff Author: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> Date: Tue Feb 17 23:41:47 2015 +0100 libc: add setns() Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 9fc6da20daeac3f06116630764c36fc4943b1f3a Author: Khem Raj <raj.khem(a)gmail.com> Date: Thu Feb 20 00:30:18 2014 -0800 Add eventfd_read() and eventfd_write() Signed-off-by: Khem Raj <raj.khem(a)gmail.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 31b0af2da8120e2b3f176d955eeca034e434b1b7 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Sat Feb 14 15:25:44 2015 +0530 signal.h: elide memset from sigemptyset Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit f74294bd6768af59e33dc14c6fed41f01d0adc5b Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Sat Feb 14 15:25:42 2015 +0530 ARC: sigaction: inline syscall trap Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 65bc357213f1c08e339757923740f5d68212cf76 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Sat Feb 14 15:25:43 2015 +0530 ARC: sigaction: fold default sigrestorer into "C" Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 90b115c036d68c4c581ae974cdbf5352ad7daa84 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Sat Feb 14 15:25:41 2015 +0530 ARC: siagction: opencode memcpy Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 7bb51423cccff0b524ba4ddd0679e8c7c1e4a7b1 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Sat Feb 14 15:25:40 2015 +0530 ARC: remove stale TRUNCATE64_HAS_4_ARGS Not relevant anymore since commit e8cc14e59ed3f66b84e, "libc: rename TRUNCATE64_HAS_4_ARGS to SYSCALL_ALIGN_64BIT" Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit c2460b9b7b8c76098dfb1313be4aa4a4a65ff619 Author: Alexey Brodkin <abrodkin(a)synopsys.com> Date: Sat Feb 14 15:25:39 2015 +0530 ARC defconfigs: enable some items perf: UCLIBC_HAS_GLIBC_CUSTOM_STREAMS elfutils: UCLIBC_HAS_PROGRAM_INVOCATION_NAME Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit c049c4d872af18d668bb98094ce4334e44508fbe Author: Alexey Brodkin <abrodkin(a)synopsys.com> Date: Sat Feb 14 15:25:38 2015 +0530 ARC: add configuration option for MMU page size ARC CPU may have MMU page size of 4/8(default)/16k. uClibc needs to have page size configured accodring to HW it will be run on. Signed-off-by: Alexey Brodkin <abrodkin(a)synopsys.com> Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 181d410ad00cddd1d6c9f4835e129136b74c5187 Author: Vineet Gupta <vgupta(a)synopsys.com> Date: Sat Feb 14 15:25:37 2015 +0530 ARC: Conditionalise certain relocations as provided by TLS tools only uClibc mainline supports NPTL which in turns depends on TLS support in the tools (gcc/binutils), which is yet to be merged in dev branches. However there is some non NPTL code in uClibc, added as part of NPTL effort, which relies on certain relocations only provided by NPTL binutils. As a result building the current upstream even for LT.old breaks. So conditionalize that code on tools, bu tin lack of specific versions, we use NPTL enabling as a sign the tools are equipped to handle those relos. Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> ----------------------------------------------------------------------- Summary of changes: Rules.mak | 1 + extra/Configs/Config.arc | 23 ++ extra/Configs/Config.in | 10 + .../defconfigs/arc/{defconfig => arcv2_defconfig} | 6 +- extra/Configs/defconfigs/arc/defconfig | 5 +- extra/Configs/defconfigs/arc/tb10x_defconfig | 1 + include/elf.h | 26 +-- include/signal.h | 3 - ldso/ldso/arc/dl-startup.h | 7 + ldso/ldso/arc/dl-sysdep.h | 25 ++- ldso/ldso/arc/elfinterp.c | 4 + ldso/ldso/dl-elf.c | 32 +++ libc/string/arc/arcv2/memcpy.S | 236 ++++++++++++++++++++ libc/string/arc/arcv2/memset.S | 85 +++++++ libc/string/arc/arcv2/strcmp.S | 83 +++++++ libc/string/arc/memcmp.S | 29 +++ libc/sysdeps/linux/arc/Makefile.arch | 3 +- libc/sysdeps/linux/arc/bits/syscalls.h | 10 +- libc/sysdeps/linux/arc/bits/uClibc_arch_features.h | 10 +- libc/sysdeps/linux/arc/bits/uClibc_page.h | 17 +- libc/sysdeps/linux/arc/sigaction.c | 28 ++- libc/sysdeps/linux/arc/sigrestorer.S | 21 -- libc/sysdeps/linux/common/Makefile.in | 3 + libc/sysdeps/linux/common/bits/sched.h | 53 +++-- libc/sysdeps/linux/common/eventfd.c | 2 +- .../sysdeps/linux/common/eventfd_read.c | 10 +- .../sysdeps/linux/common/eventfd_write.c | 11 +- libc/sysdeps/linux/common/posix_fadvise.c | 10 +- libc/sysdeps/linux/common/posix_fadvise64.c | 11 +- libc/sysdeps/linux/common/setns.c | 15 ++ libc/sysdeps/linux/common/stubs.c | 4 + libc/sysdeps/linux/common/sync_file_range.c | 6 +- libc/sysdeps/linux/common/sys/eventfd.h | 6 +- libc/sysdeps/linux/sparc/bits/eventfd.h | 2 +- 34 files changed, 691 insertions(+), 107 deletions(-) copy extra/Configs/defconfigs/arc/{defconfig => arcv2_defconfig} (83%) create mode 100644 libc/string/arc/arcv2/memcpy.S create mode 100644 libc/string/arc/arcv2/memset.S create mode 100644 libc/string/arc/arcv2/strcmp.S delete mode 100644 libc/sysdeps/linux/arc/sigrestorer.S copy libpthread/linuxthreads/pthread_seteuid.c => libc/sysdeps/linux/common/eventfd_read.c (77%) copy libpthread/linuxthreads/pthread_seteuid.c => libc/sysdeps/linux/common/eventfd_write.c (77%) create mode 100644 libc/sysdeps/linux/common/setns.c diff --git a/Rules.mak b/Rules.mak index 9f5fe85..ea254f1 100644 --- a/Rules.mak +++ b/Rules.mak @@ -543,6 +543,7 @@ endif ifeq ($(TARGET_ARCH),arc) CPU_CFLAGS-y += -mlock -mswape CPU_CFLAGS-$(CONFIG_ARC_CPU_700) += -mA7 + CPU_CFLAGS-$(CONFIG_ARC_CPU_HS) += -mcpu=archs CPU_LDFLAGS-y += $(CPU_CFLAGS) -marclinux endif diff --git a/extra/Configs/Config.arc b/extra/Configs/Config.arc index 40ff114..0c0bc71 100644 --- a/extra/Configs/Config.arc +++ b/extra/Configs/Config.arc @@ -20,4 +20,27 @@ config CONFIG_ARC_CPU_700 help ARCompact ISA based ARC CPU +config CONFIG_ARC_CPU_HS + bool "ARC-HS" + select ARCH_HAS_MMU + help + Next Generation ARCv2 ISA based Processors + +endchoice + +choice + prompt "MMU Page Size" + default CONFIG_ARC_PAGE_SIZE_8K + +config CONFIG_ARC_PAGE_SIZE_8K + bool "8KB" + help + Choose between 4k, 8k (default) or 16k + +config CONFIG_ARC_PAGE_SIZE_16K + bool "16KB" + +config CONFIG_ARC_PAGE_SIZE_4K + bool "4KB" + endchoice diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in index 8e603b2..f5210cd 100644 --- a/extra/Configs/Config.in +++ b/extra/Configs/Config.in @@ -255,6 +255,7 @@ config TARGET_SUBARCH default "i486" if CONFIG_486 default "i586" if CONFIG_586 default "i686" if CONFIG_686 + default "arcv2" if CONFIG_ARC_CPU_HS default "" source "extra/Configs/Config.in.arch" @@ -418,6 +419,15 @@ config LDSO_RUNPATH Usage of RUNPATH tags is not too common, so disabling this feature should be safe for most people. +config LDSO_RUNPATH_OF_EXECUTABLE + bool "Use executables RUNPATH/RPATH when searching for libraries." + depends on LDSO_RUNPATH + default n + help + Use the executables RUNPATH/RPATH to find to find libraries even + though this behavour is not standard. Setting this option causes + the uclibc dynamic linker behavour to match the glibc dynamic linker. + config LDSO_SAFE_RUNPATH bool "Allow only RUNPATH beginning with /" depends on LDSO_RUNPATH diff --git a/extra/Configs/defconfigs/arc/defconfig b/extra/Configs/defconfigs/arc/arcv2_defconfig similarity index 83% copy from extra/Configs/defconfigs/arc/defconfig copy to extra/Configs/defconfigs/arc/arcv2_defconfig index 840c59f..d3a7dc7 100644 --- a/extra/Configs/defconfigs/arc/defconfig +++ b/extra/Configs/defconfigs/arc/arcv2_defconfig @@ -1,3 +1,4 @@ +CONFIG_ARC_CPU_HS=y ARCH_WANTS_LITTLE_ENDIAN=y # UCLIBC_HAS_FPU is not set DO_C99_MATH=y @@ -6,12 +7,13 @@ KERNEL_HEADERS="%KERNEL_HEADERS%" # LDSO_CACHE_SUPPORT is not set LDSO_RUNPATH=y # LDSO_SAFE_RUNPATH is not set -UCLIBC_HAS_THREADS_NATIVE=y +LINUXTHREADS_OLD=y PTHREADS_DEBUG_SUPPORT=y UCLIBC_HAS_OBSTACK=y UCLIBC_SUSV2_LEGACY=y UCLIBC_SUSV3_LEGACY=y UCLIBC_SUSV4_LEGACY=y +UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y UCLIBC_SV4_DEPRECATED=y UCLIBC_HAS_RPC=y @@ -19,8 +21,10 @@ UCLIBC_HAS_FULL_RPC=y UCLIBC_HAS_RESOLVER_SUPPORT=y UCLIBC_HAS_LIBRESOLV_STUB=y UCLIBC_HAS_LOCALE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y UCLIBC_HAS_NFTW=y UCLIBC_HAS_FTW=y +UCLIBC_HAS_GNU_GLOB=y RUNTIME_PREFIX="%RUNTIME_PREFIX%" DEVEL_PREFIX="%DEVEL_PREFIX%" CROSS_COMPILER_PREFIX="arc-linux-uclibc-" diff --git a/extra/Configs/defconfigs/arc/defconfig b/extra/Configs/defconfigs/arc/defconfig index 840c59f..490bc22 100644 --- a/extra/Configs/defconfigs/arc/defconfig +++ b/extra/Configs/defconfigs/arc/defconfig @@ -6,12 +6,13 @@ KERNEL_HEADERS="%KERNEL_HEADERS%" # LDSO_CACHE_SUPPORT is not set LDSO_RUNPATH=y # LDSO_SAFE_RUNPATH is not set -UCLIBC_HAS_THREADS_NATIVE=y +LINUXTHREADS_OLD=y PTHREADS_DEBUG_SUPPORT=y UCLIBC_HAS_OBSTACK=y UCLIBC_SUSV2_LEGACY=y UCLIBC_SUSV3_LEGACY=y UCLIBC_SUSV4_LEGACY=y +UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y UCLIBC_SV4_DEPRECATED=y UCLIBC_HAS_RPC=y @@ -19,8 +20,10 @@ UCLIBC_HAS_FULL_RPC=y UCLIBC_HAS_RESOLVER_SUPPORT=y UCLIBC_HAS_LIBRESOLV_STUB=y UCLIBC_HAS_LOCALE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y UCLIBC_HAS_NFTW=y UCLIBC_HAS_FTW=y +UCLIBC_HAS_GNU_GLOB=y RUNTIME_PREFIX="%RUNTIME_PREFIX%" DEVEL_PREFIX="%DEVEL_PREFIX%" CROSS_COMPILER_PREFIX="arc-linux-uclibc-" diff --git a/extra/Configs/defconfigs/arc/tb10x_defconfig b/extra/Configs/defconfigs/arc/tb10x_defconfig index 60065f9..405a4ea 100644 --- a/extra/Configs/defconfigs/arc/tb10x_defconfig +++ b/extra/Configs/defconfigs/arc/tb10x_defconfig @@ -30,6 +30,7 @@ UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y UCLIBC_HAS_PRINTF_M_SPEC=y UCLIBC_HAS_NFTW=y UCLIBC_HAS_FTW=y +UCLIBC_HAS_GNU_GLOB=y RUNTIME_PREFIX="%RUNTIME_PREFIX%" DEVEL_PREFIX="%DEVEL_PREFIX%" CROSS_COMPILER_PREFIX="arc-linux-uclibc-" diff --git a/include/elf.h b/include/elf.h index 1979209..39208ea 100644 --- a/include/elf.h +++ b/include/elf.h @@ -258,7 +258,6 @@ typedef struct #define EM_MN10200 90 /* Matsushita MN10200 */ #define EM_PJ 91 /* picoJava */ #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ -#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ #define EM_ARCOMPACT 93 /* ARCompact ISA based Cores: ARC 700 */ #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ #define EM_IP2K 101 /* Ubicom IP2022 micro controller */ @@ -267,8 +266,13 @@ typedef struct #define EM_BLACKFIN 106 /* Analog Devices Blackfin */ #define EM_ALTERA_NIOS2 113 /* Altera Nios II soft-core processor */ #define EM_CRX 114 /* National Semiconductor CRX */ -#define EM_NUM 95 #define EM_TI_C6000 140 +#define EM_METAG 174 /* Imagination Technologies Meta */ +#define EM_MICROBLAZE 189 /* Xilinx Microblaze */ +#define EM_ARCV2 195 /* ARCv2 Cores */ + +/* NEXT FREE NUMBER: Increment this after adding your official arch number */ +#define EM_NUM 196 /* If it is necessary to assign new unofficial EM_* values, please pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision @@ -282,22 +286,9 @@ typedef struct unofficial e_machine number should eventually ask registry(a)caldera.com for an officially blessed number to be added to the list above. */ -/* Imagination Technologies Meta */ -#define EM_METAG 174 - -/* picoJava */ -#define EM_PJ_OLD 99 - /* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */ #define EM_CYGNUS_POWERPC 0x9025 -/* Old version of Sparc v9, from before the ABI; this should be - removed shortly. */ -#define EM_OLD_SPARCV9 11 - -/* Old version of PowerPC, this should be removed shortly. */ -#define EM_PPC_OLD 17 - /* (Deprecated) Temporary number for the OpenRISC processor. */ #define EM_OR32 0x8472 @@ -376,9 +367,6 @@ typedef struct */ #define EM_MICROBLAZE_OLD 0xbaab -/* Xilinx Microblaze (official) */ -#define EM_MICROBLAZE 189 - /* Legal values for e_version (version). */ #define EV_NONE 0 /* Invalid ELF version */ @@ -565,6 +553,7 @@ typedef struct #define STB_WEAK 2 /* Weak symbol */ #define STB_NUM 3 /* Number of defined types. */ #define STB_LOOS 10 /* Start of OS-specific */ +#define STB_GNU_UNIQUE 10 /* Unique symbol. */ #define STB_HIOS 12 /* End of OS-specific */ #define STB_LOPROC 13 /* Start of processor-specific */ #define STB_HIPROC 15 /* End of processor-specific */ @@ -580,6 +569,7 @@ typedef struct #define STT_TLS 6 /* Symbol is thread-local data object*/ #define STT_NUM 7 /* Number of defined types. */ #define STT_LOOS 10 /* Start of OS-specific */ +#define STT_GNU_IFUNC 10 /* Symbol is indirect code object */ #define STT_HIOS 12 /* End of OS-specific */ #define STT_LOPROC 13 /* Start of processor-specific */ #define STT_HIPROC 15 /* End of processor-specific */ diff --git a/include/signal.h b/include/signal.h index be24cf3..38baacc 100644 --- a/include/signal.h +++ b/include/signal.h @@ -493,10 +493,7 @@ extern int __libc_current_sigrtmax (void) __THROW; #ifdef _LIBC extern sigset_t _sigintr attribute_hidden; -/* simplified version without parameter checking */ # include <string.h> -# undef __sigemptyset -# define __sigemptyset(ss) (memset(ss, '\0', sizeof(sigset_t)), 0) #endif #endif /* signal.h */ diff --git a/ldso/ldso/arc/dl-startup.h b/ldso/ldso/arc/dl-startup.h index 8e26ae8..ef89b53 100644 --- a/ldso/ldso/arc/dl-startup.h +++ b/ldso/ldso/arc/dl-startup.h @@ -33,9 +33,16 @@ __asm__( " ; If ldso ran as cmd with executable file nm as arg \n" " ; skip the extra args calc by dl_start() \n" " ld_s r1, [sp] ; orig argc from aux-vec Tbl \n" + +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ " ld r12, [pcl, _dl_skip_args@pcl] \n" " add r2, pcl, _dl_fini@pcl ; finalizer \n" +#else + " add r12, pcl, _dl_skip_args-.+(.&2) \n" + " ld r12, [r12] \n" + " add r2, pcl, _dl_fini-.+(.&2) ; finalizer \n" +#endif " add2 sp, sp, r12 ; discard argv entries from stack\n" " sub_s r1, r1, r12 ; adjusted argc, on stack \n" diff --git a/ldso/ldso/arc/dl-sysdep.h b/ldso/ldso/arc/dl-sysdep.h index d71e16b..ca62a2c 100644 --- a/ldso/ldso/arc/dl-sysdep.h +++ b/ldso/ldso/arc/dl-sysdep.h @@ -69,11 +69,16 @@ do { \ } while(0) /* Here we define the magic numbers that this dynamic loader should accept */ +#ifdef __A7__ #define MAGIC1 EM_ARCOMPACT +#define ELF_TARGET "ARCompact" /* For error messages */ +#elif defined(__HS__) +#define MAGIC1 EM_ARCV2 +#define ELF_TARGET "ARCv2" /* For error messages */ +#endif + #undef MAGIC2 -/* Used for error messages */ -#define ELF_TARGET "ARC" struct elf_resolve; extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, @@ -81,6 +86,8 @@ extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, extern unsigned __udivmodsi4(unsigned, unsigned) attribute_hidden; +#ifdef __A7__ +/* using "C" causes an indirection via __umodsi3 -> __udivmodsi4 */ #define do_rem(result, n, base) ((result) = \ \ __builtin_constant_p (base) ? (n) % (unsigned) (base) : \ @@ -95,6 +102,10 @@ extern unsigned __udivmodsi4(unsigned, unsigned) attribute_hidden; r1; \ }) \ ) +#elif defined(__HS__) +/* ARCv2 has hardware assisted divide/mod */ +#define do_rem(result, n, base) ((result) = (n) % (unsigned) (base)) +#endif /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or TLS variable so PLT entries should not be allowed to define the value. @@ -127,6 +138,7 @@ static __always_inline Elf32_Addr elf_machine_dynamic(void) /* Return the run-time load address of the shared object. */ static __always_inline Elf32_Addr elf_machine_load_address(void) { +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ /* To find the loadaddr we subtract the runtime addr of a non-local symbol * say _DYNAMIC from it's build-time addr. * N.B., gotpc loads get optimized by the linker if it finds the symbol @@ -144,6 +156,15 @@ static __always_inline Elf32_Addr elf_machine_load_address(void) "sub %0, %0, %1 ;delta" "\n" : "=&r" (addr), "=r"(tmp) ); +#else + Elf32_Addr addr, tmp; + __asm__ ( + "ld %1, [pcl, _dl_start@gotpc] ;build addr of _dl_start \n" + "add %0, pcl, _dl_start-.+(.&2) ;runtime addr of _dl_start \n" + "sub %0, %0, %1 ;delta \n" + : "=&r" (addr), "=r"(tmp) + ); +#endif return addr; } diff --git a/ldso/ldso/arc/elfinterp.c b/ldso/ldso/arc/elfinterp.c index d26c947..7c31d3a 100644 --- a/ldso/ldso/arc/elfinterp.c +++ b/ldso/ldso/arc/elfinterp.c @@ -11,7 +11,11 @@ */ #include "ldso.h" +#ifdef __A7__ #define ARC_PLT_SIZE 12 +#else +#define ARC_PLT_SIZE 16 +#endif unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, unsigned int plt_pc) diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index 54501d1..5631905 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -308,6 +308,38 @@ struct elf_resolve *_dl_load_shared_library(unsigned rflags, struct dyn_elf **rp if (tpnt1 != NULL) return tpnt1; +#ifdef __LDSO_RUNPATH_OF_EXECUTABLE__ + /* Very last resort, try the executable's DT_RUNPATH and DT_RPATH */ + /* http://www.sco.com/developers/gabi/latest/ch5.dynamic.html#shobj_dependenci… + * The set of directories specified by a given DT_RUNPATH entry is + * used to find only the immediate dependencies of the executable or + * shared object containing the DT_RUNPATH entry. That is, it is + * used only for those dependencies contained in the DT_NEEDED + * entries of the dynamic structure containing the DT_RUNPATH entry, + * itself. One object's DT_RUNPATH entry does not affect the search + * for any other object's dependencies. + * + * glibc (around 2.19) violates this and the usual suspects are + * abusing this bug^Wrelaxed, user-friendly behaviour. + */ + + pnt = (char *) _dl_loaded_modules->dynamic_info[DT_RUNPATH]; + if (pnt) { + pnt += (unsigned long) _dl_loaded_modules->dynamic_info[DT_STRTAB]; + _dl_if_debug_dprint("\tsearching exe's RUNPATH='%s'\n", pnt); + if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt)) != NULL) + return tpnt1; + } + pnt = (char *) _dl_loaded_modules->dynamic_info[DT_RPATH]; + if (pnt) { + pnt += (unsigned long) _dl_loaded_modules->dynamic_info[DT_STRTAB]; + _dl_if_debug_dprint("\tsearching exe's RPATH='%s'\n", pnt); + if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt)) != NULL) + return tpnt1; + } +#endif + + goof: /* Well, we shot our wad on that one. All we can do now is punt */ if (_dl_internal_error_number) diff --git a/libc/string/arc/arcv2/memcpy.S b/libc/string/arc/arcv2/memcpy.S new file mode 100644 index 0000000..7573daf --- /dev/null +++ b/libc/string/arc/arcv2/memcpy.S @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) + * + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include <features.h> +#include <sysdep.h> + +#ifdef __LITTLE_ENDIAN__ +# define SHIFT_1(RX,RY,IMM) asl RX, RY, IMM ; << +# define SHIFT_2(RX,RY,IMM) lsr RX, RY, IMM ; >> +# define MERGE_1(RX,RY,IMM) asl RX, RY, IMM +# define MERGE_2(RX,RY,IMM) +# define EXTRACT_1(RX,RY,IMM) and RX, RY, 0xFFFF +# define EXTRACT_2(RX,RY,IMM) lsr RX, RY, IMM +#else +# define SHIFT_1(RX,RY,IMM) lsr RX, RY, IMM ; >> +# define SHIFT_2(RX,RY,IMM) asl RX, RY, IMM ; << +# define MERGE_1(RX,RY,IMM) asl RX, RY, IMM ; << +# define MERGE_2(RX,RY,IMM) asl RX, RY, IMM ; << +# define EXTRACT_1(RX,RY,IMM) lsr RX, RY, IMM +# define EXTRACT_2(RX,RY,IMM) lsr RX, RY, 0x08 +#endif + +#ifdef __LL64__ +# define PREFETCH_READ(RX) prefetch [RX, 56] +# define PREFETCH_WRITE(RX) prefetchw [RX, 64] +# define LOADX(DST,RX) ldd.ab DST, [RX, 8] +# define STOREX(SRC,RX) std.ab SRC, [RX, 8] +# define ZOLSHFT 5 +# define ZOLAND 0x1F +#else +# define PREFETCH_READ(RX) prefetch [RX, 28] +# define PREFETCH_WRITE(RX) prefetchw [RX, 32] +# define LOADX(DST,RX) ld.ab DST, [RX, 4] +# define STOREX(SRC,RX) st.ab SRC, [RX, 4] +# define ZOLSHFT 4 +# define ZOLAND 0xF +#endif + +ENTRY(memcpy) + prefetch [r1] ; Prefetch the read location + prefetchw [r0] ; Prefetch the write location + mov.f 0, r2 +;;; if size is zero + jz.d [blink] + mov r3, r0 ; don't clobber ret val + +;;; if size <= 8 + cmp r2, 8 + bls.d @.Lsmallchunk + mov.f lp_count, r2 + + and.f r4, r0, 0x03 + rsub lp_count, r4, 4 + lpnz @.Laligndestination + ;; LOOP BEGIN + ldb.ab r5, [r1,1] + sub r2, r2, 1 + stb.ab r5, [r3,1] +.Laligndestination: + +;;; Check the alignment of the source + and.f r4, r1, 0x03 + bnz.d @.Lsourceunaligned + +;;; CASE 0: Both source and destination are 32bit aligned +;;; Convert len to Dwords, unfold x4 + lsr.f lp_count, r2, ZOLSHFT + lpnz @.Lcopy32_64bytes + ;; LOOP START + LOADX (r6, r1) + PREFETCH_READ (r1) + PREFETCH_WRITE (r3) + LOADX (r8, r1) + LOADX (r10, r1) + LOADX (r4, r1) + STOREX (r6, r3) + STOREX (r8, r3) + STOREX (r10, r3) + STOREX (r4, r3) +.Lcopy32_64bytes: + + and.f lp_count, r2, ZOLAND ;Last remaining 31 bytes +.Lsmallchunk: + lpnz @.Lcopyremainingbytes + ;; LOOP START + ldb.ab r5, [r1,1] + stb.ab r5, [r3,1] +.Lcopyremainingbytes: + + j [blink] +;;; END CASE 0 + +.Lsourceunaligned: + cmp r4, 2 + beq.d @.LunalignedOffby2 + sub r2, r2, 1 + + bhi.d @.LunalignedOffby3 + ldb.ab r5, [r1, 1] + +;;; CASE 1: The source is unaligned, off by 1 + ;; Hence I need to read 1 byte for a 16bit alignment + ;; and 2bytes to reach 32bit alignment + ldh.ab r6, [r1, 2] + sub r2, r2, 2 + ;; Convert to words, unfold x2 + lsr.f lp_count, r2, 3 + MERGE_1 (r6, r6, 8) + MERGE_2 (r5, r5, 24) + or r5, r5, r6 + + ;; Both src and dst are aligned + lpnz @.Lcopy8bytes_1 + ;; LOOP START + ld.ab r6, [r1, 4] + prefetch [r1, 28] ;Prefetch the next read location + ld.ab r8, [r1,4] + prefetchw [r3, 32] ;Prefetch the next write location + + SHIFT_1 (r7, r6, 24) + or r7, r7, r5 + SHIFT_2 (r5, r6, 8) + + SHIFT_1 (r9, r8, 24) + or r9, r9, r5 + SHIFT_2 (r5, r8, 8) + + st.ab r7, [r3, 4] + st.ab r9, [r3, 4] +.Lcopy8bytes_1: + + ;; Write back the remaining 16bits + EXTRACT_1 (r6, r5, 16) + sth.ab r6, [r3, 2] + ;; Write back the remaining 8bits + EXTRACT_2 (r5, r5, 16) + stb.ab r5, [r3, 1] + + and.f lp_count, r2, 0x07 ;Last 8bytes + lpnz @.Lcopybytewise_1 + ;; LOOP START + ldb.ab r6, [r1,1] + stb.ab r6, [r3,1] +.Lcopybytewise_1: + j [blink] + +.LunalignedOffby2: +;;; CASE 2: The source is unaligned, off by 2 + ldh.ab r5, [r1, 2] + sub r2, r2, 1 + + ;; Both src and dst are aligned + ;; Convert to words, unfold x2 + lsr.f lp_count, r2, 3 +#ifdef __BIG_ENDIAN__ + asl.nz r5, r5, 16 +#endif + lpnz @.Lcopy8bytes_2 + ;; LOOP START + ld.ab r6, [r1, 4] + prefetch [r1, 28] ;Prefetch the next read location + ld.ab r8, [r1,4] + prefetchw [r3, 32] ;Prefetch the next write location + + SHIFT_1 (r7, r6, 16) + or r7, r7, r5 + SHIFT_2 (r5, r6, 16) + + SHIFT_1 (r9, r8, 16) + or r9, r9, r5 + SHIFT_2 (r5, r8, 16) + + st.ab r7, [r3, 4] + st.ab r9, [r3, 4] +.Lcopy8bytes_2: + +#ifdef __BIG_ENDIAN__ + lsr.nz r5, r5, 16 +#endif + sth.ab r5, [r3, 2] + + and.f lp_count, r2, 0x07 ;Last 8bytes + lpnz @.Lcopybytewise_2 + ;; LOOP START + ldb.ab r6, [r1,1] + stb.ab r6, [r3,1] +.Lcopybytewise_2: + j [blink] + +.LunalignedOffby3: +;;; CASE 3: The source is unaligned, off by 3 +;;; Hence, I need to read 1byte for achieve the 32bit alignment + + ;; Both src and dst are aligned + ;; Convert to words, unfold x2 + lsr.f lp_count, r2, 3 +#ifdef __BIG_ENDIAN__ + asl.ne r5, r5, 24 +#endif + lpnz @.Lcopy8bytes_3 + ;; LOOP START + ld.ab r6, [r1, 4] + prefetch [r1, 28] ;Prefetch the next read location + ld.ab r8, [r1,4] + prefetchw [r3, 32] ;Prefetch the next write location + + SHIFT_1 (r7, r6, 8) + or r7, r7, r5 + SHIFT_2 (r5, r6, 24) + + SHIFT_1 (r9, r8, 8) + or r9, r9, r5 + SHIFT_2 (r5, r8, 24) + + st.ab r7, [r3, 4] + st.ab r9, [r3, 4] +.Lcopy8bytes_3: + +#ifdef __BIG_ENDIAN__ + lsr.nz r5, r5, 24 +#endif + stb.ab r5, [r3, 1] + + and.f lp_count, r2, 0x07 ;Last 8bytes + lpnz @.Lcopybytewise_3 + ;; LOOP START + ldb.ab r6, [r1,1] + stb.ab r6, [r3,1] +.Lcopybytewise_3: + j [blink] + +END(memcpy) +libc_hidden_def(memcpy) diff --git a/libc/string/arc/arcv2/memset.S b/libc/string/arc/arcv2/memset.S new file mode 100644 index 0000000..d076ad1 --- /dev/null +++ b/libc/string/arc/arcv2/memset.S @@ -0,0 +1,85 @@ + +/* + * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) + * + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include <features.h> +#include <sysdep.h> + +#ifdef DONT_USE_PREALLOC +#define PREWRITE(A,B) prefetchw [(A),(B)] +#else +#define PREWRITE(A,B) prealloc [(A),(B)] +#endif + +ENTRY(memset) + prefetchw [r0] ; Prefetch the write location + mov.f 0, r2 +;;; if size is zero + jz.d [blink] + mov r3, r0 ; don't clobber ret val + +;;; if length < 8 + brls.d.nt r2, 8, .Lsmallchunk + mov.f lp_count,r2 + + and.f r4, r0, 0x03 + rsub lp_count, r4, 4 + lpnz @.Laligndestination + ;; LOOP BEGIN + stb.ab r1, [r3,1] + sub r2, r2, 1 +.Laligndestination: + +;;; Destination is aligned + and r1, r1, 0xFF + asl r4, r1, 8 + or r4, r4, r1 + asl r5, r4, 16 + or r5, r5, r4 + mov r4, r5 + + sub3 lp_count, r2, 8 + cmp r2, 64 + bmsk.hi r2, r2, 5 + mov.ls lp_count, 0 + add3.hi r2, r2, 8 + +;;; Convert len to Dwords, unfold x8 + lsr.f lp_count, lp_count, 6 + lpnz @.Lset64bytes + ;; LOOP START + PREWRITE(r3, 64) ;Prefetch the next write location + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] +.Lset64bytes: + + lsr.f lp_count, r2, 5 ;Last remaining max 124 bytes + lpnz .Lset32bytes + ;; LOOP START + prefetchw [r3, 32] ;Prefetch the next write location + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] + std.ab r4, [r3, 8] +.Lset32bytes: + + and.f lp_count, r2, 0x1F ;Last remaining 31 bytes +.Lsmallchunk: + lpnz .Lcopy3bytes + ;; LOOP START + stb.ab r1, [r3, 1] +.Lcopy3bytes: + + j [blink] + +END(memset) +libc_hidden_def(memset) diff --git a/libc/string/arc/arcv2/strcmp.S b/libc/string/arc/arcv2/strcmp.S new file mode 100644 index 0000000..2e0e64a --- /dev/null +++ b/libc/string/arc/arcv2/strcmp.S @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) + * + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include <features.h> +#include <sysdep.h> + +ENTRY(strcmp) + or r2, r0, r1 + bmsk_s r2, r2, 1 + brne r2, 0, @.Lcharloop + +;;; s1 and s2 are word aligned + ld.ab r2, [r0, 4] + + mov_s r12, 0x01010101 + ror r11, r12 + .align 4 +.LwordLoop: + ld.ab r3, [r1, 4] + ;; Detect NULL char in str1 + sub r4, r2, r12 + ld.ab r5, [r0, 4] + bic r4, r4, r2 + and r4, r4, r11 + brne.d.nt r4, 0, .LfoundNULL + ;; Check if the read locations are the same + cmp r2, r3 + beq.d .LwordLoop + mov.eq r2, r5 + + ;; A match is found, spot it out +#ifdef __LITTLE_ENDIAN__ + swape r3, r3 + mov_s r0, 1 + swape r2, r2 +#else + mov_s r0, 1 +#endif + cmp_s r2, r3 + j_s.d [blink] + bset.lo r0, r0, 31 + + .align 4 +.LfoundNULL: +#ifdef __BIG_ENDIAN__ + swape r4, r4 + swape r2, r2 + swape r3, r3 +#endif + ;; Find null byte + ffs r0, r4 + bmsk r2, r2, r0 + bmsk r3, r3, r0 + swape r2, r2 + swape r3, r3 + ;; make the return value + sub.f r0, r2, r3 + mov.hi r0, 1 + j_s.d [blink] + bset.lo r0, r0, 31 + + .align 4 +.Lcharloop: + ldb.ab r2, [r0, 1] + ldb.ab r3, [r1, 1] + nop + breq r2, 0, .Lcmpend + breq r2, r3, .Lcharloop + + .align 4 +.Lcmpend: + j_s.d [blink] + sub r0, r2, r3 +END(strcmp) +libc_hidden_def(strcmp) + +#ifndef __UCLIBC_HAS_LOCALE__ +strong_alias(strcmp,strcoll) +libc_hidden_def(strcoll) +#endif diff --git a/libc/string/arc/memcmp.S b/libc/string/arc/memcmp.S index 4c0e391..a60757e 100644 --- a/libc/string/arc/memcmp.S +++ b/libc/string/arc/memcmp.S @@ -24,14 +24,32 @@ ENTRY(memcmp) ld r4,[r0,0] ld r5,[r1,0] lsr.f lp_count,r3,3 +#ifdef __HS__ + /* In ARCv2 a branch can't be the last instruction in a zero overhead + * loop. + * So we move the branch to the start of the loop, duplicate it + * after the end, and set up r12 so that the branch isn't taken + * initially. + */ + mov_s r12,WORD2 + lpne .Loop_end + brne WORD2,r12,.Lodd + ld WORD2,[r0,4] +#else lpne .Loop_end ld_s WORD2,[r0,4] +#endif ld_s r12,[r1,4] brne r4,r5,.Leven ld.a r4,[r0,8] ld.a r5,[r1,8] +#ifdef __HS__ +.Loop_end: + brne WORD2,r12,.Lodd +#else brne WORD2,r12,.Lodd .Loop_end: +#endif asl_s SHIFT,SHIFT,3 bhs_s .Last_cmp brne r4,r5,.Leven @@ -99,14 +117,25 @@ ENTRY(memcmp) ldb r4,[r0,0] ldb r5,[r1,0] lsr.f lp_count,r3 +#ifdef __HS__ + mov r12,r3 lpne .Lbyte_end + brne r3,r12,.Lbyte_odd +#else + lpne .Lbyte_end +#endif ldb_s r3,[r0,1] ldb r12,[r1,1] brne r4,r5,.Lbyte_even ldb.a r4,[r0,2] ldb.a r5,[r1,2] +#ifdef __HS__ +.Lbyte_end: + brne r3,r12,.Lbyte_odd +#else brne r3,r12,.Lbyte_odd .Lbyte_end: +#endif bcc .Lbyte_even brne r4,r5,.Lbyte_even ldb_s r3,[r0,1] diff --git a/libc/sysdeps/linux/arc/Makefile.arch b/libc/sysdeps/linux/arc/Makefile.arch index 656ea35..1a52fc9 100644 --- a/libc/sysdeps/linux/arc/Makefile.arch +++ b/libc/sysdeps/linux/arc/Makefile.arch @@ -7,5 +7,4 @@ CSRC-y := syscall.c sigaction.c __syscall_error.c cacheflush.c -SSRC-y := sigrestorer.S __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ - vfork.S clone.S +SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S vfork.S clone.S diff --git a/libc/sysdeps/linux/arc/bits/syscalls.h b/libc/sysdeps/linux/arc/bits/syscalls.h index 5da6aad..248ef78 100644 --- a/libc/sysdeps/linux/arc/bits/syscalls.h +++ b/libc/sysdeps/linux/arc/bits/syscalls.h @@ -98,7 +98,11 @@ extern int __syscall_error (int); * for syscall itself. *-------------------------------------------------------------------------*/ -#define ARC_TRAP_INSN "trap0 \n\t" +#ifdef __A7__ +#define ARC_TRAP_INSN "trap0 \n\t" +#elif defined(__HS__) +#define ARC_TRAP_INSN "trap_s 0 \n\t" +#endif #define INTERNAL_SYSCALL_NCS(nm, err, nr_args, args...) \ ({ \ @@ -176,7 +180,11 @@ extern int __syscall_error (int); #else +#ifdef __A7__ #define ARC_TRAP_INSN trap0 +#elif defined(__HS__) +#define ARC_TRAP_INSN trap_s 0 +#endif #endif /* __ASSEMBLER__ */ diff --git a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h index 9313ee8..4515755 100755 --- a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h +++ b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h @@ -17,9 +17,6 @@ /* can your target use syscall6() for mmap ? */ #undef __UCLIBC_MMAP_HAS_6_ARGS__ -/* does your target use syscall4() for truncate64 ? (32bit arches only) */ -#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__ - /* does your target have a broken create_module() ? */ #undef __UCLIBC_BROKEN_CREATE_MODULE__ @@ -50,4 +47,11 @@ /* The default ';' is a comment on ARC. */ #define __UCLIBC_ASM_LINE_SEP__ ` +/* does your target align 64bit values in register pairs ? (32bit arches only) */ +#if defined(__A7__) +#undef __UCLIBC_SYSCALL_ALIGN_64BIT__ +#else +#define __UCLIBC_SYSCALL_ALIGN_64BIT__ +#endif + #endif /* _BITS_UCLIBC_ARCH_FEATURES_H */ diff --git a/libc/sysdeps/linux/arc/bits/uClibc_page.h b/libc/sysdeps/linux/arc/bits/uClibc_page.h index 26cec54..b05c575 100755 --- a/libc/sysdeps/linux/arc/bits/uClibc_page.h +++ b/libc/sysdeps/linux/arc/bits/uClibc_page.h @@ -9,16 +9,25 @@ /* * ARC700/linux supports 4k, 8k, 16k pages (build time). - * We rely on the kernel exported header (aka uapi headers since 3.8) - * for PAGE_SIZE and friends. This avoids hand-editing here when building - * toolchain. * * Although uClibc determines page size dynamically, from kernel's auxv which * ARC Linux does pass, still the generic code needs a fall back * _dl_pagesize = auxvt[AT_PAGESZ].a_un.a_val ? : PAGE_SIZE * */ -#include <asm/page.h> + +#include <features.h> + +#if defined(__CONFIG_ARC_PAGE_SIZE_16K__) +#define PAGE_SHIFT 14 +#elif defined(__CONFIG_ARC_PAGE_SIZE_4K__) +#define PAGE_SHIFT 12 +#else +#define PAGE_SHIFT 13 +#endif + +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) /* TBD: fix this with runtime value for a PAGE_SIZE agnostic uClibc */ #define MMAP2_PAGE_SHIFT PAGE_SHIFT diff --git a/libc/sysdeps/linux/arc/sigaction.c b/libc/sysdeps/linux/arc/sigaction.c index 73c496d..4a4c9e2 100644 --- a/libc/sysdeps/linux/arc/sigaction.c +++ b/libc/sysdeps/linux/arc/sigaction.c @@ -10,8 +10,13 @@ #include <sys/syscall.h> #include <bits/kernel_sigaction.h> -extern void __default_rt_sa_restorer(void); -//libc_hidden_proto(__default_rt_sa_restorer); +/* + * Default sigretrun stub if user doesn't specify SA_RESTORER + */ +static void __default_rt_sa_restorer(void) +{ + INTERNAL_SYSCALL_NCS(__NR_rt_sigreturn, , 0); +} #define SA_RESTORER 0x04000000 @@ -22,23 +27,22 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) { struct sigaction kact; - /* !act means caller only wants to know @oact - * Hence only otherwise, do SA_RESTORER stuff - * - * For the normal/default cases (user not providing SA_RESTORER) use - * a real sigreturn stub to avoid kernel synthesizing one on user stack - * at runtime, which needs PTE permissions update (hence TLB entry - * update) and costly cache line flushes for code modification + /* + * SA_RESTORER is only relevant for act != NULL case + * (!act means caller only wants to know @oact) */ if (act && !(act->sa_flags & SA_RESTORER)) { - memcpy(&kact, act, sizeof(kact)); kact.sa_restorer = __default_rt_sa_restorer; - kact.sa_flags |= SA_RESTORER; + kact.sa_flags = act->sa_flags | SA_RESTORER; + + kact.sa_handler = act->sa_handler; + kact.sa_mask = act->sa_mask; act = &kact; } - return __syscall_rt_sigaction(sig, act, oact, sizeof(act->sa_mask)); + return INLINE_SYSCALL(rt_sigaction, 4, + sig, act, oact, sizeof(act->sa_mask)); } #ifndef LIBC_SIGACTION diff --git a/libc/sysdeps/linux/arc/sigrestorer.S b/libc/sysdeps/linux/arc/sigrestorer.S deleted file mode 100644 index 24531d8..0000000 --- a/libc/sysdeps/linux/arc/sigrestorer.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#include <sysdep.h> -#include <sys/syscall.h> - -/* - * Provide a real sigreturn stub to avoid kernel synthesizing one - * on user stack at runtime, which needs PTE permissions update - * (hence TLB entry update) and costly cache line flushes for - * code modification - */ - -ENTRY(__default_rt_sa_restorer) - mov r8, __NR_rt_sigreturn - ARC_TRAP_INSN -END(__default_rt_sa_restorer) -libc_hidden_def(__default_rt_sa_restorer) diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in index a175ab6..8ee956b 100644 --- a/libc/sysdeps/linux/common/Makefile.in +++ b/libc/sysdeps/linux/common/Makefile.in @@ -25,6 +25,8 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += \ capset.c \ dup3.c \ eventfd.c \ + eventfd_read.c \ + eventfd_write.c \ inotify.c \ ioperm.c \ iopl.c \ @@ -43,6 +45,7 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += \ sendfile.c \ setfsgid.c \ setfsuid.c \ + setns.c \ setresgid.c \ setresuid.c \ signalfd.c \ diff --git a/libc/sysdeps/linux/common/bits/sched.h b/libc/sysdeps/linux/common/bits/sched.h index a5eb6ee..9d05314 100644 --- a/libc/sysdeps/linux/common/bits/sched.h +++ b/libc/sysdeps/linux/common/bits/sched.h @@ -1,7 +1,6 @@ /* Definitions of constants and data structure for POSIX 1003.1b-1993 scheduling interface. - Copyright (C) 1996-1999,2001-2003,2005,2006,2007,2008 - Free Software Foundation, Inc. + Copyright (C) 1996-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -26,14 +25,17 @@ /* Scheduling algorithms. */ -#define SCHED_OTHER 0 -#define SCHED_FIFO 1 -#define SCHED_RR 2 +#define SCHED_OTHER 0 +#define SCHED_FIFO 1 +#define SCHED_RR 2 #ifdef __USE_GNU -# define SCHED_BATCH 3 +# define SCHED_BATCH 3 +# define SCHED_IDLE 5 + +# define SCHED_RESET_ON_FORK 0x40000000 #endif -#ifdef __USE_MISC +#ifdef __USE_GNU /* Cloning flags. */ # define CSIGNAL 0x000000ff /* Signal mask to be sent at exit. */ # define CLONE_VM 0x00000100 /* Set if VM shared between processes. */ @@ -58,7 +60,6 @@ force CLONE_PTRACE on this clone. */ # define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in the child. */ -# define CLONE_STOPPED 0x02000000 /* Start in stopped state. */ # define CLONE_NEWUTS 0x04000000 /* New utsname group. */ # define CLONE_NEWIPC 0x08000000 /* New ipcs. */ # define CLONE_NEWUSER 0x10000000 /* New user namespace. */ @@ -75,7 +76,7 @@ struct sched_param __BEGIN_DECLS -#ifdef __USE_MISC +#ifdef __USE_GNU /* Clone current process. */ extern int clone (int (*__fn) (void *__arg), void *__child_stack, int __flags, void *__arg, ...) __THROW; @@ -85,8 +86,12 @@ extern int unshare (int __flags) __THROW; /* Get index of currently used CPU. */ extern int sched_getcpu (void) __THROW; + +/* Switch process to namespace of type NSTYPE indicated by FD. */ +extern int setns (int __fd, int __nstype) __THROW; #endif + __END_DECLS #endif /* need schedparam */ @@ -124,7 +129,11 @@ typedef struct } cpu_set_t; /* Access functions for CPU masks. */ -# define __CPU_ZERO_S(setsize, cpusetp) \ +# if __GNUC_PREREQ (2, 91) +# define __CPU_ZERO_S(setsize, cpusetp) \ + do __builtin_memset (cpusetp, '\0', setsize); while (0) +# else +# define __CPU_ZERO_S(setsize, cpusetp) \ do { \ size_t __i; \ size_t __imax = (setsize) / sizeof (__cpu_mask); \ @@ -132,47 +141,53 @@ typedef struct for (__i = 0; __i < __imax; ++__i) \ __bits[__i] = 0; \ } while (0) +# endif # define __CPU_SET_S(cpu, setsize, cpusetp) \ (__extension__ \ ({ size_t __cpu = (cpu); \ - __cpu < 8 * (setsize) \ + __cpu / 8 < (setsize) \ ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ |= __CPUMASK (__cpu)) \ : 0; })) # define __CPU_CLR_S(cpu, setsize, cpusetp) \ (__extension__ \ ({ size_t __cpu = (cpu); \ - __cpu < 8 * (setsize) \ + __cpu / 8 < (setsize) \ ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ &= ~__CPUMASK (__cpu)) \ : 0; })) # define __CPU_ISSET_S(cpu, setsize, cpusetp) \ (__extension__ \ ({ size_t __cpu = (cpu); \ - __cpu < 8 * (setsize) \ - ? ((((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ + __cpu / 8 < (setsize) \ + ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ & __CPUMASK (__cpu))) != 0 \ : 0; })) # define __CPU_COUNT_S(setsize, cpusetp) \ __sched_cpucount (setsize, cpusetp) -# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ +# if __GNUC_PREREQ (2, 91) +# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) +# else +# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ (__extension__ \ - ({ __cpu_mask *__arr1 = (cpusetp1)->__bits; \ - __cpu_mask *__arr2 = (cpusetp2)->__bits; \ + ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits; \ + const __cpu_mask *__arr2 = (cpusetp2)->__bits; \ size_t __imax = (setsize) / sizeof (__cpu_mask); \ size_t __i; \ for (__i = 0; __i < __imax; ++__i) \ if (__arr1[__i] != __arr2[__i]) \ break; \ __i == __imax; })) +# endif # define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ (__extension__ \ ({ cpu_set_t *__dest = (destset); \ - __cpu_mask *__arr1 = (srcset1)->__bits; \ - __cpu_mask *__arr2 = (srcset2)->__bits; \ + const __cpu_mask *__arr1 = (srcset1)->__bits; \ + const __cpu_mask *__arr2 = (srcset2)->__bits; \ size_t __imax = (setsize) / sizeof (__cpu_mask); \ size_t __i; \ for (__i = 0; __i < __imax; ++__i) \ diff --git a/libc/sysdeps/linux/common/eventfd.c b/libc/sysdeps/linux/common/eventfd.c index 96597ab..500b0c0 100644 --- a/libc/sysdeps/linux/common/eventfd.c +++ b/libc/sysdeps/linux/common/eventfd.c @@ -15,7 +15,7 @@ * eventfd() */ #if defined __NR_eventfd || defined __NR_eventfd2 -int eventfd (int count, int flags) +int eventfd (unsigned int count, int flags) { #if defined __NR_eventfd2 return INLINE_SYSCALL (eventfd2, 2, count, flags); diff --git a/libpthread/linuxthreads/pthread_seteuid.c b/libc/sysdeps/linux/common/eventfd_read.c similarity index 77% copy from libpthread/linuxthreads/pthread_seteuid.c copy to libc/sysdeps/linux/common/eventfd_read.c index a5423a9..75f2aaa 100644 --- a/libpthread/linuxthreads/pthread_seteuid.c +++ b/libc/sysdeps/linux/common/eventfd_read.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2007-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -15,13 +15,13 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <pthread.h> +#include <errno.h> #include <unistd.h> +#include <sys/eventfd.h> -int pthread_seteuid_np (uid_t uid); int -pthread_seteuid_np (uid_t uid) +eventfd_read (int fd, eventfd_t *value) { - return seteuid (uid); + return read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0; } diff --git a/libpthread/linuxthreads/pthread_seteuid.c b/libc/sysdeps/linux/common/eventfd_write.c similarity index 77% copy from libpthread/linuxthreads/pthread_seteuid.c copy to libc/sysdeps/linux/common/eventfd_write.c index a5423a9..e1509cf 100644 --- a/libpthread/linuxthreads/pthread_seteuid.c +++ b/libc/sysdeps/linux/common/eventfd_write.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2007-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -15,13 +15,14 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <pthread.h> +#include <errno.h> #include <unistd.h> +#include <sys/eventfd.h> -int pthread_seteuid_np (uid_t uid); int -pthread_seteuid_np (uid_t uid) +eventfd_write (int fd, eventfd_t value) { - return seteuid (uid); + return write (fd, &value, + sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0; } diff --git a/libc/sysdeps/linux/common/posix_fadvise.c b/libc/sysdeps/linux/common/posix_fadvise.c index 14bbeee..74d8409 100644 --- a/libc/sysdeps/linux/common/posix_fadvise.c +++ b/libc/sysdeps/linux/common/posix_fadvise.c @@ -41,9 +41,17 @@ int posix_fadvise(int fd, off_t offset, off_t len, int advice) # if __WORDSIZE == 64 ret = INTERNAL_SYSCALL(fadvise64_64, err, 4, fd, offset, len, advice); # else -# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) || defined(__arm__) +# if defined (__arm__) || \ + (defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) && (defined(__powerpc__) || defined(__xtensa__))) + /* arch with 64-bit data in even reg alignment #1: [powerpc/xtensa] + * custom syscall handler (rearranges @advice to avoid register hole punch) */ ret = INTERNAL_SYSCALL(fadvise64_64, err, 6, fd, advice, OFF_HI_LO (offset), OFF_HI_LO (len)); +# elif defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) + /* arch with 64-bit data in even reg alignment #2: [arcv2/others-in-future] + * stock syscall handler in kernel (reg hole punched) */ + ret = INTERNAL_SYSCALL(fadvise64_64, err, 7, fd, 0, + OFF_HI_LO (offset), OFF_HI_LO (len), advice); # else ret = INTERNAL_SYSCALL(fadvise64_64, err, 6, fd, OFF_HI_LO (offset), OFF_HI_LO (len), advice); diff --git a/libc/sysdeps/linux/common/posix_fadvise64.c b/libc/sysdeps/linux/common/posix_fadvise64.c index 5d89891..37fb269 100644 --- a/libc/sysdeps/linux/common/posix_fadvise64.c +++ b/libc/sysdeps/linux/common/posix_fadvise64.c @@ -24,9 +24,18 @@ int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice) { INTERNAL_SYSCALL_DECL (err); /* ARM has always been funky. */ -# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) || defined(__arm__) +#if defined (__arm__) || \ + (defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) && (defined(__powerpc__) || defined(__xtensa__))) + /* arch with 64-bit data in even reg alignment #1: [powerpc/xtensa] + * custom syscall handler (rearranges @advice to avoid register hole punch) */ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, advice, OFF64_HI_LO (offset), OFF64_HI_LO (len)); +#elif defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) + /* arch with 64-bit data in even reg alignment #2: [arcv2/others-in-future] + * stock syscall handler in kernel (reg hole punched) */ + int ret = INTERNAL_SYSCALL (fadvise64_64, err, 7, fd, 0, + OFF64_HI_LO (offset), OFF64_HI_LO (len), + advice); # else int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, OFF64_HI_LO (offset), OFF64_HI_LO (len), diff --git a/libc/sysdeps/linux/common/setns.c b/libc/sysdeps/linux/common/setns.c new file mode 100644 index 0000000..a697720 --- /dev/null +++ b/libc/sysdeps/linux/common/setns.c @@ -0,0 +1,15 @@ +/* vi: set sw=4 ts=4: */ +/* + * setns() for uClibc + * + * Copyright (C) 2015 Bernhard Reutner-Fischer <uclibc(a)uclibc.org> + * + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include <sys/syscall.h> +#include <sched.h> + +#ifdef __NR_setns +_syscall2(int, setns, int, fd, int, nstype) +#endif diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c index 57c4664..2c50307 100644 --- a/libc/sysdeps/linux/common/stubs.c +++ b/libc/sysdeps/linux/common/stubs.c @@ -346,6 +346,10 @@ make_stub(setfsgid) make_stub(setfsuid) #endif +#if !defined __NR_setns && defined __UCLIBC_LINUX_SPECIFIC__ +make_stub(setns) +#endif + #if !defined __NR_setresgid32 && !defined __NR_setresgid && defined __UCLIBC_LINUX_SPECIFIC__ make_stub(setresgid) #endif diff --git a/libc/sysdeps/linux/common/sync_file_range.c b/libc/sysdeps/linux/common/sync_file_range.c index 6cd7e94..db797de 100644 --- a/libc/sysdeps/linux/common/sync_file_range.c +++ b/libc/sysdeps/linux/common/sync_file_range.c @@ -24,7 +24,11 @@ static int __NC(sync_file_range)(int fd, off64_t offset, off64_t nbytes, unsigne { # if defined __powerpc__ && __WORDSIZE == 64 return INLINE_SYSCALL(sync_file_range, 4, fd, flags, offset, nbytes); -# elif defined __mips__ && _MIPS_SIM == _ABIO32 +# elif (defined __mips__ && _MIPS_SIM == _ABIO32) || \ + (defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) && !(defined(__powerpc__) || defined(__xtensa__))) + /* arch with 64-bit data in even reg alignment #2: [arcv2/others-in-future] + * stock syscall handler in kernel (reg hole punched) + * see libc/sysdeps/linux/common/posix_fadvise.c for more details */ return INLINE_SYSCALL(sync_file_range, 7, fd, 0, OFF64_HI_LO(offset), OFF64_HI_LO(nbytes), flags); # elif defined __NR_sync_file_range2 diff --git a/libc/sysdeps/linux/common/sys/eventfd.h b/libc/sysdeps/linux/common/sys/eventfd.h index 1bf785f..a47b5fe 100644 --- a/libc/sysdeps/linux/common/sys/eventfd.h +++ b/libc/sysdeps/linux/common/sys/eventfd.h @@ -31,9 +31,7 @@ __BEGIN_DECLS /* Return file descriptor for generic event channel. Set initial value to COUNT. */ -extern int eventfd (int __count, int __flags) __THROW; - -#if 0 /* not (yet) implemented in uClibc */ +extern int eventfd (unsigned int __count, int __flags) __THROW; /* Read event counter and possibly wait for events. */ extern int eventfd_read (int __fd, eventfd_t *__value); @@ -41,8 +39,6 @@ extern int eventfd_read (int __fd, eventfd_t *__value); /* Increment event counter. */ extern int eventfd_write (int __fd, eventfd_t __value); -#endif - __END_DECLS #endif /* sys/eventfd.h */ diff --git a/libc/sysdeps/linux/sparc/bits/eventfd.h b/libc/sysdeps/linux/sparc/bits/eventfd.h index bed9f09..e348cc6 100644 --- a/libc/sysdeps/linux/sparc/bits/eventfd.h +++ b/libc/sysdeps/linux/sparc/bits/eventfd.h @@ -22,7 +22,7 @@ /* Flags for eventfd. */ enum { - EFD_SEMAPHORE = 1, + EFD_SEMAPHORE = 0x000001, #define EFD_SEMAPHORE EFD_SEMAPHORE EFD_CLOEXEC = 0x400000, #define EFD_CLOEXEC EFD_CLOEXEC hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch master updated. 8d73c06c7a78745a50dc8683fd117aeacd71a04b
by wbx@helium.waldemar-brodkorb.de 20 Feb '15

20 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, master has been updated via 8d73c06c7a78745a50dc8683fd117aeacd71a04b (commit) via 5ed651850a8be2e08e16d3c4dec3759d9aa3e47a (commit) via 8a4eaece396459ccb0fb8a9f25ace1345ee92cae (commit) from 0adea94e182e8bcd3c1c593aa9b9dad2a65b5862 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8d73c06c7a78745a50dc8683fd117aeacd71a04b Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Fri Feb 20 12:02:48 2015 -0600 gcc 4.9.x produces some calls to abort() For sh4/xtensa architectures there is an optimization bug, which does not allow to compile ld.so with gcc 4.9.2. Disable this optimization for sh4/xtensa and ld.so compile. commit 5ed651850a8be2e08e16d3c4dec3759d9aa3e47a Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Tue Feb 17 22:54:31 2015 -0600 workaround is no longer needed for gcc 4.8.x/gcc 4.9.x commit 8a4eaece396459ccb0fb8a9f25ace1345ee92cae Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Mon Feb 16 23:44:26 2015 -0600 Revert "xtensa: add support for NPTL" This reverts commit 4c3023bc803012656cf45749960282351efc8020. ----------------------------------------------------------------------- Summary of changes: include/elf.h | 5 +- include/link.h | 2 - ldso/include/dl-hash.h | 2 - ldso/include/inline-hashtab.h | 265 ------------------ ldso/include/ldsodefs.h | 7 +- ldso/include/tlsdeschtab.h | 119 -------- ldso/ldso/Makefile.in | 8 + ldso/ldso/dl-tls.c | 29 +- ldso/ldso/fdpic/dl-inlines.h | 270 +++++++++++++++++- ldso/ldso/sh/dl-syscalls.h | 8 +- ldso/ldso/xtensa/dl-debug.h | 77 +++-- ldso/ldso/xtensa/dl-startup.h | 2 +- ldso/ldso/xtensa/dl-sysdep.h | 9 +- ldso/ldso/xtensa/dl-tlsdesc.S | 96 ------- ldso/ldso/xtensa/elfinterp.c | 51 +--- libc/sysdeps/linux/xtensa/Makefile.arch | 5 +- libc/sysdeps/linux/xtensa/clone.S | 101 +++---- libc/sysdeps/linux/xtensa/fork.c | 8 +- libc/sysdeps/linux/xtensa/jmpbuf-unwind.h | 38 +-- libc/sysdeps/linux/xtensa/sys/ptrace.h | 155 ----------- libc/sysdeps/linux/xtensa/sysdep.h | 39 ++- libc/sysdeps/linux/xtensa/vfork.S | 104 +++---- .../nptl/sysdeps/unix/sysv/linux/lowlevellock.c | 2 + .../sysdeps/unix/sysv/linux/xtensa/Makefile.arch | 15 - .../unix/sysv/linux/xtensa/bits/pthreadtypes.h | 184 ------------ .../unix/sysv/linux/xtensa/bits/semaphore.h | 35 --- .../nptl/sysdeps/unix/sysv/linux/xtensa/clone.S | 3 - .../sysdeps/unix/sysv/linux/xtensa/createthread.c | 24 -- .../nptl/sysdeps/unix/sysv/linux/xtensa/fork.c | 29 -- .../sysdeps/unix/sysv/linux/xtensa/lowlevellock.c | 132 --------- .../sysdeps/unix/sysv/linux/xtensa/lowlevellock.h | 293 -------------------- .../sysdeps/unix/sysv/linux/xtensa/pt-initfini.c | 134 --------- .../sysdeps/unix/sysv/linux/xtensa/pthread_once.c | 89 ------ .../sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h | 108 -------- .../nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S | 59 ---- libpthread/nptl/sysdeps/xtensa/Makefile.arch | 40 --- libpthread/nptl/sysdeps/xtensa/dl-tls.h | 58 ---- libpthread/nptl/sysdeps/xtensa/jmpbuf-unwind.h | 32 --- libpthread/nptl/sysdeps/xtensa/libc-tls.c | 36 --- libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S | 37 --- .../nptl/sysdeps/xtensa/pthread_spin_trylock.S | 40 --- libpthread/nptl/sysdeps/xtensa/pthreaddef.h | 39 --- libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym | 7 - libpthread/nptl/sysdeps/xtensa/tls.h | 159 ----------- libpthread/nptl/sysdeps/xtensa/tlsdesc.sym | 10 - 45 files changed, 479 insertions(+), 2486 deletions(-) delete mode 100644 ldso/include/inline-hashtab.h delete mode 100644 ldso/include/tlsdeschtab.h delete mode 100644 ldso/ldso/xtensa/dl-tlsdesc.S delete mode 100644 libc/sysdeps/linux/xtensa/sys/ptrace.h delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/pthreadtypes.h delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/semaphore.h delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/createthread.c delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/fork.c delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.c delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.h delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pt-initfini.c delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pthread_once.c delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S delete mode 100644 libpthread/nptl/sysdeps/xtensa/Makefile.arch delete mode 100644 libpthread/nptl/sysdeps/xtensa/dl-tls.h delete mode 100644 libpthread/nptl/sysdeps/xtensa/jmpbuf-unwind.h delete mode 100644 libpthread/nptl/sysdeps/xtensa/libc-tls.c delete mode 100644 libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S delete mode 100644 libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S delete mode 100644 libpthread/nptl/sysdeps/xtensa/pthreaddef.h delete mode 100644 libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym delete mode 100644 libpthread/nptl/sysdeps/xtensa/tls.h delete mode 100644 libpthread/nptl/sysdeps/xtensa/tlsdesc.sym diff --git a/include/elf.h b/include/elf.h index fc60864..1979209 100644 --- a/include/elf.h +++ b/include/elf.h @@ -3072,11 +3072,8 @@ typedef Elf32_Addr Elf32_Conflict; #define R_XTENSA_SLOT12_ALT 47 #define R_XTENSA_SLOT13_ALT 48 #define R_XTENSA_SLOT14_ALT 49 -#define R_XTENSA_TLSDESC_FN 50 -#define R_XTENSA_TLSDESC_ARG 51 -#define R_XTENSA_TLS_TPOFF 53 /* Keep this the last entry. */ -#define R_XTENSA_NUM 54 +#define R_XTENSA_NUM 50 /* C6X specific relocs */ #define R_C6000_NONE 0 diff --git a/include/link.h b/include/link.h index 67bc800..147b793 100644 --- a/include/link.h +++ b/include/link.h @@ -132,8 +132,6 @@ struct link_map size_t l_tls_modid; /* Nonzero if _dl_init_static_tls should be called for this module */ unsigned int l_need_tls_init:1; - /* Address of TLS descriptor hash table. */ - void *l_tlsdesc_table; #endif #endif }; diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h index 18f21ae..e1e3e3f 100644 --- a/ldso/include/dl-hash.h +++ b/ldso/include/dl-hash.h @@ -70,8 +70,6 @@ struct elf_resolve { size_t l_tls_modid; /* Nonzero if _dl_init_static_tls should be called for this module */ unsigned int l_need_tls_init:1; - /* Address of TLS descriptor hash table. */ - void *l_tlsdesc_table; #endif ElfW(Addr) mapaddr; diff --git a/ldso/include/inline-hashtab.h b/ldso/include/inline-hashtab.h deleted file mode 100644 index 4a48120..0000000 --- a/ldso/include/inline-hashtab.h +++ /dev/null @@ -1,265 +0,0 @@ -/* - * The hashcode handling code below is heavily inspired in libiberty's - * hashtab code, but with most adaptation points and support for - * deleting elements removed. - * - * Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. - * Contributed by Vladimir Makarov (vmakarov(a)cygnus.com) - */ - -#ifndef INLINE_HASHTAB_H -# define INLINE_HASHTAB_H 1 - -static __always_inline unsigned long -higher_prime_number(unsigned long n) -{ - /* These are primes that are near, but slightly smaller than, a power of two. */ - static const unsigned long primes[] = { - 7, - 13, - 31, - 61, - 127, - 251, - 509, - 1021, - 2039, - 4093, - 8191, - 16381, - 32749, - 65521, - 131071, - 262139, - 524287, - 1048573, - 2097143, - 4194301, - 8388593, - 16777213, - 33554393, - 67108859, - 134217689, - 268435399, - 536870909, - 1073741789, - /* 4294967291 */ - ((unsigned long) 2147483647) + ((unsigned long) 2147483644), - }; - const unsigned long *low = &primes[0]; - const unsigned long *high = &primes[ARRAY_SIZE(primes)]; - - while (low != high) { - const unsigned long *mid = low + (high - low) / 2; - if (n > *mid) - low = mid + 1; - else - high = mid; - } - -#if 0 - /* If we've run out of primes, abort. */ - if (n > *low) { - fprintf(stderr, "Cannot find prime bigger than %lu\n", n); - abort(); - } -#endif - - return *low; -} - -struct funcdesc_ht -{ - /* Table itself */ - void **entries; - - /* Current size (in entries) of the hash table */ - size_t size; - - /* Current number of elements */ - size_t n_elements; -}; - -static __always_inline struct funcdesc_ht * -htab_create(void) -{ - struct funcdesc_ht *ht = _dl_malloc(sizeof(*ht)); - size_t ent_size; - - if (!ht) - return NULL; - ht->size = 3; - ent_size = sizeof(void *) * ht->size; - ht->entries = _dl_malloc(ent_size); - if (!ht->entries) - return NULL; - - ht->n_elements = 0; - _dl_memset(ht->entries, 0, ent_size); - - return ht; -} - -/* - * This is only called from _dl_loadaddr_unmap, so it's safe to call - * _dl_free(). See the discussion below. - */ -static __always_inline void -htab_delete(struct funcdesc_ht *htab) -{ - size_t i; - - for (i = htab->size - 1; i >= 0; i--) - if (htab->entries[i]) - _dl_free(htab->entries[i]); - - _dl_free(htab->entries); - _dl_free(htab); -} - -/* - * Similar to htab_find_slot, but without several unwanted side effects: - * - Does not call htab->eq_f when it finds an existing entry. - * - Does not change the count of elements/searches/collisions in the - * hash table. - * This function also assumes there are no deleted entries in the table. - * HASH is the hash value for the element to be inserted. - */ -static __always_inline void ** -find_empty_slot_for_expand(struct funcdesc_ht *htab, int hash) -{ - size_t size = htab->size; - unsigned int index = hash % size; - void **slot = htab->entries + index; - int hash2; - - if (!*slot) - return slot; - - hash2 = 1 + hash % (size - 2); - for (;;) { - index += hash2; - if (index >= size) - index -= size; - - slot = htab->entries + index; - if (!*slot) - return slot; - } -} - -/* - * The following function changes size of memory allocated for the - * entries and repeatedly inserts the table elements. The occupancy - * of the table after the call will be about 50%. Naturally the hash - * table must already exist. Remember also that the place of the - * table entries is changed. If memory allocation failures are allowed, - * this function will return zero, indicating that the table could not be - * expanded. If all goes well, it will return a non-zero value. - */ -static __always_inline int -htab_expand(struct funcdesc_ht *htab, int (*hash_fn) (void *)) -{ - void **oentries; - void **olimit; - void **p; - void **nentries; - size_t nsize; - - oentries = htab->entries; - olimit = oentries + htab->size; - - /* - * Resize only when table after removal of unused elements is either - * too full or too empty. - */ - if (htab->n_elements * 2 > htab->size) - nsize = higher_prime_number(htab->n_elements * 2); - else - nsize = htab->size; - - nentries = _dl_malloc(sizeof(*nentries) * nsize); - _dl_memset(nentries, 0, sizeof(*nentries) * nsize); - if (nentries == NULL) - return 0; - htab->entries = nentries; - htab->size = nsize; - - p = oentries; - do { - if (*p) - *find_empty_slot_for_expand(htab, hash_fn(*p)) = *p; - p++; - } while (p < olimit); - -#if 0 - /* - * We can't tell whether this was allocated by the _dl_malloc() - * built into ld.so or malloc() in the main executable or libc, - * and calling free() for something that wasn't malloc()ed could - * do Very Bad Things (TM). Take the conservative approach - * here, potentially wasting as much memory as actually used by - * the hash table, even if multiple growths occur. That's not - * so bad as to require some overengineered solution that would - * enable us to keep track of how it was allocated. - */ - _dl_free(oentries); -#endif - return 1; -} - -/* - * This function searches for a hash table slot containing an entry - * equal to the given element. To delete an entry, call this with - * INSERT = 0, then call htab_clear_slot on the slot returned (possibly - * after doing some checks). To insert an entry, call this with - * INSERT = 1, then write the value you want into the returned slot. - * When inserting an entry, NULL may be returned if memory allocation - * fails. - */ -static __always_inline void ** -htab_find_slot(struct funcdesc_ht *htab, void *ptr, int insert, - int (*hash_fn)(void *), int (*eq_fn)(void *, void *)) -{ - unsigned int index; - int hash, hash2; - size_t size; - void **entry; - - if (htab->size * 3 <= htab->n_elements * 4 && - htab_expand(htab, hash_fn) == 0) - return NULL; - - hash = hash_fn(ptr); - - size = htab->size; - index = hash % size; - - entry = &htab->entries[index]; - if (!*entry) - goto empty_entry; - else if (eq_fn(*entry, ptr)) - return entry; - - hash2 = 1 + hash % (size - 2); - for (;;) { - index += hash2; - if (index >= size) - index -= size; - - entry = &htab->entries[index]; - if (!*entry) - goto empty_entry; - else if (eq_fn(*entry, ptr)) - return entry; - } - - empty_entry: - if (!insert) - return NULL; - - htab->n_elements++; - return entry; -} - -#endif diff --git a/ldso/include/ldsodefs.h b/ldso/include/ldsodefs.h index f17ac0c..4063d00 100644 --- a/ldso/include/ldsodefs.h +++ b/ldso/include/ldsodefs.h @@ -62,18 +62,13 @@ extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp) extern void _dl_allocate_static_tls (struct link_map *map) internal_function attribute_hidden; -extern int _dl_try_allocate_static_tls (struct link_map* map) - internal_function attribute_hidden; /* Taken from glibc/elf/dl-reloc.c */ #define CHECK_STATIC_TLS(sym_map) \ do { \ - if (__builtin_expect ((sym_map)->l_tls_offset == NO_TLS_OFFSET, 0)) \ + if (unlikely((sym_map)->l_tls_offset == NO_TLS_OFFSET)) \ _dl_allocate_static_tls (sym_map); \ } while (0) -#define TRY_STATIC_TLS(sym_map) \ - (__builtin_expect ((sym_map)->l_tls_offset != NO_TLS_OFFSET, 1) \ - || _dl_try_allocate_static_tls (sym_map) == 0) /* These are internal entry points to the two halves of _dl_allocate_tls, only used within rtld.c itself at startup time. */ diff --git a/ldso/include/tlsdeschtab.h b/ldso/include/tlsdeschtab.h deleted file mode 100644 index 86baea1..0000000 --- a/ldso/include/tlsdeschtab.h +++ /dev/null @@ -1,119 +0,0 @@ -/* Hash table for TLS descriptors. - Copyright (C) 2005-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Alexandre Oliva <aoliva(a)redhat.com> - - uClibc port by Baruch Siach <baruch(a)tkos.co.il> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef TLSDESCHTAB_H -# define TLSDESCHTAB_H 1 - -# ifdef SHARED - -# include <inline-hashtab.h> - -inline static int -hash_tlsdesc (void *p) -{ - struct tlsdesc_dynamic_arg *td = p; - - /* We know all entries are for the same module, so ti_offset is the - only distinguishing entry. */ - return td->tlsinfo.ti_offset; -} - -inline static int -eq_tlsdesc (void *p, void *q) -{ - struct tlsdesc_dynamic_arg *tdp = p, *tdq = q; - - return tdp->tlsinfo.ti_offset == tdq->tlsinfo.ti_offset; -} - -inline static int -map_generation (struct link_map *map) -{ - size_t idx = map->l_tls_modid; - struct dtv_slotinfo_list *listp = GL(dl_tls_dtv_slotinfo_list); - - /* Find the place in the dtv slotinfo list. */ - do - { - /* Does it fit in the array of this list element? */ - if (idx < listp->len) - { - /* We should never get here for a module in static TLS, so - we can assume that, if the generation count is zero, we - still haven't determined the generation count for this - module. */ - if (listp->slotinfo[idx].gen) - return listp->slotinfo[idx].gen; - else - break; - } - idx -= listp->len; - listp = listp->next; - } - while (listp != NULL); - - /* If we get to this point, the module still hasn't been assigned an - entry in the dtv slotinfo data structures, and it will when we're - done with relocations. At that point, the module will get a - generation number that is one past the current generation, so - return exactly that. */ - return GL(dl_tls_generation) + 1; -} - -void * -internal_function -_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset) -{ - struct funcdesc_ht *ht; - void **entry; - struct tlsdesc_dynamic_arg *td, test; - - ht = map->l_tlsdesc_table; - if (! ht) - { - ht = htab_create (); - if (! ht) - return 0; - map->l_tlsdesc_table = ht; - } - - test.tlsinfo.ti_module = map->l_tls_modid; - test.tlsinfo.ti_offset = ti_offset; - entry = htab_find_slot (ht, &test, 1, hash_tlsdesc, eq_tlsdesc); - if (*entry) - { - td = *entry; - return td; - } - - *entry = td = _dl_malloc (sizeof (struct tlsdesc_dynamic_arg)); - /* This may be higher than the map's generation, but it doesn't - matter much. Worst case, we'll have one extra DTV update per - thread. */ - td->gen_count = map_generation (map); - td->tlsinfo = test.tlsinfo; - - return td; -} - -# endif /* SHARED */ - -#endif diff --git a/ldso/ldso/Makefile.in b/ldso/ldso/Makefile.in index e0d0a09..56f4a45 100644 --- a/ldso/ldso/Makefile.in +++ b/ldso/ldso/Makefile.in @@ -27,6 +27,14 @@ CFLAGS-$(DODEBUG)-ldso/ldso := -O2 -g CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" +# avoid ld.so linking error since gcc 4.9.x: undefined reference to abort +ifeq ($(TARGET_ARCH),xtensa) +CFLAGS-ldso.c += -fno-delete-null-pointer-checks +endif +ifeq ($(TARGET_ARCH),sh) +CFLAGS-ldso.c += -fno-delete-null-pointer-checks +endif + LDFLAGS-$(UCLIBC_FORMAT_DSBT_ELF)-$(UCLIBC_LDSO_NAME).so := -Wl,--dsbt-index=1 ifneq ($(SUPPORT_LD_DEBUG),y) LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS) diff --git a/ldso/ldso/dl-tls.c b/ldso/ldso/dl-tls.c index 5d6d3b9..6679693 100644 --- a/ldso/ldso/dl-tls.c +++ b/ldso/ldso/dl-tls.c @@ -100,16 +100,20 @@ _dl_realloc (void * __ptr, size_t __size) * the static TLS area already allocated for each running thread. If this * object's TLS segment is too big to fit, we fail. If it fits, * we set MAP->l_tls_offset and return. + * This function intentionally does not return any value but signals error + * directly, as static TLS should be rare and code handling it should + * not be inlined as much as possible. */ -int -internal_function -_dl_try_allocate_static_tls (struct link_map* map) +void +internal_function __attribute_noinline__ +_dl_allocate_static_tls (struct link_map *map) { /* If the alignment requirements are too high fail. */ if (map->l_tls_align > _dl_tls_static_align) { fail: - return -1; + _dl_dprintf(2, "cannot allocate memory in static TLS block"); + _dl_exit(30); } # ifdef TLS_TCB_AT_TP @@ -165,23 +169,6 @@ fail: } else map->l_need_tls_init = 1; - - return 0; -} - -/* - * This function intentionally does not return any value but signals error - * directly, as static TLS should be rare and code handling it should - * not be inlined as much as possible. - */ -void -internal_function __attribute_noinline__ -_dl_allocate_static_tls (struct link_map *map) -{ - if (_dl_try_allocate_static_tls (map)) { - _dl_dprintf(2, "cannot allocate memory in static TLS block"); - _dl_exit(30); - } } #ifdef SHARED diff --git a/ldso/ldso/fdpic/dl-inlines.h b/ldso/ldso/fdpic/dl-inlines.h index ebbd033..14a4916 100644 --- a/ldso/ldso/fdpic/dl-inlines.h +++ b/ldso/ldso/fdpic/dl-inlines.h @@ -5,8 +5,6 @@ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ -#include <inline-hashtab.h> - /* Initialize a DL_LOADADDR_TYPE given a got pointer and a complete load map. */ static __always_inline void __dl_init_loadaddr_map(struct elf32_fdpic_loadaddr *loadaddr, Elf32_Addr dl_boot_got_pointer, @@ -145,18 +143,269 @@ __dl_addr_in_loadaddr(void *p, struct elf32_fdpic_loadaddr loadaddr) return 0; } -static int -hash_pointer(void *p) +/* + * The hashcode handling code below is heavily inspired in libiberty's + * hashtab code, but with most adaptation points and support for + * deleting elements removed. + * + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + * Contributed by Vladimir Makarov (vmakarov(a)cygnus.com) + */ +static __always_inline unsigned long +higher_prime_number(unsigned long n) +{ + /* These are primes that are near, but slightly smaller than, a power of two. */ + static const unsigned long primes[] = { + 7, + 13, + 31, + 61, + 127, + 251, + 509, + 1021, + 2039, + 4093, + 8191, + 16381, + 32749, + 65521, + 131071, + 262139, + 524287, + 1048573, + 2097143, + 4194301, + 8388593, + 16777213, + 33554393, + 67108859, + 134217689, + 268435399, + 536870909, + 1073741789, + /* 4294967291 */ + ((unsigned long) 2147483647) + ((unsigned long) 2147483644), + }; + const unsigned long *low = &primes[0]; + const unsigned long *high = &primes[ARRAY_SIZE(primes)]; + + while (low != high) { + const unsigned long *mid = low + (high - low) / 2; + if (n > *mid) + low = mid + 1; + else + high = mid; + } + +#if 0 + /* If we've run out of primes, abort. */ + if (n > *low) { + fprintf(stderr, "Cannot find prime bigger than %lu\n", n); + abort(); + } +#endif + + return *low; +} + +struct funcdesc_ht +{ + /* Table itself */ + struct funcdesc_value **entries; + + /* Current size (in entries) of the hash table */ + size_t size; + + /* Current number of elements */ + size_t n_elements; +}; + +static __always_inline int +hash_pointer(const void *p) { return (int) ((long)p >> 3); } -static int -eq_pointer(void *p, void *q) +static __always_inline struct funcdesc_ht * +htab_create(void) +{ + struct funcdesc_ht *ht = _dl_malloc(sizeof(*ht)); + size_t ent_size; + + if (!ht) + return NULL; + ht->size = 3; + ent_size = sizeof(struct funcdesc_ht_value *) * ht->size; + ht->entries = _dl_malloc(ent_size); + if (!ht->entries) + return NULL; + + ht->n_elements = 0; + _dl_memset(ht->entries, 0, ent_size); + + return ht; +} + +/* + * This is only called from _dl_loadaddr_unmap, so it's safe to call + * _dl_free(). See the discussion below. + */ +static __always_inline void +htab_delete(struct funcdesc_ht *htab) { - struct funcdesc_value *entry = p; + size_t i; + + for (i = htab->size - 1; i >= 0; i--) + if (htab->entries[i]) + _dl_free(htab->entries[i]); + + _dl_free(htab->entries); + _dl_free(htab); +} + +/* + * Similar to htab_find_slot, but without several unwanted side effects: + * - Does not call htab->eq_f when it finds an existing entry. + * - Does not change the count of elements/searches/collisions in the + * hash table. + * This function also assumes there are no deleted entries in the table. + * HASH is the hash value for the element to be inserted. + */ +static __always_inline struct funcdesc_value ** +find_empty_slot_for_expand(struct funcdesc_ht *htab, int hash) +{ + size_t size = htab->size; + unsigned int index = hash % size; + struct funcdesc_value **slot = htab->entries + index; + int hash2; + + if (!*slot) + return slot; + + hash2 = 1 + hash % (size - 2); + for (;;) { + index += hash2; + if (index >= size) + index -= size; + + slot = htab->entries + index; + if (!*slot) + return slot; + } +} + +/* + * The following function changes size of memory allocated for the + * entries and repeatedly inserts the table elements. The occupancy + * of the table after the call will be about 50%. Naturally the hash + * table must already exist. Remember also that the place of the + * table entries is changed. If memory allocation failures are allowed, + * this function will return zero, indicating that the table could not be + * expanded. If all goes well, it will return a non-zero value. + */ +static __always_inline int +htab_expand(struct funcdesc_ht *htab) +{ + struct funcdesc_value **oentries; + struct funcdesc_value **olimit; + struct funcdesc_value **p; + struct funcdesc_value **nentries; + size_t nsize; + + oentries = htab->entries; + olimit = oentries + htab->size; + + /* + * Resize only when table after removal of unused elements is either + * too full or too empty. + */ + if (htab->n_elements * 2 > htab->size) + nsize = higher_prime_number(htab->n_elements * 2); + else + nsize = htab->size; + + nentries = _dl_malloc(sizeof(*nentries) * nsize); + _dl_memset(nentries, 0, sizeof(*nentries) * nsize); + if (nentries == NULL) + return 0; + htab->entries = nentries; + htab->size = nsize; + + p = oentries; + do { + if (*p) + *find_empty_slot_for_expand(htab, hash_pointer((*p)->entry_point)) = *p; + p++; + } while (p < olimit); + +#if 0 + /* + * We can't tell whether this was allocated by the _dl_malloc() + * built into ld.so or malloc() in the main executable or libc, + * and calling free() for something that wasn't malloc()ed could + * do Very Bad Things (TM). Take the conservative approach + * here, potentially wasting as much memory as actually used by + * the hash table, even if multiple growths occur. That's not + * so bad as to require some overengineered solution that would + * enable us to keep track of how it was allocated. + */ + _dl_free(oentries); +#endif + return 1; +} + +/* + * This function searches for a hash table slot containing an entry + * equal to the given element. To delete an entry, call this with + * INSERT = 0, then call htab_clear_slot on the slot returned (possibly + * after doing some checks). To insert an entry, call this with + * INSERT = 1, then write the value you want into the returned slot. + * When inserting an entry, NULL may be returned if memory allocation + * fails. + */ +static __always_inline struct funcdesc_value ** +htab_find_slot(struct funcdesc_ht *htab, void *ptr, int insert) +{ + unsigned int index; + int hash, hash2; + size_t size; + struct funcdesc_value **entry; + + if (htab->size * 3 <= htab->n_elements * 4 && + htab_expand(htab) == 0) + return NULL; + + hash = hash_pointer(ptr); + + size = htab->size; + index = hash % size; + + entry = &htab->entries[index]; + if (!*entry) + goto empty_entry; + else if ((*entry)->entry_point == ptr) + return entry; + + hash2 = 1 + hash % (size - 2); + for (;;) { + index += hash2; + if (index >= size) + index -= size; + + entry = &htab->entries[index]; + if (!*entry) + goto empty_entry; + else if ((*entry)->entry_point == ptr) + return entry; + } + + empty_entry: + if (!insert) + return NULL; - return entry->entry_point == q; + htab->n_elements++; + return entry; } void * @@ -175,7 +424,7 @@ _dl_funcdesc_for (void *entry_point, void *got_value) tpnt->funcdesc_ht = ht; } - entry = htab_find_slot(ht, entry_point, 1, hash_pointer, eq_pointer); + entry = htab_find_slot(ht, entry_point, 1); if (*entry) { _dl_assert((*entry)->entry_point == entry_point); return _dl_stabilize_funcdesc(*entry); @@ -210,8 +459,7 @@ _dl_lookup_address(void const *address) if (fd->got_value != rpnt->loadaddr.got_value) continue; - address = htab_find_slot(rpnt->funcdesc_ht, (void *)fd->entry_point, 0, - hash_pointer, eq_pointer); + address = htab_find_slot(rpnt->funcdesc_ht, (void *)fd->entry_point, 0); if (address && *(struct funcdesc_value *const*)address == fd) { address = (*(struct funcdesc_value *const*)address)->entry_point; diff --git a/ldso/ldso/sh/dl-syscalls.h b/ldso/ldso/sh/dl-syscalls.h index f9f13c7..f40c4fd 100644 --- a/ldso/ldso/sh/dl-syscalls.h +++ b/ldso/ldso/sh/dl-syscalls.h @@ -1,7 +1 @@ -#if __GNUC_PREREQ (4, 1) -#warning !!! gcc 4.1 and later have problems with __always_inline so redefined as inline -# ifdef __always_inline -# undef __always_inline -# define __always_inline __inline__ -# endif -#endif +/* stub for arch-specific syscall issues */ diff --git a/ldso/ldso/xtensa/dl-debug.h b/ldso/ldso/xtensa/dl-debug.h index 18beae5..4128d94 100644 --- a/ldso/ldso/xtensa/dl-debug.h +++ b/ldso/ldso/xtensa/dl-debug.h @@ -8,31 +8,54 @@ static const char * const _dl_reltypes_tab[] = { - [0] "R_XTENSA_NONE", "R_XTENSA_32", - [2] "R_XTENSA_RTLD", "R_XTENSA_GLOB_DAT", - [4] "R_XTENSA_JMP_SLOT", "R_XTENSA_RELATIVE", - [6] "R_XTENSA_PLT", "R_XTENSA_UNUSED7", - [8] "R_XTENSA_OP0", "R_XTENSA_OP1", - [10] "R_XTENSA_OP2", "R_XTENSA_ASM_EXPAND", - [12] "R_XTENSA_ASM_SIMPLIFY", "R_XTENSA_UNUSED13", - [14] "R_XTENSA_UNUSED14", "R_XTENSA_GNU_VTINHERIT", - [16] "R_XTENSA_GNU_VTENTRY", "R_XTENSA_DIFF8", - [18] "R_XTENSA_DIFF16", "R_XTENSA_DIFF32", - [20] "R_XTENSA_SLOT0_OP", "R_XTENSA_SLOT1_OP", - [22] "R_XTENSA_SLOT2_OP", "R_XTENSA_SLOT3_OP", - [24] "R_XTENSA_SLOT4_OP", "R_XTENSA_SLOT5_OP", - [26] "R_XTENSA_SLOT6_OP", "R_XTENSA_SLOT7_OP", - [28] "R_XTENSA_SLOT8_OP", "R_XTENSA_SLOT9_OP", - [30] "R_XTENSA_SLOT10_OP", "R_XTENSA_SLOT11_OP", - [32] "R_XTENSA_SLOT12_OP", "R_XTENSA_SLOT13_OP", - [34] "R_XTENSA_SLOT14_OP", "R_XTENSA_SLOT0_ALT", - [36] "R_XTENSA_SLOT1_ALT", "R_XTENSA_SLOT2_ALT", - [38] "R_XTENSA_SLOT3_ALT", "R_XTENSA_SLOT4_ALT", - [40] "R_XTENSA_SLOT5_ALT", "R_XTENSA_SLOT6_ALT", - [42] "R_XTENSA_SLOT7_ALT", "R_XTENSA_SLOT8_ALT", - [44] "R_XTENSA_SLOT9_ALT", "R_XTENSA_SLOT10_ALT", - [46] "R_XTENSA_SLOT11_ALT", "R_XTENSA_SLOT12_ALT", - [48] "R_XTENSA_SLOT13_ALT", "R_XTENSA_SLOT14_ALT", - [50] "R_XTENSA_TLSDESC_FN", "R_XTENSA_TLSDESC_ARG", - [52] "R_XTENSA_TLS_TPOFF" + "R_XTENSA_NONE", + "R_XTENSA_32", + "R_XTENSA_RTLD", + "R_XTENSA_GLOB_DAT", + "R_XTENSA_JMP_SLOT", + "R_XTENSA_RELATIVE", + "R_XTENSA_PLT", + "R_XTENSA_UNUSED7", + "R_XTENSA_OP0", + "R_XTENSA_OP1", + "R_XTENSA_OP2", + "R_XTENSA_ASM_EXPAND", + "R_XTENSA_ASM_SIMPLIFY", + "R_XTENSA_UNUSED13", + "R_XTENSA_UNUSED14", + "R_XTENSA_GNU_VTINHERIT", + "R_XTENSA_GNU_VTENTRY", + "R_XTENSA_DIFF8", + "R_XTENSA_DIFF16", + "R_XTENSA_DIFF32", + "R_XTENSA_SLOT0_OP", + "R_XTENSA_SLOT1_OP", + "R_XTENSA_SLOT2_OP", + "R_XTENSA_SLOT3_OP", + "R_XTENSA_SLOT4_OP", + "R_XTENSA_SLOT5_OP", + "R_XTENSA_SLOT6_OP", + "R_XTENSA_SLOT7_OP", + "R_XTENSA_SLOT8_OP", + "R_XTENSA_SLOT9_OP", + "R_XTENSA_SLOT10_OP", + "R_XTENSA_SLOT11_OP", + "R_XTENSA_SLOT12_OP", + "R_XTENSA_SLOT13_OP", + "R_XTENSA_SLOT14_OP", + "R_XTENSA_SLOT0_ALT", + "R_XTENSA_SLOT1_ALT", + "R_XTENSA_SLOT2_ALT", + "R_XTENSA_SLOT3_ALT", + "R_XTENSA_SLOT4_ALT", + "R_XTENSA_SLOT5_ALT", + "R_XTENSA_SLOT6_ALT", + "R_XTENSA_SLOT7_ALT", + "R_XTENSA_SLOT8_ALT", + "R_XTENSA_SLOT9_ALT", + "R_XTENSA_SLOT10_ALT", + "R_XTENSA_SLOT11_ALT", + "R_XTENSA_SLOT12_ALT", + "R_XTENSA_SLOT13_ALT", + "R_XTENSA_SLOT14_ALT" }; diff --git a/ldso/ldso/xtensa/dl-startup.h b/ldso/ldso/xtensa/dl-startup.h index 8fe54a3..0c28d5e 100644 --- a/ldso/ldso/xtensa/dl-startup.h +++ b/ldso/ldso/xtensa/dl-startup.h @@ -11,7 +11,7 @@ __asm__ ( " .text\n" " .align 4\n" - " .literal_position\n" + " .literal_position\n" " .global _start\n" " .type _start, @function\n" " .hidden _start\n" diff --git a/ldso/ldso/xtensa/dl-sysdep.h b/ldso/ldso/xtensa/dl-sysdep.h index d308237..5f8bcb0 100644 --- a/ldso/ldso/xtensa/dl-sysdep.h +++ b/ldso/ldso/xtensa/dl-sysdep.h @@ -100,13 +100,10 @@ typedef struct xtensa_got_location_struct { struct elf_resolve; extern unsigned long _dl_linux_resolver (struct elf_resolve *, int); -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to define - the value. */ +/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so + undefined references should not be allowed to define the value. */ #define elf_machine_type_class(type) \ - (((type) == R_XTENSA_JMP_SLOT || (type) == R_XTENSA_TLS_TPOFF \ - || (type) == R_XTENSA_TLSDESC_FN || (type) == R_XTENSA_TLSDESC_ARG) \ - * ELF_RTYPE_CLASS_PLT) + (((type) == R_XTENSA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) /* Return the link-time address of _DYNAMIC. */ static __always_inline Elf32_Addr diff --git a/ldso/ldso/xtensa/dl-tlsdesc.S b/ldso/ldso/xtensa/dl-tlsdesc.S deleted file mode 100644 index a6ebc94..0000000 --- a/ldso/ldso/xtensa/dl-tlsdesc.S +++ /dev/null @@ -1,96 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Xtensa version. - Copyright (C) 2012-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#include <tls.h> -#include "tlsdesc.h" - - - .text - .align 4 - .hidden _dl_tlsdesc_return - .global _dl_tlsdesc_return - .type _dl_tlsdesc_return, @function -_dl_tlsdesc_return: - entry a1, 16 - rur.threadptr a3 - add a2, a2, a3 - retw - .size _dl_tlsdesc_return, .-_dl_tlsdesc_return - -#ifdef SHARED - - - /* This function is used for symbols that need dynamic TLS. - - The argument passed to this function points to the TLS descriptor. - - The assembly code that follows is a rendition of the following - C code, hand-optimized a little bit. - - ptrdiff_t - _dl_tlsdesc_dynamic(struct tlsdesc_dynamic_arg *td) - { - dtv_t *dtv = (dtv_t *)THREAD_DTV(); - if (td->gen_count <= dtv[0].counter - && dtv[td->tlsinfo.ti_module].pointer.val - != TLS_DTV_UNALLOCATED) - return dtv[td->tlsinfo.ti_module].pointer.val - + td->tlsinfo.ti_offset - __builtin_thread_pointer(); - return __tls_get_addr (&td->tlsinfo) - __builtin_thread_pointer(); - } - */ - - .align 4 - .hidden _dl_tlsdesc_dynamic - .global _dl_tlsdesc_dynamic - .type _dl_tlsdesc_dynamic, @function -_dl_tlsdesc_dynamic: - entry a1, 32 - - /* dtv_t *dtv = (dtv_t *)THREAD_DTV(); */ - rur.threadptr a3 - l32i a4, a3, 0 - - /* if (td->gen_count <= dtv[0].counter */ - l32i a6, a2, TLSDESC_GEN_COUNT - l32i a7, a4, 0 - blt a7, a6, .Lslow - - /* && dtv[td->tlsinfo.ti_module].pointer.val != TLS_DTV_UNALLOCATED) */ - l32i a6, a2, TLSDESC_MODID - addx8 a6, a3, a6 - l32i a6, a6, 0 - beqi a6, -1, .Lslow - - /* return dtv[td->tlsinfo.ti_module].pointer.val - + td->tlsinfo.ti_offset - __builtin_thread_pointer(); */ - l32i a6, a2, TLSDESC_MODOFF - sub a2, a6, a3 - retw - - /* return __tls_get_addr (&td->tlsinfo) - __builtin_thread_pointer(); */ -.Lslow: - mov a10, a2 - movi a8, __tls_get_addr - callx8 a8 - sub a2, a10, a3 - retw - .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic - -#endif /* SHARED */ diff --git a/ldso/ldso/xtensa/elfinterp.c b/ldso/ldso/xtensa/elfinterp.c index 1397e95..b4cf975 100644 --- a/ldso/ldso/xtensa/elfinterp.c +++ b/ldso/ldso/xtensa/elfinterp.c @@ -31,8 +31,6 @@ */ #include "ldso.h" -#include "dl-tls.h" -#include "tlsdeschtab.h" unsigned long _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_entry) @@ -148,9 +146,6 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope, int reloc_type; int symtab_index; char *symname; -#if defined USE_TLS && USE_TLS - struct elf_resolve *tls_tpnt = NULL; -#endif struct symbol_ref sym_ref; ElfW(Addr) *reloc_addr; ElfW(Addr) symbol_addr; @@ -177,22 +172,15 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope, * here, so all bases should be covered. */ if (unlikely (!symbol_addr && - ELF_ST_TYPE (sym_ref.sym->st_info) != STT_TLS && ELF_ST_BIND (sym_ref.sym->st_info) != STB_WEAK)) { - return 1; + _dl_dprintf (2, "%s: can't resolve symbol '%s'\n", + _dl_progname, symname); + _dl_exit (1); } if (_dl_trace_prelink) { _dl_debug_lookup (symname, tpnt, &symtab[symtab_index], &sym_ref, elf_machine_type_class(reloc_type)); } -#if defined USE_TLS && USE_TLS - tls_tpnt = sym_ref.tpnt; -#endif - } else { - symbol_addr =symtab[symtab_index].st_value; -#if defined USE_TLS && USE_TLS - tls_tpnt = tpnt; -#endif } #if defined (__SUPPORT_LD_DEBUG__) @@ -210,8 +198,8 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope, case R_XTENSA_RTLD: if (rpnt->r_addend == 1) { - /* Grab the function pointer stashed at the beginning - of the GOT by the GOT_INIT function. */ + /* Grab the function pointer stashed at the beginning of the + GOT by the GOT_INIT function. */ *reloc_addr = *(ElfW(Addr) *) tpnt->dynamic_info[DT_PLTGOT]; } else if (rpnt->r_addend == 2) { /* Store the link map for the object. */ @@ -225,35 +213,6 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope, *reloc_addr += tpnt->loadaddr + rpnt->r_addend; break; -#if defined USE_TLS && USE_TLS - case R_XTENSA_TLS_TPOFF: - CHECK_STATIC_TLS((struct link_map *) tls_tpnt); - *reloc_addr = symbol_addr + tls_tpnt->l_tls_offset + rpnt->r_addend; - break; - case R_XTENSA_TLSDESC_FN: -#ifndef SHARED - CHECK_STATIC_TLS((struct link_map *) tls_tpnt); -#else - if (!TRY_STATIC_TLS ((struct link_map *) tls_tpnt)) - *reloc_addr = (ElfW(Addr)) _dl_tlsdesc_dynamic; - else -#endif - *reloc_addr = (ElfW(Addr)) _dl_tlsdesc_return; - break; - case R_XTENSA_TLSDESC_ARG: -#ifndef SHARED - CHECK_STATIC_TLS((struct link_map *) tls_tpnt); -#else - if (!TRY_STATIC_TLS ((struct link_map *) tls_tpnt)) - *reloc_addr = (ElfW(Addr)) - _dl_make_tlsdesc_dynamic((struct link_map *) tls_tpnt, - symbol_addr + *reloc_addr); - else -#endif - *reloc_addr += symbol_addr + tls_tpnt->l_tls_offset; - break; -#endif - default: return -1; /* Calls _dl_exit(1). */ } diff --git a/libc/sysdeps/linux/xtensa/Makefile.arch b/libc/sysdeps/linux/xtensa/Makefile.arch index b9b6b87..277a1e3 100644 --- a/libc/sysdeps/linux/xtensa/Makefile.arch +++ b/libc/sysdeps/linux/xtensa/Makefile.arch @@ -5,10 +5,7 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC-y := brk.c sigaction.c __syscall_error.c +CSRC-y := brk.c fork.c sigaction.c __syscall_error.c SSRC-y := bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S \ sigrestorer.S syscall.S mmap.S windowspill.S __longjmp.S vfork.S - -CSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += fork.c -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += clone.S diff --git a/libc/sysdeps/linux/xtensa/clone.S b/libc/sysdeps/linux/xtensa/clone.S index 34d68a8..aa79aa7 100644 --- a/libc/sysdeps/linux/xtensa/clone.S +++ b/libc/sysdeps/linux/xtensa/clone.S @@ -1,38 +1,34 @@ -/* Copyright (C) 2001, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2005, 2007 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. The GNU C Library 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 - Library General Public License for more details. + Lesser General Public License for more details. - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ /* clone is even more special than fork as it mucks with stacks - and invokes a function in the right context after its all over. */ + and invokes a function in the right context after it's all over. */ -#include <features.h> -#include <sysdep.h> +#include "sysdep.h" +#include <sys/syscall.h> #define _ERRNO_H 1 #include <bits/errno.h> -#ifdef RESET_PID -#include <tls.h> -#endif -#define __ASSEMBLY__ -#include <linux/sched.h> -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - a2 a3 a4 a5 - pid_t *ptid, struct user_desc *tls, pid_t *ctid) - a6 a7 16(sp) -*/ +/* int clone (a2 = int (*fn)(void *arg), + a3 = void *child_stack, + a4 = int flags, + a5 = void *arg, + a6 = pid_t *ptid, + a7 = struct user_desc *tls, + 16(sp) = pid_t *ctid) */ .text ENTRY (__clone) @@ -43,7 +39,7 @@ ENTRY (__clone) /* a2 and a3 are candidates for destruction by system-call return parameters. We don't need the stack pointer after the system - call. We trust that the kernel will preserve a6, a7 and a9. */ + call. We trust that the kernel will preserve a7, a9, and a6. */ mov a9, a5 /* save function argument */ mov a5, a7 @@ -52,18 +48,19 @@ ENTRY (__clone) mov a6, a4 mov a4, a8 l32i a8, a1, 16 /* child_tid */ - movi a2, SYS_ify(clone) - - /* syscall(NR_clone,clone_flags, usp, parent_tid, child_tls, child_tid) - a2 a6 a3 a4 a5 a8 - */ - + movi a2, SYS_ify (clone) + + /* syscall (a2 = NR_clone, + a6 = clone_flags, + a3 = usp, + a4 = parent_tid, + a5 = child_tls, + a8 = child_tid) */ syscall bltz a2, SYSCALL_ERROR_LABEL beqz a2, .Lthread_start - /* fall through for parent */ - + /* Fall through for parent. */ .Lpseudo_end: retw @@ -72,38 +69,32 @@ ENTRY (__clone) j SYSCALL_ERROR_LABEL .Lthread_start: - -#if CLONE_THREAD != 0x00010000 || CLONE_VM != 0x00000100 -# error invalid values for CLONE_THREAD or CLONE_VM -#endif + /* Start child thread. */ + movi a0, 0 /* terminate the stack frame */ #ifdef RESET_PID - bbsi.l a6, 16, .Lskip_restore_pid /* CLONE_THREAD = 0x00010000 */ + /* Check and see if we need to reset the PID. */ + bbsi.l a6, 16, 1f /* CLONE_THREAD = 0x00010000 */ movi a2, -1 - bbsi a6, 8, .Lgotpid /* CLONE_VM = 0x00000100 */ - movi a2, SYS_ify(getpid) + bbsi.l a6, 8, 2f /* CLONE_VM = 0x00000100 */ + movi a2, SYS_ify (getpid) syscall -.Lgotpid: - rur a3, threadptr - movi a0, TLS_PRE_TCB_SIZE - sub a3, a3, a0 - s32i a2, a3, PID - s32i a2, a3, TID -.Lskip_restore_pid: -#endif - - /* start child thread */ - movi a0, 0 /* terminate the stack frame */ +2: rur a3, THREADPTR + movi a4, PID_OFFSET + add a4, a4, a3 + s32i a2, a4, 0 + movi a4, TID_OFFSET + add a4, a4, a3 + s32i a2, a3, 0 +1: +#endif /* RESET_PID */ + mov a6, a9 /* load up the 'arg' parameter */ callx4 a7 /* call the user's function */ /* Call _exit. Note that any return parameter from the user's - function in a6 is seen as inputs to _exit. */ -#ifdef PIC - movi a2, _exit@PLT -#else - movi a2, _exit -#endif + function in a6 is seen as inputs to _exit. */ + movi a2, JUMPTARGET(_exit) callx4 a2 PSEUDO_END (__clone) diff --git a/libc/sysdeps/linux/xtensa/fork.c b/libc/sysdeps/linux/xtensa/fork.c index 4e4f937..e9b681c 100644 --- a/libc/sysdeps/linux/xtensa/fork.c +++ b/libc/sysdeps/linux/xtensa/fork.c @@ -20,10 +20,6 @@ pid_t fork(void) { return (pid_t) INLINE_SYSCALL(clone, 2, SIGCHLD, 0); } -# ifdef __UCLIBC_HAS_THREADS__ -strong_alias(fork,__libc_fork) -libc_hidden_weak(fork) -# else -libc_hidden_def(fork) -# endif +lt_strong_alias(fork) +lt_libc_hidden(fork) #endif diff --git a/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h b/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h index 4516d93..41f81db 100644 --- a/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h +++ b/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h @@ -1,23 +1,25 @@ -/* - * Copyright (C) 2000-2006 Erik Andersen <andersen(a)uclibc.org> - * - * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. - */ +/* Copyright (C) 1997, 1998, 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* Test if longjmp to JMPBUF would unwind the frame containing a local + variable at ADDRESS. */ + #include <setjmp.h> #include <jmpbuf-offsets.h> -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ #define _JMPBUF_UNWINDS(jmpbuf, address) \ ((void *) (address) < (void *) (jmpbuf)[JB_SP]) - -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include <stdint.h> -#include <unwind.h> - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) -#endif diff --git a/libc/sysdeps/linux/xtensa/sys/ptrace.h b/libc/sysdeps/linux/xtensa/sys/ptrace.h deleted file mode 100644 index 882b8c8..0000000 --- a/libc/sysdeps/linux/xtensa/sys/ptrace.h +++ /dev/null @@ -1,155 +0,0 @@ -/* `ptrace' debugger support interface. Linux version. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include <features.h> - -/* Kludge away careless namespace pollution from the kernel. */ - -#undef PTRACE_GETREGS -#undef PTRACE_SETREGS -#undef PTRACE_GETFPREGS -#undef PTRACE_SETFPREGS -#undef PTRACE_GETFPREGSIZE - - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Get all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETREGS = 12, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETREGS = 13, -#define PT_SETREGS PTRACE_SETREGS - - /* Get all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETFPREGS = 14, -#define PT_GETFPREGS PTRACE_GETFPREGS - - /* Set all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETFPREGS = 15, -#define PT_SETFPREGS PTRACE_SETFPREGS - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - /* Get size required for the buffer holding the floating point registers. - This is not supported on all machines. */ - PTRACE_GETFPREGSIZE = 18, -#define PT_GETFPREGSIZE PTRACE_GETFPREGSIZE - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24 -#define PT_SYSCALL PTRACE_SYSCALL -}; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions { - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_MASK = 0x0000007f -}; - -/* Wait extended result codes for the above trace options. */ -enum __ptrace_eventcodes { - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6 -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/libc/sysdeps/linux/xtensa/sysdep.h b/libc/sysdeps/linux/xtensa/sysdep.h index cab4a2f..afe95cc 100644 --- a/libc/sysdeps/linux/xtensa/sysdep.h +++ b/libc/sysdeps/linux/xtensa/sysdep.h @@ -16,10 +16,6 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#ifndef _LINUX_XTENSA_SYSDEP_H -#define _LINUX_XTENSA_SYSDEP_H 1 - -#include <common/sysdep.h> #include <sys/syscall.h> #ifdef __ASSEMBLER__ @@ -28,6 +24,12 @@ #define ASM_TYPE_DIRECTIVE(name, typearg) .type name, typearg #define ASM_SIZE_DIRECTIVE(name) .size name, . - name +#ifdef __STDC__ +#define C_LABEL(name) name : +#else +#define C_LABEL(name) name/**/: +#endif + #define ENTRY(name) \ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name), @function); \ @@ -50,15 +52,6 @@ #undef END #define END(name) ASM_SIZE_DIRECTIVE(name) -/* Local label name for asm code. */ -#ifndef L -# ifdef HAVE_ELF -# define L(name) .L##name -# else -# define L(name) name -# endif -#endif - /* Define a macro for this directive so it can be removed in a few places. */ #define LITERAL_POSITION .literal_position @@ -130,7 +123,19 @@ #define PSEUDO_END_ERRVAL(name) \ END (name) -#if defined _LIBC_REENTRANT +#undef ret_ERRVAL +#define ret_ERRVAL retw + +#if defined RTLD_PRIVATE_ERRNO +# define SYSCALL_ERROR_HANDLER \ +0: movi a4, rtld_errno; \ + neg a2, a2; \ + s32i a2, a4, 0; \ + movi a2, -1; \ + j .Lpseudo_end; + +#elif defined _LIBC_REENTRANT + # if defined USE___THREAD # ifndef NOT_IN_libc # define SYSCALL_ERROR_ERRNO __libc_errno @@ -165,9 +170,3 @@ #endif /* _LIBC_REENTRANT */ #endif /* __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for Xtensa. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - -#endif /* _LINUX_XTENSA_SYSDEP_H */ diff --git a/libc/sysdeps/linux/xtensa/vfork.S b/libc/sysdeps/linux/xtensa/vfork.S index 6aced0a..f094ae3 100644 --- a/libc/sysdeps/linux/xtensa/vfork.S +++ b/libc/sysdeps/linux/xtensa/vfork.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2013 Free Software Foundation, Inc. +/* Copyright (C) 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,67 +19,72 @@ #include <sys/syscall.h> #define _SIGNAL_H #include <bits/signum.h> -#define __ASSEMBLY__ -#include <linux/sched.h> -/* - Clone the calling process, but without copying the whole address space. +/* Clone the calling process, but without copying the whole address space. The calling process is suspended until the new process exits or is replaced by a call to `execve'. Return -1 for errors, 0 to the new process, and the process ID of the new process to the old process. Note that it is important that we don't create a new stack frame for the - caller. + caller. */ -*/ + +/* The following are defined in linux/sched.h, which unfortunately + is not safe for inclusion in an assembly file. */ +#define CLONE_VM 0x00000100 /* set if VM shared between processes */ +#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to + wake it up on mm_release */ #ifndef SAVE_PID -#define SAVE_PID(a,b,c,d) +#define SAVE_PID #endif + #ifndef RESTORE_PID -#define RESTORE_PID(a,b,c) -#endif -#ifndef RESTORE_PID12 -#define RESTORE_PID12(a,b,c) +#define RESTORE_PID #endif -/* - pid_t vfork(void); - Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) - */ +/* pid_t vfork(void); + Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ HIDDEN_ENTRY (__vfork) - .literal .Ljumptable, 0, .L4, .L8, .L12 - mov a3, a0 # move return address out of the way - movi a0, .Ljumptable - extui a2, a3, 30, 2 # call-size: call4/8/12 = 1/2/3 - addx4 a0, a2, a0 # find return address in jumptable - slli a2, a2, 30 - l32i a0, a0, 0 + movi a6, .Ljumptable + extui a2, a0, 30, 2 /* call-size: call4/8/12 = 1/2/3 */ + addx4 a4, a2, a6 /* find return address in jumptable */ + l32i a4, a4, 0 + add a4, a4, a6 - xor a3, a3, a2 # remove call-size from return address - or a0, a0, a2 # create temporary return address - retw + slli a2, a2, 30 + xor a3, a0, a2 /* remove call-size from return addr */ + extui a5, a4, 30, 2 /* get high bits of jump target */ + slli a5, a5, 30 + or a3, a3, a5 /* stuff them into the return address */ + xor a4, a4, a5 /* clear high bits of jump target */ + or a0, a4, a2 /* create temporary return address */ + retw /* "return" to .L4, .L8, or .L12 */ + + .align 4 +.Ljumptable: + .word 0 + .word .L4 - .Ljumptable + .word .L8 - .Ljumptable + .word .L12 - .Ljumptable /* a7: return address */ - .L4: mov a12, a2 mov a13, a3 - SAVE_PID(a5,a15,a2,a3) - - /* use syscall 'clone' and set new stack pointer to the same address */ + SAVE_PID - movi a2, SYS_ify(clone) + /* Use syscall 'clone'. Set new stack pointer to the same address. */ + movi a2, SYS_ify (clone) movi a3, 0 movi a6, CLONE_VM | CLONE_VFORK | SIGCHLD - syscall - RESTORE_PID(a5,a15,a2) + RESTORE_PID movi a5, -4096 @@ -89,24 +94,22 @@ HIDDEN_ENTRY (__vfork) bgeu a6, a5, 1f jx a7 +1: call4 .Lerr /* returns to original caller */ -1: call4 .Lerr /* a11: return address */ - .L8: mov a12, a2 mov a13, a3 mov a14, a6 - SAVE_PID(a9,a15,a2,a3) + SAVE_PID - movi a2, SYS_ify(clone) + movi a2, SYS_ify (clone) movi a3, 0 movi a6, CLONE_VM | CLONE_VFORK | SIGCHLD - syscall - RESTORE_PID(a9,a15,a2) + RESTORE_PID movi a9, -4096 @@ -117,25 +120,22 @@ HIDDEN_ENTRY (__vfork) bgeu a10, a9, 1f jx a11 - -1: call8 .Lerr +1: call8 .Lerr /* returns to original caller */ /* a15: return address */ - .L12: mov a12, a2 mov a13, a3 mov a14, a6 - SAVE_PID (a2,a3,a2,a6) + SAVE_PID - movi a2, SYS_ify(clone) + movi a2, SYS_ify (clone) movi a3, 0 movi a6, CLONE_VM | CLONE_VFORK | SIGCHLD - syscall - RESTORE_PID12(a3,a6,a15) + RESTORE_PID mov a3, a13 movi a13, -4096 @@ -147,18 +147,18 @@ HIDDEN_ENTRY (__vfork) bgeu a14, a13, 1f jx a15 +1: call12 .Lerr /* returns to original caller */ -1: call12 .Lerr .align 4 - .Lerr: entry a1, 16 - /* Restore return address */ - - extui a4, a0, 30, 2 + /* Restore the return address. */ + extui a4, a0, 30, 2 /* get the call-size bits */ slli a4, a4, 30 - or a0, a3, a4 + slli a3, a3, 2 /* clear high bits of target address */ + srli a3, a3, 2 + or a0, a3, a4 /* combine them */ PSEUDO_END (__vfork) .Lpseudo_end: diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c index 75369bd..2a5bf6d 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c @@ -22,6 +22,8 @@ #include <lowlevellock.h> #include <sys/time.h> #include <tls.h> +#include <tcb-offsets.h> + void #ifndef IS_IN_libpthread diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch deleted file mode 100644 index 8ebe287..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch +++ /dev/null @@ -1,15 +0,0 @@ -# uClibc-ng project -# Licensed under the LGPL v2.1, see the file COPYING and LICENSE. - -libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -libpthread_linux_arch_CSRC = pthread_once.c -libpthread_linux_arch_SSRC = - -CFLAGS-OMIT-fork.c = -DNOT_IN_libc -DIS_IN_libpthread -ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT - -ASFLAGS-clone.S = -D_LIBC_REENTRANT -ASFLAGS-vfork.S = -D_LIBC_REENTRANT -ASFLAGS-syscall.S = -D_LIBC_REENTRANT -ASFLAGS-mmap.S = -D_LIBC_REENTRANT diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/pthreadtypes.h b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/pthreadtypes.h deleted file mode 100644 index 5e44020..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/pthreadtypes.h +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2002-2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _BITS_PTHREADTYPES_H -#define _BITS_PTHREADTYPES_H 1 - -#include <endian.h> - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_MUTEX_T 24 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_COND_COMPAT_T 12 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 32 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 20 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - - -/* Thread identifiers. The structure of the attribute type is not - exposed on purpose. */ -typedef unsigned long int pthread_t; - - -union pthread_attr_t -{ - char __size[__SIZEOF_PTHREAD_ATTR_T]; - long int __align; -}; -#ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -#endif - - -typedef struct __pthread_internal_slist -{ - struct __pthread_internal_slist *__next; -} __pthread_slist_t; - - -/* Data structures for mutex handling. The structure of the attribute - type is not exposed on purpose. */ -typedef union -{ - struct __pthread_mutex_s - { - int __lock; - unsigned int __count; - int __owner; - /* KIND must stay at this position in the structure to maintain - binary compatibility. */ - int __kind; - unsigned int __nusers; - __extension__ union - { - int __spins; - __pthread_slist_t __list; - }; - } __data; - char __size[__SIZEOF_PTHREAD_MUTEX_T]; - long int __align; -} pthread_mutex_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; - long int __align; -} pthread_mutexattr_t; - - -/* Data structure for conditional variable handling. The structure of - the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __futex; - __extension__ unsigned long long int __total_seq; - __extension__ unsigned long long int __wakeup_seq; - __extension__ unsigned long long int __woken_seq; - void *__mutex; - unsigned int __nwaiters; - unsigned int __broadcast_seq; - } __data; - char __size[__SIZEOF_PTHREAD_COND_T]; - __extension__ long long int __align; -} pthread_cond_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_CONDATTR_T]; - long int __align; -} pthread_condattr_t; - - -/* Keys for thread-specific data */ -typedef unsigned int pthread_key_t; - - -/* Once-only execution */ -typedef int pthread_once_t; - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Data structure for read-write lock variable handling. The - structure of the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __nr_readers; - unsigned int __readers_wakeup; - unsigned int __writer_wakeup; - unsigned int __nr_readers_queued; - unsigned int __nr_writers_queued; -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; -#else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; -#endif - int __writer; - } __data; - char __size[__SIZEOF_PTHREAD_RWLOCK_T]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; - long int __align; -} pthread_rwlockattr_t; -#endif - - -#ifdef __USE_XOPEN2K -/* POSIX spinlock data type. */ -typedef volatile int pthread_spinlock_t; - - -/* POSIX barriers data type. The structure of the type is - deliberately not exposed. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIER_T]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; - int __align; -} pthread_barrierattr_t; -#endif - - -#endif /* bits/pthreadtypes.h */ diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/semaphore.h b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/semaphore.h deleted file mode 100644 index 8845cf0..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/bits/semaphore.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _SEMAPHORE_H -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead." -#endif - - -#define __SIZEOF_SEM_T 16 - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S deleted file mode 100644 index 539b9ef..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#define RESET_PID -#include <tcb-offsets.h> -#include <libc/sysdeps/linux/xtensa/clone.S> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/createthread.c b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/createthread.c deleted file mode 100644 index 2bb96e9..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/createthread.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Value passed to 'clone' for initialization of the thread register. */ -#define TLS_VALUE (pd + 1) - - -/* Get the real implementation. */ -#include <sysdeps/pthread/createthread.c> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/fork.c b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/fork.c deleted file mode 100644 index ba5c700..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/fork.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sched.h> -#include <signal.h> -#include <sysdep.h> -#include <tls.h> - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ - NULL, NULL, &THREAD_SELF->tid) - -#include "../fork.c" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.c b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.c deleted file mode 100644 index 756f39f..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.c +++ /dev/null @@ -1,132 +0,0 @@ -/* low level locking for pthread library. Generic futex-using version. - Copyright (C) 2003-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <sysdep.h> -#include <lowlevellock.h> -#include <sys/time.h> - -void -__lll_lock_wait_private (int *futex) -{ - do - { - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, LLL_PRIVATE); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); -} - - -/* These functions don't get included in libc.so */ -#ifdef IS_IN_libpthread -void -__lll_lock_wait (int *futex, int private) -{ - do - { - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, private); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); -} - - -int -__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) -{ - struct timespec rt; - - /* Reject invalid timeouts. */ - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - /* Upgrade the lock. */ - if (atomic_exchange_acq (futex, 2) == 0) - return 0; - - do - { - struct timeval tv; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - // XYZ: Lost the lock to check whether it was private. - lll_futex_timed_wait (futex, 2, &rt, private); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); - - return 0; -} - - -int -__lll_timedwait_tid (int *tidp, const struct timespec *abstime) -{ - int tid; - - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - /* Repeat until thread terminated. */ - while ((tid = *tidp) != 0) - { - struct timeval tv; - struct timespec rt; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - /* Wait until thread terminates. */ - // XYZ: Lost the lock to check whether it was private. - if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) - return ETIMEDOUT; - } - - return 0; -} -#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.h b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.h deleted file mode 100644 index abe6e9c..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/lowlevellock.h +++ /dev/null @@ -1,293 +0,0 @@ -/* Copyright (C) 2005-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include <time.h> -#include <sys/param.h> -#include <bits/pthreadtypes.h> -#include <atomic.h> -#include <sysdep.h> -#include <bits/kernel-features.h> - -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 -#define FUTEX_WAKE_OP 5 -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) -#define FUTEX_LOCK_PI 6 -#define FUTEX_UNLOCK_PI 7 -#define FUTEX_TRYLOCK_PI 8 -#define FUTEX_WAIT_BITSET 9 -#define FUTEX_WAKE_BITSET 10 -#define FUTEX_PRIVATE_FLAG 128 -#define FUTEX_CLOCK_REALTIME 256 - -#define FUTEX_BITSET_MATCH_ANY 0xffffffff - -/* Values for 'private' parameter of locking macros. Yes, the - definition seems to be backwards. But it is not. The bit will be - reversed before passing to the system call. */ -#define LLL_PRIVATE 0 -#define LLL_SHARED FUTEX_PRIVATE_FLAG - - -#if !defined NOT_IN_libc || defined IS_IN_rtld -/* In libc.so or ld.so all futexes are private. */ -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - ((fl) | FUTEX_PRIVATE_FLAG) -# else -# define __lll_private_flag(fl, private) \ - ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) -# endif -#else -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) -# else -# define __lll_private_flag(fl, private) \ - (__builtin_constant_p (private) \ - ? ((private) == 0 \ - ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ - : (fl)) \ - : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ - & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) -# endif -#endif - - -#define lll_futex_wait(futexp, val, private) \ - lll_futex_timed_wait(futexp, val, NULL, private) - -#define lll_futex_timed_wait(futexp, val, timespec, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ - __lll_private_flag (FUTEX_WAIT, private), \ - (val), (timespec)); \ - __ret; \ - }) - -#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - int __op = FUTEX_WAIT_BITSET | clockbit; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (__op, private), \ - (val), (timespec), NULL /* Unused. */, \ - FUTEX_BITSET_MATCH_ANY); \ - __ret; \ - }) - -#define lll_futex_wake(futexp, nr, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ - __lll_private_flag (FUTEX_WAKE, private), \ - (nr), 0); \ - __ret; \ - }) - -#define lll_robust_dead(futexv, private) \ - do \ - { \ - int *__futexp = &(futexv); \ - atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1, private); \ - } \ - while (0) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ - (nr_wake), (nr_move), (mutex), (val)); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ - }) - - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_WAKE_OP, private), \ - (nr_wake), (nr_wake2), (futexp2), \ - FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ - }) - - -#define lll_trylock(lock) \ - atomic_compare_and_exchange_val_acq(&(lock), 1, 0) - -#define lll_cond_trylock(lock) \ - atomic_compare_and_exchange_val_acq(&(lock), 2, 0) - -#define __lll_robust_trylock(futex, id) \ - (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0) -#define lll_robust_trylock(lock, id) \ - __lll_robust_trylock (&(lock), id) - -extern void __lll_lock_wait_private (int *futex) attribute_hidden; -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; - -#define __lll_lock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, \ - 1, 0), 0)) \ - { \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __lll_lock_wait_private (__futex); \ - else \ - __lll_lock_wait (__futex, private); \ - } \ - })) -#define lll_lock(futex, private) __lll_lock (&(futex), private) - - -#define __lll_robust_lock(futex, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ - 0), 0)) \ - __val = __lll_robust_lock_wait (__futex, private); \ - __val; \ - }) -#define lll_robust_lock(futex, id, private) \ - __lll_robust_lock (&(futex), id, private) - - -#define __lll_cond_lock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - if (__builtin_expect (atomic_exchange_acq (__futex, 2), 0)) \ - __lll_lock_wait (__futex, private); \ - })) -#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) - - -#define lll_robust_cond_lock(futex, id, private) \ - __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) - - -extern int __lll_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; - -#define __lll_timedlock(futex, abstime, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_exchange_acq (__futex, 1), 0)) \ - __val = __lll_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_timedlock(futex, abstime, private) \ - __lll_timedlock (&(futex), abstime, private) - - -#define __lll_robust_timedlock(futex, abstime, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ - 0), 0)) \ - __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_robust_timedlock(futex, abstime, id, private) \ - __lll_robust_timedlock (&(futex), abstime, id, private) - - -#define __lll_unlock(futex, private) \ - (void) \ - ({ int *__futex = (futex); \ - int __oldval = atomic_exchange_rel (__futex, 0); \ - if (__builtin_expect (__oldval > 1, 0)) \ - lll_futex_wake (__futex, 1, private); \ - }) -#define lll_unlock(futex, private) __lll_unlock(&(futex), private) - - -#define __lll_robust_unlock(futex, private) \ - (void) \ - ({ int *__futex = (futex); \ - int __oldval = atomic_exchange_rel (__futex, 0); \ - if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ - lll_futex_wake (__futex, 1, private); \ - }) -#define lll_robust_unlock(futex, private) \ - __lll_robust_unlock(&(futex), private) - - -#define lll_islocked(futex) \ - (futex != 0) - - -/* Our internal lock implementation is identical to the binary-compatible - mutex implementation. */ - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - -/* The states of a lock are: - 0 - untaken - 1 - taken by one user - >1 - taken by more users */ - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wakeup when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero - afterwards. */ -#define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED);\ - } while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __res = 0; \ - if ((tid) != 0) \ - __res = __lll_timedwait_tid (&(tid), (abstime)); \ - __res; \ - }) - -#endif /* lowlevellock.h */ diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pt-initfini.c b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pt-initfini.c deleted file mode 100644 index 4e6d26e..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pt-initfini.c +++ /dev/null @@ -1,134 +0,0 @@ -/* Special .init and .fini section support. Linuxthread version. - Copyright (C) 1995,1996,1997,2000,2001,2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it - and/or modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The Library General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - The GNU C Library 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -/* This file is compiled into assembly code which is then munged by a sed - script into two files: crti.s and crtn.s. - - * crti.s puts a function prologue at the beginning of the - .init and .fini sections and defines global symbols for - those addresses, so they can be called as functions. - - * crtn.s puts the corresponding function epilogues - in the .init and .fini sections. */ - -#include <stdlib.h> - -/* We use embedded asm for .section unconditionally, as this makes it - easier to insert the necessary directives into crtn.S. */ -#define SECTION(x) __asm__ (".section " x ) - -/* Embed an #include to pull in the alignment and .end directives. */ -__asm__ ("\n#include \"defs.h\""); -__asm__ ("\n#if defined __i686 && defined __ASSEMBLER__"); -__asm__ ("\n#undef __i686"); -__asm__ ("\n#define __i686 __i686"); -__asm__ ("\n#endif"); - -/* The initial common code ends here. */ -__asm__ ("\n/*@HEADER_ENDS*/"); - -/* To determine whether we need .end and .align: */ -__asm__ ("\n/*@TESTS_BEGIN*/"); -extern void dummy (void (*foo) (void)); -void -dummy (void (*foo) (void)) -{ - if (foo) - (*foo) (); -} -__asm__ ("\n/*@TESTS_END*/"); - -/* The beginning of _init: */ -__asm__ ("\n/*@_init_PROLOG_BEGINS*/"); - -static void -call_initialize_minimal (void) -{ - extern void __pthread_initialize_minimal_internal (void) - __attribute ((visibility ("hidden"))); - - __pthread_initialize_minimal_internal (); -} - -SECTION (".init"); -extern void __attribute__ ((section (".init"))) _init (void); -void -_init (void) -{ - /* The very first thing we must do is to set up the registers. */ - call_initialize_minimal (); - - __asm__ ("ALIGN"); - __asm__("END_INIT"); - /* Now the epilog. */ - __asm__ ("\n/*@_init_PROLOG_ENDS*/"); - __asm__ ("\n/*@_init_EPILOG_BEGINS*/"); - SECTION(".init"); -} -__asm__ ("END_INIT"); - -/* End of the _init epilog, beginning of the _fini prolog. */ -__asm__ ("\n/*@_init_EPILOG_ENDS*/"); -__asm__ ("\n/*@_fini_PROLOG_BEGINS*/"); - -SECTION (".fini"); -extern void __attribute__ ((section (".fini"))) _fini (void); -void -_fini (void) -{ - - /* End of the _fini prolog. */ - __asm__ ("ALIGN"); - __asm__ ("END_FINI"); - __asm__ ("\n/*@_fini_PROLOG_ENDS*/"); - - /* Xtensa: It doesn't really matter whether GCC thinks this is a leaf - function or not, and the scripts that are supposed to remove the - call don't catch the literal, resulting in an undefined symbol - reference. */ -#if 0 - { - /* Let GCC know that _fini is not a leaf function by having a dummy - function call here. We arrange for this call to be omitted from - either crt file. */ - extern void i_am_not_a_leaf (void); - i_am_not_a_leaf (); - } -#endif - - /* Beginning of the _fini epilog. */ - __asm__ ("\n/*@_fini_EPILOG_BEGINS*/"); - SECTION (".fini"); -} -__asm__ ("END_FINI"); - -/* End of the _fini epilog. Any further generated assembly (e.g. .ident) - is shared between both crt files. */ -__asm__ ("\n/*@_fini_EPILOG_ENDS*/"); -__asm__ ("\n/*@TRAILER_BEGINS*/"); - -/* End of file. */ diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pthread_once.c b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pthread_once.c deleted file mode 100644 index 46085d3..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/pthread_once.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2004-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include "pthreadP.h" -#include <lowlevellock.h> - -unsigned long int __fork_generation attribute_hidden; - -static void -clear_once_control (void *arg) -{ - pthread_once_t *once_control = (pthread_once_t *) arg; - - *once_control = 0; - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); -} - -int -__pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) -{ - for (;;) - { - int oldval; - int newval; - - /* Pseudo code: - newval = __fork_generation | 1; - oldval = *once_control; - if ((oldval & 2) == 0) - *once_control = newval; - Do this atomically. - */ - do - { - newval = __fork_generation | 1; - oldval = *once_control; - if (oldval & 2) - break; - } while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval); - - /* Check if the initializer has already been done. */ - if ((oldval & 2) != 0) - return 0; - - /* Check if another thread already runs the initializer. */ - if ((oldval & 1) == 0) - break; - - /* Check whether the initializer execution was interrupted by a fork. */ - if (oldval != newval) - break; - - /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, oldval, LLL_PRIVATE); - } - - /* This thread is the first here. Do the initialization. - Register a cleanup handler so that in case the thread gets - interrupted the initialization can be restarted. */ - pthread_cleanup_push (clear_once_control, once_control); - - init_routine (); - - pthread_cleanup_pop (0); - - /* Say that the initialisation is done. */ - *once_control = __fork_generation | 2; - - /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); - - return 0; -} -weak_alias (__pthread_once, pthread_once) -strong_alias (__pthread_once, __pthread_once_internal) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h deleted file mode 100644 index 6bb2aeb..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> -#include <tls.h> -/* #include <pt-machine.h> */ -#ifndef __ASSEMBLER__ -# include <pthreadP.h> -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt -// FIXME: ENTRY includes an entry instruction, here we'd want entry sp, 48! -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - SINGLE_THREAD_P(a15); \ - bnez a15, .Lpseudo_cancel; \ - DO_CALL (syscall_name, args); \ - bgez a2, .Lpseudo_done; \ - movi a4, -4095; \ - blt a2, a4, .Lpseudo_done; \ - j SYSCALL_ERROR_LABEL; \ - .Lpseudo_done: \ - retw; \ - .Lpseudo_cancel: \ - /* The syscall args are in a2...a7; no need to save */ \ - CENABLE; \ - /* The return value is in a10 and preserved across the syscall */ \ - DO_CALL (syscall_name, args); \ - CDISABLE; \ - bgez a2, .Lpseudo_end; \ - movi a4, -4095; \ - blt a2, a4, .Lpseudo_end; \ - j SYSCALL_ERROR_LABEL; \ - .Lpseudo_end: - - -# ifdef IS_IN_libpthread -# define CENABLE_FUNC __pthread_enable_asynccancel -# define CDISABLE_FUNC __pthread_disable_asynccancel -# define __local_multiple_threads __pthread_multiple_threads -# elif !defined NOT_IN_libc -# define CENABLE_FUNC __libc_enable_asynccancel -# define CDISABLE_FUNC __libc_disable_asynccancel -# define __local_multiple_threads __libc_multiple_threads -# elif defined IS_IN_librt -# define CENABLE_FUNC __librt_enable_asynccancel -# define CDISABLE_FUNC __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -# define CENABLE movi a8, CENABLE_FUNC; \ - callx8 a8 -# define CDISABLE movi a8, CDISABLE_FUNC; \ - callx8 a8 - -# if defined IS_IN_libpthread || !defined NOT_IN_libc -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P(reg) movi reg, __local_multiple_threads; \ - l32i reg, reg, 0; -# endif - -# else -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - rur reg, threadptr; \ - l32i reg, reg, MULTIPLE_THREADS_OFFSET; -# endif -# endif - -#else - -/* This code should never be used but we define it anyhow. */ -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S deleted file mode 100644 index 46eb76d..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <tls.h> - -/* - Save the PID value, save 0x80000000 if PID was 0. - Registers a2 and a3 are available; ar should return the PID and as threadptr - */ - -#define SAVE_PID(pid,tp,ar,as) \ - rur tp, threadptr; \ - movi ar, TLS_PRE_TCB_SIZE; \ - sub tp, tp, ar; \ - l32i pid, tp, PID; \ - neg ar, pid; \ - movi as, 0x80000000; \ - moveqz ar, as, ar; \ - s32i ar, tp, PID; \ - -/* - Restore the PID value, restore to 0 if saved value was 0x80000000 - Return value from the syscall is in a2. - */ -#define RESTORE_PID(pid,tp,res) \ - beqz res, 1f; \ - s32i pid, tp, PID; \ -1: - -/* - Special version for call12, where we don't have enough registers - available to preserve the original PID. - */ -#define RESTORE_PID12(ar, as, at) \ - rur as, threadptr; \ - movi ar, TLS_PRE_TCB_SIZE; \ - sub as, as, ar; \ - l32i ar, as, PID; \ - movi at, 0x80000000; \ - sub at, at, ar; \ - neg ar, ar; \ - moveqz ar, at, at; \ - s32i ar, as, PID; - -#include <libc/sysdeps/linux/xtensa/vfork.S> diff --git a/libpthread/nptl/sysdeps/xtensa/Makefile.arch b/libpthread/nptl/sysdeps/xtensa/Makefile.arch deleted file mode 100644 index 5bbd409..0000000 --- a/libpthread/nptl/sysdeps/xtensa/Makefile.arch +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2012 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA. - -CFLAGS-pt-raise.c = -DNOT_IN_libc -DIS_IN_libpthread - -ASFLAGS-dl-tlsdesc.S = -DNOT_IN_libc=1 -ASFLAGS-pthread_spin_lock.S = -DNOT_IN_libc -DIS_IN_libpthread -ASFLAGS-pthread_spin_trylock.S = -DNOT_IN_libc -DIS_IN_libpthread -ASFLAGS-nptl-sysdep.S = -DNOT_IN_libc -DIS_IN_libpthread \ - -D_LIBC_REENTRANT \ - -I$(top_srcdir)libc/sysdeps/linux/xtensa - -libc_arch_a_CSRC = libc-tls.c -librt_arch_a_SSRC = dl-tlsdesc.S - -CFLAGS-gen_tlsdesc.c = -S -$(libpthread_arch_OUT)/gen_tlsdesc.c: $(libpthread_arch_DIR)/tlsdesc.sym | $(libpthread_arch_OUT) - $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ -$(libpthread_arch_OUT)/gen_tlsdesc.s: $(libpthread_arch_OUT)/gen_tlsdesc.c | headers - $(compile.c) -libpthread-generated-y += $(libpthread_arch_OUT)/gen_tlsdesc.s -$(libpthread_arch_OUT)/tlsdesc.h: $(libpthread_arch_OUT)/gen_tlsdesc.s - $(do_sed) $(PTHREAD_GENERATE_MANGLE) $< > $@ - @if test ! -s $@ ; then rm -f $@ ; false ; fi -pregen-headers-$(UCLIBC_HAS_THREADS_NATIVE) += $(libpthread_arch_OUT)/tlsdesc.h diff --git a/libpthread/nptl/sysdeps/xtensa/dl-tls.h b/libpthread/nptl/sysdeps/xtensa/dl-tls.h deleted file mode 100644 index 29008db..0000000 --- a/libpthread/nptl/sysdeps/xtensa/dl-tls.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Xtensa version. - Copyright (C) 2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _XTENSA_DL_TLS_H -#define _XTENSA_DL_TLS_H 1 - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -extern void *__tls_get_addr (tls_index *ti); - -/* Type used to represent a TLS descriptor. */ -struct tlsdesc -{ - union - { - void *pointer; - long value; - } argument; - ptrdiff_t (*entry)(struct tlsdesc *); -}; - -/* Type used as the argument in a TLS descriptor for a symbol that - needs dynamic TLS offsets. */ -struct tlsdesc_dynamic_arg -{ - tls_index tlsinfo; - size_t gen_count; -}; - -extern ptrdiff_t attribute_hidden - _dl_tlsdesc_return(struct tlsdesc_dynamic_arg *); - -extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset); -extern ptrdiff_t attribute_hidden - _dl_tlsdesc_dynamic(struct tlsdesc_dynamic_arg *); - -#endif diff --git a/libpthread/nptl/sysdeps/xtensa/jmpbuf-unwind.h b/libpthread/nptl/sysdeps/xtensa/jmpbuf-unwind.h deleted file mode 100644 index bda498b..0000000 --- a/libpthread/nptl/sysdeps/xtensa/jmpbuf-unwind.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2005,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <setjmp.h> -#include <stdint.h> -#include <unwind.h> - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#undef _JMPBUF_UNWINDS -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle (jmpbuf[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) diff --git a/libpthread/nptl/sysdeps/xtensa/libc-tls.c b/libpthread/nptl/sysdeps/xtensa/libc-tls.c deleted file mode 100644 index 80494c5..0000000 --- a/libpthread/nptl/sysdeps/xtensa/libc-tls.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Xtensa version. - Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdeps/generic/libc-tls.c> -#include <dl-tls.h> - -#if defined(USE_TLS) && USE_TLS - -/* On Xtensa, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} - -#endif diff --git a/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S b/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S deleted file mode 100644 index 1e220a8..0000000 --- a/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - - .text - .align 4 - - .globl pthread_spin_lock -pthread_spin_lock: - - entry a1, 16 - - movi a3, 0 - wsr a3, scompare1 - movi a3, 1 -1: s32c1i a3, a2, 0 - bnez a3, 1b - movi a2, 0 - - retw - - .type pthread_spin_lock, @function - .size pthread_spin_lock, .-pthread_spin_lock diff --git a/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S b/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S deleted file mode 100644 index a736b01..0000000 --- a/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#define _ERRNO_H 1 -#include <bits/errno.h> - - .text - .align 4 - - .globl pthread_spin_trylock -pthread_spin_trylock: - - entry a1, 16 - - movi a3, 0 - wsr a3, scompare1 - movi a3, 1 - s32c1i a3, a2, 0 - movi a2, EBUSY - moveqz a2, a3, a3 - - retw - - .type pthread_spin_trylock, @function - .size pthread_spin_trylock, .-pthread_spin_trylock diff --git a/libpthread/nptl/sysdeps/xtensa/pthreaddef.h b/libpthread/nptl/sysdeps/xtensa/pthreaddef.h deleted file mode 100644 index e72b4bc..0000000 --- a/libpthread/nptl/sysdeps/xtensa/pthreaddef.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) - - -/* XXX Until we have a better place keep the definitions here. */ - -#define __exit_thread_inline(val) \ - INLINE_SYSCALL (exit, 1, (val)) diff --git a/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym b/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym deleted file mode 100644 index 4c86876..0000000 --- a/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym +++ /dev/null @@ -1,7 +0,0 @@ -#include <sysdep.h> -#include <tls.h> - -TLS_PRE_TCB_SIZE sizeof (struct pthread) -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -PID offsetof (struct pthread, pid) -TID offsetof (struct pthread, tid) diff --git a/libpthread/nptl/sysdeps/xtensa/tls.h b/libpthread/nptl/sysdeps/xtensa/tls.h deleted file mode 100644 index f0cb27c..0000000 --- a/libpthread/nptl/sysdeps/xtensa/tls.h +++ /dev/null @@ -1,159 +0,0 @@ -/* Definition for thread-local data handling. NPTL/Xtensa version. - Copyright (C) 2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _TLS_H -#define _TLS_H - -#ifndef __ASSEMBLER__ - -# include <stdbool.h> -# include <stddef.h> -# include <stdint.h> - -/* Type for the dtv. */ -typedef union dtv -{ - size_t counter; - struct - { - void *val; - bool is_static; - } pointer; -} dtv_t; - - -#else /* __ASSEMBLER__ */ -# include <tcb-offsets.h> -#endif /* __ASSEMBLER__ */ - -/* We require TLS support in the tools. */ -#define HAVE_TLS_SUPPORT 1 -#define HAVE_TLS_MODEL_ATTRIBUTE 1 -#define HAVE___THREAD 1 - -/* Signal that TLS support is available. */ -#define USE_TLS 1 - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include <sysdep.h> - -/* The TLS blocks start right after the TCB. */ -# define TLS_DTV_AT_TP 1 - -/* Get the thread descriptor definition. */ -# include <../../descr.h> - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN 16 - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN 16 - - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - ({ tcbhead_t *__tcbp; \ - __asm__ __volatile__ ("rur %0, threadptr" : "=r" (__tcbp)); \ - __tcbp->dtv = (dtv); }) \ - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp, secondcall) \ - ({ __asm__ __volatile__ ("wur %0, threadptr" : : "r" (tcbp)); 0; }) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ tcbhead_t *__tcbp; \ - __asm__ __volatile__ ("rur %0, threadptr" : "=r" (__tcbp)); \ - __tcbp->dtv; }) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ({ struct pthread *__self; \ - __asm__ ("rur %0, threadptr" : "=r" (__self)); \ - __self - 1; }) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - CONST_THREAD_AREA (32, sizeof (struct pthread)) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) - -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/libpthread/nptl/sysdeps/xtensa/tlsdesc.sym b/libpthread/nptl/sysdeps/xtensa/tlsdesc.sym deleted file mode 100644 index b18bf5f..0000000 --- a/libpthread/nptl/sysdeps/xtensa/tlsdesc.sym +++ /dev/null @@ -1,10 +0,0 @@ -#include <stddef.h> -#include <sysdep.h> -#include <tls.h> -#include <link.h> -#include <dl-tls.h> - -TLSDESC_ARG offsetof(struct tlsdesc, argument) -TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) -TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) -TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch 1.0 updated. 42e9e0a0406473a9b017342eaffc03c85f9bb51b
by wbx@helium.waldemar-brodkorb.de 16 Feb '15

16 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, 1.0 has been updated via 42e9e0a0406473a9b017342eaffc03c85f9bb51b (commit) via 673c426bfbe58ee626d346b13365b73712f961ba (commit) via 343f6b8f1f754e397632b0552e4afe586c8b392b (commit) from 6007a0d8e829c5f6ff79034c3101c214766dc3d2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 42e9e0a0406473a9b017342eaffc03c85f9bb51b Merge: 6007a0d 673c426 Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Sun Feb 15 23:54:56 2015 -0600 merge uClibc upstream changes ----------------------------------------------------------------------- Summary of changes: Makerules | 2 +- Rules.mak | 13 +++++-------- extra/Configs/Config.mips | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Makerules b/Makerules index 85f21ea..87e3c19 100644 --- a/Makerules +++ b/Makerules @@ -29,7 +29,7 @@ objs: all_objs # apply unconditional per-directory flags define add_IS_IN_lib ifneq ($(strip $(2)),) -__add_IS_IN_lib := $(subst $(top_builddir),,$(2)) +__add_IS_IN_lib := $(2) $$(__add_IS_IN_lib): CFLAGS-for-library-members:=$(CFLAGS-$(1)) -DIN_LIB=$(word 1,$(subst /, ,$(1))) endif endef diff --git a/Rules.mak b/Rules.mak index 2a73d7f..77c34f8 100644 --- a/Rules.mak +++ b/Rules.mak @@ -401,17 +401,14 @@ endif ifeq ($(TARGET_ARCH),mips) OPTIMIZATION+=-mno-split-addresses - ifeq ($(strip $(ARCH_BIG_ENDIAN)),y) - CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64btsmip - CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32btsmip - endif - ifeq ($(strip $(ARCH_LITTLE_ENDIAN)),y) - CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64ltsmip - CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32ltsmip - endif CPU_CFLAGS-$(CONFIG_MIPS_N64_ABI)+=-mabi=64 CPU_CFLAGS-$(CONFIG_MIPS_O32_ABI)+=-mabi=32 CPU_CFLAGS-$(CONFIG_MIPS_N32_ABI)+=-mabi=n32 + + CPU_CFLAGS-$(CONFIG_MIPS_NAN_LEGACY)+=-mnan=legacy + CPU_CFLAGS-$(CONFIG_MIPS_NAN_2008)+=-mnan=2008 + + CPU_LDFLAGS-y += $(CPU_CFLAGS) endif ifeq ($(TARGET_ARCH),nios) diff --git a/extra/Configs/Config.mips b/extra/Configs/Config.mips index 4d30d31..76b10c6 100644 --- a/extra/Configs/Config.mips +++ b/extra/Configs/Config.mips @@ -33,6 +33,21 @@ config CONFIG_MIPS_N64_ABI endchoice choice + prompt "Target NAN Encoding" + default CONFIG_MIPS_NAN_LEGACY + help + This is the NAN Encoding you want to use. Chose either Legacy + or 2008. + +config CONFIG_MIPS_NAN_LEGACY + bool "LEGACY" + +config CONFIG_MIPS_NAN_2008 + bool "2008" + +endchoice + +choice prompt "Target Processor Architecture" default CONFIG_MIPS_ISA_1 if CONFIG_MIPS_O32_ABI default CONFIG_MIPS_ISA_3 if CONFIG_MIPS_N32_ABI hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch master updated. 0adea94e182e8bcd3c1c593aa9b9dad2a65b5862
by wbx@helium.waldemar-brodkorb.de 16 Feb '15

16 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, master has been updated via 0adea94e182e8bcd3c1c593aa9b9dad2a65b5862 (commit) from 2e6fa2c249c4cd6ada59de0793fb29438feb76eb (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 0adea94e182e8bcd3c1c593aa9b9dad2a65b5862 Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Sun Feb 15 23:52:14 2015 -0600 bad merge, remove unused ----------------------------------------------------------------------- Summary of changes: Rules.mak | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Rules.mak b/Rules.mak index 7688c72..2cdb704 100644 --- a/Rules.mak +++ b/Rules.mak @@ -399,14 +399,6 @@ endif ifeq ($(TARGET_ARCH),mips) OPTIMIZATION+=-mno-split-addresses - ifeq ($(strip $(ARCH_BIG_ENDIAN)),y) - CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64btsmip - CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32btsmip - endif - ifeq ($(strip $(ARCH_LITTLE_ENDIAN)),y) - CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64ltsmip - CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32ltsmip - endif CPU_CFLAGS-$(CONFIG_MIPS_N64_ABI)+=-mabi=64 CPU_CFLAGS-$(CONFIG_MIPS_O32_ABI)+=-mabi=32 CPU_CFLAGS-$(CONFIG_MIPS_N32_ABI)+=-mabi=n32 hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch master updated. 2e6fa2c249c4cd6ada59de0793fb29438feb76eb
by wbx@helium.waldemar-brodkorb.de 16 Feb '15

16 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, master has been updated via 2e6fa2c249c4cd6ada59de0793fb29438feb76eb (commit) via 673c426bfbe58ee626d346b13365b73712f961ba (commit) via 343f6b8f1f754e397632b0552e4afe586c8b392b (commit) from f2267227fd6f88f3abc85bfa0db3b19178c46460 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2e6fa2c249c4cd6ada59de0793fb29438feb76eb Merge: f226722 673c426 Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Sun Feb 15 23:46:52 2015 -0600 merge uClibc changes ----------------------------------------------------------------------- Summary of changes: Makerules | 2 +- Rules.mak | 5 +++++ extra/Configs/Config.mips | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Makerules b/Makerules index d6a1864..6e2af48 100644 --- a/Makerules +++ b/Makerules @@ -29,7 +29,7 @@ objs: all_objs # apply unconditional per-directory flags define add_IS_IN_lib ifneq ($(strip $(2)),) -__add_IS_IN_lib := $(subst $(top_builddir),,$(2)) +__add_IS_IN_lib := $(2) $$(__add_IS_IN_lib): CFLAGS-for-library-members:=$(CFLAGS-$(1)) -DIN_LIB=$(word 1,$(subst /, ,$(1))) endif endef diff --git a/Rules.mak b/Rules.mak index a95fdd8..7688c72 100644 --- a/Rules.mak +++ b/Rules.mak @@ -410,6 +410,11 @@ ifeq ($(TARGET_ARCH),mips) CPU_CFLAGS-$(CONFIG_MIPS_N64_ABI)+=-mabi=64 CPU_CFLAGS-$(CONFIG_MIPS_O32_ABI)+=-mabi=32 CPU_CFLAGS-$(CONFIG_MIPS_N32_ABI)+=-mabi=n32 + + CPU_CFLAGS-$(CONFIG_MIPS_NAN_LEGACY)+=-mnan=legacy + CPU_CFLAGS-$(CONFIG_MIPS_NAN_2008)+=-mnan=2008 + + CPU_LDFLAGS-y += $(CPU_CFLAGS) endif ifeq ($(TARGET_ARCH),sh) diff --git a/extra/Configs/Config.mips b/extra/Configs/Config.mips index 4d30d31..76b10c6 100644 --- a/extra/Configs/Config.mips +++ b/extra/Configs/Config.mips @@ -33,6 +33,21 @@ config CONFIG_MIPS_N64_ABI endchoice choice + prompt "Target NAN Encoding" + default CONFIG_MIPS_NAN_LEGACY + help + This is the NAN Encoding you want to use. Chose either Legacy + or 2008. + +config CONFIG_MIPS_NAN_LEGACY + bool "LEGACY" + +config CONFIG_MIPS_NAN_2008 + bool "2008" + +endchoice + +choice prompt "Target Processor Architecture" default CONFIG_MIPS_ISA_1 if CONFIG_MIPS_O32_ABI default CONFIG_MIPS_ISA_3 if CONFIG_MIPS_N32_ABI hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch upstream updated. 673c426bfbe58ee626d346b13365b73712f961ba
by wbx@helium.waldemar-brodkorb.de 16 Feb '15

16 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, upstream has been updated via 673c426bfbe58ee626d346b13365b73712f961ba (commit) via 343f6b8f1f754e397632b0552e4afe586c8b392b (commit) from 92de8a5f6ffb1ff9f7183fd08d872aa098b75ae2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 673c426bfbe58ee626d346b13365b73712f961ba Author: Steve Ellcey <sellcey(a)imgtec.com> Date: Wed Jan 28 14:56:07 2015 -0800 Update MIPS configuration rules. Add a configuration choice for the NaN format on MIPS (either the standard (legacy) format or the newer IEEE 2008 format. Change how CPU_LDFLAGS are set for MIPS. Use the same value as CPU_CFLAGS since CC is used to do linking. This ensures consistency between compiles and links and adds support for N32 ABI to linking. Signed-off-by: Steve Ellcey <sellcey(a)imgtec.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> commit 343f6b8f1f754e397632b0552e4afe586c8b392b Author: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> Date: Wed Jan 28 10:50:34 2015 +0100 buildsys: fix IS_IN_lib* for out-of-tree builds 41537a770b46f2376e74af58ba4885749339e81e erroneously stripped the top_builddir off the per-directory flag setting which works fine for in-tree builds but is not correct for O= Just use the full path of the target files to apply the flags to fix that thinko. Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop(a)gmail.com> ----------------------------------------------------------------------- Summary of changes: Makerules | 2 +- Rules.mak | 13 +++++-------- extra/Configs/Config.mips | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Makerules b/Makerules index 85f21ea..87e3c19 100644 --- a/Makerules +++ b/Makerules @@ -29,7 +29,7 @@ objs: all_objs # apply unconditional per-directory flags define add_IS_IN_lib ifneq ($(strip $(2)),) -__add_IS_IN_lib := $(subst $(top_builddir),,$(2)) +__add_IS_IN_lib := $(2) $$(__add_IS_IN_lib): CFLAGS-for-library-members:=$(CFLAGS-$(1)) -DIN_LIB=$(word 1,$(subst /, ,$(1))) endif endef diff --git a/Rules.mak b/Rules.mak index 202f31f..9f5fe85 100644 --- a/Rules.mak +++ b/Rules.mak @@ -412,17 +412,14 @@ ifeq ($(TARGET_ARCH),mips) CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32R2)+=-march=mips32r2 -mtune=mips32r2 CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32 CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64R2)+=-mips64r2 -mtune=mips64r2 - ifeq ($(strip $(ARCH_BIG_ENDIAN)),y) - CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64btsmip - CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32btsmip - endif - ifeq ($(strip $(ARCH_LITTLE_ENDIAN)),y) - CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64ltsmip - CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32ltsmip - endif CPU_CFLAGS-$(CONFIG_MIPS_N64_ABI)+=-mabi=64 CPU_CFLAGS-$(CONFIG_MIPS_O32_ABI)+=-mabi=32 CPU_CFLAGS-$(CONFIG_MIPS_N32_ABI)+=-mabi=n32 + + CPU_CFLAGS-$(CONFIG_MIPS_NAN_LEGACY)+=-mnan=legacy + CPU_CFLAGS-$(CONFIG_MIPS_NAN_2008)+=-mnan=2008 + + CPU_LDFLAGS-y += $(CPU_CFLAGS) endif ifeq ($(TARGET_ARCH),nios) diff --git a/extra/Configs/Config.mips b/extra/Configs/Config.mips index 4d30d31..76b10c6 100644 --- a/extra/Configs/Config.mips +++ b/extra/Configs/Config.mips @@ -33,6 +33,21 @@ config CONFIG_MIPS_N64_ABI endchoice choice + prompt "Target NAN Encoding" + default CONFIG_MIPS_NAN_LEGACY + help + This is the NAN Encoding you want to use. Chose either Legacy + or 2008. + +config CONFIG_MIPS_NAN_LEGACY + bool "LEGACY" + +config CONFIG_MIPS_NAN_2008 + bool "2008" + +endchoice + +choice prompt "Target Processor Architecture" default CONFIG_MIPS_ISA_1 if CONFIG_MIPS_O32_ABI default CONFIG_MIPS_ISA_3 if CONFIG_MIPS_N32_ABI hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch master updated. f2267227fd6f88f3abc85bfa0db3b19178c46460
by wbx@helium.waldemar-brodkorb.de 16 Feb '15

16 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, master has been updated via f2267227fd6f88f3abc85bfa0db3b19178c46460 (commit) via 2da4ae47ba20683e066bd46486da1de94a2ceefc (commit) via ebd37cdff46ebed0f6275d0a138b7fd29db9e174 (commit) via ee99dcff4afdc809a67da69ac396d94f77dd6064 (commit) via fdf72b29bc0599df84b5ff0c6ba97c7315b29ec2 (commit) via dbd6b5fe7f13fe807eef13c4d7192d01611a0528 (commit) via 9fa188f85fb8531b4669865b11dfbca8ebaaff5d (commit) via 57ddadc1d9d3d41944901f6054864550cdd3a422 (commit) from 7ea5fc8e6f92dcc01bcd883cf4bcfbb8993d89fe (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f2267227fd6f88f3abc85bfa0db3b19178c46460 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:44 2015 +0530 signal.h: elide memset from sigemptyset Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 2da4ae47ba20683e066bd46486da1de94a2ceefc Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:43 2015 +0530 ARC: sigaction: fold default sigrestorer into "C" Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit ebd37cdff46ebed0f6275d0a138b7fd29db9e174 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:42 2015 +0530 ARC: sigaction: inline syscall trap Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit ee99dcff4afdc809a67da69ac396d94f77dd6064 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:41 2015 +0530 ARC: siagction: opencode memcpy Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit fdf72b29bc0599df84b5ff0c6ba97c7315b29ec2 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:40 2015 +0530 ARC: remove stale TRUNCATE64_HAS_4_ARGS Not relevant anymore since commit e8cc14e59ed3f66b84e, "libc: rename TRUNCATE64_HAS_4_ARGS to SYSCALL_ALIGN_64BIT" Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit dbd6b5fe7f13fe807eef13c4d7192d01611a0528 Author: Alexey Brodkin <abrodkin(a)synopsys.com> Date: Sat Feb 14 15:25:39 2015 +0530 ARC defconfigs: enable some items perf: UCLIBC_HAS_GLIBC_CUSTOM_STREAMS elfutils: UCLIBC_HAS_PROGRAM_INVOCATION_NAME Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 9fa188f85fb8531b4669865b11dfbca8ebaaff5d Author: Alexey Brodkin <abrodkin(a)synopsys.com> Date: Sat Feb 14 15:25:38 2015 +0530 ARC: add configuration option for MMU page size ARC CPU may have MMU page size of 4/8(default)/16k. uClibc needs to have page size configured accodring to HW it will be run on. Signed-off-by: Alexey Brodkin <abrodkin(a)synopsys.com> Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 57ddadc1d9d3d41944901f6054864550cdd3a422 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:37 2015 +0530 ARC: Conditionalise certain relocations as provided by TLS tools only uClibc mainline supports NPTL which in turns depends on TLS support in the tools (gcc/binutils), which is yet to be merged in dev branches. However there is some non NPTL code in uClibc, added as part of NPTL effort, which relies on certain relocations only provided by NPTL binutils. As a result building the current upstream even for LT.old breaks. So conditionalize that code on tools, bu tin lack of specific versions, we use NPTL enabling as a sign the tools are equipped to handle those relos. Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> ----------------------------------------------------------------------- Summary of changes: extra/Configs/Config.arc | 17 ++++++++++++ extra/Configs/defconfigs/arc/defconfig | 4 ++- include/signal.h | 3 --- ldso/ldso/arc/dl-startup.h | 7 +++++ ldso/ldso/arc/dl-sysdep.h | 10 +++++++ libc/sysdeps/linux/arc/Makefile.arch | 3 +-- libc/sysdeps/linux/arc/bits/uClibc_arch_features.h | 3 --- libc/sysdeps/linux/arc/bits/uClibc_page.h | 17 +++++++++--- libc/sysdeps/linux/arc/sigaction.c | 28 +++++++++++--------- libc/sysdeps/linux/arc/sigrestorer.S | 21 --------------- 10 files changed, 67 insertions(+), 46 deletions(-) delete mode 100644 libc/sysdeps/linux/arc/sigrestorer.S diff --git a/extra/Configs/Config.arc b/extra/Configs/Config.arc index 40ff114..dc32ba4 100644 --- a/extra/Configs/Config.arc +++ b/extra/Configs/Config.arc @@ -21,3 +21,20 @@ config CONFIG_ARC_CPU_700 ARCompact ISA based ARC CPU endchoice + +choice + prompt "MMU Page Size" + default CONFIG_ARC_PAGE_SIZE_8K + +config CONFIG_ARC_PAGE_SIZE_8K + bool "8KB" + help + Choose between 4k, 8k (default) or 16k + +config CONFIG_ARC_PAGE_SIZE_16K + bool "16KB" + +config CONFIG_ARC_PAGE_SIZE_4K + bool "4KB" + +endchoice diff --git a/extra/Configs/defconfigs/arc/defconfig b/extra/Configs/defconfigs/arc/defconfig index 840c59f..2dca4f9 100644 --- a/extra/Configs/defconfigs/arc/defconfig +++ b/extra/Configs/defconfigs/arc/defconfig @@ -6,12 +6,13 @@ KERNEL_HEADERS="%KERNEL_HEADERS%" # LDSO_CACHE_SUPPORT is not set LDSO_RUNPATH=y # LDSO_SAFE_RUNPATH is not set -UCLIBC_HAS_THREADS_NATIVE=y +LINUXTHREADS_OLD=y PTHREADS_DEBUG_SUPPORT=y UCLIBC_HAS_OBSTACK=y UCLIBC_SUSV2_LEGACY=y UCLIBC_SUSV3_LEGACY=y UCLIBC_SUSV4_LEGACY=y +UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y UCLIBC_SV4_DEPRECATED=y UCLIBC_HAS_RPC=y @@ -19,6 +20,7 @@ UCLIBC_HAS_FULL_RPC=y UCLIBC_HAS_RESOLVER_SUPPORT=y UCLIBC_HAS_LIBRESOLV_STUB=y UCLIBC_HAS_LOCALE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y UCLIBC_HAS_NFTW=y UCLIBC_HAS_FTW=y RUNTIME_PREFIX="%RUNTIME_PREFIX%" diff --git a/include/signal.h b/include/signal.h index be24cf3..38baacc 100644 --- a/include/signal.h +++ b/include/signal.h @@ -493,10 +493,7 @@ extern int __libc_current_sigrtmax (void) __THROW; #ifdef _LIBC extern sigset_t _sigintr attribute_hidden; -/* simplified version without parameter checking */ # include <string.h> -# undef __sigemptyset -# define __sigemptyset(ss) (memset(ss, '\0', sizeof(sigset_t)), 0) #endif #endif /* signal.h */ diff --git a/ldso/ldso/arc/dl-startup.h b/ldso/ldso/arc/dl-startup.h index 8e26ae8..ef89b53 100644 --- a/ldso/ldso/arc/dl-startup.h +++ b/ldso/ldso/arc/dl-startup.h @@ -33,9 +33,16 @@ __asm__( " ; If ldso ran as cmd with executable file nm as arg \n" " ; skip the extra args calc by dl_start() \n" " ld_s r1, [sp] ; orig argc from aux-vec Tbl \n" + +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ " ld r12, [pcl, _dl_skip_args@pcl] \n" " add r2, pcl, _dl_fini@pcl ; finalizer \n" +#else + " add r12, pcl, _dl_skip_args-.+(.&2) \n" + " ld r12, [r12] \n" + " add r2, pcl, _dl_fini-.+(.&2) ; finalizer \n" +#endif " add2 sp, sp, r12 ; discard argv entries from stack\n" " sub_s r1, r1, r12 ; adjusted argc, on stack \n" diff --git a/ldso/ldso/arc/dl-sysdep.h b/ldso/ldso/arc/dl-sysdep.h index d71e16b..08b3bad 100644 --- a/ldso/ldso/arc/dl-sysdep.h +++ b/ldso/ldso/arc/dl-sysdep.h @@ -127,6 +127,7 @@ static __always_inline Elf32_Addr elf_machine_dynamic(void) /* Return the run-time load address of the shared object. */ static __always_inline Elf32_Addr elf_machine_load_address(void) { +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ /* To find the loadaddr we subtract the runtime addr of a non-local symbol * say _DYNAMIC from it's build-time addr. * N.B., gotpc loads get optimized by the linker if it finds the symbol @@ -144,6 +145,15 @@ static __always_inline Elf32_Addr elf_machine_load_address(void) "sub %0, %0, %1 ;delta" "\n" : "=&r" (addr), "=r"(tmp) ); +#else + Elf32_Addr addr, tmp; + __asm__ ( + "ld %1, [pcl, _dl_start@gotpc] ;build addr of _dl_start \n" + "add %0, pcl, _dl_start-.+(.&2) ;runtime addr of _dl_start \n" + "sub %0, %0, %1 ;delta \n" + : "=&r" (addr), "=r"(tmp) + ); +#endif return addr; } diff --git a/libc/sysdeps/linux/arc/Makefile.arch b/libc/sysdeps/linux/arc/Makefile.arch index 656ea35..1a52fc9 100644 --- a/libc/sysdeps/linux/arc/Makefile.arch +++ b/libc/sysdeps/linux/arc/Makefile.arch @@ -7,5 +7,4 @@ CSRC-y := syscall.c sigaction.c __syscall_error.c cacheflush.c -SSRC-y := sigrestorer.S __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ - vfork.S clone.S +SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S vfork.S clone.S diff --git a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h index 9313ee8..8af6eca 100755 --- a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h +++ b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h @@ -17,9 +17,6 @@ /* can your target use syscall6() for mmap ? */ #undef __UCLIBC_MMAP_HAS_6_ARGS__ -/* does your target use syscall4() for truncate64 ? (32bit arches only) */ -#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__ - /* does your target have a broken create_module() ? */ #undef __UCLIBC_BROKEN_CREATE_MODULE__ diff --git a/libc/sysdeps/linux/arc/bits/uClibc_page.h b/libc/sysdeps/linux/arc/bits/uClibc_page.h index 26cec54..b05c575 100755 --- a/libc/sysdeps/linux/arc/bits/uClibc_page.h +++ b/libc/sysdeps/linux/arc/bits/uClibc_page.h @@ -9,16 +9,25 @@ /* * ARC700/linux supports 4k, 8k, 16k pages (build time). - * We rely on the kernel exported header (aka uapi headers since 3.8) - * for PAGE_SIZE and friends. This avoids hand-editing here when building - * toolchain. * * Although uClibc determines page size dynamically, from kernel's auxv which * ARC Linux does pass, still the generic code needs a fall back * _dl_pagesize = auxvt[AT_PAGESZ].a_un.a_val ? : PAGE_SIZE * */ -#include <asm/page.h> + +#include <features.h> + +#if defined(__CONFIG_ARC_PAGE_SIZE_16K__) +#define PAGE_SHIFT 14 +#elif defined(__CONFIG_ARC_PAGE_SIZE_4K__) +#define PAGE_SHIFT 12 +#else +#define PAGE_SHIFT 13 +#endif + +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) /* TBD: fix this with runtime value for a PAGE_SIZE agnostic uClibc */ #define MMAP2_PAGE_SHIFT PAGE_SHIFT diff --git a/libc/sysdeps/linux/arc/sigaction.c b/libc/sysdeps/linux/arc/sigaction.c index 73c496d..4a4c9e2 100644 --- a/libc/sysdeps/linux/arc/sigaction.c +++ b/libc/sysdeps/linux/arc/sigaction.c @@ -10,8 +10,13 @@ #include <sys/syscall.h> #include <bits/kernel_sigaction.h> -extern void __default_rt_sa_restorer(void); -//libc_hidden_proto(__default_rt_sa_restorer); +/* + * Default sigretrun stub if user doesn't specify SA_RESTORER + */ +static void __default_rt_sa_restorer(void) +{ + INTERNAL_SYSCALL_NCS(__NR_rt_sigreturn, , 0); +} #define SA_RESTORER 0x04000000 @@ -22,23 +27,22 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) { struct sigaction kact; - /* !act means caller only wants to know @oact - * Hence only otherwise, do SA_RESTORER stuff - * - * For the normal/default cases (user not providing SA_RESTORER) use - * a real sigreturn stub to avoid kernel synthesizing one on user stack - * at runtime, which needs PTE permissions update (hence TLB entry - * update) and costly cache line flushes for code modification + /* + * SA_RESTORER is only relevant for act != NULL case + * (!act means caller only wants to know @oact) */ if (act && !(act->sa_flags & SA_RESTORER)) { - memcpy(&kact, act, sizeof(kact)); kact.sa_restorer = __default_rt_sa_restorer; - kact.sa_flags |= SA_RESTORER; + kact.sa_flags = act->sa_flags | SA_RESTORER; + + kact.sa_handler = act->sa_handler; + kact.sa_mask = act->sa_mask; act = &kact; } - return __syscall_rt_sigaction(sig, act, oact, sizeof(act->sa_mask)); + return INLINE_SYSCALL(rt_sigaction, 4, + sig, act, oact, sizeof(act->sa_mask)); } #ifndef LIBC_SIGACTION diff --git a/libc/sysdeps/linux/arc/sigrestorer.S b/libc/sysdeps/linux/arc/sigrestorer.S deleted file mode 100644 index 24531d8..0000000 --- a/libc/sysdeps/linux/arc/sigrestorer.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#include <sysdep.h> -#include <sys/syscall.h> - -/* - * Provide a real sigreturn stub to avoid kernel synthesizing one - * on user stack at runtime, which needs PTE permissions update - * (hence TLB entry update) and costly cache line flushes for - * code modification - */ - -ENTRY(__default_rt_sa_restorer) - mov r8, __NR_rt_sigreturn - ARC_TRAP_INSN -END(__default_rt_sa_restorer) -libc_hidden_def(__default_rt_sa_restorer) hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch 1.0 updated. 6007a0d8e829c5f6ff79034c3101c214766dc3d2
by wbx@helium.waldemar-brodkorb.de 16 Feb '15

16 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, 1.0 has been updated via 6007a0d8e829c5f6ff79034c3101c214766dc3d2 (commit) via e6e1caf5a04f735fc301df00538a04719ae4a267 (commit) via 7a65ad5399609ba715df2eaf4432db333ec0bf01 (commit) via 9846f0a881815b87cf1eac8919739fb60e293c57 (commit) via 8c305a573e43d9e1b8d3c232cbd867e042e1a45c (commit) via daa9431fb41ba9877f55b8a9f339212573663218 (commit) via b3ac6f0efdfc1a83cdbebe014747a8632c7c72c1 (commit) via 20554a78a9bba278c6b9cbbb4cfc5bde3772c56d (commit) from e1e46622ac0fce73d802fa4a8a2e83cc25cd9e7a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6007a0d8e829c5f6ff79034c3101c214766dc3d2 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:44 2015 +0530 signal.h: elide memset from sigemptyset Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit e6e1caf5a04f735fc301df00538a04719ae4a267 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:43 2015 +0530 ARC: sigaction: fold default sigrestorer into "C" Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 7a65ad5399609ba715df2eaf4432db333ec0bf01 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:42 2015 +0530 ARC: sigaction: inline syscall trap Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 9846f0a881815b87cf1eac8919739fb60e293c57 Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:41 2015 +0530 ARC: siagction: opencode memcpy Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 8c305a573e43d9e1b8d3c232cbd867e042e1a45c Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:40 2015 +0530 ARC: remove stale TRUNCATE64_HAS_4_ARGS Not relevant anymore since commit e8cc14e59ed3f66b84e, "libc: rename TRUNCATE64_HAS_4_ARGS to SYSCALL_ALIGN_64BIT" Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit daa9431fb41ba9877f55b8a9f339212573663218 Author: Alexey Brodkin <abrodkin(a)synopsys.com> Date: Sat Feb 14 15:25:39 2015 +0530 ARC defconfigs: enable some items perf: UCLIBC_HAS_GLIBC_CUSTOM_STREAMS elfutils: UCLIBC_HAS_PROGRAM_INVOCATION_NAME Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit b3ac6f0efdfc1a83cdbebe014747a8632c7c72c1 Author: Alexey Brodkin <abrodkin(a)synopsys.com> Date: Sat Feb 14 15:25:38 2015 +0530 ARC: add configuration option for MMU page size ARC CPU may have MMU page size of 4/8(default)/16k. uClibc needs to have page size configured accodring to HW it will be run on. Signed-off-by: Alexey Brodkin <abrodkin(a)synopsys.com> Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> commit 20554a78a9bba278c6b9cbbb4cfc5bde3772c56d Author: Vineet Gupta <Vineet.Gupta1(a)synopsys.com> Date: Sat Feb 14 15:25:37 2015 +0530 ARC: Conditionalise certain relocations as provided by TLS tools only uClibc mainline supports NPTL which in turns depends on TLS support in the tools (gcc/binutils), which is yet to be merged in dev branches. However there is some non NPTL code in uClibc, added as part of NPTL effort, which relies on certain relocations only provided by NPTL binutils. As a result building the current upstream even for LT.old breaks. So conditionalize that code on tools, bu tin lack of specific versions, we use NPTL enabling as a sign the tools are equipped to handle those relos. Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com> ----------------------------------------------------------------------- Summary of changes: extra/Configs/Config.arc | 17 ++++++++++++ extra/Configs/defconfigs/arc/defconfig | 4 ++- include/signal.h | 3 --- ldso/ldso/arc/dl-startup.h | 7 +++++ ldso/ldso/arc/dl-sysdep.h | 10 +++++++ libc/sysdeps/linux/arc/Makefile.arch | 3 +-- libc/sysdeps/linux/arc/bits/uClibc_arch_features.h | 3 --- libc/sysdeps/linux/arc/bits/uClibc_page.h | 17 +++++++++--- libc/sysdeps/linux/arc/sigaction.c | 28 +++++++++++--------- libc/sysdeps/linux/arc/sigrestorer.S | 21 --------------- 10 files changed, 67 insertions(+), 46 deletions(-) delete mode 100644 libc/sysdeps/linux/arc/sigrestorer.S diff --git a/extra/Configs/Config.arc b/extra/Configs/Config.arc index 40ff114..dc32ba4 100644 --- a/extra/Configs/Config.arc +++ b/extra/Configs/Config.arc @@ -21,3 +21,20 @@ config CONFIG_ARC_CPU_700 ARCompact ISA based ARC CPU endchoice + +choice + prompt "MMU Page Size" + default CONFIG_ARC_PAGE_SIZE_8K + +config CONFIG_ARC_PAGE_SIZE_8K + bool "8KB" + help + Choose between 4k, 8k (default) or 16k + +config CONFIG_ARC_PAGE_SIZE_16K + bool "16KB" + +config CONFIG_ARC_PAGE_SIZE_4K + bool "4KB" + +endchoice diff --git a/extra/Configs/defconfigs/arc/defconfig b/extra/Configs/defconfigs/arc/defconfig index 840c59f..2dca4f9 100644 --- a/extra/Configs/defconfigs/arc/defconfig +++ b/extra/Configs/defconfigs/arc/defconfig @@ -6,12 +6,13 @@ KERNEL_HEADERS="%KERNEL_HEADERS%" # LDSO_CACHE_SUPPORT is not set LDSO_RUNPATH=y # LDSO_SAFE_RUNPATH is not set -UCLIBC_HAS_THREADS_NATIVE=y +LINUXTHREADS_OLD=y PTHREADS_DEBUG_SUPPORT=y UCLIBC_HAS_OBSTACK=y UCLIBC_SUSV2_LEGACY=y UCLIBC_SUSV3_LEGACY=y UCLIBC_SUSV4_LEGACY=y +UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y UCLIBC_SV4_DEPRECATED=y UCLIBC_HAS_RPC=y @@ -19,6 +20,7 @@ UCLIBC_HAS_FULL_RPC=y UCLIBC_HAS_RESOLVER_SUPPORT=y UCLIBC_HAS_LIBRESOLV_STUB=y UCLIBC_HAS_LOCALE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y UCLIBC_HAS_NFTW=y UCLIBC_HAS_FTW=y RUNTIME_PREFIX="%RUNTIME_PREFIX%" diff --git a/include/signal.h b/include/signal.h index be24cf3..38baacc 100644 --- a/include/signal.h +++ b/include/signal.h @@ -493,10 +493,7 @@ extern int __libc_current_sigrtmax (void) __THROW; #ifdef _LIBC extern sigset_t _sigintr attribute_hidden; -/* simplified version without parameter checking */ # include <string.h> -# undef __sigemptyset -# define __sigemptyset(ss) (memset(ss, '\0', sizeof(sigset_t)), 0) #endif #endif /* signal.h */ diff --git a/ldso/ldso/arc/dl-startup.h b/ldso/ldso/arc/dl-startup.h index 8e26ae8..ef89b53 100644 --- a/ldso/ldso/arc/dl-startup.h +++ b/ldso/ldso/arc/dl-startup.h @@ -33,9 +33,16 @@ __asm__( " ; If ldso ran as cmd with executable file nm as arg \n" " ; skip the extra args calc by dl_start() \n" " ld_s r1, [sp] ; orig argc from aux-vec Tbl \n" + +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ " ld r12, [pcl, _dl_skip_args@pcl] \n" " add r2, pcl, _dl_fini@pcl ; finalizer \n" +#else + " add r12, pcl, _dl_skip_args-.+(.&2) \n" + " ld r12, [r12] \n" + " add r2, pcl, _dl_fini-.+(.&2) ; finalizer \n" +#endif " add2 sp, sp, r12 ; discard argv entries from stack\n" " sub_s r1, r1, r12 ; adjusted argc, on stack \n" diff --git a/ldso/ldso/arc/dl-sysdep.h b/ldso/ldso/arc/dl-sysdep.h index d71e16b..08b3bad 100644 --- a/ldso/ldso/arc/dl-sysdep.h +++ b/ldso/ldso/arc/dl-sysdep.h @@ -127,6 +127,7 @@ static __always_inline Elf32_Addr elf_machine_dynamic(void) /* Return the run-time load address of the shared object. */ static __always_inline Elf32_Addr elf_machine_load_address(void) { +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ /* To find the loadaddr we subtract the runtime addr of a non-local symbol * say _DYNAMIC from it's build-time addr. * N.B., gotpc loads get optimized by the linker if it finds the symbol @@ -144,6 +145,15 @@ static __always_inline Elf32_Addr elf_machine_load_address(void) "sub %0, %0, %1 ;delta" "\n" : "=&r" (addr), "=r"(tmp) ); +#else + Elf32_Addr addr, tmp; + __asm__ ( + "ld %1, [pcl, _dl_start@gotpc] ;build addr of _dl_start \n" + "add %0, pcl, _dl_start-.+(.&2) ;runtime addr of _dl_start \n" + "sub %0, %0, %1 ;delta \n" + : "=&r" (addr), "=r"(tmp) + ); +#endif return addr; } diff --git a/libc/sysdeps/linux/arc/Makefile.arch b/libc/sysdeps/linux/arc/Makefile.arch index 656ea35..1a52fc9 100644 --- a/libc/sysdeps/linux/arc/Makefile.arch +++ b/libc/sysdeps/linux/arc/Makefile.arch @@ -7,5 +7,4 @@ CSRC-y := syscall.c sigaction.c __syscall_error.c cacheflush.c -SSRC-y := sigrestorer.S __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ - vfork.S clone.S +SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S vfork.S clone.S diff --git a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h index 9313ee8..8af6eca 100755 --- a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h +++ b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h @@ -17,9 +17,6 @@ /* can your target use syscall6() for mmap ? */ #undef __UCLIBC_MMAP_HAS_6_ARGS__ -/* does your target use syscall4() for truncate64 ? (32bit arches only) */ -#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__ - /* does your target have a broken create_module() ? */ #undef __UCLIBC_BROKEN_CREATE_MODULE__ diff --git a/libc/sysdeps/linux/arc/bits/uClibc_page.h b/libc/sysdeps/linux/arc/bits/uClibc_page.h index 26cec54..b05c575 100755 --- a/libc/sysdeps/linux/arc/bits/uClibc_page.h +++ b/libc/sysdeps/linux/arc/bits/uClibc_page.h @@ -9,16 +9,25 @@ /* * ARC700/linux supports 4k, 8k, 16k pages (build time). - * We rely on the kernel exported header (aka uapi headers since 3.8) - * for PAGE_SIZE and friends. This avoids hand-editing here when building - * toolchain. * * Although uClibc determines page size dynamically, from kernel's auxv which * ARC Linux does pass, still the generic code needs a fall back * _dl_pagesize = auxvt[AT_PAGESZ].a_un.a_val ? : PAGE_SIZE * */ -#include <asm/page.h> + +#include <features.h> + +#if defined(__CONFIG_ARC_PAGE_SIZE_16K__) +#define PAGE_SHIFT 14 +#elif defined(__CONFIG_ARC_PAGE_SIZE_4K__) +#define PAGE_SHIFT 12 +#else +#define PAGE_SHIFT 13 +#endif + +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) /* TBD: fix this with runtime value for a PAGE_SIZE agnostic uClibc */ #define MMAP2_PAGE_SHIFT PAGE_SHIFT diff --git a/libc/sysdeps/linux/arc/sigaction.c b/libc/sysdeps/linux/arc/sigaction.c index 73c496d..4a4c9e2 100644 --- a/libc/sysdeps/linux/arc/sigaction.c +++ b/libc/sysdeps/linux/arc/sigaction.c @@ -10,8 +10,13 @@ #include <sys/syscall.h> #include <bits/kernel_sigaction.h> -extern void __default_rt_sa_restorer(void); -//libc_hidden_proto(__default_rt_sa_restorer); +/* + * Default sigretrun stub if user doesn't specify SA_RESTORER + */ +static void __default_rt_sa_restorer(void) +{ + INTERNAL_SYSCALL_NCS(__NR_rt_sigreturn, , 0); +} #define SA_RESTORER 0x04000000 @@ -22,23 +27,22 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) { struct sigaction kact; - /* !act means caller only wants to know @oact - * Hence only otherwise, do SA_RESTORER stuff - * - * For the normal/default cases (user not providing SA_RESTORER) use - * a real sigreturn stub to avoid kernel synthesizing one on user stack - * at runtime, which needs PTE permissions update (hence TLB entry - * update) and costly cache line flushes for code modification + /* + * SA_RESTORER is only relevant for act != NULL case + * (!act means caller only wants to know @oact) */ if (act && !(act->sa_flags & SA_RESTORER)) { - memcpy(&kact, act, sizeof(kact)); kact.sa_restorer = __default_rt_sa_restorer; - kact.sa_flags |= SA_RESTORER; + kact.sa_flags = act->sa_flags | SA_RESTORER; + + kact.sa_handler = act->sa_handler; + kact.sa_mask = act->sa_mask; act = &kact; } - return __syscall_rt_sigaction(sig, act, oact, sizeof(act->sa_mask)); + return INLINE_SYSCALL(rt_sigaction, 4, + sig, act, oact, sizeof(act->sa_mask)); } #ifndef LIBC_SIGACTION diff --git a/libc/sysdeps/linux/arc/sigrestorer.S b/libc/sysdeps/linux/arc/sigrestorer.S deleted file mode 100644 index 24531d8..0000000 --- a/libc/sysdeps/linux/arc/sigrestorer.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#include <sysdep.h> -#include <sys/syscall.h> - -/* - * Provide a real sigreturn stub to avoid kernel synthesizing one - * on user stack at runtime, which needs PTE permissions update - * (hence TLB entry update) and costly cache line flushes for - * code modification - */ - -ENTRY(__default_rt_sa_restorer) - mov r8, __NR_rt_sigreturn - ARC_TRAP_INSN -END(__default_rt_sa_restorer) -libc_hidden_def(__default_rt_sa_restorer) hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch master updated. 7ea5fc8e6f92dcc01bcd883cf4bcfbb8993d89fe
by wbx@helium.waldemar-brodkorb.de 15 Feb '15

15 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, master has been updated via 7ea5fc8e6f92dcc01bcd883cf4bcfbb8993d89fe (commit) from 61edcb7982b4f355d14cc9c349ab2742b682b3f1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7ea5fc8e6f92dcc01bcd883cf4bcfbb8993d89fe Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Sun Feb 15 00:54:21 2015 -0600 some linuxthreads conversion fixups Maybe my grep is broken, so that I missed it. ;) ----------------------------------------------------------------------- Summary of changes: libpthread/linuxthreads/Makefile.in | 22 ++++++++++---------- libpthread/linuxthreads/forward.c | 2 +- libpthread/linuxthreads/internals.h | 2 +- libpthread/linuxthreads/libc_pthread_init.c | 2 +- .../linuxthreads/sysdeps/pthread/bits/libc-lock.h | 2 +- .../linuxthreads/sysdeps/pthread/bits/libc-tsd.h | 2 +- .../sysdeps/pthread/pthread-functions.h | 2 +- libpthread/linuxthreads/sysdeps/sh64/Makefile.arch | 4 ++-- libpthread/linuxthreads_db/Makefile.in | 16 +++++++------- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/libpthread/linuxthreads/Makefile.in b/libpthread/linuxthreads/Makefile.in index 6be2099..886108b 100644 --- a/libpthread/linuxthreads/Makefile.in +++ b/libpthread/linuxthreads/Makefile.in @@ -6,10 +6,10 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -subdirs += libpthread/linuxthreads.old +subdirs += libpthread/linuxthreads -CFLAGS-dir_linuxthreads.old := -DNOT_IN_libc -DIS_IN_libpthread -CFLAGS-libpthread/linuxthreads.old := $(CFLAGS-dir_linuxthreads.old) $(SSP_ALL_CFLAGS) +CFLAGS-dir_linuxthreads := -DNOT_IN_libc -DIS_IN_libpthread +CFLAGS-libpthread/linuxthreads := $(CFLAGS-dir_linuxthreads) $(SSP_ALL_CFLAGS) ifeq ($(PTHREADS_DEBUG_SUPPORT),y) LDFLAGS-libpthread.so := $(LDFLAGS_NOSTRIP) -Wl,-z,defs @@ -25,8 +25,8 @@ END_FILE-libpthread.so := $(SHARED_END_FILES) libpthread_FULL_NAME := libpthread-$(VERSION).so -libpthread_DIR := $(top_srcdir)libpthread/linuxthreads.old -libpthread_OUT := $(top_builddir)libpthread/linuxthreads.old +libpthread_DIR := $(top_srcdir)libpthread/linuxthreads +libpthread_OUT := $(top_builddir)libpthread/linuxthreads -include $(libpthread_DIR)/sysdeps/$(TARGET_ARCH)/Makefile.arch @@ -50,8 +50,8 @@ libpthread_OBJ := $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.o,$(libpt # # Stuff that goes into libc.so, not libpthread.so # -CFLAGS-OMIT-forward.c := $(CFLAGS-dir_linuxthreads.old) -CFLAGS-OMIT-libc_pthread_init.c := $(CFLAGS-dir_linuxthreads.old) +CFLAGS-OMIT-forward.c := $(CFLAGS-dir_linuxthreads) +CFLAGS-OMIT-libc_pthread_init.c := $(CFLAGS-dir_linuxthreads) libpthread_libc_CSRC := forward.c libc_pthread_init.c libpthread_libc_OBJ := $(patsubst %.c, $(libpthread_OUT)/%.o,$(libpthread_libc_CSRC)) libc-static-y += $(libpthread_OUT)/libc_pthread_init.o @@ -110,10 +110,10 @@ linuxthreads_headers := $(top_builddir)include/pthread.h \ $(linuxthreads_headers): $(wildcard $(addprefix $(top_builddir)include/config/linuxthreads/,old.h new.h)) headers-$(UCLIBC_HAS_THREADS) += $(linuxthreads_headers) -objclean-y += CLEAN_libpthread/linuxthreads.old -headers_clean-y += HEADERCLEAN_libpthread/linuxthreads.old -HEADERCLEAN_libpthread/linuxthreads.old: +objclean-y += CLEAN_libpthread/linuxthreads +headers_clean-y += HEADERCLEAN_libpthread/linuxthreads +HEADERCLEAN_libpthread/linuxthreads: $(do_rm) $(linuxthreads_headers) -CLEAN_libpthread/linuxthreads.old: +CLEAN_libpthread/linuxthreads: $(do_rm) $(addprefix $(libpthread_OUT)/*., o os oS a) diff --git a/libpthread/linuxthreads/forward.c b/libpthread/linuxthreads/forward.c index 5a1771b..08295c8 100644 --- a/libpthread/linuxthreads/forward.c +++ b/libpthread/linuxthreads/forward.c @@ -24,7 +24,7 @@ #if 0 vda: here is why: headers contain libc_hidden_proto(foo). -In libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-lock.h +In libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h adding libc_hidden_proto(foo) just before weak_extern (__pthread_initialize) will not warn: /* libc_hidden_proto(foo) */ diff --git a/libpthread/linuxthreads/internals.h b/libpthread/linuxthreads/internals.h index ea274d8..1b310b5 100644 --- a/libpthread/linuxthreads/internals.h +++ b/libpthread/linuxthreads/internals.h @@ -29,7 +29,7 @@ #include <sys/wait.h> #include "pt-machine.h" #include "semaphore.h" -#include "../linuxthreads.old_db/thread_dbP.h" +#include "../linuxthreads_db/thread_dbP.h" #ifdef __UCLIBC_HAS_XLOCALE__ #include <bits/uClibc_locale.h> #endif /* __UCLIBC_HAS_XLOCALE__ */ diff --git a/libpthread/linuxthreads/libc_pthread_init.c b/libpthread/linuxthreads/libc_pthread_init.c index dfdcbcc..b64da05 100644 --- a/libpthread/linuxthreads/libc_pthread_init.c +++ b/libpthread/linuxthreads/libc_pthread_init.c @@ -18,7 +18,7 @@ #include <locale.h> #include <string.h> -#include <linuxthreads.old/sysdeps/pthread/pthread-functions.h> +#include <linuxthreads/sysdeps/pthread/pthread-functions.h> int __libc_multiple_threads attribute_hidden __attribute__((nocommon)); diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h index 8833e34..a7c0249 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h +++ b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h @@ -23,7 +23,7 @@ #include <pthread.h> #if defined _LIBC && !defined NOT_IN_libc -#include <linuxthreads.old/internals.h> +#include <linuxthreads/internals.h> #endif /* Mutex type. */ diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h index 97af75e..66b4892 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h +++ b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h @@ -30,7 +30,7 @@ enum __libc_tsd_key_t { _LIBC_TSD_KEY_MALLOC = 0, _LIBC_TSD_KEY_N }; #include <features.h> -#include <linuxthreads.old/internals.h> +#include <linuxthreads/internals.h> #ifdef __UCLIBC_HAS_TLS__ #include <tls.h> diff --git a/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h b/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h index 2afaa52..119953d 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h +++ b/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h @@ -22,7 +22,7 @@ #include <pthread.h> #if 0 #include <setjmp.h> -#include <linuxthreads.old/internals.h> +#include <linuxthreads/internals.h> struct fork_block; #endif diff --git a/libpthread/linuxthreads/sysdeps/sh64/Makefile.arch b/libpthread/linuxthreads/sysdeps/sh64/Makefile.arch index ddb5664..3fbb53b 100644 --- a/libpthread/linuxthreads/sysdeps/sh64/Makefile.arch +++ b/libpthread/linuxthreads/sysdeps/sh64/Makefile.arch @@ -6,8 +6,8 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -libpthread_ARCH_DIR:=$(top_srcdir)libpthread/linuxthreads.old/sysdeps/sh64 -libpthread_ARCH_OUT:=$(top_builddir)libpthread/linuxthreads.old/sysdeps/sh64 +libpthread_ARCH_DIR:=$(top_srcdir)libpthread/linuxthreads/sysdeps/sh64 +libpthread_ARCH_OUT:=$(top_builddir)libpthread/linuxthreads/sysdeps/sh64 libpthread_ARCH_SRC:=$(wildcard $(libpthread_ARCH_DIR)/*.c) libpthread_ARCH_OBJ:=$(patsubst $(libpthread_ARCH_DIR)/%.c,$(libpthread_ARCH_OUT)/%.o,$(libpthread_ARCH_SRC)) diff --git a/libpthread/linuxthreads_db/Makefile.in b/libpthread/linuxthreads_db/Makefile.in index cf0ceb3..52cc7c8 100644 --- a/libpthread/linuxthreads_db/Makefile.in +++ b/libpthread/linuxthreads_db/Makefile.in @@ -5,10 +5,10 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -subdirs += libpthread/linuxthreads.old_db +subdirs += libpthread/linuxthreads_db # Get the thread include dependencies and shared object name -CFLAGS-libpthread/linuxthreads.old_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\"" +CFLAGS-libpthread/linuxthreads_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\"" LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols) ifeq ($(DOSTRIP),y) @@ -19,8 +19,8 @@ LIBS-libthread_db.so := $(LIBS) libthread_db_FULL_NAME := libthread_db-$(VERSION).so -libthread_db_DIR := $(top_srcdir)libpthread/linuxthreads.old_db -libthread_db_OUT := $(top_builddir)libpthread/linuxthreads.old_db +libthread_db_DIR := $(top_srcdir)libpthread/linuxthreads_db +libthread_db_OUT := $(top_builddir)libpthread/linuxthreads_db libthread_db_SRC := $(wildcard $(libthread_db_DIR)/*.c) @@ -68,11 +68,11 @@ linuxthreads_db_headers := $(top_builddir)include/thread_db.h $(linuxthreads_db_headers): $(wildcard $(addprefix $(top_builddir)include/config/linuxthreads/,old.h new.h)) headers-$(PTHREADS_DEBUG_SUPPORT) += $(linuxthreads_db_headers) -objclean-y += CLEAN_libpthread/linuxthreads.old_db -headers_clean-y += HEADERCLEAN_libpthread/linuxthreads.old_db +objclean-y += CLEAN_libpthread/linuxthreads_db +headers_clean-y += HEADERCLEAN_libpthread/linuxthreads_db -HEADERCLEAN_libpthread/linuxthreads.old_db: +HEADERCLEAN_libpthread/linuxthreads_db: $(do_rm) $(linuxthreads_db_headers) -CLEAN_libpthread/linuxthreads.old_db: +CLEAN_libpthread/linuxthreads_db: $(do_rm) $(addprefix $(libthread_db_OUT)/*., o os oS a) hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
uClibc-ng - small C library for embedded systems branch master updated. 61edcb7982b4f355d14cc9c349ab2742b682b3f1
by wbx@helium.waldemar-brodkorb.de 15 Feb '15

15 Feb '15
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "uClibc-ng - small C library for embedded systems". The branch, master has been updated via 61edcb7982b4f355d14cc9c349ab2742b682b3f1 (commit) from cc865abe4b1194a28da9bb900e2a07a2c390f4e7 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 61edcb7982b4f355d14cc9c349ab2742b682b3f1 Author: Waldemar Brodkorb <wbx(a)openadk.org> Date: Sat Feb 14 23:30:39 2015 -0600 enable for further analysis ----------------------------------------------------------------------- Summary of changes: extra/Configs/Config.in | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in index 4ef4537..c26a398 100644 --- a/extra/Configs/Config.in +++ b/extra/Configs/Config.in @@ -42,8 +42,8 @@ choice help The architecture of your target. -#config TARGET_alpha -# bool "alpha" +config TARGET_alpha + bool "alpha" config TARGET_arc bool "arc" @@ -65,29 +65,29 @@ config TARGET_c6x config TARGET_cris bool "cris" -#config TARGET_frv -# bool "frv (BROKEN)" +config TARGET_frv + bool "frv" -#config TARGET_h8300 -# bool "h8300 (BROKEN)" +config TARGET_h8300 + bool "h8300" -#config TARGET_hppa -# bool "hppa" +config TARGET_hppa + bool "hppa" config TARGET_i386 bool "i386" -#config TARGET_i960 -# bool "i960 (BROKEN)" +config TARGET_i960 + bool "i960" -#config TARGET_ia64 -# bool "ia64" +config TARGET_ia64 + bool "ia64" config TARGET_m68k bool "m68k" -#config TARGET_metag -# bool "metag" +config TARGET_metag + bool "metag" config TARGET_microblaze bool "microblaze" @@ -104,14 +104,14 @@ config TARGET_powerpc config TARGET_sh bool "superh" -#config TARGET_sh64 -# bool "sh64" +config TARGET_sh64 + bool "sh64" config TARGET_sparc bool "sparc" -#config TARGET_v850 -# bool "v850 (BROKEN)" +config TARGET_v850 + bool "v850" config TARGET_x86_64 bool "x86_64" hooks/post-receive -- uClibc-ng - small C library for embedded systems
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • ...
  • 118
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.