Merge pull request #1517 from satheesbalya-arm/sb1_2607_mcd_reg
authorDimitris Papastamos <dimitris.papastamos@arm.com>
Fri, 17 Aug 2018 08:51:01 +0000 (09:51 +0100)
committerGitHub <noreply@github.com>
Fri, 17 Aug 2018 08:51:01 +0000 (09:51 +0100)
Console: Use callee-saved registers

165 files changed:
Makefile
bl1/aarch32/bl1_exceptions.S
bl1/bl1.mk
bl2/bl2.mk
bl2u/bl2u_main.c
common/tf_snprintf.c
drivers/arm/cci/cci.c
drivers/auth/mbedtls/mbedtls_common.c
drivers/auth/mbedtls/mbedtls_common.mk
drivers/auth/mbedtls/mbedtls_crypto.mk
drivers/auth/mbedtls/mbedtls_x509.mk
drivers/emmc/emmc.c [deleted file]
drivers/marvell/comphy/phy-comphy-cp110.c
drivers/mmc/mmc.c
drivers/partition/partition.c
drivers/st/clk/stm32mp1_clk.c
drivers/synopsys/emmc/dw_mmc.c
include/common/romlib.h [new file with mode: 0644]
include/drivers/emmc.h [deleted file]
include/drivers/mmc.h
include/drivers/synopsys/dw_mmc.h
include/lib/aarch32/arch.h
include/lib/aarch32/arch_helpers.h
include/lib/aarch64/arch.h
include/lib/libc/assert.h [new file with mode: 0644]
include/lib/libc/inttypes.h [new file with mode: 0644]
include/lib/libc/machine/_inttypes.h [new file with mode: 0644]
include/lib/libc/machine/_limits.h [new file with mode: 0644]
include/lib/libc/machine/_stdint.h [new file with mode: 0644]
include/lib/libc/machine/_types.h [new file with mode: 0644]
include/lib/libc/machine/endian.h [new file with mode: 0644]
include/lib/libc/stdbool.h [new file with mode: 0644]
include/lib/libc/stddef.h [new file with mode: 0644]
include/lib/libc/stdio.h [new file with mode: 0644]
include/lib/libc/stdlib.h [new file with mode: 0644]
include/lib/libc/string.h [new file with mode: 0644]
include/lib/libc/strings.h [new file with mode: 0644]
include/lib/libc/sys/_null.h [new file with mode: 0644]
include/lib/libc/sys/_stdint.h [new file with mode: 0644]
include/lib/libc/sys/_timespec.h [new file with mode: 0644]
include/lib/libc/sys/_types.h [new file with mode: 0644]
include/lib/libc/sys/cdefs.h [new file with mode: 0644]
include/lib/libc/sys/ctype.h [new file with mode: 0644]
include/lib/libc/sys/endian.h [new file with mode: 0644]
include/lib/libc/sys/errno.h [new file with mode: 0644]
include/lib/libc/sys/limits.h [new file with mode: 0644]
include/lib/libc/sys/stdarg.h [new file with mode: 0644]
include/lib/libc/sys/stdint.h [new file with mode: 0644]
include/lib/libc/sys/timespec.h [new file with mode: 0644]
include/lib/libc/sys/types.h [new file with mode: 0644]
include/lib/libc/time.h [new file with mode: 0644]
include/lib/libc/xlocale/_strings.h [new file with mode: 0644]
include/lib/libc/xlocale/_time.h [new file with mode: 0644]
include/lib/stdlib/assert.h [deleted file]
include/lib/stdlib/inttypes.h [deleted file]
include/lib/stdlib/machine/_inttypes.h [deleted file]
include/lib/stdlib/machine/_limits.h [deleted file]
include/lib/stdlib/machine/_stdint.h [deleted file]
include/lib/stdlib/machine/_types.h [deleted file]
include/lib/stdlib/machine/endian.h [deleted file]
include/lib/stdlib/stdbool.h [deleted file]
include/lib/stdlib/stddef.h [deleted file]
include/lib/stdlib/stdio.h [deleted file]
include/lib/stdlib/stdlib.h [deleted file]
include/lib/stdlib/string.h [deleted file]
include/lib/stdlib/strings.h [deleted file]
include/lib/stdlib/sys/_null.h [deleted file]
include/lib/stdlib/sys/_stdint.h [deleted file]
include/lib/stdlib/sys/_timespec.h [deleted file]
include/lib/stdlib/sys/_types.h [deleted file]
include/lib/stdlib/sys/cdefs.h [deleted file]
include/lib/stdlib/sys/ctype.h [deleted file]
include/lib/stdlib/sys/endian.h [deleted file]
include/lib/stdlib/sys/errno.h [deleted file]
include/lib/stdlib/sys/limits.h [deleted file]
include/lib/stdlib/sys/stdarg.h [deleted file]
include/lib/stdlib/sys/stdint.h [deleted file]
include/lib/stdlib/sys/timespec.h [deleted file]
include/lib/stdlib/sys/types.h [deleted file]
include/lib/stdlib/time.h [deleted file]
include/lib/stdlib/xlocale/_strings.h [deleted file]
include/lib/stdlib/xlocale/_time.h [deleted file]
include/lib/xlat_tables/xlat_mmu_helpers.h
include/lib/xlat_tables/xlat_tables_v2.h
include/plat/arm/board/common/board_arm_def.h
include/plat/arm/common/arm_def.h
include/plat/arm/common/plat_arm.h
lib/libc/abort.c [new file with mode: 0644]
lib/libc/assert.c [new file with mode: 0644]
lib/libc/exit.c [new file with mode: 0644]
lib/libc/libc.mk [new file with mode: 0644]
lib/libc/mem.c [new file with mode: 0644]
lib/libc/printf.c [new file with mode: 0644]
lib/libc/putchar.c [new file with mode: 0644]
lib/libc/puts.c [new file with mode: 0644]
lib/libc/sscanf.c [new file with mode: 0644]
lib/libc/strchr.c [new file with mode: 0644]
lib/libc/strcmp.c [new file with mode: 0644]
lib/libc/strlen.c [new file with mode: 0644]
lib/libc/strncmp.c [new file with mode: 0644]
lib/libc/strnlen.c [new file with mode: 0644]
lib/libc/subr_prf.c [new file with mode: 0644]
lib/libc/timingsafe_bcmp.c [new file with mode: 0644]
lib/libfdt/libfdt.mk
lib/romlib/Makefile [new file with mode: 0644]
lib/romlib/gentbl.sh [new file with mode: 0755]
lib/romlib/genvar.sh [new file with mode: 0755]
lib/romlib/genwrappers.sh [new file with mode: 0755]
lib/romlib/init.s [new file with mode: 0644]
lib/romlib/jmptbl.i [new file with mode: 0644]
lib/romlib/romlib.ld.S [new file with mode: 0644]
lib/stdlib/abort.c [deleted file]
lib/stdlib/assert.c [deleted file]
lib/stdlib/exit.c [deleted file]
lib/stdlib/mem.c [deleted file]
lib/stdlib/printf.c [deleted file]
lib/stdlib/putchar.c [deleted file]
lib/stdlib/puts.c [deleted file]
lib/stdlib/sscanf.c [deleted file]
lib/stdlib/stdlib.mk [deleted file]
lib/stdlib/strchr.c [deleted file]
lib/stdlib/strcmp.c [deleted file]
lib/stdlib/strlen.c [deleted file]
lib/stdlib/strncmp.c [deleted file]
lib/stdlib/strnlen.c [deleted file]
lib/stdlib/subr_prf.c [deleted file]
lib/stdlib/timingsafe_bcmp.c [deleted file]
lib/xlat_tables/aarch32/xlat_tables.c
lib/xlat_tables_v2/aarch32/enable_mmu.S
lib/xlat_tables_v2/aarch32/xlat_tables_arch.c
lib/xlat_tables_v2/aarch64/enable_mmu.S
lib/xlat_tables_v2/aarch64/xlat_tables_arch.c
lib/xlat_tables_v2/xlat_tables_context.c
lib/xlat_tables_v2/xlat_tables_core.c
lib/xlat_tables_v2/xlat_tables_utils.c
maintainers.rst
make_helpers/build_macros.mk
make_helpers/defaults.mk
plat/arm/board/juno/include/platform_def.h
plat/arm/common/arm_bl1_setup.c
plat/arm/common/arm_bl2_el3_setup.c
plat/arm/common/arm_bl2_setup.c
plat/arm/common/arm_bl2u_setup.c
plat/arm/common/arm_bl31_setup.c
plat/arm/common/arm_common.c
plat/arm/common/arm_common.mk
plat/arm/common/sp_min/arm_sp_min_setup.c
plat/common/aarch32/plat_common.c
plat/hisilicon/hikey/hikey_bl1_setup.c
plat/hisilicon/hikey/hikey_bl2_setup.c
plat/hisilicon/hikey/hikey_io_storage.c
plat/hisilicon/hikey/hisi_ipc.c
plat/hisilicon/hikey/platform.mk
plat/hisilicon/poplar/bl1_plat_setup.c
plat/hisilicon/poplar/bl2_plat_setup.c
plat/hisilicon/poplar/include/hi3798cv200.h
plat/hisilicon/poplar/plat_storage.c
plat/hisilicon/poplar/platform.mk
plat/layerscape/common/ls_bl1_setup.c
plat/layerscape/common/ls_bl2_setup.c
plat/marvell/a8k/common/mss/mss_bl2_setup.c
plat/qemu/platform.mk
plat/st/stm32mp1/stm32mp1_common.c
readme.rst
services/spd/trusty/generic-arm64-smcall.c

index 533cb8ab1e4d1b5d9c8c0c3aa1916f2b7a873c24..18c4873429d5fe4d716b991f4688eb850979b9ff 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -45,7 +45,7 @@ CHECKCODE_ARGS                :=      --no-patch
 # Do not check the coding style on imported library files or documentation files
 INC_LIB_DIRS_TO_CHECK  :=      $(sort $(filter-out                     \
                                        include/lib/libfdt              \
-                                       include/lib/stdlib,             \
+                                       include/lib/libc,               \
                                        $(wildcard include/lib/*)))
 INC_DIRS_TO_CHECK      :=      $(sort $(filter-out                     \
                                        include/lib,                    \
@@ -53,7 +53,7 @@ INC_DIRS_TO_CHECK     :=      $(sort $(filter-out                     \
 LIB_DIRS_TO_CHECK      :=      $(sort $(filter-out                     \
                                        lib/compiler-rt                 \
                                        lib/libfdt%                     \
-                                       lib/stdlib,                     \
+                                       lib/libc,                       \
                                        $(wildcard lib/*)))
 ROOT_DIRS_TO_CHECK     :=      $(sort $(filter-out                     \
                                        lib                             \
@@ -172,7 +172,7 @@ TF_CFLAGS_aarch64   +=      -mgeneral-regs-only -mstrict-align
 ASFLAGS_aarch32                =       $(march32-directive)
 ASFLAGS_aarch64                =       -march=armv8-a
 
-CPPFLAGS               =       ${DEFINES} ${INCLUDES} -nostdinc                \
+CPPFLAGS               =       ${DEFINES} ${INCLUDES} ${MBEDTLS_INC} -nostdinc         \
                                -Wmissing-include-dirs -Werror
 ASFLAGS                        +=      $(CPPFLAGS) $(ASFLAGS_$(ARCH))                  \
                                -D__ASSEMBLY__ -ffreestanding                   \
@@ -198,7 +198,7 @@ DTC_FLAGS           +=      -I dts -O dtb
 # Common sources and include directories
 ################################################################################
 include lib/compiler-rt/compiler-rt.mk
-include lib/stdlib/stdlib.mk
+include lib/libc/libc.mk
 
 BL_COMMON_SOURCES      +=      common/bl_common.c                      \
                                common/tf_log.c                         \
@@ -211,8 +211,7 @@ BL_COMMON_SOURCES   +=      common/bl_common.c                      \
                                plat/common/plat_log_common.c           \
                                plat/common/${ARCH}/plat_common.c       \
                                plat/common/${ARCH}/platform_helpers.S  \
-                               ${COMPILER_RT_SRCS}                     \
-                               ${STDLIB_SRCS}
+                               ${COMPILER_RT_SRCS}
 
 INCLUDES               +=      -Iinclude                               \
                                -Iinclude/bl1                           \
@@ -506,6 +505,9 @@ CRTTOOL                     ?=      ${CRTTOOLPATH}/cert_create${BIN_EXT}
 FIPTOOLPATH            ?=      tools/fiptool
 FIPTOOL                        ?=      ${FIPTOOLPATH}/fiptool${BIN_EXT}
 
+# Variables for use with ROMLIB
+ROMLIBPATH             ?=      lib/romlib
+
 ################################################################################
 # Include BL specific makefiles
 ################################################################################
@@ -574,6 +576,7 @@ $(eval $(call assert_boolean,SEPARATE_CODE_AND_RODATA))
 $(eval $(call assert_boolean,SPIN_ON_BL1_EXIT))
 $(eval $(call assert_boolean,TRUSTED_BOARD_BOOT))
 $(eval $(call assert_boolean,USE_COHERENT_MEM))
+$(eval $(call assert_boolean,USE_ROMLIB))
 $(eval $(call assert_boolean,USE_TBBR_DEFS))
 $(eval $(call assert_boolean,WARMBOOT_ENABLE_DCACHE_EARLY))
 $(eval $(call assert_boolean,BL2_AT_EL3))
@@ -626,6 +629,7 @@ $(eval $(call add_define,SPD_${SPD}))
 $(eval $(call add_define,SPIN_ON_BL1_EXIT))
 $(eval $(call add_define,TRUSTED_BOARD_BOOT))
 $(eval $(call add_define,USE_COHERENT_MEM))
+$(eval $(call add_define,USE_ROMLIB))
 $(eval $(call add_define,USE_TBBR_DEFS))
 $(eval $(call add_define,WARMBOOT_ENABLE_DCACHE_EARLY))
 $(eval $(call add_define,BL2_AT_EL3))
@@ -670,6 +674,9 @@ ifeq (${ERROR_DEPRECATED},0)
     CPPFLAGS           +=      -Wno-error=deprecated-declarations -Wno-error=cpp
 endif
 
+$(eval $(call MAKE_LIB_DIRS))
+$(eval $(call MAKE_LIB,c))
+
 # Expand build macros for the different images
 ifeq (${NEED_BL1},yes)
 $(eval $(call MAKE_BL,1))
@@ -734,6 +741,7 @@ clean:
        $(call SHELL_REMOVE_DIR,${BUILD_PLAT})
        ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
        ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
+       ${Q}${MAKE} --no-print-directory -C ${ROMLIBPATH} clean
 
 realclean distclean:
        @echo "  REALCLEAN"
@@ -741,11 +749,12 @@ realclean distclean:
        $(call SHELL_DELETE_ALL, ${CURDIR}/cscope.*)
        ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
        ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
+       ${Q}${MAKE} --no-print-directory -C ${ROMLIBPATH} clean
 
 checkcodebase:         locate-checkpatch
        @echo "  CHECKING STYLE"
        @if test -d .git ; then                                         \
-               git ls-files | grep -E -v 'libfdt|stdlib|docs|\.md' |   \
+               git ls-files | grep -E -v 'libfdt|libc|docs|\.md' |     \
                while read GIT_FILE ;                                   \
                do ${CHECKPATCH} ${CHECKCODE_ARGS} -f $$GIT_FILE ;      \
                done ;                                                  \
@@ -753,7 +762,7 @@ checkcodebase:              locate-checkpatch
                 find . -type f -not -iwholename "*.git*"               \
                 -not -iwholename "*build*"                             \
                 -not -iwholename "*libfdt*"                            \
-                -not -iwholename "*stdlib*"                            \
+                -not -iwholename "*libc*"                              \
                 -not -iwholename "*docs*"                              \
                 -not -iwholename "*.md"                                \
                 -exec ${CHECKPATCH} ${CHECKCODE_ARGS} -f {} \; ;       \
@@ -819,6 +828,10 @@ fwu_fip: ${BUILD_PLAT}/${FWU_FIP_NAME}
 ${FIPTOOL}:
        ${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${FIPTOOLPATH}
 
+.PHONY: libraries
+romlib.bin: libraries
+       ${Q}${MAKE} BUILD_PLAT=${BUILD_PLAT} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all
+
 cscope:
        @echo "  CSCOPE"
        ${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files
index 1540542455a7971cc6ef58409d19c1589f37deaa..9b001a96f71c6f199ec423ac25ca4906474b05ca 100644 (file)
@@ -116,7 +116,7 @@ func smc_handler
 
        /* Turn on the MMU */
        mov     r0, #DISABLE_DCACHE
-       bl      enable_mmu_secure
+       bl      enable_mmu_svc_mon
 
        /* Enable the data cache. */
        ldcopr  r9, SCTLR
index 41ee1a7367512eb5f833ad0379a13805e504e691..9a46a3483d43987a7b43d00a5a712068402febd4 100644 (file)
@@ -14,9 +14,7 @@ BL1_SOURCES           +=      bl1/bl1_main.c                          \
                                lib/el3_runtime/${ARCH}/context_mgmt.c  \
                                plat/common/plat_bl1_common.c           \
                                plat/common/${ARCH}/platform_up_stack.S \
-                               ${MBEDTLS_COMMON_SOURCES}               \
-                               ${MBEDTLS_CRYPTO_SOURCES}               \
-                               ${MBEDTLS_X509_SOURCES}
+                               ${MBEDTLS_SOURCES}
 
 ifeq (${ARCH},aarch64)
 BL1_SOURCES            +=      lib/el3_runtime/aarch64/context.S
index a856fb738eadde84e2b948e1826837f022a77568..7e337030f1b00e98776545faf93628d8ab946214 100644 (file)
@@ -8,9 +8,7 @@ BL2_SOURCES             +=      bl2/bl2_main.c                          \
                                bl2/${ARCH}/bl2_arch_setup.c            \
                                lib/locks/exclusive/${ARCH}/spinlock.S  \
                                plat/common/${ARCH}/platform_up_stack.S \
-                               ${MBEDTLS_COMMON_SOURCES}               \
-                               ${MBEDTLS_CRYPTO_SOURCES}               \
-                               ${MBEDTLS_X509_SOURCES}
+                               ${MBEDTLS_SOURCES}
 
 ifeq (${ARCH},aarch64)
 BL2_SOURCES            +=      common/aarch64/early_exceptions.S
index a7e3fb916ef85d3eb50c5aafa36fa43990c96630..b29d57e9db6fd5ffd2fd0ec28663112880718699 100644 (file)
@@ -17,6 +17,7 @@
 #include <platform_def.h>
 #include <stdint.h>
 
+
 /*******************************************************************************
  * This function is responsible to:
  * Load SCP_BL2U if platform has defined SCP_BL2U_BASE
index a99ab7ab5d9dd12f02833db058c2a7e9b98dfcb0..6df137725a4e4a783b7779b14408b2696c85a4bf 100644 (file)
@@ -8,6 +8,17 @@
 #include <platform.h>
 #include <stdarg.h>
 
+static void string_print(char **s, size_t n, size_t *chars_printed,
+                        const char *str)
+{
+       while (*str) {
+               if (*chars_printed < n)
+                       *(*s)++ = *str;
+               (*chars_printed)++;
+               str++;
+       }
+}
+
 static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
                               unsigned int unum)
 {
@@ -32,6 +43,7 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
  * The following type specifiers are supported:
  *
  * %d or %i - signed decimal format
+ * %s - string format
  * %u - unsigned decimal format
  *
  * The function panics on all other formats specifiers.
@@ -45,6 +57,7 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...)
        va_list args;
        int num;
        unsigned int unum;
+       char *str;
        size_t chars_printed = 0;
 
        if (n == 1) {
@@ -79,6 +92,10 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...)
 
                                unsigned_dec_print(&s, n, &chars_printed, unum);
                                break;
+                       case 's':
+                               str = va_arg(args, char *);
+                               string_print(&s, n, &chars_printed, str);
+                               break;
                        case 'u':
                                unum = va_arg(args, unsigned int);
                                unsigned_dec_print(&s, n, &chars_printed, unum);
index 71b65f42ce2abaab44d2eea1f1ed5b1049a7c1ab..a6ee77a50aed69391604aa570b0209d712b1bc56 100644 (file)
@@ -147,7 +147,7 @@ void cci_enable_snoop_dvm_reqs(unsigned int master_id)
         * Wait for the completion of the write to the Snoop Control Register
         * before testing the change_pending bit
         */
-       dmbish();
+       dsbish();
 
        /* Wait for the dust to settle down */
        while (mmio_read_32(cci_base + STATUS_REG) & CHANGE_PENDING_BIT)
@@ -174,7 +174,7 @@ void cci_disable_snoop_dvm_reqs(unsigned int master_id)
         * Wait for the completion of the write to the Snoop Control Register
         * before testing the change_pending bit
         */
-       dmbish();
+       dsbish();
 
        /* Wait for the dust to settle down */
        while (mmio_read_32(cci_base + STATUS_REG) & CHANGE_PENDING_BIT)
index c048d005aae395f580dd4f60a7441b596bdf5ffc..64dc1967deb2f77a70b550f60a45b10badc11e86 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <debug.h>
+#include <stdlib.h>
 
 /* mbed TLS headers */
 #include <mbedtls/memory_buffer_alloc.h>
 #endif
 static unsigned char heap[MBEDTLS_HEAP_SIZE];
 
+static void cleanup(void)
+{
+       ERROR("EXIT from BL2\n");
+       panic();
+}
+
 /*
  * mbed TLS initialization function
  */
@@ -31,6 +38,9 @@ void mbedtls_init(void)
        static int ready;
 
        if (!ready) {
+               if (atexit(cleanup))
+                       panic();
+
                /* Initialize the mbed TLS heap */
                mbedtls_memory_buffer_alloc_init(heap, MBEDTLS_HEAP_SIZE);
 
index a5d19e6a9677f5d59e39c8c8a7120b4ecf087d64..71c496eda4a78c7cfedbbeeac6abfe71560be323 100644 (file)
@@ -13,22 +13,86 @@ ifeq (${MBEDTLS_DIR},)
   $(error Error: MBEDTLS_DIR not set)
 endif
 
-INCLUDES               +=      -I${MBEDTLS_DIR}/include                \
-                               -Iinclude/drivers/auth/mbedtls
+MBEDTLS_INC            =       -I${MBEDTLS_DIR}/include
+INCLUDES               +=     -Iinclude/drivers/auth/mbedtls
 
 # Specify mbed TLS configuration file
 MBEDTLS_CONFIG_FILE    :=      "<mbedtls_config.h>"
 $(eval $(call add_define,MBEDTLS_CONFIG_FILE))
 
-MBEDTLS_COMMON_SOURCES :=      drivers/auth/mbedtls/mbedtls_common.c   \
-                               $(addprefix ${MBEDTLS_DIR}/library/,    \
-                               asn1parse.c                             \
-                               asn1write.c                             \
-                               memory_buffer_alloc.c                   \
-                               oid.c                                   \
-                               platform.c                              \
-                               platform_util.c                         \
-                               rsa_internal.c                          \
-                               )
+MBEDTLS_SOURCES        +=              drivers/auth/mbedtls/mbedtls_common.c
+
+
+LIBMBEDTLS_SRCS                := $(addprefix ${MBEDTLS_DIR}/library/, \
+                                       asn1parse.c                             \
+                                       asn1write.c                             \
+                                       memory_buffer_alloc.c                   \
+                                       oid.c                                   \
+                                       platform.c                              \
+                                       platform_util.c                         \
+                                       bignum.c                                \
+                                       md.c                                    \
+                                       md_wrap.c                               \
+                                       pk.c                                    \
+                                       pk_wrap.c                               \
+                                       pkparse.c                               \
+                                       pkwrite.c                               \
+                                       sha256.c                                \
+                                       sha512.c                                \
+                                       ecdsa.c                                 \
+                                       ecp_curves.c                            \
+                                       ecp.c                                   \
+                                       rsa.c                                   \
+                                       rsa_internal.c                          \
+                                       x509.c                                  \
+                                       x509_crt.c                              \
+                                       )
+
+# The platform may define the variable 'TF_MBEDTLS_KEY_ALG' to select the key
+# algorithm to use. If the variable is not defined, select it based on algorithm
+# used for key generation `KEY_ALG`. If `KEY_ALG` is not defined or is
+# defined to `rsa`/`rsa_1_5`, then set the variable to `rsa`.
+ifeq (${TF_MBEDTLS_KEY_ALG},)
+    ifeq (${KEY_ALG}, ecdsa)
+        TF_MBEDTLS_KEY_ALG             :=      ecdsa
+    else
+        TF_MBEDTLS_KEY_ALG             :=      rsa
+    endif
+endif
+
+# If MBEDTLS_KEY_ALG build flag is defined use it to set TF_MBEDTLS_KEY_ALG for
+# backward compatibility
+ifdef MBEDTLS_KEY_ALG
+    ifeq (${ERROR_DEPRECATED},1)
+        $(error "MBEDTLS_KEY_ALG is deprecated. Please use the new build flag TF_MBEDTLS_KEY_ALG")
+    endif
+    $(warning "MBEDTLS_KEY_ALG is deprecated. Please use the new build flag TF_MBEDTLS_KEY_ALG")
+    TF_MBEDTLS_KEY_ALG := ${MBEDTLS_KEY_ALG}
+endif
+
+ifeq (${HASH_ALG}, sha384)
+    TF_MBEDTLS_HASH_ALG_ID     :=      TF_MBEDTLS_SHA384
+else ifeq (${HASH_ALG}, sha512)
+   TF_MBEDTLS_HASH_ALG_ID      :=      TF_MBEDTLS_SHA512
+else
+    TF_MBEDTLS_HASH_ALG_ID     :=      TF_MBEDTLS_SHA256
+endif
+
+ifeq (${TF_MBEDTLS_KEY_ALG},ecdsa)
+    TF_MBEDTLS_KEY_ALG_ID      :=      TF_MBEDTLS_ECDSA
+else ifeq (${TF_MBEDTLS_KEY_ALG},rsa)
+    TF_MBEDTLS_KEY_ALG_ID      :=      TF_MBEDTLS_RSA
+else ifeq (${TF_MBEDTLS_KEY_ALG},rsa+ecdsa)
+    TF_MBEDTLS_KEY_ALG_ID      :=      TF_MBEDTLS_RSA_AND_ECDSA
+else
+    $(error "TF_MBEDTLS_KEY_ALG=${TF_MBEDTLS_KEY_ALG} not supported on mbed TLS")
+endif
+
+# Needs to be set to drive mbed TLS configuration correctly
+$(eval $(call add_define,TF_MBEDTLS_KEY_ALG_ID))
+$(eval $(call add_define,TF_MBEDTLS_HASH_ALG_ID))
+
+
+$(eval $(call MAKE_LIB,mbedtls))
 
 endif
index 6b15e717db59e41b8e38f65c202a4aece73aa3df..2a9fbbf99a6eac69a603a1720de8883d12713f98 100644 (file)
@@ -6,86 +6,6 @@
 
 include drivers/auth/mbedtls/mbedtls_common.mk
 
-# The platform may define the variable 'TF_MBEDTLS_KEY_ALG' to select the key
-# algorithm to use. If the variable is not defined, select it based on algorithm
-# used for key generation `KEY_ALG`. If `KEY_ALG` is not defined or is
-# defined to `rsa`/`rsa_1_5`, then set the variable to `rsa`.
-ifeq (${TF_MBEDTLS_KEY_ALG},)
-    ifeq (${KEY_ALG}, ecdsa)
-        TF_MBEDTLS_KEY_ALG             :=      ecdsa
-    else
-        TF_MBEDTLS_KEY_ALG             :=      rsa
-    endif
-endif
+MBEDTLS_SOURCES        +=              drivers/auth/mbedtls/mbedtls_crypto.c
 
-# If MBEDTLS_KEY_ALG build flag is defined use it to set TF_MBEDTLS_KEY_ALG for
-# backward compatibility
-ifdef MBEDTLS_KEY_ALG
-    ifeq (${ERROR_DEPRECATED},1)
-        $(error "MBEDTLS_KEY_ALG is deprecated. Please use the new build flag TF_MBEDTLS_KEY_ALG")
-    endif
-    $(warning "MBEDTLS_KEY_ALG is deprecated. Please use the new build flag TF_MBEDTLS_KEY_ALG")
-    TF_MBEDTLS_KEY_ALG := ${MBEDTLS_KEY_ALG}
-endif
 
-MBEDTLS_CRYPTO_SOURCES         :=      drivers/auth/mbedtls/mbedtls_crypto.c   \
-                                       $(addprefix ${MBEDTLS_DIR}/library/,    \
-                                       bignum.c                                \
-                                       md.c                                    \
-                                       md_wrap.c                               \
-                                       pk.c                                    \
-                                       pk_wrap.c                               \
-                                       pkparse.c                               \
-                                       pkwrite.c                               \
-                                       )
-
-ifeq (${HASH_ALG}, sha384)
-    MBEDTLS_CRYPTO_SOURCES  += \
-                                       $(addprefix ${MBEDTLS_DIR}/library/,    \
-                                               sha256.c            \
-                                               sha512.c            \
-                                       )
-    TF_MBEDTLS_HASH_ALG_ID     :=      TF_MBEDTLS_SHA384
-else ifeq (${HASH_ALG}, sha512)
-    MBEDTLS_CRYPTO_SOURCES  += \
-                                       $(addprefix ${MBEDTLS_DIR}/library/,    \
-                                               sha256.c            \
-                                               sha512.c            \
-                                       )
-    TF_MBEDTLS_HASH_ALG_ID     :=      TF_MBEDTLS_SHA512
-else
-    MBEDTLS_CRYPTO_SOURCES  += \
-                                       $(addprefix ${MBEDTLS_DIR}/library/,    \
-                                               sha256.c            \
-                                       )
-    TF_MBEDTLS_HASH_ALG_ID     :=      TF_MBEDTLS_SHA256
-endif
-
-# Key algorithm specific files
-MBEDTLS_ECDSA_CRYPTO_SOURCES   +=      $(addprefix ${MBEDTLS_DIR}/library/,    \
-                                       ecdsa.c                                 \
-                                       ecp_curves.c                            \
-                                       ecp.c                                   \
-                                       )
-
-MBEDTLS_RSA_CRYPTO_SOURCES     +=      $(addprefix ${MBEDTLS_DIR}/library/,    \
-                                       rsa.c                                   \
-                                       )
-
-ifeq (${TF_MBEDTLS_KEY_ALG},ecdsa)
-    MBEDTLS_CRYPTO_SOURCES     +=      $(MBEDTLS_ECDSA_CRYPTO_SOURCES)
-    TF_MBEDTLS_KEY_ALG_ID      :=      TF_MBEDTLS_ECDSA
-else ifeq (${TF_MBEDTLS_KEY_ALG},rsa)
-    MBEDTLS_CRYPTO_SOURCES     +=      $(MBEDTLS_RSA_CRYPTO_SOURCES)
-    TF_MBEDTLS_KEY_ALG_ID      :=      TF_MBEDTLS_RSA
-else ifeq (${TF_MBEDTLS_KEY_ALG},rsa+ecdsa)
-    MBEDTLS_CRYPTO_SOURCES     +=      $(MBEDTLS_ECDSA_CRYPTO_SOURCES)
-    MBEDTLS_CRYPTO_SOURCES     +=      $(MBEDTLS_RSA_CRYPTO_SOURCES)
-    TF_MBEDTLS_KEY_ALG_ID      :=      TF_MBEDTLS_RSA_AND_ECDSA
-else
-    $(error "TF_MBEDTLS_KEY_ALG=${TF_MBEDTLS_KEY_ALG} not supported on mbed TLS")
-endif
-
-# Needs to be set to drive mbed TLS configuration correctly
-$(eval $(call add_define,TF_MBEDTLS_KEY_ALG_ID))
-$(eval $(call add_define,TF_MBEDTLS_HASH_ALG_ID))
index a6f72e678e95ce6af01148798ed9025f919f4382..a0557e20ad0c2197b714d9396ebde131547a975d 100644 (file)
@@ -6,8 +6,4 @@
 
 include drivers/auth/mbedtls/mbedtls_common.mk
 
-MBEDTLS_X509_SOURCES   :=      drivers/auth/mbedtls/mbedtls_x509_parser.c      \
-                               $(addprefix ${MBEDTLS_DIR}/library/,            \
-                               x509.c                                          \
-                               x509_crt.c                                      \
-                               )
+MBEDTLS_SOURCES        +=      drivers/auth/mbedtls/mbedtls_x509_parser.c
diff --git a/drivers/emmc/emmc.c b/drivers/emmc/emmc.c
deleted file mode 100644 (file)
index 92d1e87..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- * Defines a simple and generic interface to access eMMC device.
- */
-
-#include <arch_helpers.h>
-#include <assert.h>
-#include <debug.h>
-#include <emmc.h>
-#include <errno.h>
-#include <string.h>
-#include <utils.h>
-
-static const emmc_ops_t *ops;
-static unsigned int emmc_ocr_value;
-static emmc_csd_t emmc_csd;
-static unsigned int emmc_flags;
-
-static int is_cmd23_enabled(void)
-{
-       return (!!(emmc_flags & EMMC_FLAG_CMD23));
-}
-
-static int emmc_device_state(void)
-{
-       emmc_cmd_t cmd;
-       int ret;
-
-       do {
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               cmd.cmd_idx = EMMC_CMD13;
-               cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET;
-               cmd.resp_type = EMMC_RESPONSE_R1;
-               ret = ops->send_cmd(&cmd);
-               assert(ret == 0);
-               assert((cmd.resp_data[0] & STATUS_SWITCH_ERROR) == 0);
-               /* Ignore improbable errors in release builds */
-               (void)ret;
-       } while ((cmd.resp_data[0] & STATUS_READY_FOR_DATA) == 0);
-       return EMMC_GET_STATE(cmd.resp_data[0]);
-}
-
-static void emmc_set_ext_csd(unsigned int ext_cmd, unsigned int value)
-{
-       emmc_cmd_t cmd;
-       int ret, state;
-
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD6;
-       cmd.cmd_arg = EXTCSD_WRITE_BYTES | EXTCSD_CMD(ext_cmd) |
-                     EXTCSD_VALUE(value) | 1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       /* wait to exit PRG state */
-       do {
-               state = emmc_device_state();
-       } while (state == EMMC_STATE_PRG);
-       /* Ignore improbable errors in release builds */
-       (void)ret;
-}
-
-static void emmc_set_ios(int clk, int bus_width)
-{
-       int ret;
-
-       /* set IO speed & IO bus width */
-       if (emmc_csd.spec_vers == 4)
-               emmc_set_ext_csd(CMD_EXTCSD_BUS_WIDTH, bus_width);
-       ret = ops->set_ios(clk, bus_width);
-       assert(ret == 0);
-       /* Ignore improbable errors in release builds */
-       (void)ret;
-}
-
-static int emmc_enumerate(int clk, int bus_width)
-{
-       emmc_cmd_t cmd;
-       int ret, state;
-
-       ops->init();
-
-       /* CMD0: reset to IDLE */
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD0;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       while (1) {
-               /* CMD1: get OCR register */
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               cmd.cmd_idx = EMMC_CMD1;
-               cmd.cmd_arg = OCR_SECTOR_MODE | OCR_VDD_MIN_2V7 |
-                             OCR_VDD_MIN_1V7;
-               cmd.resp_type = EMMC_RESPONSE_R3;
-               ret = ops->send_cmd(&cmd);
-               assert(ret == 0);
-               emmc_ocr_value = cmd.resp_data[0];
-               if (emmc_ocr_value & OCR_POWERUP)
-                       break;
-       }
-
-       /* CMD2: Card Identification */
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD2;
-       cmd.resp_type = EMMC_RESPONSE_R2;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       /* CMD3: Set Relative Address */
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD3;
-       cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET;
-       cmd.resp_type = EMMC_RESPONSE_R1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       /* CMD9: CSD Register */
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD9;
-       cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET;
-       cmd.resp_type = EMMC_RESPONSE_R2;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-       memcpy(&emmc_csd, &cmd.resp_data, sizeof(cmd.resp_data));
-
-       /* CMD7: Select Card */
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD7;
-       cmd.cmd_arg = EMMC_FIX_RCA << RCA_SHIFT_OFFSET;
-       cmd.resp_type = EMMC_RESPONSE_R1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-       /* wait to TRAN state */
-       do {
-               state = emmc_device_state();
-       } while (state != EMMC_STATE_TRAN);
-
-       emmc_set_ios(clk, bus_width);
-       return ret;
-}
-
-size_t emmc_read_blocks(int lba, uintptr_t buf, size_t size)
-{
-       emmc_cmd_t cmd;
-       int ret;
-
-       assert((ops != 0) &&
-              (ops->read != 0) &&
-              ((buf & EMMC_BLOCK_MASK) == 0) &&
-              ((size & EMMC_BLOCK_MASK) == 0));
-
-       inv_dcache_range(buf, size);
-       ret = ops->prepare(lba, buf, size);
-       assert(ret == 0);
-
-       if (is_cmd23_enabled()) {
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               /* set block count */
-               cmd.cmd_idx = EMMC_CMD23;
-               cmd.cmd_arg = size / EMMC_BLOCK_SIZE;
-               cmd.resp_type = EMMC_RESPONSE_R1;
-               ret = ops->send_cmd(&cmd);
-               assert(ret == 0);
-
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               cmd.cmd_idx = EMMC_CMD18;
-       } else {
-               if (size > EMMC_BLOCK_SIZE)
-                       cmd.cmd_idx = EMMC_CMD18;
-               else
-                       cmd.cmd_idx = EMMC_CMD17;
-       }
-       if ((emmc_ocr_value & OCR_ACCESS_MODE_MASK) == OCR_BYTE_MODE)
-               cmd.cmd_arg = lba * EMMC_BLOCK_SIZE;
-       else
-               cmd.cmd_arg = lba;
-       cmd.resp_type = EMMC_RESPONSE_R1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       ret = ops->read(lba, buf, size);
-       assert(ret == 0);
-
-       /* wait buffer empty */
-       emmc_device_state();
-
-       if (is_cmd23_enabled() == 0) {
-               if (size > EMMC_BLOCK_SIZE) {
-                       zeromem(&cmd, sizeof(emmc_cmd_t));
-                       cmd.cmd_idx = EMMC_CMD12;
-                       ret = ops->send_cmd(&cmd);
-                       assert(ret == 0);
-               }
-       }
-       /* Ignore improbable errors in release builds */
-       (void)ret;
-       return size;
-}
-
-size_t emmc_write_blocks(int lba, const uintptr_t buf, size_t size)
-{
-       emmc_cmd_t cmd;
-       int ret;
-
-       assert((ops != 0) &&
-              (ops->write != 0) &&
-              ((buf & EMMC_BLOCK_MASK) == 0) &&
-              ((size & EMMC_BLOCK_MASK) == 0));
-
-       clean_dcache_range(buf, size);
-       ret = ops->prepare(lba, buf, size);
-       assert(ret == 0);
-
-       if (is_cmd23_enabled()) {
-               /* set block count */
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               cmd.cmd_idx = EMMC_CMD23;
-               cmd.cmd_arg = size / EMMC_BLOCK_SIZE;
-               cmd.resp_type = EMMC_RESPONSE_R1;
-               ret = ops->send_cmd(&cmd);
-               assert(ret == 0);
-
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               cmd.cmd_idx = EMMC_CMD25;
-       } else {
-               zeromem(&cmd, sizeof(emmc_cmd_t));
-               if (size > EMMC_BLOCK_SIZE)
-                       cmd.cmd_idx = EMMC_CMD25;
-               else
-                       cmd.cmd_idx = EMMC_CMD24;
-       }
-       if ((emmc_ocr_value & OCR_ACCESS_MODE_MASK) == OCR_BYTE_MODE)
-               cmd.cmd_arg = lba * EMMC_BLOCK_SIZE;
-       else
-               cmd.cmd_arg = lba;
-       cmd.resp_type = EMMC_RESPONSE_R1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       ret = ops->write(lba, buf, size);
-       assert(ret == 0);
-
-       /* wait buffer empty */
-       emmc_device_state();
-
-       if (is_cmd23_enabled() == 0) {
-               if (size > EMMC_BLOCK_SIZE) {
-                       zeromem(&cmd, sizeof(emmc_cmd_t));
-                       cmd.cmd_idx = EMMC_CMD12;
-                       ret = ops->send_cmd(&cmd);
-                       assert(ret == 0);
-               }
-       }
-       /* Ignore improbable errors in release builds */
-       (void)ret;
-       return size;
-}
-
-size_t emmc_erase_blocks(int lba, size_t size)
-{
-       emmc_cmd_t cmd;
-       int ret, state;
-
-       assert(ops != 0);
-       assert((size != 0) && ((size % EMMC_BLOCK_SIZE) == 0));
-
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD35;
-       cmd.cmd_arg = lba;
-       cmd.resp_type = EMMC_RESPONSE_R1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD36;
-       cmd.cmd_arg = lba + (size / EMMC_BLOCK_SIZE) - 1;
-       cmd.resp_type = EMMC_RESPONSE_R1;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       zeromem(&cmd, sizeof(emmc_cmd_t));
-       cmd.cmd_idx = EMMC_CMD38;
-       cmd.resp_type = EMMC_RESPONSE_R1B;
-       ret = ops->send_cmd(&cmd);
-       assert(ret == 0);
-
-       /* wait to TRAN state */
-       do {
-               state = emmc_device_state();
-       } while (state != EMMC_STATE_TRAN);
-       /* Ignore improbable errors in release builds */
-       (void)ret;
-       return size;
-}
-
-static inline void emmc_rpmb_enable(void)
-{
-       emmc_set_ext_csd(CMD_EXTCSD_PARTITION_CONFIG,
-                       PART_CFG_BOOT_PARTITION1_ENABLE |
-                       PART_CFG_PARTITION1_ACCESS);
-}
-
-static inline void emmc_rpmb_disable(void)
-{
-       emmc_set_ext_csd(CMD_EXTCSD_PARTITION_CONFIG,
-                       PART_CFG_BOOT_PARTITION1_ENABLE);
-}
-
-size_t emmc_rpmb_read_blocks(int lba, uintptr_t buf, size_t size)
-{
-       size_t size_read;
-
-       emmc_rpmb_enable();
-       size_read = emmc_read_blocks(lba, buf, size);
-       emmc_rpmb_disable();
-       return size_read;
-}
-
-size_t emmc_rpmb_write_blocks(int lba, const uintptr_t buf, size_t size)
-{
-       size_t size_written;
-
-       emmc_rpmb_enable();
-       size_written = emmc_write_blocks(lba, buf, size);
-       emmc_rpmb_disable();
-       return size_written;
-}
-
-size_t emmc_rpmb_erase_blocks(int lba, size_t size)
-{
-       size_t size_erased;
-
-       emmc_rpmb_enable();
-       size_erased = emmc_erase_blocks(lba, size);
-       emmc_rpmb_disable();
-       return size_erased;
-}
-
-void emmc_init(const emmc_ops_t *ops_ptr, int clk, int width,
-              unsigned int flags)
-{
-       assert((ops_ptr != 0) &&
-              (ops_ptr->init != 0) &&
-              (ops_ptr->send_cmd != 0) &&
-              (ops_ptr->set_ios != 0) &&
-              (ops_ptr->prepare != 0) &&
-              (ops_ptr->read != 0) &&
-              (ops_ptr->write != 0) &&
-              (clk != 0) &&
-              ((width == EMMC_BUS_WIDTH_1) ||
-               (width == EMMC_BUS_WIDTH_4) ||
-               (width == EMMC_BUS_WIDTH_8) ||
-               (width == EMMC_BUS_WIDTH_DDR_4) ||
-               (width == EMMC_BUS_WIDTH_DDR_8)));
-       ops = ops_ptr;
-       emmc_flags = flags;
-
-       emmc_enumerate(clk, width);
-}
index 8b78280b58bbb468cbd0fc11b8866294c3d88e70..2b1770f087290a3fd540e05132db6c92d5f835f6 100644 (file)
@@ -18,7 +18,7 @@
 
 /* #define DEBUG_COMPHY */
 #ifdef DEBUG_COMPHY
-#define debug(format...) printf(format)
+#define debug(format...) tf_printf(format)
 #else
 #define debug(format, arg...)
 #endif
index 0c9ec1017e30bbe7531a4c26b9c750ca81e4c0f4..bf87612d5be565f6d22e9b486536241c6b63b986 100644 (file)
@@ -24,7 +24,7 @@
 static const struct mmc_ops *ops;
 static unsigned int mmc_ocr_value;
 static struct mmc_csd_emmc mmc_csd;
-static unsigned char mmc_ext_csd[512] __aligned(4);
+static unsigned char mmc_ext_csd[512] __aligned(16);
 static unsigned int mmc_flags;
 static struct mmc_device_info *mmc_dev_info;
 static unsigned int rca;
@@ -221,7 +221,7 @@ static int mmc_fill_device_info(void)
        unsigned int speed_idx;
        unsigned int nb_blocks;
        unsigned int freq_unit;
-       int ret;
+       int ret = 0;
        struct mmc_csd_sd_v2 *csd_sd_v2;
 
        switch (mmc_dev_info->mmc_dev_type) {
@@ -363,8 +363,6 @@ static int mmc_reset_to_idle(void)
 {
        int ret;
 
-       mdelay(1);
-
        /* CMD0: reset to IDLE */
        ret = mmc_send_cmd(MMC_CMD(0), 0, 0, NULL);
        if (ret != 0) {
@@ -413,14 +411,16 @@ static int mmc_enumerate(unsigned int clk, unsigned int bus_width)
 
        mmc_reset_to_idle();
 
-       /* CMD8: Send Interface Condition Command */
-       ret = mmc_send_cmd(MMC_CMD(8), VHS_2_7_3_6_V | CMD8_CHECK_PATTERN,
-                          MMC_RESPONSE_R(7), &resp_data[0]);
-
-       if ((ret == 0) && ((resp_data[0] & 0xffU) == CMD8_CHECK_PATTERN)) {
-               ret = sd_send_op_cond();
-       } else {
+       if (mmc_dev_info->mmc_dev_type == MMC_IS_EMMC) {
                ret = mmc_send_op_cond();
+       } else {
+               /* CMD8: Send Interface Condition Command */
+               ret = mmc_send_cmd(MMC_CMD(8), VHS_2_7_3_6_V | CMD8_CHECK_PATTERN,
+                                  MMC_RESPONSE_R(7), &resp_data[0]);
+
+               if ((ret == 0) && ((resp_data[0] & 0xffU) == CMD8_CHECK_PATTERN)) {
+                       ret = sd_send_op_cond();
+               }
        }
        if (ret != 0) {
                return ret;
@@ -473,15 +473,15 @@ static int mmc_enumerate(unsigned int clk, unsigned int bus_width)
                }
        } while (ret != MMC_STATE_TRAN);
 
-       ret = mmc_fill_device_info();
+       ret = mmc_set_ios(clk, bus_width);
        if (ret != 0) {
                return ret;
        }
 
-       return mmc_set_ios(clk, bus_width);
+       return mmc_fill_device_info();
 }
 
-size_t mmc_read_blocks(unsigned int lba, uintptr_t buf, size_t size)
+size_t mmc_read_blocks(int lba, uintptr_t buf, size_t size)
 {
        int ret;
        unsigned int cmd_idx, cmd_arg;
@@ -548,7 +548,7 @@ size_t mmc_read_blocks(unsigned int lba, uintptr_t buf, size_t size)
        return size;
 }
 
-size_t mmc_write_blocks(unsigned int lba, const uintptr_t buf, size_t size)
+size_t mmc_write_blocks(int lba, const uintptr_t buf, size_t size)
 {
        int ret;
        unsigned int cmd_idx, cmd_arg;
@@ -615,7 +615,7 @@ size_t mmc_write_blocks(unsigned int lba, const uintptr_t buf, size_t size)
        return size;
 }
 
-size_t mmc_erase_blocks(unsigned int lba, size_t size)
+size_t mmc_erase_blocks(int lba, size_t size)
 {
        int ret;
 
@@ -661,7 +661,7 @@ static inline void mmc_rpmb_disable(void)
                        PART_CFG_BOOT_PARTITION1_ENABLE);
 }
 
-size_t mmc_rpmb_read_blocks(unsigned int lba, uintptr_t buf, size_t size)
+size_t mmc_rpmb_read_blocks(int lba, uintptr_t buf, size_t size)
 {
        size_t size_read;
 
@@ -672,7 +672,7 @@ size_t mmc_rpmb_read_blocks(unsigned int lba, uintptr_t buf, size_t size)
        return size_read;
 }
 
-size_t mmc_rpmb_write_blocks(unsigned int lba, const uintptr_t buf, size_t size)
+size_t mmc_rpmb_write_blocks(int lba, const uintptr_t buf, size_t size)
 {
        size_t size_written;
 
@@ -683,7 +683,7 @@ size_t mmc_rpmb_write_blocks(unsigned int lba, const uintptr_t buf, size_t size)
        return size_written;
 }
 
-size_t mmc_rpmb_erase_blocks(unsigned int lba, size_t size)
+size_t mmc_rpmb_erase_blocks(int lba, size_t size)
 {
        size_t size_erased;
 
index e2b468363b8fe69143ee9f85e6b2e5b14f6043a7..5a338b8d9c259f5d900b2db37cc3f2d1a140945a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -24,7 +24,7 @@ static void dump_entries(int num)
 
        VERBOSE("Partition table with %d entries:\n", num);
        for (i = 0; i < num; i++) {
-               len = snprintf(name, EFI_NAMELEN, "%s", list.list[i].name);
+               len = tf_snprintf(name, EFI_NAMELEN, "%s", list.list[i].name);
                for (j = 0; j < EFI_NAMELEN - len - 1; j++) {
                        name[len + j] = ' ';
                }
index 7dff98b1b9e9e73d6da7d2e431d373f01c2dff46..1dc08d80471db98fdbbf9889b38690eb35700a14 100644 (file)
@@ -1344,7 +1344,7 @@ int stm32mp1_clk_init(void)
        for (i = (enum stm32mp1_pll_id)0; i < _PLL_NB; i++) {
                char name[12];
 
-               sprintf(name, "st,pll@%d", i);
+               tf_snprintf(name, sizeof(name), "st,pll@%d", i);
                plloff[i] = fdt_rcc_subnode_offset(name);
 
                if (!fdt_check_node(plloff[i])) {
index 156c2b4eb5ae7c126a0e81f3b471b7a39a7f8009..b0b0a3fd431ea2ac29e78a3663ad7cb2cad1c189 100644 (file)
@@ -10,8 +10,8 @@
 #include <debug.h>
 #include <delay_timer.h>
 #include <dw_mmc.h>
-#include <emmc.h>
 #include <errno.h>
+#include <mmc.h>
 #include <mmio.h>
 #include <string.h>
 
 
 #define DWMMC_8BIT_MODE                        (1 << 6)
 
+#define DWMMC_ADDRESS_MASK             U(0x0f)
+
 #define TIMEOUT                                100000
 
 struct dw_idmac_desc {
@@ -117,13 +119,13 @@ struct dw_idmac_desc {
 };
 
 static void dw_init(void);
-static int dw_send_cmd(emmc_cmd_t *cmd);
-static int dw_set_ios(int clk, int width);
+static int dw_send_cmd(struct mmc_cmd *cmd);
+static int dw_set_ios(unsigned int clk, unsigned int width);
 static int dw_prepare(int lba, uintptr_t buf, size_t size);
 static int dw_read(int lba, uintptr_t buf, size_t size);
 static int dw_write(int lba, uintptr_t buf, size_t size);
 
-static const emmc_ops_t dw_mmc_ops = {
+static const struct mmc_ops dw_mmc_ops = {
        .init           = dw_init,
        .send_cmd       = dw_send_cmd,
        .set_ios        = dw_set_ios,
@@ -187,7 +189,7 @@ static void dw_init(void)
        unsigned int data;
        uintptr_t base;
 
-       assert((dw_params.reg_base & EMMC_BLOCK_MASK) == 0);
+       assert((dw_params.reg_base & MMC_BLOCK_MASK) == 0);
 
        base = dw_params.reg_base;
        mmio_write_32(base + DWMMC_PWREN, 1);
@@ -203,7 +205,7 @@ static void dw_init(void)
        mmio_write_32(base + DWMMC_INTMASK, 0);
        mmio_write_32(base + DWMMC_TMOUT, ~0);
        mmio_write_32(base + DWMMC_IDINTEN, ~0);
-       mmio_write_32(base + DWMMC_BLKSIZ, EMMC_BLOCK_SIZE);
+       mmio_write_32(base + DWMMC_BLKSIZ, MMC_BLOCK_SIZE);
        mmio_write_32(base + DWMMC_BYTCNT, 256 * 1024);
        mmio_write_32(base + DWMMC_DEBNCE, 0x00ffffff);
        mmio_write_32(base + DWMMC_BMOD, BMOD_SWRESET);
@@ -215,11 +217,11 @@ static void dw_init(void)
        mmio_write_32(base + DWMMC_BMOD, data);
 
        udelay(100);
-       dw_set_clk(EMMC_BOOT_CLK_RATE);
+       dw_set_clk(MMC_BOOT_CLK_RATE);
        udelay(100);
 }
 
-static int dw_send_cmd(emmc_cmd_t *cmd)
+static int dw_send_cmd(struct mmc_cmd *cmd)
 {
        unsigned int op, data, err_mask;
        uintptr_t base;
@@ -230,22 +232,22 @@ static int dw_send_cmd(emmc_cmd_t *cmd)
        base = dw_params.reg_base;
 
        switch (cmd->cmd_idx) {
-       case EMMC_CMD0:
+       case 0:
                op = CMD_SEND_INIT;
                break;
-       case EMMC_CMD12:
+       case 12:
                op = CMD_STOP_ABORT_CMD;
                break;
-       case EMMC_CMD13:
+       case 13:
                op = CMD_WAIT_PRVDATA_COMPLETE;
                break;
-       case EMMC_CMD8:
-       case EMMC_CMD17:
-       case EMMC_CMD18:
+       case 8:
+       case 17:
+       case 18:
                op = CMD_DATA_TRANS_EXPECT | CMD_WAIT_PRVDATA_COMPLETE;
                break;
-       case EMMC_CMD24:
-       case EMMC_CMD25:
+       case 24:
+       case 25:
                op = CMD_WRITE | CMD_DATA_TRANS_EXPECT |
                     CMD_WAIT_PRVDATA_COMPLETE;
                break;
@@ -257,11 +259,11 @@ static int dw_send_cmd(emmc_cmd_t *cmd)
        switch (cmd->resp_type) {
        case 0:
                break;
-       case EMMC_RESPONSE_R2:
+       case MMC_RESPONSE_R(2):
                op |= CMD_RESP_EXPECT | CMD_CHECK_RESP_CRC |
                      CMD_RESP_LEN;
                break;
-       case EMMC_RESPONSE_R3:
+       case MMC_RESPONSE_R(3):
                op |= CMD_RESP_EXPECT;
                break;
        default:
@@ -307,16 +309,16 @@ static int dw_send_cmd(emmc_cmd_t *cmd)
        return 0;
 }
 
-static int dw_set_ios(int clk, int width)
+static int dw_set_ios(unsigned int clk, unsigned int width)
 {
        switch (width) {
-       case EMMC_BUS_WIDTH_1:
+       case MMC_BUS_WIDTH_1:
                mmio_write_32(dw_params.reg_base + DWMMC_CTYPE, CTYPE_1BIT);
                break;
-       case EMMC_BUS_WIDTH_4:
+       case MMC_BUS_WIDTH_4:
                mmio_write_32(dw_params.reg_base + DWMMC_CTYPE, CTYPE_4BIT);
                break;
-       case EMMC_BUS_WIDTH_8:
+       case MMC_BUS_WIDTH_8:
                mmio_write_32(dw_params.reg_base + DWMMC_CTYPE, CTYPE_8BIT);
                break;
        default:
@@ -333,12 +335,14 @@ static int dw_prepare(int lba, uintptr_t buf, size_t size)
        int desc_cnt, i, last;
        uintptr_t base;
 
-       assert(((buf & EMMC_BLOCK_MASK) == 0) &&
-              ((size % EMMC_BLOCK_SIZE) == 0) &&
+       assert(((buf & DWMMC_ADDRESS_MASK) == 0) &&
+              ((size % MMC_BLOCK_SIZE) == 0) &&
               (dw_params.desc_size > 0) &&
-              ((dw_params.reg_base & EMMC_BLOCK_MASK) == 0) &&
-              ((dw_params.desc_base & EMMC_BLOCK_MASK) == 0) &&
-              ((dw_params.desc_size & EMMC_BLOCK_MASK) == 0));
+              ((dw_params.reg_base & MMC_BLOCK_MASK) == 0) &&
+              ((dw_params.desc_base & MMC_BLOCK_MASK) == 0) &&
+              ((dw_params.desc_size & MMC_BLOCK_MASK) == 0));
+
+       flush_dcache_range(buf, size);
 
        desc_cnt = (size + DWMMC_DMA_MAX_BUFFER_SIZE - 1) /
                   DWMMC_DMA_MAX_BUFFER_SIZE;
@@ -367,7 +371,7 @@ static int dw_prepare(int lba, uintptr_t buf, size_t size)
        (desc + last)->des3 = 0;
 
        mmio_write_32(base + DWMMC_DBADDR, dw_params.desc_base);
-       clean_dcache_range(dw_params.desc_base,
+       flush_dcache_range(dw_params.desc_base,
                           desc_cnt * DWMMC_DMA_MAX_BUFFER_SIZE);
 
        return 0;
@@ -383,19 +387,19 @@ static int dw_write(int lba, uintptr_t buf, size_t size)
        return 0;
 }
 
-void dw_mmc_init(dw_mmc_params_t *params)
+void dw_mmc_init(dw_mmc_params_t *params, struct mmc_device_info *info)
 {
        assert((params != 0) &&
-              ((params->reg_base & EMMC_BLOCK_MASK) == 0) &&
-              ((params->desc_base & EMMC_BLOCK_MASK) == 0) &&
-              ((params->desc_size & EMMC_BLOCK_MASK) == 0) &&
+              ((params->reg_base & MMC_BLOCK_MASK) == 0) &&
+              ((params->desc_base & MMC_BLOCK_MASK) == 0) &&
+              ((params->desc_size & MMC_BLOCK_MASK) == 0) &&
               (params->desc_size > 0) &&
               (params->clk_rate > 0) &&
-              ((params->bus_width == EMMC_BUS_WIDTH_1) ||
-               (params->bus_width == EMMC_BUS_WIDTH_4) ||
-               (params->bus_width == EMMC_BUS_WIDTH_8)));
+              ((params->bus_width == MMC_BUS_WIDTH_1) ||
+               (params->bus_width == MMC_BUS_WIDTH_4) ||
+               (params->bus_width == MMC_BUS_WIDTH_8)));
 
        memcpy(&dw_params, params, sizeof(dw_mmc_params_t));
-       emmc_init(&dw_mmc_ops, params->clk_rate, params->bus_width,
-                 params->flags);
+       mmc_init(&dw_mmc_ops, params->clk_rate, params->bus_width,
+                params->flags, info);
 }
diff --git a/include/common/romlib.h b/include/common/romlib.h
new file mode 100644 (file)
index 0000000..81a6f5c
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ROMLIB_H_
+
+#define ROMLIB_MAJOR   0
+#define ROMLIB_MINOR   1
+#define ROMLIB_VERSION ((ROMLIB_MAJOR << 8) | ROMLIB_MINOR)
+
+int rom_lib_init(int version);
+
+#endif
diff --git a/include/drivers/emmc.h b/include/drivers/emmc.h
deleted file mode 100644 (file)
index 286c014..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef __EMMC_H__
-#define __EMMC_H__
-
-#include <stdint.h>
-
-#define EMMC_BLOCK_SIZE                        512
-#define EMMC_BLOCK_MASK                        (EMMC_BLOCK_SIZE - 1)
-#define EMMC_BOOT_CLK_RATE             (400 * 1000)
-
-#define EMMC_CMD0                      0
-#define EMMC_CMD1                      1
-#define EMMC_CMD2                      2
-#define EMMC_CMD3                      3
-#define EMMC_CMD6                      6
-#define EMMC_CMD7                      7
-#define EMMC_CMD8                      8
-#define EMMC_CMD9                      9
-#define EMMC_CMD12                     12
-#define EMMC_CMD13                     13
-#define EMMC_CMD17                     17
-#define EMMC_CMD18                     18
-#define EMMC_CMD21                     21
-#define EMMC_CMD23                     23
-#define EMMC_CMD24                     24
-#define EMMC_CMD25                     25
-#define EMMC_CMD35                     35
-#define EMMC_CMD36                     36
-#define EMMC_CMD38                     38
-
-#define OCR_POWERUP                    (1 << 31)
-#define OCR_BYTE_MODE                  (0 << 29)
-#define OCR_SECTOR_MODE                        (2 << 29)
-#define OCR_ACCESS_MODE_MASK           (3 << 29)
-#define OCR_VDD_MIN_2V7                        (0x1ff << 15)
-#define OCR_VDD_MIN_2V0                        (0x7f << 8)
-#define OCR_VDD_MIN_1V7                        (1 << 7)
-
-#define EMMC_RESPONSE_R1               1
-#define EMMC_RESPONSE_R1B              1
-#define EMMC_RESPONSE_R2               4
-#define EMMC_RESPONSE_R3               1
-#define EMMC_RESPONSE_R4               1
-#define EMMC_RESPONSE_R5               1
-
-#define EMMC_FIX_RCA                   6       /* > 1 */
-#define RCA_SHIFT_OFFSET               16
-
-#define CMD_EXTCSD_PARTITION_CONFIG    179
-#define CMD_EXTCSD_BUS_WIDTH           183
-#define CMD_EXTCSD_HS_TIMING           185
-
-#define PART_CFG_BOOT_PARTITION1_ENABLE        (1 << 3)
-#define PART_CFG_PARTITION1_ACCESS     (1 << 0)
-
-/* values in EXT CSD register */
-#define EMMC_BUS_WIDTH_1               0
-#define EMMC_BUS_WIDTH_4               1
-#define EMMC_BUS_WIDTH_8               2
-#define EMMC_BUS_WIDTH_DDR_4           5
-#define EMMC_BUS_WIDTH_DDR_8           6
-#define EMMC_BOOT_MODE_BACKWARD                (0 << 3)
-#define EMMC_BOOT_MODE_HS_TIMING       (1 << 3)
-#define EMMC_BOOT_MODE_DDR             (2 << 3)
-
-#define EXTCSD_SET_CMD                 (0 << 24)
-#define EXTCSD_SET_BITS                        (1 << 24)
-#define EXTCSD_CLR_BITS                        (2 << 24)
-#define EXTCSD_WRITE_BYTES             (3 << 24)
-#define EXTCSD_CMD(x)                  (((x) & 0xff) << 16)
-#define EXTCSD_VALUE(x)                        (((x) & 0xff) << 8)
-
-#define STATUS_CURRENT_STATE(x)                (((x) & 0xf) << 9)
-#define STATUS_READY_FOR_DATA          (1 << 8)
-#define STATUS_SWITCH_ERROR            (1 << 7)
-#define EMMC_GET_STATE(x)              (((x) >> 9) & 0xf)
-#define EMMC_STATE_IDLE                        0
-#define EMMC_STATE_READY               1
-#define EMMC_STATE_IDENT               2
-#define EMMC_STATE_STBY                        3
-#define EMMC_STATE_TRAN                        4
-#define EMMC_STATE_DATA                        5
-#define EMMC_STATE_RCV                 6
-#define EMMC_STATE_PRG                 7
-#define EMMC_STATE_DIS                 8
-#define EMMC_STATE_BTST                        9
-#define EMMC_STATE_SLP                 10
-
-#define EMMC_FLAG_CMD23                        (1 << 0)
-
-typedef struct emmc_cmd {
-       unsigned int    cmd_idx;
-       unsigned int    cmd_arg;
-       unsigned int    resp_type;
-       unsigned int    resp_data[4];
-} emmc_cmd_t;
-
-typedef struct emmc_ops {
-       void (*init)(void);
-       int (*send_cmd)(emmc_cmd_t *cmd);
-       int (*set_ios)(int clk, int width);
-       int (*prepare)(int lba, uintptr_t buf, size_t size);
-       int (*read)(int lba, uintptr_t buf, size_t size);
-       int (*write)(int lba, const uintptr_t buf, size_t size);
-} emmc_ops_t;
-
-typedef struct emmc_csd {
-       unsigned int        not_used:           1;
-       unsigned int        crc:                        7;
-       unsigned int        ecc:                        2;
-       unsigned int        file_format:                2;
-       unsigned int        tmp_write_protect:  1;
-       unsigned int        perm_write_protect: 1;
-       unsigned int        copy:                       1;
-       unsigned int        file_format_grp:    1;
-
-       unsigned int            reserved_1:             5;
-       unsigned int            write_bl_partial:       1;
-       unsigned int            write_bl_len:           4;
-       unsigned int            r2w_factor:             3;
-       unsigned int            default_ecc:            2;
-       unsigned int            wp_grp_enable:          1;
-
-       unsigned int            wp_grp_size:            5;
-       unsigned int            erase_grp_mult:         5;
-       unsigned int            erase_grp_size:         5;
-       unsigned int            c_size_mult:            3;
-       unsigned int            vdd_w_curr_max:         3;
-       unsigned int            vdd_w_curr_min:         3;
-       unsigned int            vdd_r_curr_max:         3;
-       unsigned int            vdd_r_curr_min:         3;
-       unsigned int            c_size_low:             2;
-
-       unsigned int            c_size_high:            10;
-       unsigned int            reserved_2:             2;
-       unsigned int            dsr_imp:                1;
-       unsigned int            read_blk_misalign:      1;
-       unsigned int            write_blk_misalign:     1;
-       unsigned int            read_bl_partial:        1;
-       unsigned int            read_bl_len:            4;
-       unsigned int            ccc:                    12;
-
-       unsigned int            tran_speed:             8;
-       unsigned int            nsac:                   8;
-       unsigned int            taac:                   8;
-       unsigned int            reserved_3:             2;
-       unsigned int            spec_vers:              4;
-       unsigned int            csd_structure:          2;
-} emmc_csd_t;
-
-size_t emmc_read_blocks(int lba, uintptr_t buf, size_t size);
-size_t emmc_write_blocks(int lba, const uintptr_t buf, size_t size);
-size_t emmc_erase_blocks(int lba, size_t size);
-size_t emmc_rpmb_read_blocks(int lba, uintptr_t buf, size_t size);
-size_t emmc_rpmb_write_blocks(int lba, const uintptr_t buf, size_t size);
-size_t emmc_rpmb_erase_blocks(int lba, size_t size);
-void emmc_init(const emmc_ops_t *ops, int clk, int bus_width,
-              unsigned int flags);
-
-#endif /* __EMMC_H__ */
index 65f4bbdc3fd8fac8234c990ec5109b92c1dea6ed..0a513bd645c2e1e1c2ce76908251b1796f72537e 100644 (file)
@@ -208,13 +208,12 @@ struct mmc_device_info {
        enum mmc_device_type    mmc_dev_type;   /* Type of MMC */
 };
 
-size_t mmc_read_blocks(unsigned int lba, uintptr_t buf, size_t size);
-size_t mmc_write_blocks(unsigned int lba, const uintptr_t buf, size_t size);
-size_t mmc_erase_blocks(unsigned int lba, size_t size);
-size_t mmc_rpmb_read_blocks(unsigned int lba, uintptr_t buf, size_t size);
-size_t mmc_rpmb_write_blocks(unsigned int lba, const uintptr_t buf,
-                            size_t size);
-size_t mmc_rpmb_erase_blocks(unsigned int lba, size_t size);
+size_t mmc_read_blocks(int lba, uintptr_t buf, size_t size);
+size_t mmc_write_blocks(int lba, const uintptr_t buf, size_t size);
+size_t mmc_erase_blocks(int lba, size_t size);
+size_t mmc_rpmb_read_blocks(int lba, uintptr_t buf, size_t size);
+size_t mmc_rpmb_write_blocks(int lba, const uintptr_t buf, size_t size);
+size_t mmc_rpmb_erase_blocks(int lba, size_t size);
 int mmc_init(const struct mmc_ops *ops_ptr, unsigned int clk,
             unsigned int width, unsigned int flags,
             struct mmc_device_info *device_info);
index 4e6b348ac34f5480f43a2be61701cb04ea97f7df..1ec8d1da844b98056697ab5cea2431615672f0b6 100644 (file)
@@ -7,6 +7,8 @@
 #ifndef __DW_MMC_H__
 #define __DW_MMC_H__
 
+#include <mmc.h>
+
 typedef struct dw_mmc_params {
        uintptr_t       reg_base;
        uintptr_t       desc_base;
@@ -16,6 +18,6 @@ typedef struct dw_mmc_params {
        unsigned int    flags;
 } dw_mmc_params_t;
 
-void dw_mmc_init(dw_mmc_params_t *params);
+void dw_mmc_init(dw_mmc_params_t *params, struct mmc_device_info *info);
 
 #endif /* __DW_MMC_H__ */
index a5366495e8ae9a7c5f35e58a5c979c2180a677b8..6f0949bb22e3dea265d55b635109bbab920ad3d2 100644 (file)
 #define TTBCR_T0SZ_SHIFT       U(0)
 #define TTBCR_T0SZ_MASK                U(0x7)
 
+/*
+ * HTCR definitions
+ */
+#define HTCR_RES1                      ((U(1) << 31) | (U(1) << 23))
+
+#define HTCR_SH0_NON_SHAREABLE         (U(0x0) << 12)
+#define HTCR_SH0_OUTER_SHAREABLE       (U(0x2) << 12)
+#define HTCR_SH0_INNER_SHAREABLE       (U(0x3) << 12)
+
+#define HTCR_RGN0_OUTER_NC     (U(0x0) << 10)
+#define HTCR_RGN0_OUTER_WBA    (U(0x1) << 10)
+#define HTCR_RGN0_OUTER_WT     (U(0x2) << 10)
+#define HTCR_RGN0_OUTER_WBNA   (U(0x3) << 10)
+
+#define HTCR_RGN0_INNER_NC     (U(0x0) << 8)
+#define HTCR_RGN0_INNER_WBA    (U(0x1) << 8)
+#define HTCR_RGN0_INNER_WT     (U(0x2) << 8)
+#define HTCR_RGN0_INNER_WBNA   (U(0x3) << 8)
+
+#define HTCR_T0SZ_SHIFT                U(0)
+#define HTCR_T0SZ_MASK         U(0x7)
+
 #define MODE_RW_SHIFT          U(0x4)
 #define MODE_RW_MASK           U(0x1)
 #define MODE_RW_32             U(0x1)
 #define TLBIMVA                p15, 0, c8, c7, 1
 #define TLBIMVAA       p15, 0, c8, c7, 3
 #define TLBIMVAAIS     p15, 0, c8, c3, 3
+#define TLBIMVAHIS     p15, 4, c8, c3, 1
 #define BPIALLIS       p15, 0, c7, c1, 6
 #define BPIALL         p15, 0, c7, c5, 6
 #define ICIALLU                p15, 0, c7, c5, 0
 #define CLIDR          p15, 1, c0, c0, 1
 #define CSSELR         p15, 2, c0, c0, 0
 #define CCSIDR         p15, 1, c0, c0, 0
+#define HTCR           p15, 4, c2, c0, 2
+#define HMAIR0         p15, 4, c10, c2, 0
 #define DBGOSDLR       p14, 0, c1, c3, 4
 
 /* Debug register defines. The format is: coproc, opt1, CRn, CRm, opt2 */
 #define CNTVOFF_64     p15, 4, c14
 #define VTTBR_64       p15, 6, c2
 #define CNTPCT_64      p15, 0, c14
+#define HTTBR_64       p15, 4, c2
 
 /* 64 bit GICv3 CPU Interface system register defines. The format is: coproc, opt1, CRm */
 #define ICC_SGI1R_EL1_64       p15, 0, c12
index beae5d06586206e554189a9e307b1d002425c5a8..aa68bcbe6d4e0ed7b378690e499552929b0f5c6e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -300,6 +300,7 @@ DEFINE_TLBIOP_FUNC(allis, TLBIALLIS)
 DEFINE_TLBIOP_PARAM_FUNC(mva, TLBIMVA)
 DEFINE_TLBIOP_PARAM_FUNC(mvaa, TLBIMVAA)
 DEFINE_TLBIOP_PARAM_FUNC(mvaais, TLBIMVAAIS)
+DEFINE_TLBIOP_PARAM_FUNC(mvahis, TLBIMVAHIS)
 
 /*
  * BPI operation prototypes.
@@ -320,6 +321,10 @@ DEFINE_DCOP_PARAM_FUNC(cvac, DCCMVAC)
 #define IS_IN_SECURE() \
        (GET_NS_BIT(read_scr()) == 0)
 
+#define IS_IN_HYP()    (GET_M32(read_cpsr()) == MODE32_hyp)
+#define IS_IN_SVC()    (GET_M32(read_cpsr()) == MODE32_svc)
+#define IS_IN_MON()    (GET_M32(read_cpsr()) == MODE32_mon)
+#define IS_IN_EL2()    IS_IN_HYP()
  /*
   * If EL3 is AArch32, then secure PL1 and monitor mode correspond to EL3
   */
index 397013e4e98f03cd2373cbeafb17bf9f9bca5186..c9619f6c69d22aa928a3888ae42435465ab3090c 100644 (file)
  * TCR defintions
  */
 #define TCR_EL3_RES1           ((U(1) << 31) | (U(1) << 23))
+#define TCR_EL2_RES1           ((ULL(1) << 31) | (ULL(1) << 23))
 #define TCR_EL1_IPS_SHIFT      U(32)
+#define TCR_EL2_PS_SHIFT       U(16)
 #define TCR_EL3_PS_SHIFT       U(16)
 
 #define TCR_TxSZ_MIN           ULL(16)
diff --git a/include/lib/libc/assert.h b/include/lib/libc/assert.h
new file mode 100644 (file)
index 0000000..db567db
--- /dev/null
@@ -0,0 +1,77 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)assert.h    8.2 (Berkeley) 1/21/94
+ * $FreeBSD$
+ */
+/*
+ * Portions copyright (c) 2017, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef _ASSERT_H_
+#define _ASSERT_H_
+
+#include <debug.h>
+#include <platform_def.h>
+#include <sys/cdefs.h>
+
+#ifndef PLAT_LOG_LEVEL_ASSERT
+#define PLAT_LOG_LEVEL_ASSERT  LOG_LEVEL
+#endif
+
+#if ENABLE_ASSERTIONS
+#define        _assert(e)      assert(e)
+# if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE
+#  define      assert(e)       ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e))
+# elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
+#  define      assert(e)       ((e) ? (void)0 : __assert(__FILE__, __LINE__))
+# else
+#  define      assert(e)       ((e) ? (void)0 : __assert())
+# endif
+#else
+#define        assert(e)       ((void)0)
+#define        _assert(e)      ((void)0)
+#endif /* ENABLE_ASSERTIONS */
+
+__BEGIN_DECLS
+#if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE
+void __assert(const char *, unsigned int, const char *) __dead2;
+#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
+void __assert(const char *, unsigned int) __dead2;
+#else
+void __assert(void) __dead2;
+#endif
+__END_DECLS
+
+#endif /* !_ASSERT_H_ */
diff --git a/include/lib/libc/inttypes.h b/include/lib/libc/inttypes.h
new file mode 100644 (file)
index 0000000..269f3e7
--- /dev/null
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _INTTYPES_H_
+#define        _INTTYPES_H_
+
+#include <machine/_inttypes.h>
+#include <sys/stdint.h>
+
+typedef struct {
+       intmax_t        quot;           /* Quotient. */
+       intmax_t        rem;            /* Remainder. */
+} imaxdiv_t;
+
+__BEGIN_DECLS
+#ifdef _XLOCALE_H_
+#include <xlocale/_inttypes.h>
+#endif
+intmax_t       imaxabs(intmax_t) __pure2;
+imaxdiv_t      imaxdiv(intmax_t, intmax_t) __pure2;
+
+intmax_t       strtoimax(const char *__restrict, char **__restrict, int);
+uintmax_t      strtoumax(const char *__restrict, char **__restrict, int);
+
+__END_DECLS
+
+#endif /* !_INTTYPES_H_ */
diff --git a/include/lib/libc/machine/_inttypes.h b/include/lib/libc/machine/_inttypes.h
new file mode 100644 (file)
index 0000000..7dfe9c3
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _MACHINE_INTTYPES_H_
+#define _MACHINE_INTTYPES_H_
+
+/*
+ * Trusted Firmware does not depend on any definitions in this file. Content
+ * will be added as needed.
+ */
+
+#endif /* !_MACHINE_INTTYPES_H_ */
diff --git a/include/lib/libc/machine/_limits.h b/include/lib/libc/machine/_limits.h
new file mode 100644 (file)
index 0000000..3bdc66f
--- /dev/null
@@ -0,0 +1,105 @@
+/*-
+ * Copyright (c) 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)limits.h    8.3 (Berkeley) 1/4/94
+ * $FreeBSD$
+ */
+
+/*
+ * Portions copyright (c) 2017, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef        _MACHINE__LIMITS_H_
+#define        _MACHINE__LIMITS_H_
+
+/*
+ * According to ANSI (section 2.2.4.2), the values below must be usable by
+ * #if preprocessing directives.  Additionally, the expression must have the
+ * same type as would an expression that is an object of the corresponding
+ * type converted according to the integral promotions.  The subtraction for
+ * INT_MIN, etc., is so the value is not unsigned; e.g., 0x80000000 is an
+ * unsigned int for 32-bit two's complement ANSI compilers (section 3.1.3.2).
+ */
+
+#define        __CHAR_BIT      8               /* number of bits in a char */
+
+#define        __SCHAR_MAX     0x7f            /* max value for a signed char */
+#define        __SCHAR_MIN     (-0x7f-1)       /* min value for a signed char */
+
+#define        __UCHAR_MAX     0xff            /* max value for an unsigned char */
+
+#define        __USHRT_MAX     0xffff          /* max value for an unsigned short */
+#define        __SHRT_MAX      0x7fff          /* max value for a short */
+#define        __SHRT_MIN      (-0x7fff-1)     /* min value for a short */
+
+#define        __UINT_MAX      0xffffffffU     /* max value for an unsigned int */
+#define        __INT_MAX       0x7fffffff      /* max value for an int */
+#define        __INT_MIN       (-0x7fffffff-1) /* min value for an int */
+
+#ifdef AARCH32
+#define        __ULONG_MAX     0xffffffffUL    /* max for an unsigned long */
+#define        __LONG_MAX      0x7fffffffL     /* max for a long */
+#define        __LONG_MIN      (-0x7fffffffL-1) /* min for a long */
+#else
+#define        __ULONG_MAX     0xffffffffffffffffUL    /* max for an unsigned long */
+#define        __LONG_MAX      0x7fffffffffffffffL     /* max for a long */
+#define        __LONG_MIN      (-0x7fffffffffffffffL-1) /* min for a long */
+#endif
+
+#define        __ULLONG_MAX    0xffffffffffffffffULL   /* max for an unsigned long long */
+#define        __LLONG_MAX     0x7fffffffffffffffLL    /* max for a long long */
+#define        __LLONG_MIN     (-0x7fffffffffffffffLL-1) /* min for a long long */
+
+#define        __SSIZE_MAX     __LONG_MAX      /* max value for a ssize_t */
+
+#define        __SIZE_T_MAX    __ULONG_MAX     /* max value for a size_t */
+
+#define        __OFF_MAX       __LONG_MAX      /* max value for an off_t */
+#define        __OFF_MIN       __LONG_MIN      /* min value for an off_t */
+
+#ifdef AARCH32
+/* Quads and long longs are the same size.  Ensure they stay in sync. */
+#define        __UQUAD_MAX     (__ULLONG_MAX)  /* max value for a uquad_t */
+#define        __QUAD_MAX      (__LLONG_MAX)   /* max value for a quad_t */
+#define        __QUAD_MIN      (__LLONG_MIN)   /* min value for a quad_t */
+#else
+/* Quads and longs are the same size.  Ensure they stay in sync. */
+#define        __UQUAD_MAX     (__ULONG_MAX)   /* max value for a uquad_t */
+#define        __QUAD_MAX      (__LONG_MAX)    /* max value for a quad_t */
+#define        __QUAD_MIN      (__LONG_MIN)    /* min value for a quad_t */
+#endif
+
+#ifdef AARCH32
+#define        __LONG_BIT      32
+#else
+#define        __LONG_BIT      64
+#endif
+#define        __WORD_BIT      32
+
+/* Minimum signal stack size. */
+#define        __MINSIGSTKSZ   (1024 * 4)
+
+#endif /* !_MACHINE__LIMITS_H_ */
diff --git a/include/lib/libc/machine/_stdint.h b/include/lib/libc/machine/_stdint.h
new file mode 100644 (file)
index 0000000..ee5372d
--- /dev/null
@@ -0,0 +1,184 @@
+/*-
+ * Copyright (c) 2001, 2002 Mike Barcroft <mike@FreeBSD.org>
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Klaus Klein.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * Portions copyright (c) 2016-2017, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef        _MACHINE__STDINT_H_
+#define        _MACHINE__STDINT_H_
+
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
+
+#define        INT8_C(c)               (c)
+#define        INT16_C(c)              (c)
+#define        INT32_C(c)              (c)
+#define        INT64_C(c)              (c ## LL)
+
+#define        UINT8_C(c)              (c)
+#define        UINT16_C(c)             (c)
+#define        UINT32_C(c)             (c ## U)
+#define        UINT64_C(c)             (c ## ULL)
+
+#define        INTMAX_C(c)             INT64_C(c)
+#define        UINTMAX_C(c)            UINT64_C(c)
+
+#endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */
+
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
+
+/*
+ * ISO/IEC 9899:1999
+ * 7.18.2.1 Limits of exact-width integer types
+ */
+/* Minimum values of exact-width signed integer types. */
+#define        INT8_MIN        (-0x7f-1)
+#define        INT16_MIN       (-0x7fff-1)
+#define        INT32_MIN       (-0x7fffffff-1)
+#define        INT64_MIN       (-0x7fffffffffffffffLL-1)
+
+/* Maximum values of exact-width signed integer types. */
+#define        INT8_MAX        0x7f
+#define        INT16_MAX       0x7fff
+#define        INT32_MAX       0x7fffffff
+#define        INT64_MAX       0x7fffffffffffffffLL
+
+/* Maximum values of exact-width unsigned integer types. */
+#define        UINT8_MAX       0xff
+#define        UINT16_MAX      0xffff
+#define        UINT32_MAX      0xffffffffU
+#define        UINT64_MAX      0xffffffffffffffffULL
+
+/*
+ * ISO/IEC 9899:1999
+ * 7.18.2.2  Limits of minimum-width integer types
+ */
+/* Minimum values of minimum-width signed integer types. */
+#define        INT_LEAST8_MIN  INT8_MIN
+#define        INT_LEAST16_MIN INT16_MIN
+#define        INT_LEAST32_MIN INT32_MIN
+#define        INT_LEAST64_MIN INT64_MIN
+
+/* Maximum values of minimum-width signed integer types. */
+#define        INT_LEAST8_MAX  INT8_MAX
+#define        INT_LEAST16_MAX INT16_MAX
+#define        INT_LEAST32_MAX INT32_MAX
+#define        INT_LEAST64_MAX INT64_MAX
+
+/* Maximum values of minimum-width unsigned integer types. */
+#define        UINT_LEAST8_MAX  UINT8_MAX
+#define        UINT_LEAST16_MAX UINT16_MAX
+#define        UINT_LEAST32_MAX UINT32_MAX
+#define        UINT_LEAST64_MAX UINT64_MAX
+
+/*
+ * ISO/IEC 9899:1999
+ * 7.18.2.3  Limits of fastest minimum-width integer types
+ */
+/* Minimum values of fastest minimum-width signed integer types. */
+#define        INT_FAST8_MIN   INT32_MIN
+#define        INT_FAST16_MIN  INT32_MIN
+#define        INT_FAST32_MIN  INT32_MIN
+#define        INT_FAST64_MIN  INT64_MIN
+
+/* Maximum values of fastest minimum-width signed integer types. */
+#define        INT_FAST8_MAX   INT32_MAX
+#define        INT_FAST16_MAX  INT32_MAX
+#define        INT_FAST32_MAX  INT32_MAX
+#define        INT_FAST64_MAX  INT64_MAX
+
+/* Maximum values of fastest minimum-width unsigned integer types. */
+#define        UINT_FAST8_MAX  UINT32_MAX
+#define        UINT_FAST16_MAX UINT32_MAX
+#define        UINT_FAST32_MAX UINT32_MAX
+#define        UINT_FAST64_MAX UINT64_MAX
+
+/*
+ * ISO/IEC 9899:1999
+ * 7.18.2.4  Limits of integer types capable of holding object pointers
+ */
+#ifdef AARCH32
+#define        INTPTR_MIN      INT32_MIN
+#define        INTPTR_MAX      INT32_MAX
+#define        UINTPTR_MAX     UINT32_MAX
+#else
+#define        INTPTR_MIN      INT64_MIN
+#define        INTPTR_MAX      INT64_MAX
+#define        UINTPTR_MAX     UINT64_MAX
+#endif
+
+/*
+ * ISO/IEC 9899:1999
+ * 7.18.2.5  Limits of greatest-width integer types
+ */
+#define        INTMAX_MIN      INT64_MIN
+#define        INTMAX_MAX      INT64_MAX
+#define        UINTMAX_MAX     UINT64_MAX
+
+/*
+ * ISO/IEC 9899:1999
+ * 7.18.3  Limits of other integer types
+ */
+/* Limits of ptrdiff_t. */
+#ifdef AARCH32
+#define        PTRDIFF_MIN     INT32_MIN
+#define        PTRDIFF_MAX     INT32_MAX
+#else
+#define        PTRDIFF_MIN     INT64_MIN
+#define        PTRDIFF_MAX     INT64_MAX
+#endif
+
+/* Limits of sig_atomic_t. */
+#define        SIG_ATOMIC_MIN  INT32_MIN
+#define        SIG_ATOMIC_MAX  INT32_MAX
+
+/* Limit of size_t. */
+#ifdef AARCH32
+#define        SIZE_MAX        UINT32_MAX
+#else
+#define        SIZE_MAX        UINT64_MAX
+#endif
+
+#ifndef WCHAR_MIN /* Also possibly defined in <wchar.h> */
+/* Limits of wchar_t. */
+#define        WCHAR_MIN       INT32_MIN
+#define        WCHAR_MAX       INT32_MAX
+#endif
+
+/* Limits of wint_t. */
+#define        WINT_MIN        INT32_MIN
+#define        WINT_MAX        INT32_MAX
+
+#endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
+
+#endif /* !_MACHINE__STDINT_H_ */
diff --git a/include/lib/libc/machine/_types.h b/include/lib/libc/machine/_types.h
new file mode 100644 (file)
index 0000000..037fdf2
--- /dev/null
@@ -0,0 +1,121 @@
+/*-
+ * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     From: @(#)ansi.h        8.2 (Berkeley) 1/4/94
+ *     From: @(#)types.h       8.3 (Berkeley) 1/5/94
+ * $FreeBSD$
+ */
+/*
+ * Portions copyright (c) 2016, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef _MACHINE__TYPES_H_
+#define        _MACHINE__TYPES_H_
+
+#ifndef _SYS_CDEFS_H_
+#error this file needs sys/cdefs.h as a prerequisite
+#endif
+
+/*
+ * Basic types upon which most other types are built.
+ */
+typedef        __signed char           __int8_t;
+typedef        unsigned char           __uint8_t;
+typedef        short                   __int16_t;
+typedef        unsigned short          __uint16_t;
+typedef        int                     __int32_t;
+typedef        unsigned int            __uint32_t;
+typedef        long long               __int64_t;
+typedef        unsigned long long      __uint64_t;
+
+/*
+ * Standard type definitions.
+ */
+typedef        __int32_t       __clock_t;              /* clock()... */
+typedef        long            __critical_t;
+typedef        double          __double_t;
+typedef        float           __float_t;
+typedef        long            __intfptr_t;
+typedef        __int64_t       __intmax_t;
+typedef        long            __intptr_t;
+typedef        __int32_t       __int_fast8_t;
+typedef        __int32_t       __int_fast16_t;
+typedef        __int32_t       __int_fast32_t;
+typedef        __int64_t       __int_fast64_t;
+typedef        __int8_t        __int_least8_t;
+typedef        __int16_t       __int_least16_t;
+typedef        __int32_t       __int_least32_t;
+typedef        __int64_t       __int_least64_t;
+typedef        long            __ptrdiff_t;            /* ptr1 - ptr2 */
+typedef        long            __register_t;
+typedef        long            __segsz_t;              /* segment size (in pages) */
+#ifdef AARCH32
+typedef        unsigned int    __size_t;               /* sizeof() */
+typedef        int             __ssize_t;              /* byte count or error */
+#elif defined AARCH64
+typedef        unsigned long   __size_t;               /* sizeof() */
+typedef        long            __ssize_t;              /* byte count or error */
+#else
+#error "Only AArch32 or AArch64 supported"
+#endif /* AARCH32 */
+typedef        __int64_t       __time_t;               /* time()... */
+typedef        unsigned long   __uintfptr_t;
+typedef        __uint64_t      __uintmax_t;
+typedef        unsigned long   __uintptr_t;
+typedef        __uint32_t      __uint_fast8_t;
+typedef        __uint32_t      __uint_fast16_t;
+typedef        __uint32_t      __uint_fast32_t;
+typedef        __uint64_t      __uint_fast64_t;
+typedef        __uint8_t       __uint_least8_t;
+typedef        __uint16_t      __uint_least16_t;
+typedef        __uint32_t      __uint_least32_t;
+typedef        __uint64_t      __uint_least64_t;
+typedef        unsigned long   __u_register_t;
+typedef        unsigned long   __vm_offset_t;
+typedef        __int64_t       __vm_ooffset_t;
+typedef        unsigned long   __vm_paddr_t;
+typedef        __uint64_t      __vm_pindex_t;
+typedef        unsigned long   __vm_size_t;
+
+/*
+ * Unusual type definitions.
+ */
+#ifdef __GNUCLIKE_BUILTIN_VARARGS
+typedef __builtin_va_list      __va_list;      /* internally known to gcc */
+#else
+typedef        char *                  __va_list;
+#endif /* __GNUCLIKE_BUILTIN_VARARGS */
+#if defined(__GNUCLIKE_BUILTIN_VAALIST) && !defined(__GNUC_VA_LIST) \
+    && !defined(__NO_GNUC_VA_LIST)
+#define __GNUC_VA_LIST
+typedef __va_list              __gnuc_va_list; /* compatibility w/GNU headers*/
+#endif
+
+#endif /* !_MACHINE__TYPES_H_ */
diff --git a/include/lib/libc/machine/endian.h b/include/lib/libc/machine/endian.h
new file mode 100644 (file)
index 0000000..57e33b1
--- /dev/null
@@ -0,0 +1,168 @@
+/*-
+ * Copyright (c) 2001 David E. O'Brien
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)endian.h    8.1 (Berkeley) 6/10/93
+ * $NetBSD: endian.h,v 1.7 1999/08/21 05:53:51 simonb Exp $
+ * $FreeBSD$
+ */
+/*
+ * Portions copyright (c) 2017, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef _MACHINE_ENDIAN_H_
+#define        _MACHINE_ENDIAN_H_
+
+#include <sys/_types.h>
+
+/*
+ * Definitions for byte order, according to byte significance from low
+ * address to high.
+ */
+#define        _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
+#define        _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
+#define        _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
+
+#define        _BYTE_ORDER     _LITTLE_ENDIAN
+
+#if __BSD_VISIBLE
+#define        LITTLE_ENDIAN   _LITTLE_ENDIAN
+#define        BIG_ENDIAN      _BIG_ENDIAN
+#define        PDP_ENDIAN      _PDP_ENDIAN
+#define        BYTE_ORDER      _BYTE_ORDER
+#endif
+
+#define        _QUAD_HIGHWORD  1
+#define        _QUAD_LOWWORD 0
+#define        __ntohl(x)        (__bswap32(x))
+#define        __ntohs(x)        (__bswap16(x))
+#define        __htonl(x)        (__bswap32(x))
+#define        __htons(x)        (__bswap16(x))
+
+#ifdef AARCH32
+static __inline __uint64_t
+__bswap64(__uint64_t _x)
+{
+
+       return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) |
+           ((_x >> 8) & 0xff000000) | ((_x << 8) & ((__uint64_t)0xff << 32)) |
+           ((_x << 24) & ((__uint64_t)0xff << 40)) |
+           ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56)));
+}
+
+static __inline __uint32_t
+__bswap32_var(__uint32_t v)
+{
+       __uint32_t t1;
+
+       __asm __volatile("eor %1, %0, %0, ror #16\n"
+                       "bic %1, %1, #0x00ff0000\n"
+                       "mov %0, %0, ror #8\n"
+                       "eor %0, %0, %1, lsr #8\n"
+                        : "+r" (v), "=r" (t1));
+
+       return (v);
+}
+
+static __inline __uint16_t
+__bswap16_var(__uint16_t v)
+{
+       __uint32_t ret = v & 0xffff;
+
+       __asm __volatile(
+           "mov    %0, %0, ror #8\n"
+           "orr    %0, %0, %0, lsr #16\n"
+           "bic    %0, %0, %0, lsl #16"
+           : "+r" (ret));
+
+       return ((__uint16_t)ret);
+}
+#elif defined AARCH64
+static __inline __uint64_t
+__bswap64(__uint64_t x)
+{
+       __uint64_t ret;
+
+       __asm __volatile("rev %0, %1\n"
+                        : "=&r" (ret), "+r" (x));
+       
+       return (ret);
+}
+
+static __inline __uint32_t
+__bswap32_var(__uint32_t v)
+{
+       __uint32_t ret;
+
+       __asm __volatile("rev32 %x0, %x1\n"
+                        : "=&r" (ret), "+r" (v));
+       
+       return (ret);
+}
+
+static __inline __uint16_t
+__bswap16_var(__uint16_t v)
+{
+       __uint32_t ret;
+
+       __asm __volatile("rev16 %w0, %w1\n"
+                        : "=&r" (ret), "+r" (v));
+
+       return ((__uint16_t)ret);
+}              
+#else
+#error "Only AArch32 or AArch64 supported"
+#endif /* AARCH32 */
+
+#ifdef __OPTIMIZE__
+
+#define        __bswap32_constant(x)   \
+    ((((x) & 0xff000000U) >> 24) |     \
+     (((x) & 0x00ff0000U) >>  8) |     \
+     (((x) & 0x0000ff00U) <<  8) |     \
+     (((x) & 0x000000ffU) << 24))
+
+#define        __bswap16_constant(x)   \
+    ((((x) & 0xff00) >> 8) |           \
+     (((x) & 0x00ff) << 8))
+
+#define        __bswap16(x)    \
+    ((__uint16_t)(__builtin_constant_p(x) ?    \
+     __bswap16_constant(x) :                   \
+     __bswap16_var(x)))
+
+#define        __bswap32(x)    \
+    ((__uint32_t)(__builtin_constant_p(x) ?    \
+     __bswap32_constant(x) :                   \
+     __bswap32_var(x)))
+
+#else
+#define        __bswap16(x)    __bswap16_var(x)
+#define        __bswap32(x)    __bswap32_var(x)
+
+#endif /* __OPTIMIZE__ */
+#endif /* !_MACHINE_ENDIAN_H_ */
diff --git a/include/lib/libc/stdbool.h b/include/lib/libc/stdbool.h
new file mode 100644 (file)
index 0000000..e39aef7
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef STDBOOL_H
+#define STDBOOL_H
+
+#define bool   _Bool
+
+#define true   1
+#define false  0
+
+#define __bool_true_false_are_defined  1
+
+#endif /* STDBOOL_H */
diff --git a/include/lib/libc/stddef.h b/include/lib/libc/stddef.h
new file mode 100644 (file)
index 0000000..ea88214
--- /dev/null
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)stddef.h    8.1 (Berkeley) 6/2/93
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _STDDEF_H_
+#define _STDDEF_H_
+
+#include <sys/cdefs.h>
+#include <sys/_null.h>
+#include <sys/_types.h>
+
+typedef        __ptrdiff_t     ptrdiff_t;
+
+#if __BSD_VISIBLE
+#ifndef _RUNE_T_DECLARED
+typedef        __rune_t        rune_t;
+#define        _RUNE_T_DECLARED
+#endif
+#endif
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+#ifndef        __cplusplus
+#ifndef _WCHAR_T_DECLARED
+typedef        __wchar_t       wchar_t;
+#define        _WCHAR_T_DECLARED
+#endif
+#endif
+
+#define        offsetof(type, member)  __offsetof(type, member)
+
+#endif /* _STDDEF_H_ */
diff --git a/include/lib/libc/stdio.h b/include/lib/libc/stdio.h
new file mode 100644 (file)
index 0000000..57e5c7f
--- /dev/null
@@ -0,0 +1,78 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)stdio.h     8.5 (Berkeley) 4/29/95
+ * $FreeBSD$
+ */
+
+/*
+ * Portions copyright (c) 2013-2014, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+
+#ifndef        _STDIO_H_
+#define        _STDIO_H_
+
+#include <sys/cdefs.h>
+#include <sys/_null.h>
+#include <sys/_types.h>
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+#ifndef _SSIZE_T_DECLARED
+#define        _SSIZE_T_DECLARED
+typedef        __ssize_t       ssize_t;
+#endif
+
+#define        EOF     (-1)
+
+int     printf(const char * __restrict, ...) __printflike(1, 2);
+int     putchar(int);
+int     puts(const char *);
+int     sprintf(char * __restrict, const char * __restrict, ...)
+       __printflike(2, 3);
+int     vsprintf(char * __restrict, const char * __restrict,
+          __va_list) __printflike(2, 0);
+
+int     sscanf(const char *__restrict, char const *__restrict, ...);
+
+#if __ISO_C_VISIBLE >= 1999
+int     snprintf(char * __restrict, size_t, const char * __restrict,
+          ...) __printflike(3, 4);
+int     vsnprintf(char * __restrict, size_t, const char * __restrict,
+          __va_list) __printflike(3, 0);
+#endif
+
+#endif /* !_STDIO_H_ */
diff --git a/include/lib/libc/stdlib.h b/include/lib/libc/stdlib.h
new file mode 100644 (file)
index 0000000..b1ac1bf
--- /dev/null
@@ -0,0 +1,313 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)stdlib.h    8.5 (Berkeley) 5/19/95
+ * $FreeBSD$
+ */
+
+#ifndef _STDLIB_H_
+#define        _STDLIB_H_
+
+#include <sys/cdefs.h>
+#include <sys/_null.h>
+#include <sys/_types.h>
+
+#if __BSD_VISIBLE
+#ifndef _RUNE_T_DECLARED
+typedef        __rune_t        rune_t;
+#define        _RUNE_T_DECLARED
+#endif
+#endif
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+typedef struct {
+       int     quot;           /* quotient */
+       int     rem;            /* remainder */
+} div_t;
+
+typedef struct {
+       long    quot;
+       long    rem;
+} ldiv_t;
+
+#define        EXIT_FAILURE    1
+#define        EXIT_SUCCESS    0
+
+#define        RAND_MAX        0x7ffffffd
+
+__BEGIN_DECLS
+#ifdef _XLOCALE_H_
+#include <xlocale/_stdlib.h>
+#endif
+extern int __mb_cur_max;
+extern int ___mb_cur_max(void);
+#define        MB_CUR_MAX      (___mb_cur_max())
+
+_Noreturn void  abort(void);
+int     abs(int) __pure2;
+int     atexit(void (*)(void));
+double  atof(const char *);
+int     atoi(const char *);
+long    atol(const char *);
+void   *bsearch(const void *, const void *, size_t,
+           size_t, int (*)(const void *, const void *));
+void   *calloc(size_t, size_t) __malloc_like;
+div_t   div(int, int) __pure2;
+_Noreturn void  exit(int);
+void    free(void *);
+char   *getenv(const char *);
+long    labs(long) __pure2;
+ldiv_t  ldiv(long, long) __pure2;
+void   *malloc(size_t) __malloc_like;
+int     mblen(const char *, size_t);
+void    qsort(void *, size_t, size_t,
+           int (*)(const void *, const void *));
+int     rand(void);
+void   *realloc(void *, size_t);
+void    srand(unsigned);
+double  strtod(const char *__restrict, char **__restrict);
+float   strtof(const char *__restrict, char **__restrict);
+long    strtol(const char *__restrict, char **__restrict, int);
+long double
+        strtold(const char *__restrict, char **__restrict);
+unsigned long
+        strtoul(const char *__restrict, char **__restrict, int);
+int     system(const char *);
+
+/*
+ * Functions added in C99 which we make conditionally available in the
+ * BSD^C89 namespace if the compiler supports `long long'.
+ * The #if test is more complicated than it ought to be because
+ * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
+ * is not supported in the compilation environment (which therefore means
+ * that it can't really be ISO C99).
+ *
+ * (The only other extension made by C99 in thie header is _Exit().)
+ */
+#if __ISO_C_VISIBLE >= 1999
+#ifdef __LONG_LONG_SUPPORTED
+/* LONGLONG */
+typedef struct {
+       long long quot;
+       long long rem;
+} lldiv_t;
+
+/* LONGLONG */
+long long
+        atoll(const char *);
+/* LONGLONG */
+long long
+        llabs(long long) __pure2;
+/* LONGLONG */
+lldiv_t         lldiv(long long, long long) __pure2;
+/* LONGLONG */
+long long
+        strtoll(const char *__restrict, char **__restrict, int);
+/* LONGLONG */
+unsigned long long
+        strtoull(const char *__restrict, char **__restrict, int);
+#endif /* __LONG_LONG_SUPPORTED */
+
+_Noreturn void  _Exit(int);
+#endif /* __ISO_C_VISIBLE >= 1999 */
+
+/*
+ * If we're in a mode greater than C99, expose C11 functions.
+ */
+#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
+void *aligned_alloc(size_t, size_t) __malloc_like;
+int    at_quick_exit(void (*)(void));
+_Noreturn void
+       quick_exit(int);
+#endif /* __ISO_C_VISIBLE >= 2011 */
+/*
+ * Extensions made by POSIX relative to C.
+ */
+#if __POSIX_VISIBLE >= 199506 || __XSI_VISIBLE
+char   *realpath(const char *__restrict, char *__restrict);
+#endif
+#if __POSIX_VISIBLE >= 199506
+int     rand_r(unsigned *);                    /* (TSF) */
+#endif
+#if __POSIX_VISIBLE >= 200112
+int     posix_memalign(void **, size_t, size_t); /* (ADV) */
+int     setenv(const char *, const char *, int);
+int     unsetenv(const char *);
+#endif
+
+#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
+int     getsubopt(char **, char *const *, char **);
+#ifndef _MKDTEMP_DECLARED
+char   *mkdtemp(char *);
+#define        _MKDTEMP_DECLARED
+#endif
+#ifndef _MKSTEMP_DECLARED
+int     mkstemp(char *);
+#define        _MKSTEMP_DECLARED
+#endif
+#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */
+
+/*
+ * The only changes to the XSI namespace in revision 6 were the deletion
+ * of the ttyslot() and valloc() functions, which FreeBSD never declared
+ * in this header.  For revision 7, ecvt(), fcvt(), and gcvt(), which
+ * FreeBSD also does not have, and mktemp(), are to be deleted.
+ */
+#if __XSI_VISIBLE
+/* XXX XSI requires pollution from <sys/wait.h> here.  We'd rather not. */
+long    a64l(const char *);
+double  drand48(void);
+/* char        *ecvt(double, int, int * __restrict, int * __restrict); */
+double  erand48(unsigned short[3]);
+/* char        *fcvt(double, int, int * __restrict, int * __restrict); */
+/* char        *gcvt(double, int, int * __restrict, int * __restrict); */
+int     grantpt(int);
+char   *initstate(unsigned long /* XSI requires u_int */, char *, long);
+long    jrand48(unsigned short[3]);
+char   *l64a(long);
+void    lcong48(unsigned short[7]);
+long    lrand48(void);
+#if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600)
+char   *mktemp(char *);
+#define        _MKTEMP_DECLARED
+#endif
+long    mrand48(void);
+long    nrand48(unsigned short[3]);
+int     posix_openpt(int);
+char   *ptsname(int);
+int     putenv(char *);
+long    random(void);
+unsigned short
+       *seed48(unsigned short[3]);
+#ifndef _SETKEY_DECLARED
+int     setkey(const char *);
+#define        _SETKEY_DECLARED
+#endif
+char   *setstate(/* const */ char *);
+void    srand48(long);
+void    srandom(unsigned long);
+int     unlockpt(int);
+#endif /* __XSI_VISIBLE */
+
+#if __BSD_VISIBLE
+extern const char *malloc_conf;
+extern void (*malloc_message)(void *, const char *);
+
+/*
+ * The alloca() function can't be implemented in C, and on some
+ * platforms it can't be implemented at all as a callable function.
+ * The GNU C compiler provides a built-in alloca() which we can use;
+ * in all other cases, provide a prototype, mainly to pacify various
+ * incarnations of lint.  On platforms where alloca() is not in libc,
+ * programs which use it will fail to link when compiled with non-GNU
+ * compilers.
+ */
+#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
+#undef  alloca /* some GNU bits try to get cute and define this on their own */
+#define alloca(sz) __builtin_alloca(sz)
+#elif defined(lint)
+void   *alloca(size_t);
+#endif
+
+void    abort2(const char *, int, void **) __dead2;
+__uint32_t
+        arc4random(void);
+void    arc4random_addrandom(unsigned char *, int);
+void    arc4random_buf(void *, size_t);
+void    arc4random_stir(void);
+__uint32_t
+        arc4random_uniform(__uint32_t);
+#ifdef __BLOCKS__
+int     atexit_b(void (^)(void));
+void   *bsearch_b(const void *, const void *, size_t,
+           size_t, int (^)(const void *, const void *));
+#endif
+char   *getbsize(int *, long *);
+                                       /* getcap(3) functions */
+char   *cgetcap(char *, const char *, int);
+int     cgetclose(void);
+int     cgetent(char **, char **, const char *);
+int     cgetfirst(char **, char **);
+int     cgetmatch(const char *, const char *);
+int     cgetnext(char **, char **);
+int     cgetnum(char *, const char *, long *);
+int     cgetset(const char *);
+int     cgetstr(char *, const char *, char **);
+int     cgetustr(char *, const char *, char **);
+
+int     daemon(int, int);
+char   *devname(__dev_t, __mode_t);
+char   *devname_r(__dev_t, __mode_t, char *, int);
+char   *fdevname(int);
+char   *fdevname_r(int, char *, int);
+int     getloadavg(double [], int);
+const char *
+        getprogname(void);
+
+int     heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
+#ifdef __BLOCKS__
+int     heapsort_b(void *, size_t, size_t, int (^)(const void *, const void *));
+void    qsort_b(void *, size_t, size_t,
+           int (^)(const void *, const void *));
+#endif
+int     l64a_r(long, char *, int);
+int     mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
+#ifdef __BLOCKS__
+int     mergesort_b(void *, size_t, size_t, int (^)(const void *, const void *));
+#endif
+int     mkostemp(char *, int);
+int     mkostemps(char *, int, int);
+void    qsort_r(void *, size_t, size_t, void *,
+           int (*)(void *, const void *, const void *));
+int     radixsort(const unsigned char **, int, const unsigned char *,
+           unsigned);
+void    *reallocf(void *, size_t);
+int     rpmatch(const char *);
+void    setprogname(const char *);
+int     sradixsort(const unsigned char **, int, const unsigned char *,
+           unsigned);
+void    sranddev(void);
+void    srandomdev(void);
+long long
+       strtonum(const char *, long long, long long, const char **);
+
+/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
+__int64_t
+        strtoq(const char *, char **, int);
+__uint64_t
+        strtouq(const char *, char **, int);
+
+extern char *suboptarg;                        /* getsubopt(3) external variable */
+#endif /* __BSD_VISIBLE */
+__END_DECLS
+
+#endif /* !_STDLIB_H_ */
diff --git a/include/lib/libc/string.h b/include/lib/libc/string.h
new file mode 100644 (file)
index 0000000..56677b2
--- /dev/null
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)string.h    8.1 (Berkeley) 6/2/93
+ * $FreeBSD$
+ */
+
+/*
+ * Portions copyright (c) 2013-2017, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef _STRING_H_
+#define        _STRING_H_
+
+#include <sys/cdefs.h>
+#include <sys/_null.h>
+#include <sys/_types.h>
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+__BEGIN_DECLS
+
+void   *memchr(const void *, int, size_t) __pure;
+int     memcmp(const void *, const void *, size_t) __pure;
+void   *memcpy(void * __restrict, const void * __restrict, size_t);
+void   *memcpy16(void * __restrict, const void * __restrict, size_t);
+void   *memmove(void *, const void *, size_t);
+void   *memset(void *, int, size_t);
+
+char   *strchr(const char *, int) __pure;
+int     strcmp(const char *, const char *) __pure;
+size_t  strlen(const char *) __pure;
+int     strncmp(const char *, const char *, size_t) __pure;
+size_t  strnlen(const char *, size_t) __pure;
+int     strcasecmp(const char *, const char *);
+int     timingsafe_bcmp(const void *, const void *, size_t);
+
+__END_DECLS
+
+#endif /* _STRING_H_ */
diff --git a/include/lib/libc/strings.h b/include/lib/libc/strings.h
new file mode 100644 (file)
index 0000000..2210df0
--- /dev/null
@@ -0,0 +1,71 @@
+/*-
+ * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _STRINGS_H_
+#define        _STRINGS_H_
+
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+__BEGIN_DECLS
+#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112
+int     bcmp(const void *, const void *, size_t) __pure;       /* LEGACY */
+void    bcopy(const void *, void *, size_t);                   /* LEGACY */
+void    bzero(void *, size_t);                                 /* LEGACY */
+#endif
+#if __BSD_VISIBLE
+void    explicit_bzero(void *, size_t);
+#endif
+#if __XSI_VISIBLE
+int     ffs(int) __pure2;
+#endif
+#if __BSD_VISIBLE
+int     ffsl(long) __pure2;
+int     ffsll(long long) __pure2;
+int     fls(int) __pure2;
+int     flsl(long) __pure2;
+int     flsll(long long) __pure2;
+#endif
+#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112
+char   *index(const char *, int) __pure;                       /* LEGACY */
+char   *rindex(const char *, int) __pure;                      /* LEGACY */
+#endif
+int     strcasecmp(const char *, const char *) __pure;
+int     strncasecmp(const char *, const char *, size_t) __pure;
+
+#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
+#include <xlocale/_strings.h>
+#endif
+__END_DECLS
+
+#endif /* _STRINGS_H_ */
diff --git a/include/lib/libc/sys/_null.h b/include/lib/libc/sys/_null.h
new file mode 100644 (file)
index 0000000..92706c6
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * Copyright (c) 2003 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef NULL
+
+#if !defined(__cplusplus)
+#define        NULL    ((void *)0)
+#else
+#if __cplusplus >= 201103L
+#define        NULL    nullptr
+#elif defined(__GNUG__) && defined(__GNUC__) && __GNUC__ >= 4
+#define        NULL    __null
+#else
+#if defined(__LP64__)
+#define        NULL    (0L)
+#else
+#define        NULL    0
+#endif /* __LP64__ */
+#endif /* __GNUG__ */
+#endif /* !__cplusplus */
+
+#endif
diff --git a/include/lib/libc/sys/_stdint.h b/include/lib/libc/sys/_stdint.h
new file mode 100644 (file)
index 0000000..d0f9249
--- /dev/null
@@ -0,0 +1,82 @@
+/*-
+ * Copyright (c) 2011 David E. O'Brien <obrien@FreeBSD.org>
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS__STDINT_H_
+#define _SYS__STDINT_H_
+
+#ifndef _INT8_T_DECLARED
+typedef        __int8_t                int8_t;
+#define        _INT8_T_DECLARED
+#endif
+
+#ifndef _INT16_T_DECLARED
+typedef        __int16_t               int16_t;
+#define        _INT16_T_DECLARED
+#endif
+
+#ifndef _INT32_T_DECLARED
+typedef        __int32_t               int32_t;
+#define        _INT32_T_DECLARED
+#endif
+
+#ifndef _INT64_T_DECLARED
+typedef        __int64_t               int64_t;
+#define        _INT64_T_DECLARED
+#endif
+
+#ifndef _UINT8_T_DECLARED
+typedef        __uint8_t               uint8_t;
+#define        _UINT8_T_DECLARED
+#endif
+
+#ifndef _UINT16_T_DECLARED
+typedef        __uint16_t              uint16_t;
+#define        _UINT16_T_DECLARED
+#endif
+
+#ifndef _UINT32_T_DECLARED
+typedef        __uint32_t              uint32_t;
+#define        _UINT32_T_DECLARED
+#endif
+
+#ifndef _UINT64_T_DECLARED
+typedef        __uint64_t              uint64_t;
+#define        _UINT64_T_DECLARED
+#endif
+
+#ifndef _INTPTR_T_DECLARED
+typedef        __intptr_t              intptr_t;
+#define        _INTPTR_T_DECLARED
+#endif
+#ifndef _UINTPTR_T_DECLARED
+typedef        __uintptr_t             uintptr_t;
+#define        _UINTPTR_T_DECLARED
+#endif
+
+#endif /* !_SYS__STDINT_H_ */
diff --git a/include/lib/libc/sys/_timespec.h b/include/lib/libc/sys/_timespec.h
new file mode 100644 (file)
index 0000000..d51559c
--- /dev/null
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)time.h      8.5 (Berkeley) 5/4/95
+ * from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
+ *     $FreeBSD$
+ */
+
+#ifndef _SYS__TIMESPEC_H_
+#define        _SYS__TIMESPEC_H_
+
+#include <sys/_types.h>
+
+#ifndef _TIME_T_DECLARED
+typedef        __time_t        time_t;
+#define        _TIME_T_DECLARED
+#endif
+
+struct timespec {
+       time_t  tv_sec;         /* seconds */
+       long    tv_nsec;        /* and nanoseconds */
+};
+
+#endif /* !_SYS__TIMESPEC_H_ */
diff --git a/include/lib/libc/sys/_types.h b/include/lib/libc/sys/_types.h
new file mode 100644 (file)
index 0000000..c59afd3
--- /dev/null
@@ -0,0 +1,106 @@
+/*-
+ * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS__TYPES_H_
+#define _SYS__TYPES_H_
+
+#include <sys/cdefs.h>
+#include <machine/_types.h>
+
+/*
+ * Standard type definitions.
+ */
+typedef        __uint32_t      __blksize_t;    /* file block size */
+typedef        __int64_t       __blkcnt_t;     /* file block count */
+typedef        __int32_t       __clockid_t;    /* clock_gettime()... */
+typedef        __uint64_t      __cap_rights_t; /* capability rights */
+typedef        __uint32_t      __fflags_t;     /* file flags */
+typedef        __uint64_t      __fsblkcnt_t;
+typedef        __uint64_t      __fsfilcnt_t;
+typedef        __uint32_t      __gid_t;
+typedef        __int64_t       __id_t;         /* can hold a gid_t, pid_t, or uid_t */
+typedef        __uint32_t      __ino_t;        /* inode number */
+typedef        long            __key_t;        /* IPC key (for Sys V IPC) */
+typedef        __int32_t       __lwpid_t;      /* Thread ID (a.k.a. LWP) */
+typedef        __uint16_t      __mode_t;       /* permissions */
+typedef        int             __accmode_t;    /* access permissions */
+typedef        int             __nl_item;
+typedef        __uint16_t      __nlink_t;      /* link count */
+typedef        __int64_t       __off_t;        /* file offset */
+typedef        __int32_t       __pid_t;        /* process [group] */
+typedef        __int64_t       __rlim_t;       /* resource limit - intentionally */
+                                       /* signed, because of legacy code */
+                                       /* that uses -1 for RLIM_INFINITY */
+typedef        __uint8_t       __sa_family_t;
+typedef        __uint32_t      __socklen_t;
+typedef        long            __suseconds_t;  /* microseconds (signed) */
+typedef        struct __timer  *__timer_t;     /* timer_gettime()... */
+typedef        struct __mq     *__mqd_t;       /* mq_open()... */
+typedef        __uint32_t      __uid_t;
+typedef        unsigned int    __useconds_t;   /* microseconds (unsigned) */
+typedef        int             __cpuwhich_t;   /* which parameter for cpuset. */
+typedef        int             __cpulevel_t;   /* level parameter for cpuset. */
+typedef int            __cpusetid_t;   /* cpuset identifier. */
+
+/*
+ * Unusual type definitions.
+ */
+/*
+ * rune_t is declared to be an ``int'' instead of the more natural
+ * ``unsigned long'' or ``long''.  Two things are happening here.  It is not
+ * unsigned so that EOF (-1) can be naturally assigned to it and used.  Also,
+ * it looks like 10646 will be a 31 bit standard.  This means that if your
+ * ints cannot hold 32 bits, you will be in trouble.  The reason an int was
+ * chosen over a long is that the is*() and to*() routines take ints (says
+ * ANSI C), but they use __ct_rune_t instead of int.
+ *
+ * NOTE: rune_t is not covered by ANSI nor other standards, and should not
+ * be instantiated outside of lib/libc/locale.  Use wchar_t.  wchar_t and
+ * rune_t must be the same type.  Also, wint_t must be no narrower than
+ * wchar_t, and should be able to hold all members of the largest
+ * character set plus one extra value (WEOF), and must be at least 16 bits.
+ */
+typedef        int             __ct_rune_t;    /* arg type for ctype funcs */
+typedef        __ct_rune_t     __rune_t;       /* rune_t (see above) */
+typedef        __ct_rune_t     __wchar_t;      /* wchar_t (see above) */
+typedef        __ct_rune_t     __wint_t;       /* wint_t (see above) */
+
+typedef        __uint32_t      __dev_t;        /* device number */
+
+typedef        __uint32_t      __fixpt_t;      /* fixed point number */
+
+/*
+ * mbstate_t is an opaque object to keep conversion state during multibyte
+ * stream conversions.
+ */
+typedef union {
+       char            __mbstate8[128];
+       __int64_t       _mbstateL;      /* for alignment */
+} __mbstate_t;
+
+#endif /* !_SYS__TYPES_H_ */
diff --git a/include/lib/libc/sys/cdefs.h b/include/lib/libc/sys/cdefs.h
new file mode 100644 (file)
index 0000000..70c09fd
--- /dev/null
@@ -0,0 +1,688 @@
+/*-
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Berkeley Software Design, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)cdefs.h     8.8 (Berkeley) 1/9/95
+ * $FreeBSD$
+ */
+
+#ifndef        _SYS_CDEFS_H_
+#define        _SYS_CDEFS_H_
+
+#if defined(__cplusplus)
+#define        __BEGIN_DECLS   extern "C" {
+#define        __END_DECLS     }
+#else
+#define        __BEGIN_DECLS
+#define        __END_DECLS
+#endif
+
+/*
+ * This code has been put in place to help reduce the addition of
+ * compiler specific defines in FreeBSD code.  It helps to aid in
+ * having a compiler-agnostic source tree.
+ */
+
+#if defined(__GNUC__) || defined(__INTEL_COMPILER)
+
+#if __GNUC__ >= 3 || defined(__INTEL_COMPILER)
+#define __GNUCLIKE_ASM 3
+#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
+#else
+#define __GNUCLIKE_ASM 2
+#endif
+#define __GNUCLIKE___TYPEOF 1
+#define __GNUCLIKE___OFFSETOF 1
+#define __GNUCLIKE___SECTION 1
+
+#ifndef __INTEL_COMPILER
+# define __GNUCLIKE_CTOR_SECTION_HANDLING 1
+#endif
+
+#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
+# if defined(__INTEL_COMPILER) && defined(__cplusplus) \
+    && __INTEL_COMPILER < 800
+#  undef __GNUCLIKE_BUILTIN_CONSTANT_P
+# endif
+
+#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3) && !defined(__INTEL_COMPILER)
+# define __GNUCLIKE_BUILTIN_VARARGS 1
+# define __GNUCLIKE_BUILTIN_STDARG 1
+# define __GNUCLIKE_BUILTIN_VAALIST 1
+#endif
+
+#if defined(__GNUC__)
+# define __GNUC_VA_LIST_COMPATIBILITY 1
+#endif
+
+#ifndef __INTEL_COMPILER
+# define __GNUCLIKE_BUILTIN_NEXT_ARG 1
+# define __GNUCLIKE_MATH_BUILTIN_RELOPS
+#endif
+
+#define __GNUCLIKE_BUILTIN_MEMCPY 1
+
+/* XXX: if __GNUC__ >= 2: not tested everywhere originally, where replaced */
+#define __CC_SUPPORTS_INLINE 1
+#define __CC_SUPPORTS___INLINE 1
+#define __CC_SUPPORTS___INLINE__ 1
+
+#define __CC_SUPPORTS___FUNC__ 1
+#define __CC_SUPPORTS_WARNING 1
+
+#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */
+
+#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
+
+#endif /* __GNUC__ || __INTEL_COMPILER */
+
+/*
+ * Macro to test if we're using a specific version of gcc or later.
+ */
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
+#define        __GNUC_PREREQ__(ma, mi) \
+       (__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))
+#else
+#define        __GNUC_PREREQ__(ma, mi) 0
+#endif
+
+/*
+ * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
+ * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
+ * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
+ * mode -- there must be no spaces between its arguments, and for nested
+ * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
+ * concatenate double-quoted strings produced by the __STRING macro, but
+ * this only works with ANSI C.
+ *
+ * __XSTRING is like __STRING, but it expands any macros in its argument
+ * first.  It is only available with ANSI C.
+ */
+#if defined(__STDC__) || defined(__cplusplus)
+#define        __P(protos)     protos          /* full-blown ANSI C */
+#define        __CONCAT1(x,y)  x ## y
+#define        __CONCAT(x,y)   __CONCAT1(x,y)
+#define        __STRING(x)     #x              /* stringify without expanding x */
+#define        __XSTRING(x)    __STRING(x)     /* expand x, then stringify */
+
+#define        __const         const           /* define reserved names to standard */
+#define        __signed        signed
+#define        __volatile      volatile
+#if defined(__cplusplus)
+#define        __inline        inline          /* convert to C++ keyword */
+#else
+#if !(defined(__CC_SUPPORTS___INLINE))
+#define        __inline                        /* delete GCC keyword */
+#endif /* ! __CC_SUPPORTS___INLINE */
+#endif /* !__cplusplus */
+
+#else  /* !(__STDC__ || __cplusplus) */
+#define        __P(protos)     ()              /* traditional C preprocessor */
+#define        __CONCAT(x,y)   x/**/y
+#define        __STRING(x)     "x"
+
+#if !defined(__CC_SUPPORTS___INLINE)
+#define        __const                         /* delete pseudo-ANSI C keywords */
+#define        __inline
+#define        __signed
+#define        __volatile
+/*
+ * In non-ANSI C environments, new programs will want ANSI-only C keywords
+ * deleted from the program and old programs will want them left alone.
+ * When using a compiler other than gcc, programs using the ANSI C keywords
+ * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
+ * When using "gcc -traditional", we assume that this is the intent; if
+ * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
+ */
+#ifndef        NO_ANSI_KEYWORDS
+#define        const                           /* delete ANSI C keywords */
+#define        inline
+#define        signed
+#define        volatile
+#endif /* !NO_ANSI_KEYWORDS */
+#endif /* !__CC_SUPPORTS___INLINE */
+#endif /* !(__STDC__ || __cplusplus) */
+
+/*
+ * Compiler-dependent macros to help declare dead (non-returning) and
+ * pure (no side effects) functions, and unused variables.  They are
+ * null except for versions of gcc that are known to support the features
+ * properly (old versions of gcc-2 supported the dead and pure features
+ * in a different (wrong) way).  If we do not provide an implementation
+ * for a given compiler, let the compile fail if it is told to use
+ * a feature that we cannot live without.
+ */
+#ifdef lint
+#define        __dead2
+#define        __pure2
+#define        __unused
+#define        __packed
+#define        __aligned(x)
+#define        __section(x)
+#else
+#if !__GNUC_PREREQ__(2, 5) && !defined(__INTEL_COMPILER)
+#define        __dead2
+#define        __pure2
+#define        __unused
+#endif
+#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 && !defined(__INTEL_COMPILER)
+#define        __dead2         __attribute__((__noreturn__))
+#define        __pure2         __attribute__((__const__))
+#define        __unused
+/* XXX Find out what to do for __packed, __aligned and __section */
+#endif
+#if __GNUC_PREREQ__(2, 7)
+#define        __dead2         __attribute__((__noreturn__))
+#define        __pure2         __attribute__((__const__))
+#define        __unused        __attribute__((__unused__))
+#define        __used          __attribute__((__used__))
+#define        __packed        __attribute__((__packed__))
+#define        __aligned(x)    __attribute__((__aligned__(x)))
+#define        __section(x)    __attribute__((__section__(x)))
+#endif
+#if defined(__INTEL_COMPILER)
+#define __dead2                __attribute__((__noreturn__))
+#define __pure2                __attribute__((__const__))
+#define __unused       __attribute__((__unused__))
+#define __used         __attribute__((__used__))
+#define __packed       __attribute__((__packed__))
+#define __aligned(x)   __attribute__((__aligned__(x)))
+#define __section(x)   __attribute__((__section__(x)))
+#endif
+#endif
+
+#if !__GNUC_PREREQ__(2, 95)
+#define        __alignof(x)    __offsetof(struct { char __a; x __b; }, __b)
+#endif
+
+/*
+ * Keywords added in C11.
+ */
+#if defined(__cplusplus) && __cplusplus >= 201103L
+#define        _Alignas(e)             alignas(e)
+#define        _Alignof(e)             alignof(e)
+#define        _Noreturn               [[noreturn]]
+#define        _Static_assert(e, s)    static_assert(e, s)
+/* FIXME: change this to thread_local when clang in base supports it */
+#define        _Thread_local           __thread
+#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+/* Do nothing.  They are language keywords. */
+#else
+/* Not supported.  Implement them using our versions. */
+#define        _Alignas(x)             __aligned(x)
+#define        _Alignof(x)             __alignof(x)
+#define        _Noreturn               __dead2
+#define        _Thread_local           __thread
+#ifdef __COUNTER__
+#define        _Static_assert(x, y)    __Static_assert(x, __COUNTER__)
+#define        __Static_assert(x, y)   ___Static_assert(x, y)
+#define        ___Static_assert(x, y)  typedef char __assert_ ## y[(x) ? 1 : -1]
+#else
+#define        _Static_assert(x, y)    struct __hack
+#endif
+#endif
+
+/*
+ * Emulation of C11 _Generic().  Unlike the previously defined C11
+ * keywords, it is not possible to implement this using exactly the same
+ * syntax.  Therefore implement something similar under the name
+ * __generic().  Unlike _Generic(), this macro can only distinguish
+ * between a single type, so it requires nested invocations to
+ * distinguish multiple cases.
+ */
+
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+#define        __generic(expr, t, yes, no)                                     \
+       _Generic(expr, t: yes, default: no)
+#elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus)
+#define        __generic(expr, t, yes, no)                                     \
+       __builtin_choose_expr(                                          \
+           __builtin_types_compatible_p(__typeof(expr), t), yes, no)
+#endif
+
+#if __GNUC_PREREQ__(2, 96)
+#define        __malloc_like   __attribute__((__malloc__))
+#define        __pure          __attribute__((__pure__))
+#else
+#define        __malloc_like
+#define        __pure
+#endif
+
+#if __GNUC_PREREQ__(3, 1) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800)
+#define        __always_inline __attribute__((__always_inline__))
+#else
+#define        __always_inline
+#endif
+
+#if __GNUC_PREREQ__(3, 1)
+#define        __noinline      __attribute__ ((__noinline__))
+#define        __deprecated    __attribute__ ((__deprecated__))
+#else
+#define        __noinline
+#define        __deprecated
+#endif
+
+#if __GNUC_PREREQ__(3, 3)
+#define __nonnull(x)   __attribute__((__nonnull__(x)))
+#else
+#define __nonnull(x)
+#endif
+
+#if __GNUC_PREREQ__(3, 4)
+#define        __fastcall      __attribute__((__fastcall__))
+#else
+#define        __fastcall
+#endif
+
+#if __GNUC_PREREQ__(4, 1)
+#define        __returns_twice __attribute__((__returns_twice__))
+#else
+#define        __returns_twice
+#endif
+
+/* XXX: should use `#if __STDC_VERSION__ < 199901'. */
+#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER)
+#define        __func__        NULL
+#endif
+
+#if (defined(__INTEL_COMPILER) || (defined(__GNUC__) && __GNUC__ >= 2)) && !defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901
+#define        __LONG_LONG_SUPPORTED
+#endif
+
+/* C++11 exposes a load of C99 stuff */
+#if defined(__cplusplus) && __cplusplus >= 201103L
+#define        __LONG_LONG_SUPPORTED
+#ifndef        __STDC_LIMIT_MACROS
+#define        __STDC_LIMIT_MACROS
+#endif
+#ifndef        __STDC_CONSTANT_MACROS
+#define        __STDC_CONSTANT_MACROS
+#endif
+#endif
+
+/*
+ * GCC 2.95 provides `__restrict' as an extension to C90 to support the
+ * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as
+ * a way to define the `restrict' type qualifier without disturbing older
+ * software that is unaware of C99 keywords.
+ */
+#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95)
+#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901 || defined(lint)
+#define        __restrict
+#else
+#define        __restrict      restrict
+#endif
+#endif
+
+/*
+ * GNU C version 2.96 adds explicit branch prediction so that
+ * the CPU back-end can hint the processor and also so that
+ * code blocks can be reordered such that the predicted path
+ * sees a more linear flow, thus improving cache behavior, etc.
+ *
+ * The following two macros provide us with a way to utilize this
+ * compiler feature.  Use __predict_true() if you expect the expression
+ * to evaluate to true, and __predict_false() if you expect the
+ * expression to evaluate to false.
+ *
+ * A few notes about usage:
+ *
+ *     * Generally, __predict_false() error condition checks (unless
+ *       you have some _strong_ reason to do otherwise, in which case
+ *       document it), and/or __predict_true() `no-error' condition
+ *       checks, assuming you want to optimize for the no-error case.
+ *
+ *     * Other than that, if you don't know the likelihood of a test
+ *       succeeding from empirical or other `hard' evidence, don't
+ *       make predictions.
+ *
+ *     * These are meant to be used in places that are run `a lot'.
+ *       It is wasteful to make predictions in code that is run
+ *       seldomly (e.g. at subsystem initialization time) as the
+ *       basic block reordering that this affects can often generate
+ *       larger code.
+ */
+#if __GNUC_PREREQ__(2, 96)
+#define __predict_true(exp)     __builtin_expect((exp), 1)
+#define __predict_false(exp)    __builtin_expect((exp), 0)
+#else
+#define __predict_true(exp)     (exp)
+#define __predict_false(exp)    (exp)
+#endif
+
+#if __GNUC_PREREQ__(4, 2)
+#define        __hidden        __attribute__((__visibility__("hidden")))
+#define        __exported      __attribute__((__visibility__("default")))
+#else
+#define        __hidden
+#define        __exported
+#endif
+
+/*
+ * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h>
+ * require it.
+ */
+#if __GNUC_PREREQ__(4, 1)
+#define __offsetof(type, field)         __builtin_offsetof(type, field)
+#else
+#ifndef __cplusplus
+#define        __offsetof(type, field) \
+       ((__size_t)(__uintptr_t)((const volatile void *)&((type *)0)->field))
+#else
+#define __offsetof(type, field)                                        \
+  (__offsetof__ (reinterpret_cast <__size_t>                   \
+                 (&reinterpret_cast <const volatile char &>    \
+                  (static_cast<type *> (0)->field))))
+#endif
+#endif
+#define        __rangeof(type, start, end) \
+       (__offsetof(type, end) - __offsetof(type, start))
+
+/*
+ * Given the pointer x to the member m of the struct s, return
+ * a pointer to the containing structure.  When using GCC, we first
+ * assign pointer x to a local variable, to check that its type is
+ * compatible with member m.
+ */
+#if __GNUC_PREREQ__(3, 1)
+#define        __containerof(x, s, m) ({                                       \
+       const volatile __typeof(((s *)0)->m) *__x = (x);                \
+       __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));\
+})
+#else
+#define        __containerof(x, s, m)                                          \
+       __DEQUALIFY(s *, (const volatile char *)(x) - __offsetof(s, m))
+#endif
+
+/*
+ * Compiler-dependent macros to declare that functions take printf-like
+ * or scanf-like arguments.  They are null except for versions of gcc
+ * that are known to support the features properly (old versions of gcc-2
+ * didn't permit keeping the keywords out of the application namespace).
+ */
+#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER)
+#define        __printflike(fmtarg, firstvararg)
+#define        __scanflike(fmtarg, firstvararg)
+#define        __format_arg(fmtarg)
+#define        __strfmonlike(fmtarg, firstvararg)
+#define        __strftimelike(fmtarg, firstvararg)
+#else
+#define        __printflike(fmtarg, firstvararg) \
+           __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
+#define        __scanflike(fmtarg, firstvararg) \
+           __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
+#define        __format_arg(fmtarg)    __attribute__((__format_arg__ (fmtarg)))
+#define        __strfmonlike(fmtarg, firstvararg) \
+           __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
+#define        __strftimelike(fmtarg, firstvararg) \
+           __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
+#endif
+
+/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
+#if __FreeBSD_cc_version >= 300001 && defined(__GNUC__) && !defined(__INTEL_COMPILER)
+#define        __printf0like(fmtarg, firstvararg) \
+           __attribute__((__format__ (__printf0__, fmtarg, firstvararg)))
+#else
+#define        __printf0like(fmtarg, firstvararg)
+#endif
+
+#if defined(__GNUC__) || defined(__INTEL_COMPILER)
+#ifndef __INTEL_COMPILER
+#define        __strong_reference(sym,aliassym)        \
+       extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
+#endif
+#ifdef __STDC__
+#define        __weak_reference(sym,alias)     \
+       __asm__(".weak " #alias);       \
+       __asm__(".equ "  #alias ", " #sym)
+#define        __warn_references(sym,msg)      \
+       __asm__(".section .gnu.warning." #sym); \
+       __asm__(".asciz \"" msg "\"");  \
+       __asm__(".previous")
+#define        __sym_compat(sym,impl,verid)    \
+       __asm__(".symver " #impl ", " #sym "@" #verid)
+#define        __sym_default(sym,impl,verid)   \
+       __asm__(".symver " #impl ", " #sym "@@" #verid)
+#else
+#define        __weak_reference(sym,alias)     \
+       __asm__(".weak alias");         \
+       __asm__(".equ alias, sym")
+#define        __warn_references(sym,msg)      \
+       __asm__(".section .gnu.warning.sym"); \
+       __asm__(".asciz \"msg\"");      \
+       __asm__(".previous")
+#define        __sym_compat(sym,impl,verid)    \
+       __asm__(".symver impl, sym@verid")
+#define        __sym_default(impl,sym,verid)   \
+       __asm__(".symver impl, sym@@verid")
+#endif /* __STDC__ */
+#endif /* __GNUC__ || __INTEL_COMPILER */
+
+#define        __GLOBL1(sym)   __asm__(".globl " #sym)
+#define        __GLOBL(sym)    __GLOBL1(sym)
+
+#if defined(__GNUC__) || defined(__INTEL_COMPILER)
+#define        __IDSTRING(name,string) __asm__(".ident\t\"" string "\"")
+#else
+/*
+ * The following definition might not work well if used in header files,
+ * but it should be better than nothing.  If you want a "do nothing"
+ * version, then it should generate some harmless declaration, such as:
+ *    #define __IDSTRING(name,string)  struct __hack
+ */
+#define        __IDSTRING(name,string) static const char name[] __unused = string
+#endif
+
+/*
+ * Embed the rcs id of a source file in the resulting library.  Note that in
+ * more recent ELF binutils, we use .ident allowing the ID to be stripped.
+ * Usage:
+ *     __FBSDID("$FreeBSD$");
+ */
+#ifndef        __FBSDID
+#if !defined(lint) && !defined(STRIP_FBSDID)
+#define        __FBSDID(s)     __IDSTRING(__CONCAT(__rcsid_,__LINE__),s)
+#else
+#define        __FBSDID(s)     struct __hack
+#endif
+#endif
+
+#ifndef        __RCSID
+#ifndef        NO__RCSID
+#define        __RCSID(s)      __IDSTRING(__CONCAT(__rcsid_,__LINE__),s)
+#else
+#define        __RCSID(s)      struct __hack
+#endif
+#endif
+
+#ifndef        __RCSID_SOURCE
+#ifndef        NO__RCSID_SOURCE
+#define        __RCSID_SOURCE(s)       __IDSTRING(__CONCAT(__rcsid_source_,__LINE__),s)
+#else
+#define        __RCSID_SOURCE(s)       struct __hack
+#endif
+#endif
+
+#ifndef        __SCCSID
+#ifndef        NO__SCCSID
+#define        __SCCSID(s)     __IDSTRING(__CONCAT(__sccsid_,__LINE__),s)
+#else
+#define        __SCCSID(s)     struct __hack
+#endif
+#endif
+
+#ifndef        __COPYRIGHT
+#ifndef        NO__COPYRIGHT
+#define        __COPYRIGHT(s)  __IDSTRING(__CONCAT(__copyright_,__LINE__),s)
+#else
+#define        __COPYRIGHT(s)  struct __hack
+#endif
+#endif
+
+#ifndef        __DECONST
+#define        __DECONST(type, var)    ((type)(__uintptr_t)(const void *)(var))
+#endif
+
+#ifndef        __DEVOLATILE
+#define        __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var))
+#endif
+
+#ifndef        __DEQUALIFY
+#define        __DEQUALIFY(type, var)  ((type)(__uintptr_t)(const volatile void *)(var))
+#endif
+
+/*-
+ * The following definitions are an extension of the behavior originally
+ * implemented in <sys/_posix.h>, but with a different level of granularity.
+ * POSIX.1 requires that the macros we test be defined before any standard
+ * header file is included.
+ *
+ * Here's a quick run-down of the versions:
+ *  defined(_POSIX_SOURCE)             1003.1-1988
+ *  _POSIX_C_SOURCE == 1               1003.1-1990
+ *  _POSIX_C_SOURCE == 2               1003.2-1992 C Language Binding Option
+ *  _POSIX_C_SOURCE == 199309          1003.1b-1993
+ *  _POSIX_C_SOURCE == 199506          1003.1c-1995, 1003.1i-1995,
+ *                                     and the omnibus ISO/IEC 9945-1: 1996
+ *  _POSIX_C_SOURCE == 200112          1003.1-2001
+ *  _POSIX_C_SOURCE == 200809          1003.1-2008
+ *
+ * In addition, the X/Open Portability Guide, which is now the Single UNIX
+ * Specification, defines a feature-test macro which indicates the version of
+ * that specification, and which subsumes _POSIX_C_SOURCE.
+ *
+ * Our macros begin with two underscores to avoid namespace screwage.
+ */
+
+/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1
+#undef _POSIX_C_SOURCE         /* Probably illegal, but beyond caring now. */
+#define        _POSIX_C_SOURCE         199009
+#endif
+
+/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2
+#undef _POSIX_C_SOURCE
+#define        _POSIX_C_SOURCE         199209
+#endif
+
+/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
+#ifdef _XOPEN_SOURCE
+#if _XOPEN_SOURCE - 0 >= 700
+#define        __XSI_VISIBLE           700
+#undef _POSIX_C_SOURCE
+#define        _POSIX_C_SOURCE         200809
+#elif _XOPEN_SOURCE - 0 >= 600
+#define        __XSI_VISIBLE           600
+#undef _POSIX_C_SOURCE
+#define        _POSIX_C_SOURCE         200112
+#elif _XOPEN_SOURCE - 0 >= 500
+#define        __XSI_VISIBLE           500
+#undef _POSIX_C_SOURCE
+#define        _POSIX_C_SOURCE         199506
+#endif
+#endif
+
+/*
+ * Deal with all versions of POSIX.  The ordering relative to the tests above is
+ * important.
+ */
+#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
+#define        _POSIX_C_SOURCE         198808
+#endif
+#ifdef _POSIX_C_SOURCE
+#if _POSIX_C_SOURCE >= 200809
+#define        __POSIX_VISIBLE         200809
+#define        __ISO_C_VISIBLE         1999
+#elif _POSIX_C_SOURCE >= 200112
+#define        __POSIX_VISIBLE         200112
+#define        __ISO_C_VISIBLE         1999
+#elif _POSIX_C_SOURCE >= 199506
+#define        __POSIX_VISIBLE         199506
+#define        __ISO_C_VISIBLE         1990
+#elif _POSIX_C_SOURCE >= 199309
+#define        __POSIX_VISIBLE         199309
+#define        __ISO_C_VISIBLE         1990
+#elif _POSIX_C_SOURCE >= 199209
+#define        __POSIX_VISIBLE         199209
+#define        __ISO_C_VISIBLE         1990
+#elif _POSIX_C_SOURCE >= 199009
+#define        __POSIX_VISIBLE         199009
+#define        __ISO_C_VISIBLE         1990
+#else
+#define        __POSIX_VISIBLE         198808
+#define        __ISO_C_VISIBLE         0
+#endif /* _POSIX_C_SOURCE */
+#else
+/*-
+ * Deal with _ANSI_SOURCE:
+ * If it is defined, and no other compilation environment is explicitly
+ * requested, then define our internal feature-test macros to zero.  This
+ * makes no difference to the preprocessor (undefined symbols in preprocessing
+ * expressions are defined to have value zero), but makes it more convenient for
+ * a test program to print out the values.
+ *
+ * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
+ * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
+ * environment (and in fact we will never get here).
+ */
+#if defined(_ANSI_SOURCE)      /* Hide almost everything. */
+#define        __POSIX_VISIBLE         0
+#define        __XSI_VISIBLE           0
+#define        __BSD_VISIBLE           0
+#define        __ISO_C_VISIBLE         1990
+#elif defined(_C99_SOURCE)     /* Localism to specify strict C99 env. */
+#define        __POSIX_VISIBLE         0
+#define        __XSI_VISIBLE           0
+#define        __BSD_VISIBLE           0
+#define        __ISO_C_VISIBLE         1999
+#else                          /* Default environment: show everything. */
+#define        __POSIX_VISIBLE         200809
+#define        __XSI_VISIBLE           700
+#define        __BSD_VISIBLE           1
+#define        __ISO_C_VISIBLE         1999
+#endif
+#endif
+
+#ifndef        __has_feature
+#define        __has_feature(x) 0
+#endif
+#ifndef        __has_include
+#define        __has_include(x) 0
+#endif
+#ifndef        __has_builtin
+#define        __has_builtin(x) 0
+#endif
+
+#if defined(__mips) || defined(__powerpc64__) || defined(__arm__)
+#define __NO_TLS 1
+#endif
+
+#endif /* !_SYS_CDEFS_H_ */
diff --git a/include/lib/libc/sys/ctype.h b/include/lib/libc/sys/ctype.h
new file mode 100644 (file)
index 0000000..f2758b7
--- /dev/null
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c) 1982, 1988, 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * Portions copyright (c) 2009-2014, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#ifndef _SYS_CTYPE_H_
+#define        _SYS_CTYPE_H_
+
+#define isspace(c)     ((c) == ' ' || ((c) >= '\t' && (c) <= '\r'))
+#define isascii(c)     (((c) & ~0x7f) == 0)
+#define isupper(c)     ((c) >= 'A' && (c) <= 'Z')
+#define islower(c)     ((c) >= 'a' && (c) <= 'z')
+#define isalpha(c)     (isupper(c) || islower(c))
+#define isdigit(c)     ((c) >= '0' && (c) <= '9')
+#define isxdigit(c)    (isdigit(c) \
+                         || ((c) >= 'A' && (c) <= 'F') \
+                         || ((c) >= 'a' && (c) <= 'f'))
+#define isprint(c)     ((c) >= ' ' && (c) <= '~')
+
+#define toupper(c)     ((c) - 0x20 * (((c) >= 'a') && ((c) <= 'z')))
+#define tolower(c)     ((c) + 0x20 * (((c) >= 'A') && ((c) <= 'Z')))
+
+#endif /* !_SYS_CTYPE_H_ */
diff --git a/include/lib/libc/sys/endian.h b/include/lib/libc/sys/endian.h
new file mode 100644 (file)
index 0000000..d50110c
--- /dev/null
@@ -0,0 +1,205 @@
+/*-
+ * Copyright (c) 2002 Thomas Moestl <tmm@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_ENDIAN_H_
+#define _SYS_ENDIAN_H_
+
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+#include <machine/endian.h>
+
+#ifndef _UINT8_T_DECLARED
+typedef        __uint8_t       uint8_t;
+#define        _UINT8_T_DECLARED
+#endif
+#ifndef _UINT16_T_DECLARED
+typedef        __uint16_t      uint16_t;
+#define        _UINT16_T_DECLARED
+#endif
+#ifndef _UINT32_T_DECLARED
+typedef        __uint32_t      uint32_t;
+#define        _UINT32_T_DECLARED
+#endif
+#ifndef _UINT64_T_DECLARED
+typedef        __uint64_t      uint64_t;
+#define        _UINT64_T_DECLARED
+#endif
+/*
+ * General byte order swapping functions.
+ */
+#define        bswap16(x)      __bswap16(x)
+#define        bswap32(x)      __bswap32(x)
+#define        bswap64(x)      __bswap64(x)
+
+/*
+ * Host to big endian, host to little endian, big endian to host, and little
+ * endian to host byte order functions as detailed in byteorder(9).
+ */
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+#define        htobe16(x)      bswap16((x))
+#define        htobe32(x)      bswap32((x))
+#define        htobe64(x)      bswap64((x))
+#define        htole16(x)      ((uint16_t)(x))
+#define        htole32(x)      ((uint32_t)(x))
+#define        htole64(x)      ((uint64_t)(x))
+
+#define        be16toh(x)      bswap16((x))
+#define        be32toh(x)      bswap32((x))
+#define        be64toh(x)      bswap64((x))
+#define        le16toh(x)      ((uint16_t)(x))
+#define        le32toh(x)      ((uint32_t)(x))
+#define        le64toh(x)      ((uint64_t)(x))
+#else /* _BYTE_ORDER != _LITTLE_ENDIAN */
+#define        htobe16(x)      ((uint16_t)(x))
+#define        htobe32(x)      ((uint32_t)(x))
+#define        htobe64(x)      ((uint64_t)(x))
+#define        htole16(x)      bswap16((x))
+#define        htole32(x)      bswap32((x))
+#define        htole64(x)      bswap64((x))
+
+#define        be16toh(x)      ((uint16_t)(x))
+#define        be32toh(x)      ((uint32_t)(x))
+#define        be64toh(x)      ((uint64_t)(x))
+#define        le16toh(x)      bswap16((x))
+#define        le32toh(x)      bswap32((x))
+#define        le64toh(x)      bswap64((x))
+#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
+
+/* Alignment-agnostic encode/decode bytestream to/from little/big endian. */
+
+static __inline uint16_t
+be16dec(const void *pp)
+{
+       uint8_t const *p = (uint8_t const *)pp;
+
+       return ((p[0] << 8) | p[1]);
+}
+
+static __inline uint32_t
+be32dec(const void *pp)
+{
+       uint8_t const *p = (uint8_t const *)pp;
+
+       return (((unsigned)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
+}
+
+static __inline uint64_t
+be64dec(const void *pp)
+{
+       uint8_t const *p = (uint8_t const *)pp;
+
+       return (((uint64_t)be32dec(p) << 32) | be32dec(p + 4));
+}
+
+static __inline uint16_t
+le16dec(const void *pp)
+{
+       uint8_t const *p = (uint8_t const *)pp;
+
+       return ((p[1] << 8) | p[0]);
+}
+
+static __inline uint32_t
+le32dec(const void *pp)
+{
+       uint8_t const *p = (uint8_t const *)pp;
+
+       return (((unsigned)p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
+}
+
+static __inline uint64_t
+le64dec(const void *pp)
+{
+       uint8_t const *p = (uint8_t const *)pp;
+
+       return (((uint64_t)le32dec(p + 4) << 32) | le32dec(p));
+}
+
+static __inline void
+be16enc(void *pp, uint16_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = (u >> 8) & 0xff;
+       p[1] = u & 0xff;
+}
+
+static __inline void
+be32enc(void *pp, uint32_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = (u >> 24) & 0xff;
+       p[1] = (u >> 16) & 0xff;
+       p[2] = (u >> 8) & 0xff;
+       p[3] = u & 0xff;
+}
+
+static __inline void
+be64enc(void *pp, uint64_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       be32enc(p, (uint32_t)(u >> 32));
+       be32enc(p + 4, (uint32_t)(u & 0xffffffffU));
+}
+
+static __inline void
+le16enc(void *pp, uint16_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = u & 0xff;
+       p[1] = (u >> 8) & 0xff;
+}
+
+static __inline void
+le32enc(void *pp, uint32_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = u & 0xff;
+       p[1] = (u >> 8) & 0xff;
+       p[2] = (u >> 16) & 0xff;
+       p[3] = (u >> 24) & 0xff;
+}
+
+static __inline void
+le64enc(void *pp, uint64_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       le32enc(p, (uint32_t)(u & 0xffffffffU));
+       le32enc(p + 4, (uint32_t)(u >> 32));
+}
+
+#endif /* _SYS_ENDIAN_H_ */
diff --git a/include/lib/libc/sys/errno.h b/include/lib/libc/sys/errno.h
new file mode 100644 (file)
index 0000000..f595514
--- /dev/null
@@ -0,0 +1,193 @@
+/*-
+ * Copyright (c) 1982, 1986, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)errno.h     8.5 (Berkeley) 1/21/94
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_ERRNO_H_
+#define _SYS_ERRNO_H_
+
+#ifndef _KERNEL
+#include <sys/cdefs.h>
+__BEGIN_DECLS
+int *  __error(void);
+__END_DECLS
+#define        errno           (* __error())
+#endif
+
+#define        EPERM           1               /* Operation not permitted */
+#define        ENOENT          2               /* No such file or directory */
+#define        ESRCH           3               /* No such process */
+#define        EINTR           4               /* Interrupted system call */
+#define        EIO             5               /* Input/output error */
+#define        ENXIO           6               /* Device not configured */
+#define        E2BIG           7               /* Argument list too long */
+#define        ENOEXEC         8               /* Exec format error */
+#define        EBADF           9               /* Bad file descriptor */
+#define        ECHILD          10              /* No child processes */
+#define        EDEADLK         11              /* Resource deadlock avoided */
+                                       /* 11 was EAGAIN */
+#define        ENOMEM          12              /* Cannot allocate memory */
+#define        EACCES          13              /* Permission denied */
+#define        EFAULT          14              /* Bad address */
+#ifndef _POSIX_SOURCE
+#define        ENOTBLK         15              /* Block device required */
+#endif
+#define        EBUSY           16              /* Device busy */
+#define        EEXIST          17              /* File exists */
+#define        EXDEV           18              /* Cross-device link */
+#define        ENODEV          19              /* Operation not supported by device */
+#define        ENOTDIR         20              /* Not a directory */
+#define        EISDIR          21              /* Is a directory */
+#define        EINVAL          22              /* Invalid argument */
+#define        ENFILE          23              /* Too many open files in system */
+#define        EMFILE          24              /* Too many open files */
+#define        ENOTTY          25              /* Inappropriate ioctl for device */
+#ifndef _POSIX_SOURCE
+#define        ETXTBSY         26              /* Text file busy */
+#endif
+#define        EFBIG           27              /* File too large */
+#define        ENOSPC          28              /* No space left on device */
+#define        ESPIPE          29              /* Illegal seek */
+#define        EROFS           30              /* Read-only filesystem */
+#define        EMLINK          31              /* Too many links */
+#define        EPIPE           32              /* Broken pipe */
+
+/* math software */
+#define        EDOM            33              /* Numerical argument out of domain */
+#define        ERANGE          34              /* Result too large */
+
+/* non-blocking and interrupt i/o */
+#define        EAGAIN          35              /* Resource temporarily unavailable */
+#ifndef _POSIX_SOURCE
+#define        EWOULDBLOCK     EAGAIN          /* Operation would block */
+#define        EINPROGRESS     36              /* Operation now in progress */
+#define        EALREADY        37              /* Operation already in progress */
+
+/* ipc/network software -- argument errors */
+#define        ENOTSOCK        38              /* Socket operation on non-socket */
+#define        EDESTADDRREQ    39              /* Destination address required */
+#define        EMSGSIZE        40              /* Message too long */
+#define        EPROTOTYPE      41              /* Protocol wrong type for socket */
+#define        ENOPROTOOPT     42              /* Protocol not available */
+#define        EPROTONOSUPPORT 43              /* Protocol not supported */
+#define        ESOCKTNOSUPPORT 44              /* Socket type not supported */
+#define        EOPNOTSUPP      45              /* Operation not supported */
+#define        ENOTSUP         EOPNOTSUPP      /* Operation not supported */
+#define        EPFNOSUPPORT    46              /* Protocol family not supported */
+#define        EAFNOSUPPORT    47              /* Address family not supported by protocol family */
+#define        EADDRINUSE      48              /* Address already in use */
+#define        EADDRNOTAVAIL   49              /* Can't assign requested address */
+
+/* ipc/network software -- operational errors */
+#define        ENETDOWN        50              /* Network is down */
+#define        ENETUNREACH     51              /* Network is unreachable */
+#define        ENETRESET       52              /* Network dropped connection on reset */
+#define        ECONNABORTED    53              /* Software caused connection abort */
+#define        ECONNRESET      54              /* Connection reset by peer */
+#define        ENOBUFS         55              /* No buffer space available */
+#define        EISCONN         56              /* Socket is already connected */
+#define        ENOTCONN        57              /* Socket is not connected */
+#define        ESHUTDOWN       58              /* Can't send after socket shutdown */
+#define        ETOOMANYREFS    59              /* Too many references: can't splice */
+#define        ETIMEDOUT       60              /* Operation timed out */
+#define        ECONNREFUSED    61              /* Connection refused */
+
+#define        ELOOP           62              /* Too many levels of symbolic links */
+#endif /* _POSIX_SOURCE */
+#define        ENAMETOOLONG    63              /* File name too long */
+
+/* should be rearranged */
+#ifndef _POSIX_SOURCE
+#define        EHOSTDOWN       64              /* Host is down */
+#define        EHOSTUNREACH    65              /* No route to host */
+#endif /* _POSIX_SOURCE */
+#define        ENOTEMPTY       66              /* Directory not empty */
+
+/* quotas & mush */
+#ifndef _POSIX_SOURCE
+#define        EPROCLIM        67              /* Too many processes */
+#define        EUSERS          68              /* Too many users */
+#define        EDQUOT          69              /* Disc quota exceeded */
+
+/* Network File System */
+#define        ESTALE          70              /* Stale NFS file handle */
+#define        EREMOTE         71              /* Too many levels of remote in path */
+#define        EBADRPC         72              /* RPC struct is bad */
+#define        ERPCMISMATCH    73              /* RPC version wrong */
+#define        EPROGUNAVAIL    74              /* RPC prog. not avail */
+#define        EPROGMISMATCH   75              /* Program version wrong */
+#define        EPROCUNAVAIL    76              /* Bad procedure for program */
+#endif /* _POSIX_SOURCE */
+
+#define        ENOLCK          77              /* No locks available */
+#define        ENOSYS          78              /* Function not implemented */
+
+#ifndef _POSIX_SOURCE
+#define        EFTYPE          79              /* Inappropriate file type or format */
+#define        EAUTH           80              /* Authentication error */
+#define        ENEEDAUTH       81              /* Need authenticator */
+#define        EIDRM           82              /* Identifier removed */
+#define        ENOMSG          83              /* No message of desired type */
+#define        EOVERFLOW       84              /* Value too large to be stored in data type */
+#define        ECANCELED       85              /* Operation canceled */
+#define        EILSEQ          86              /* Illegal byte sequence */
+#define        ENOATTR         87              /* Attribute not found */
+
+#define        EDOOFUS         88              /* Programming error */
+#endif /* _POSIX_SOURCE */
+
+#define        EBADMSG         89              /* Bad message */
+#define        EMULTIHOP       90              /* Multihop attempted */
+#define        ENOLINK         91              /* Link has been severed */
+#define        EPROTO          92              /* Protocol error */
+
+#ifndef _POSIX_SOURCE
+#define        ENOTCAPABLE     93              /* Capabilities insufficient */
+#define        ECAPMODE        94              /* Not permitted in capability mode */
+#endif /* _POSIX_SOURCE */
+
+#ifndef _POSIX_SOURCE
+#define        ELAST           94              /* Must be equal largest errno */
+#endif /* _POSIX_SOURCE */
+
+#ifdef _KERNEL
+/* pseudo-errors returned inside kernel to modify return to process */
+#define        ERESTART        (-1)            /* restart syscall */
+#define        EJUSTRETURN     (-2)            /* don't modify regs, just return */
+#define        ENOIOCTL        (-3)            /* ioctl not handled by this layer */
+#define        EDIRIOCTL       (-4)            /* do direct ioctl in GEOM */
+#endif
+
+#endif
diff --git a/include/lib/libc/sys/limits.h b/include/lib/libc/sys/limits.h
new file mode 100644 (file)
index 0000000..c56a337
--- /dev/null
@@ -0,0 +1,100 @@
+/*-
+ * Copyright (c) 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_LIMITS_H_
+#define        _SYS_LIMITS_H_
+
+#include <sys/cdefs.h>
+#include <machine/_limits.h>
+
+#define        CHAR_BIT        __CHAR_BIT      /* number of bits in a char */
+
+#define        SCHAR_MAX       __SCHAR_MAX     /* max value for a signed char */
+#define        SCHAR_MIN       __SCHAR_MIN     /* min value for a signed char */
+
+#define        UCHAR_MAX       __UCHAR_MAX     /* max value for an unsigned char */
+
+#ifdef __CHAR_UNSIGNED__
+#define        CHAR_MAX        UCHAR_MAX       /* max value for a char */
+#define        CHAR_MIN        0               /* min value for a char */
+#else
+#define        CHAR_MAX        SCHAR_MAX
+#define        CHAR_MIN        SCHAR_MIN
+#endif
+
+#define        USHRT_MAX       __USHRT_MAX     /* max value for an unsigned short */
+#define        SHRT_MAX        __SHRT_MAX      /* max value for a short */
+#define        SHRT_MIN        __SHRT_MIN      /* min value for a short */
+
+#define        UINT_MAX        __UINT_MAX      /* max value for an unsigned int */
+#define        INT_MAX         __INT_MAX       /* max value for an int */
+#define        INT_MIN         __INT_MIN       /* min value for an int */
+
+#define        ULONG_MAX       __ULONG_MAX     /* max for an unsigned long */
+#define        LONG_MAX        __LONG_MAX      /* max for a long */
+#define        LONG_MIN        __LONG_MIN      /* min for a long */
+
+#ifdef __LONG_LONG_SUPPORTED
+#define        ULLONG_MAX      __ULLONG_MAX    /* max for an unsigned long long */
+#define        LLONG_MAX       __LLONG_MAX     /* max for a long long */
+#define        LLONG_MIN       __LLONG_MIN     /* min for a long long */
+#endif
+
+#if __POSIX_VISIBLE || __XSI_VISIBLE
+#define        SSIZE_MAX       __SSIZE_MAX     /* max value for an ssize_t */
+#endif
+
+#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE
+#define        SIZE_T_MAX      __SIZE_T_MAX    /* max value for a size_t */
+
+#define        OFF_MAX         __OFF_MAX       /* max value for an off_t */
+#define        OFF_MIN         __OFF_MIN       /* min value for an off_t */
+#endif
+
+#if __BSD_VISIBLE
+#define        GID_MAX         UINT_MAX        /* max value for a gid_t */
+#define        UID_MAX         UINT_MAX        /* max value for a uid_t */
+
+#define        UQUAD_MAX       (__UQUAD_MAX)   /* max value for a uquad_t */
+#define        QUAD_MAX        (__QUAD_MAX)    /* max value for a quad_t */
+#define        QUAD_MIN        (__QUAD_MIN)    /* min value for a quad_t */
+#endif
+
+#if __XSI_VISIBLE || __POSIX_VISIBLE >= 200809
+#define        LONG_BIT        __LONG_BIT
+#define        WORD_BIT        __WORD_BIT
+#endif
+
+#if __POSIX_VISIBLE
+#define        MQ_PRIO_MAX     64
+#endif
+
+#endif /* !_SYS_LIMITS_H_ */
diff --git a/include/lib/libc/sys/stdarg.h b/include/lib/libc/sys/stdarg.h
new file mode 100644 (file)
index 0000000..c315dfc
--- /dev/null
@@ -0,0 +1,75 @@
+/*-
+ * Copyright (c) 2002 David E. O'Brien.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_STDARG_H_
+#define        _MACHINE_STDARG_H_
+
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+#ifndef _VA_LIST_DECLARED
+#define        _VA_LIST_DECLARED
+typedef        __va_list       va_list;
+#endif
+
+#ifdef __GNUCLIKE_BUILTIN_STDARG
+
+#define        va_start(ap, last) \
+       __builtin_va_start((ap), (last))
+
+#define        va_arg(ap, type) \
+       __builtin_va_arg((ap), type)
+
+#define        __va_copy(dest, src) \
+       __builtin_va_copy((dest), (src))
+
+#if __ISO_C_VISIBLE >= 1999
+#define        va_copy(dest, src) \
+       __va_copy(dest, src)
+#endif
+
+#define        va_end(ap) \
+       __builtin_va_end(ap)
+
+#elif defined(lint)
+/* Provide a fake implementation for lint's benefit */
+#define        __va_size(type) \
+       (((sizeof(type) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
+#define        va_start(ap, last) \
+       ((ap) = (va_list)&(last) + __va_size(last))
+#define        va_arg(ap, type) \
+       (*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
+#define        va_end(ap)
+
+#else
+#error this file needs to be ported to your compiler
+#endif
+
+#endif /* !_MACHINE_STDARG_H_ */
diff --git a/include/lib/libc/sys/stdint.h b/include/lib/libc/sys/stdint.h
new file mode 100644 (file)
index 0000000..aa5ac81
--- /dev/null
@@ -0,0 +1,74 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_STDINT_H_
+#define _SYS_STDINT_H_
+
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+#include <machine/_stdint.h>
+#include <sys/_stdint.h>
+
+typedef        __int_least8_t          int_least8_t;
+typedef        __int_least16_t         int_least16_t;
+typedef        __int_least32_t         int_least32_t;
+typedef        __int_least64_t         int_least64_t;
+
+typedef        __uint_least8_t         uint_least8_t;
+typedef        __uint_least16_t        uint_least16_t;
+typedef        __uint_least32_t        uint_least32_t;
+typedef        __uint_least64_t        uint_least64_t;
+
+typedef        __int_fast8_t           int_fast8_t;
+typedef        __int_fast16_t          int_fast16_t;
+typedef        __int_fast32_t          int_fast32_t;
+typedef        __int_fast64_t          int_fast64_t;
+
+typedef        __uint_fast8_t          uint_fast8_t;
+typedef        __uint_fast16_t         uint_fast16_t;
+typedef        __uint_fast32_t         uint_fast32_t;
+typedef        __uint_fast64_t         uint_fast64_t;
+
+#ifndef _INTMAX_T_DECLARED
+typedef        __intmax_t              intmax_t;
+#define        _INTMAX_T_DECLARED
+#endif
+#ifndef _UINTMAX_T_DECLARED
+typedef        __uintmax_t             uintmax_t;
+#define        _UINTMAX_T_DECLARED
+#endif
+
+/* GNU and Darwin define this and people seem to think it's portable */
+#if defined(UINTPTR_MAX) && defined(UINT64_MAX) && (UINTPTR_MAX == UINT64_MAX)
+#define        __WORDSIZE              64
+#else
+#define        __WORDSIZE              32
+#endif
+
+#endif /* !_SYS_STDINT_H_ */
diff --git a/include/lib/libc/sys/timespec.h b/include/lib/libc/sys/timespec.h
new file mode 100644 (file)
index 0000000..2505cef
--- /dev/null
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)time.h      8.5 (Berkeley) 5/4/95
+ * from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
+ *     $FreeBSD$
+ */
+
+#ifndef _SYS_TIMESPEC_H_
+#define _SYS_TIMESPEC_H_
+
+#include <sys/cdefs.h>
+#include <sys/_timespec.h>
+
+#if __BSD_VISIBLE
+#define        TIMEVAL_TO_TIMESPEC(tv, ts)                                     \
+       do {                                                            \
+               (ts)->tv_sec = (tv)->tv_sec;                            \
+               (ts)->tv_nsec = (tv)->tv_usec * 1000;                   \
+       } while (0)
+#define        TIMESPEC_TO_TIMEVAL(tv, ts)                                     \
+       do {                                                            \
+               (tv)->tv_sec = (ts)->tv_sec;                            \
+               (tv)->tv_usec = (ts)->tv_nsec / 1000;                   \
+       } while (0)
+
+#endif /* __BSD_VISIBLE */
+
+/*
+ * Structure defined by POSIX.1b to be like a itimerval, but with
+ * timespecs. Used in the timer_*() system calls.
+ */
+struct itimerspec {
+       struct timespec  it_interval;
+       struct timespec  it_value;
+};
+
+#endif /* _SYS_TIMESPEC_H_ */
diff --git a/include/lib/libc/sys/types.h b/include/lib/libc/sys/types.h
new file mode 100644 (file)
index 0000000..ae2ea33
--- /dev/null
@@ -0,0 +1,245 @@
+/*-
+ * Copyright (c) 1982, 1986, 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)types.h     8.6 (Berkeley) 2/19/95
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_TYPES_H_
+#define        _SYS_TYPES_H_
+
+#include <sys/cdefs.h>
+
+/* Machine type dependent parameters. */
+#include <sys/_types.h>
+
+#if __BSD_VISIBLE
+typedef        unsigned char   u_char;
+typedef        unsigned short  u_short;
+typedef        unsigned int    u_int;
+typedef        unsigned long   u_long;
+#ifndef _KERNEL
+typedef        unsigned short  ushort;         /* Sys V compatibility */
+typedef        unsigned int    uint;           /* Sys V compatibility */
+#endif
+#endif
+
+/*
+ * XXX POSIX sized integrals that should appear only in <sys/stdint.h>.
+ */
+#include <sys/_stdint.h>
+
+typedef __uint8_t      u_int8_t;       /* unsigned integrals (deprecated) */
+typedef __uint16_t     u_int16_t;
+typedef __uint32_t     u_int32_t;
+typedef __uint64_t     u_int64_t;
+
+typedef        __uint64_t      u_quad_t;       /* quads (deprecated) */
+typedef        __int64_t       quad_t;
+typedef        quad_t          *qaddr_t;
+
+typedef        char            *caddr_t;       /* core address */
+typedef        const char      *c_caddr_t;     /* core address, pointer to const */
+
+#ifndef _BLKSIZE_T_DECLARED
+typedef        __blksize_t     blksize_t;
+#define        _BLKSIZE_T_DECLARED
+#endif
+
+typedef        __cpuwhich_t    cpuwhich_t;
+typedef        __cpulevel_t    cpulevel_t;
+typedef        __cpusetid_t    cpusetid_t;
+
+#ifndef _BLKCNT_T_DECLARED
+typedef        __blkcnt_t      blkcnt_t;
+#define        _BLKCNT_T_DECLARED
+#endif
+
+#ifndef _CLOCK_T_DECLARED
+typedef        __clock_t       clock_t;
+#define        _CLOCK_T_DECLARED
+#endif
+
+#ifndef _CLOCKID_T_DECLARED
+typedef        __clockid_t     clockid_t;
+#define        _CLOCKID_T_DECLARED
+#endif
+
+typedef        __critical_t    critical_t;     /* Critical section value */
+typedef        __int64_t       daddr_t;        /* disk address */
+
+#ifndef _DEV_T_DECLARED
+typedef        __dev_t         dev_t;          /* device number or struct cdev */
+#define        _DEV_T_DECLARED
+#endif
+
+#ifndef _FFLAGS_T_DECLARED
+typedef        __fflags_t      fflags_t;       /* file flags */
+#define        _FFLAGS_T_DECLARED
+#endif
+
+typedef        __fixpt_t       fixpt_t;        /* fixed point number */
+
+#ifndef _FSBLKCNT_T_DECLARED           /* for statvfs() */
+typedef        __fsblkcnt_t    fsblkcnt_t;
+typedef        __fsfilcnt_t    fsfilcnt_t;
+#define        _FSBLKCNT_T_DECLARED
+#endif
+
+#ifndef _GID_T_DECLARED
+typedef        __gid_t         gid_t;          /* group id */
+#define        _GID_T_DECLARED
+#endif
+
+#ifndef _IN_ADDR_T_DECLARED
+typedef        __uint32_t      in_addr_t;      /* base type for internet address */
+#define        _IN_ADDR_T_DECLARED
+#endif
+
+#ifndef _IN_PORT_T_DECLARED
+typedef        __uint16_t      in_port_t;
+#define        _IN_PORT_T_DECLARED
+#endif
+
+#ifndef _ID_T_DECLARED
+typedef        __id_t          id_t;           /* can hold a uid_t or pid_t */
+#define        _ID_T_DECLARED
+#endif
+
+#ifndef _INO_T_DECLARED
+typedef        __ino_t         ino_t;          /* inode number */
+#define        _INO_T_DECLARED
+#endif
+
+#ifndef _KEY_T_DECLARED
+typedef        __key_t         key_t;          /* IPC key (for Sys V IPC) */
+#define        _KEY_T_DECLARED
+#endif
+
+#ifndef _LWPID_T_DECLARED
+typedef        __lwpid_t       lwpid_t;        /* Thread ID (a.k.a. LWP) */
+#define        _LWPID_T_DECLARED
+#endif
+
+#ifndef _MODE_T_DECLARED
+typedef        __mode_t        mode_t;         /* permissions */
+#define        _MODE_T_DECLARED
+#endif
+
+#ifndef _ACCMODE_T_DECLARED
+typedef        __accmode_t     accmode_t;      /* access permissions */
+#define        _ACCMODE_T_DECLARED
+#endif
+
+#ifndef _NLINK_T_DECLARED
+typedef        __nlink_t       nlink_t;        /* link count */
+#define        _NLINK_T_DECLARED
+#endif
+
+#ifndef _OFF_T_DECLARED
+typedef        __off_t         off_t;          /* file offset */
+#define        _OFF_T_DECLARED
+#endif
+
+#ifndef _PID_T_DECLARED
+typedef        __pid_t         pid_t;          /* process id */
+#define        _PID_T_DECLARED
+#endif
+
+typedef        __register_t    register_t;
+
+#ifndef _RLIM_T_DECLARED
+typedef        __rlim_t        rlim_t;         /* resource limit */
+#define        _RLIM_T_DECLARED
+#endif
+
+typedef        __int64_t       sbintime_t;
+
+typedef        __segsz_t       segsz_t;        /* segment size (in pages) */
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+#ifndef _SSIZE_T_DECLARED
+typedef        __ssize_t       ssize_t;
+#define        _SSIZE_T_DECLARED
+#endif
+
+#ifndef _SUSECONDS_T_DECLARED
+typedef        __suseconds_t   suseconds_t;    /* microseconds (signed) */
+#define        _SUSECONDS_T_DECLARED
+#endif
+
+#ifndef _TIME_T_DECLARED
+typedef        __time_t        time_t;
+#define        _TIME_T_DECLARED
+#endif
+
+#ifndef _TIMER_T_DECLARED
+typedef        __timer_t       timer_t;
+#define        _TIMER_T_DECLARED
+#endif
+
+#ifndef _MQD_T_DECLARED
+typedef        __mqd_t mqd_t;
+#define        _MQD_T_DECLARED
+#endif
+
+typedef        __u_register_t  u_register_t;
+
+#ifndef _UID_T_DECLARED
+typedef        __uid_t         uid_t;          /* user id */
+#define        _UID_T_DECLARED
+#endif
+
+#ifndef _USECONDS_T_DECLARED
+typedef        __useconds_t    useconds_t;     /* microseconds (unsigned) */
+#define        _USECONDS_T_DECLARED
+#endif
+
+#ifndef _CAP_RIGHTS_T_DECLARED
+#define        _CAP_RIGHTS_T_DECLARED
+struct cap_rights;
+
+typedef        struct cap_rights       cap_rights_t;
+#endif
+
+typedef        __vm_offset_t   vm_offset_t;
+typedef        __vm_ooffset_t  vm_ooffset_t;
+typedef        __vm_paddr_t    vm_paddr_t;
+typedef        __vm_pindex_t   vm_pindex_t;
+typedef        __vm_size_t     vm_size_t;
+
+#endif /* !_SYS_TYPES_H_ */
diff --git a/include/lib/libc/time.h b/include/lib/libc/time.h
new file mode 100644 (file)
index 0000000..08200cf
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)time.h      8.3 (Berkeley) 1/21/94
+ */
+
+/*
+ * $FreeBSD$
+ */
+
+#ifndef _TIME_H_
+#define        _TIME_H_
+
+#include <sys/cdefs.h>
+#include <sys/_null.h>
+#include <sys/_types.h>
+
+#if __POSIX_VISIBLE > 0 && __POSIX_VISIBLE < 200112 || __BSD_VISIBLE
+/*
+ * Frequency of the clock ticks reported by times().  Deprecated - use
+ * sysconf(_SC_CLK_TCK) instead.  (Removed in 1003.1-2001.)
+ */
+#define        CLK_TCK         128
+#endif
+
+/* Frequency of the clock ticks reported by clock().  */
+#define        CLOCKS_PER_SEC  128
+
+#ifndef _CLOCK_T_DECLARED
+typedef        __clock_t       clock_t;
+#define        _CLOCK_T_DECLARED
+#endif
+
+#ifndef _TIME_T_DECLARED
+typedef        __time_t        time_t;
+#define        _TIME_T_DECLARED
+#endif
+
+#ifndef _SIZE_T_DECLARED
+typedef        __size_t        size_t;
+#define        _SIZE_T_DECLARED
+#endif
+
+#if __POSIX_VISIBLE >= 199309
+/*
+ * New in POSIX 1003.1b-1993.
+ */
+#ifndef _CLOCKID_T_DECLARED
+typedef        __clockid_t     clockid_t;
+#define        _CLOCKID_T_DECLARED
+#endif
+
+#ifndef _TIMER_T_DECLARED
+typedef        __timer_t       timer_t;
+#define        _TIMER_T_DECLARED
+#endif
+
+#include <sys/timespec.h>
+#endif /* __POSIX_VISIBLE >= 199309 */
+
+#if __POSIX_VISIBLE >= 200112
+#ifndef _PID_T_DECLARED
+typedef        __pid_t         pid_t;
+#define        _PID_T_DECLARED
+#endif
+#endif
+
+/* These macros are also in sys/time.h. */
+#if !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 200112
+#define CLOCK_REALTIME 0
+#ifdef __BSD_VISIBLE
+#define CLOCK_VIRTUAL  1
+#define CLOCK_PROF     2
+#endif
+#define CLOCK_MONOTONIC        4
+#define CLOCK_UPTIME   5               /* FreeBSD-specific. */
+#define CLOCK_UPTIME_PRECISE   7       /* FreeBSD-specific. */
+#define CLOCK_UPTIME_FAST      8       /* FreeBSD-specific. */
+#define CLOCK_REALTIME_PRECISE 9       /* FreeBSD-specific. */
+#define CLOCK_REALTIME_FAST    10      /* FreeBSD-specific. */
+#define CLOCK_MONOTONIC_PRECISE        11      /* FreeBSD-specific. */
+#define CLOCK_MONOTONIC_FAST   12      /* FreeBSD-specific. */
+#define CLOCK_SECOND   13              /* FreeBSD-specific. */
+#define CLOCK_THREAD_CPUTIME_ID        14
+#define        CLOCK_PROCESS_CPUTIME_ID        15
+#endif /* !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 200112 */
+
+#if !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 200112
+#if __BSD_VISIBLE
+#define TIMER_RELTIME  0x0     /* relative timer */
+#endif
+#define TIMER_ABSTIME  0x1     /* absolute timer */
+#endif /* !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 200112 */
+
+struct tm {
+       int     tm_sec;         /* seconds after the minute [0-60] */
+       int     tm_min;         /* minutes after the hour [0-59] */
+       int     tm_hour;        /* hours since midnight [0-23] */
+       int     tm_mday;        /* day of the month [1-31] */
+       int     tm_mon;         /* months since January [0-11] */
+       int     tm_year;        /* years since 1900 */
+       int     tm_wday;        /* days since Sunday [0-6] */
+       int     tm_yday;        /* days since January 1 [0-365] */
+       int     tm_isdst;       /* Daylight Savings Time flag */
+       long    tm_gmtoff;      /* offset from UTC in seconds */
+       char    *tm_zone;       /* timezone abbreviation */
+};
+
+#if __POSIX_VISIBLE
+extern char *tzname[];
+#endif
+
+__BEGIN_DECLS
+char *asctime(const struct tm *);
+clock_t clock(void);
+char *ctime(const time_t *);
+double difftime(time_t, time_t);
+/* XXX missing: getdate() */
+struct tm *gmtime(const time_t *);
+struct tm *localtime(const time_t *);
+time_t mktime(struct tm *);
+size_t strftime(char *__restrict, size_t, const char *__restrict,
+    const struct tm *__restrict);
+time_t time(time_t *);
+#if __POSIX_VISIBLE >= 200112
+struct sigevent;
+int timer_create(clockid_t, struct sigevent *__restrict, timer_t *__restrict);
+int timer_delete(timer_t);
+int timer_gettime(timer_t, struct itimerspec *);
+int timer_getoverrun(timer_t);
+int timer_settime(timer_t, int, const struct itimerspec *__restrict,
+       struct itimerspec *__restrict);
+#endif
+#if __POSIX_VISIBLE
+void tzset(void);
+#endif
+
+#if __POSIX_VISIBLE >= 199309
+int clock_getres(clockid_t, struct timespec *);
+int clock_gettime(clockid_t, struct timespec *);
+int clock_settime(clockid_t, const struct timespec *);
+/* XXX missing: clock_nanosleep() */
+int nanosleep(const struct timespec *, struct timespec *);
+#endif /* __POSIX_VISIBLE >= 199309 */
+
+#if __POSIX_VISIBLE >= 200112
+int clock_getcpuclockid(pid_t, clockid_t *);
+#endif
+
+#if __POSIX_VISIBLE >= 199506
+char *asctime_r(const struct tm *, char *);
+char *ctime_r(const time_t *, char *);
+struct tm *gmtime_r(const time_t *, struct tm *);
+struct tm *localtime_r(const time_t *, struct tm *);
+#endif
+
+#if __XSI_VISIBLE
+char *strptime(const char *__restrict, const char *__restrict,
+    struct tm *__restrict);
+#endif
+
+#if __BSD_VISIBLE
+char *timezone(int, int);      /* XXX XSI conflict */
+void tzsetwall(void);
+time_t timelocal(struct tm * const);
+time_t timegm(struct tm * const);
+#endif /* __BSD_VISIBLE */
+
+#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
+#include <xlocale/_time.h>
+#endif
+__END_DECLS
+
+#endif /* !_TIME_H_ */
diff --git a/include/lib/libc/xlocale/_strings.h b/include/lib/libc/xlocale/_strings.h
new file mode 100644 (file)
index 0000000..da1cff3
--- /dev/null
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+/*
+ * This file is included from both strings.h and xlocale.h.  We need to expose
+ * the declarations unconditionally if we are included from xlocale.h, but only
+ * if we are in POSIX2008 mode if included from string.h.
+ */
+
+#ifndef _XLOCALE_STRINGS1_H
+#define _XLOCALE_STRINGS1_H
+
+/*
+ * POSIX2008 functions
+ */
+int     strcasecmp_l(const char *, const char *, locale_t);
+int     strncasecmp_l(const char *, const char *, size_t, locale_t);
+#endif /* _XLOCALE_STRINGS1_H */
diff --git a/include/lib/libc/xlocale/_time.h b/include/lib/libc/xlocale/_time.h
new file mode 100644 (file)
index 0000000..6da49a4
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+/*
+ * This file is included from both locale.h and xlocale.h.  We need to expose
+ * the declarations unconditionally if we are included from xlocale.h, but only
+ * if we are in POSIX2008 mode if included from locale.h.
+ */
+#ifndef _XLOCALE_LOCALE1_H
+#define _XLOCALE_LOCALE1_H
+
+size_t  strftime_l(char *__restrict, size_t, const char *__restrict,
+           const struct tm *__restrict, locale_t) __strftimelike(3, 0);
+
+#endif /* _XLOCALE_LOCALE1_H */
+
+#ifdef _XLOCALE_H_
+#ifndef _XLOCALE_LOCALE2_H
+#define _XLOCALE_LOCALE2_H
+
+char   *strptime_l(const char *__restrict, const char *__restrict,
+               struct tm *__restrict, locale_t);
+
+#endif /* _XLOCALE_LOCALE2_H */
+#endif /* _XLOCALE_H_ */
diff --git a/include/lib/stdlib/assert.h b/include/lib/stdlib/assert.h
deleted file mode 100644 (file)
index db567db..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)assert.h    8.2 (Berkeley) 1/21/94
- * $FreeBSD$
- */
-/*
- * Portions copyright (c) 2017, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef _ASSERT_H_
-#define _ASSERT_H_
-
-#include <debug.h>
-#include <platform_def.h>
-#include <sys/cdefs.h>
-
-#ifndef PLAT_LOG_LEVEL_ASSERT
-#define PLAT_LOG_LEVEL_ASSERT  LOG_LEVEL
-#endif
-
-#if ENABLE_ASSERTIONS
-#define        _assert(e)      assert(e)
-# if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE
-#  define      assert(e)       ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e))
-# elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
-#  define      assert(e)       ((e) ? (void)0 : __assert(__FILE__, __LINE__))
-# else
-#  define      assert(e)       ((e) ? (void)0 : __assert())
-# endif
-#else
-#define        assert(e)       ((void)0)
-#define        _assert(e)      ((void)0)
-#endif /* ENABLE_ASSERTIONS */
-
-__BEGIN_DECLS
-#if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE
-void __assert(const char *, unsigned int, const char *) __dead2;
-#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
-void __assert(const char *, unsigned int) __dead2;
-#else
-void __assert(void) __dead2;
-#endif
-__END_DECLS
-
-#endif /* !_ASSERT_H_ */
diff --git a/include/lib/stdlib/inttypes.h b/include/lib/stdlib/inttypes.h
deleted file mode 100644 (file)
index 269f3e7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _INTTYPES_H_
-#define        _INTTYPES_H_
-
-#include <machine/_inttypes.h>
-#include <sys/stdint.h>
-
-typedef struct {
-       intmax_t        quot;           /* Quotient. */
-       intmax_t        rem;            /* Remainder. */
-} imaxdiv_t;
-
-__BEGIN_DECLS
-#ifdef _XLOCALE_H_
-#include <xlocale/_inttypes.h>
-#endif
-intmax_t       imaxabs(intmax_t) __pure2;
-imaxdiv_t      imaxdiv(intmax_t, intmax_t) __pure2;
-
-intmax_t       strtoimax(const char *__restrict, char **__restrict, int);
-uintmax_t      strtoumax(const char *__restrict, char **__restrict, int);
-
-__END_DECLS
-
-#endif /* !_INTTYPES_H_ */
diff --git a/include/lib/stdlib/machine/_inttypes.h b/include/lib/stdlib/machine/_inttypes.h
deleted file mode 100644 (file)
index 7dfe9c3..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef _MACHINE_INTTYPES_H_
-#define _MACHINE_INTTYPES_H_
-
-/*
- * Trusted Firmware does not depend on any definitions in this file. Content
- * will be added as needed.
- */
-
-#endif /* !_MACHINE_INTTYPES_H_ */
diff --git a/include/lib/stdlib/machine/_limits.h b/include/lib/stdlib/machine/_limits.h
deleted file mode 100644 (file)
index 3bdc66f..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*-
- * Copyright (c) 1988, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)limits.h    8.3 (Berkeley) 1/4/94
- * $FreeBSD$
- */
-
-/*
- * Portions copyright (c) 2017, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef        _MACHINE__LIMITS_H_
-#define        _MACHINE__LIMITS_H_
-
-/*
- * According to ANSI (section 2.2.4.2), the values below must be usable by
- * #if preprocessing directives.  Additionally, the expression must have the
- * same type as would an expression that is an object of the corresponding
- * type converted according to the integral promotions.  The subtraction for
- * INT_MIN, etc., is so the value is not unsigned; e.g., 0x80000000 is an
- * unsigned int for 32-bit two's complement ANSI compilers (section 3.1.3.2).
- */
-
-#define        __CHAR_BIT      8               /* number of bits in a char */
-
-#define        __SCHAR_MAX     0x7f            /* max value for a signed char */
-#define        __SCHAR_MIN     (-0x7f-1)       /* min value for a signed char */
-
-#define        __UCHAR_MAX     0xff            /* max value for an unsigned char */
-
-#define        __USHRT_MAX     0xffff          /* max value for an unsigned short */
-#define        __SHRT_MAX      0x7fff          /* max value for a short */
-#define        __SHRT_MIN      (-0x7fff-1)     /* min value for a short */
-
-#define        __UINT_MAX      0xffffffffU     /* max value for an unsigned int */
-#define        __INT_MAX       0x7fffffff      /* max value for an int */
-#define        __INT_MIN       (-0x7fffffff-1) /* min value for an int */
-
-#ifdef AARCH32
-#define        __ULONG_MAX     0xffffffffUL    /* max for an unsigned long */
-#define        __LONG_MAX      0x7fffffffL     /* max for a long */
-#define        __LONG_MIN      (-0x7fffffffL-1) /* min for a long */
-#else
-#define        __ULONG_MAX     0xffffffffffffffffUL    /* max for an unsigned long */
-#define        __LONG_MAX      0x7fffffffffffffffL     /* max for a long */
-#define        __LONG_MIN      (-0x7fffffffffffffffL-1) /* min for a long */
-#endif
-
-#define        __ULLONG_MAX    0xffffffffffffffffULL   /* max for an unsigned long long */
-#define        __LLONG_MAX     0x7fffffffffffffffLL    /* max for a long long */
-#define        __LLONG_MIN     (-0x7fffffffffffffffLL-1) /* min for a long long */
-
-#define        __SSIZE_MAX     __LONG_MAX      /* max value for a ssize_t */
-
-#define        __SIZE_T_MAX    __ULONG_MAX     /* max value for a size_t */
-
-#define        __OFF_MAX       __LONG_MAX      /* max value for an off_t */
-#define        __OFF_MIN       __LONG_MIN      /* min value for an off_t */
-
-#ifdef AARCH32
-/* Quads and long longs are the same size.  Ensure they stay in sync. */
-#define        __UQUAD_MAX     (__ULLONG_MAX)  /* max value for a uquad_t */
-#define        __QUAD_MAX      (__LLONG_MAX)   /* max value for a quad_t */
-#define        __QUAD_MIN      (__LLONG_MIN)   /* min value for a quad_t */
-#else
-/* Quads and longs are the same size.  Ensure they stay in sync. */
-#define        __UQUAD_MAX     (__ULONG_MAX)   /* max value for a uquad_t */
-#define        __QUAD_MAX      (__LONG_MAX)    /* max value for a quad_t */
-#define        __QUAD_MIN      (__LONG_MIN)    /* min value for a quad_t */
-#endif
-
-#ifdef AARCH32
-#define        __LONG_BIT      32
-#else
-#define        __LONG_BIT      64
-#endif
-#define        __WORD_BIT      32
-
-/* Minimum signal stack size. */
-#define        __MINSIGSTKSZ   (1024 * 4)
-
-#endif /* !_MACHINE__LIMITS_H_ */
diff --git a/include/lib/stdlib/machine/_stdint.h b/include/lib/stdlib/machine/_stdint.h
deleted file mode 100644 (file)
index ee5372d..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*-
- * Copyright (c) 2001, 2002 Mike Barcroft <mike@FreeBSD.org>
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/*
- * Portions copyright (c) 2016-2017, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef        _MACHINE__STDINT_H_
-#define        _MACHINE__STDINT_H_
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
-
-#define        INT8_C(c)               (c)
-#define        INT16_C(c)              (c)
-#define        INT32_C(c)              (c)
-#define        INT64_C(c)              (c ## LL)
-
-#define        UINT8_C(c)              (c)
-#define        UINT16_C(c)             (c)
-#define        UINT32_C(c)             (c ## U)
-#define        UINT64_C(c)             (c ## ULL)
-
-#define        INTMAX_C(c)             INT64_C(c)
-#define        UINTMAX_C(c)            UINT64_C(c)
-
-#endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
-
-/*
- * ISO/IEC 9899:1999
- * 7.18.2.1 Limits of exact-width integer types
- */
-/* Minimum values of exact-width signed integer types. */
-#define        INT8_MIN        (-0x7f-1)
-#define        INT16_MIN       (-0x7fff-1)
-#define        INT32_MIN       (-0x7fffffff-1)
-#define        INT64_MIN       (-0x7fffffffffffffffLL-1)
-
-/* Maximum values of exact-width signed integer types. */
-#define        INT8_MAX        0x7f
-#define        INT16_MAX       0x7fff
-#define        INT32_MAX       0x7fffffff
-#define        INT64_MAX       0x7fffffffffffffffLL
-
-/* Maximum values of exact-width unsigned integer types. */
-#define        UINT8_MAX       0xff
-#define        UINT16_MAX      0xffff
-#define        UINT32_MAX      0xffffffffU
-#define        UINT64_MAX      0xffffffffffffffffULL
-
-/*
- * ISO/IEC 9899:1999
- * 7.18.2.2  Limits of minimum-width integer types
- */
-/* Minimum values of minimum-width signed integer types. */
-#define        INT_LEAST8_MIN  INT8_MIN
-#define        INT_LEAST16_MIN INT16_MIN
-#define        INT_LEAST32_MIN INT32_MIN
-#define        INT_LEAST64_MIN INT64_MIN
-
-/* Maximum values of minimum-width signed integer types. */
-#define        INT_LEAST8_MAX  INT8_MAX
-#define        INT_LEAST16_MAX INT16_MAX
-#define        INT_LEAST32_MAX INT32_MAX
-#define        INT_LEAST64_MAX INT64_MAX
-
-/* Maximum values of minimum-width unsigned integer types. */
-#define        UINT_LEAST8_MAX  UINT8_MAX
-#define        UINT_LEAST16_MAX UINT16_MAX
-#define        UINT_LEAST32_MAX UINT32_MAX
-#define        UINT_LEAST64_MAX UINT64_MAX
-
-/*
- * ISO/IEC 9899:1999
- * 7.18.2.3  Limits of fastest minimum-width integer types
- */
-/* Minimum values of fastest minimum-width signed integer types. */
-#define        INT_FAST8_MIN   INT32_MIN
-#define        INT_FAST16_MIN  INT32_MIN
-#define        INT_FAST32_MIN  INT32_MIN
-#define        INT_FAST64_MIN  INT64_MIN
-
-/* Maximum values of fastest minimum-width signed integer types. */
-#define        INT_FAST8_MAX   INT32_MAX
-#define        INT_FAST16_MAX  INT32_MAX
-#define        INT_FAST32_MAX  INT32_MAX
-#define        INT_FAST64_MAX  INT64_MAX
-
-/* Maximum values of fastest minimum-width unsigned integer types. */
-#define        UINT_FAST8_MAX  UINT32_MAX
-#define        UINT_FAST16_MAX UINT32_MAX
-#define        UINT_FAST32_MAX UINT32_MAX
-#define        UINT_FAST64_MAX UINT64_MAX
-
-/*
- * ISO/IEC 9899:1999
- * 7.18.2.4  Limits of integer types capable of holding object pointers
- */
-#ifdef AARCH32
-#define        INTPTR_MIN      INT32_MIN
-#define        INTPTR_MAX      INT32_MAX
-#define        UINTPTR_MAX     UINT32_MAX
-#else
-#define        INTPTR_MIN      INT64_MIN
-#define        INTPTR_MAX      INT64_MAX
-#define        UINTPTR_MAX     UINT64_MAX
-#endif
-
-/*
- * ISO/IEC 9899:1999
- * 7.18.2.5  Limits of greatest-width integer types
- */
-#define        INTMAX_MIN      INT64_MIN
-#define        INTMAX_MAX      INT64_MAX
-#define        UINTMAX_MAX     UINT64_MAX
-
-/*
- * ISO/IEC 9899:1999
- * 7.18.3  Limits of other integer types
- */
-/* Limits of ptrdiff_t. */
-#ifdef AARCH32
-#define        PTRDIFF_MIN     INT32_MIN
-#define        PTRDIFF_MAX     INT32_MAX
-#else
-#define        PTRDIFF_MIN     INT64_MIN
-#define        PTRDIFF_MAX     INT64_MAX
-#endif
-
-/* Limits of sig_atomic_t. */
-#define        SIG_ATOMIC_MIN  INT32_MIN
-#define        SIG_ATOMIC_MAX  INT32_MAX
-
-/* Limit of size_t. */
-#ifdef AARCH32
-#define        SIZE_MAX        UINT32_MAX
-#else
-#define        SIZE_MAX        UINT64_MAX
-#endif
-
-#ifndef WCHAR_MIN /* Also possibly defined in <wchar.h> */
-/* Limits of wchar_t. */
-#define        WCHAR_MIN       INT32_MIN
-#define        WCHAR_MAX       INT32_MAX
-#endif
-
-/* Limits of wint_t. */
-#define        WINT_MIN        INT32_MIN
-#define        WINT_MAX        INT32_MAX
-
-#endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
-
-#endif /* !_MACHINE__STDINT_H_ */
diff --git a/include/lib/stdlib/machine/_types.h b/include/lib/stdlib/machine/_types.h
deleted file mode 100644 (file)
index 037fdf2..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     From: @(#)ansi.h        8.2 (Berkeley) 1/4/94
- *     From: @(#)types.h       8.3 (Berkeley) 1/5/94
- * $FreeBSD$
- */
-/*
- * Portions copyright (c) 2016, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef _MACHINE__TYPES_H_
-#define        _MACHINE__TYPES_H_
-
-#ifndef _SYS_CDEFS_H_
-#error this file needs sys/cdefs.h as a prerequisite
-#endif
-
-/*
- * Basic types upon which most other types are built.
- */
-typedef        __signed char           __int8_t;
-typedef        unsigned char           __uint8_t;
-typedef        short                   __int16_t;
-typedef        unsigned short          __uint16_t;
-typedef        int                     __int32_t;
-typedef        unsigned int            __uint32_t;
-typedef        long long               __int64_t;
-typedef        unsigned long long      __uint64_t;
-
-/*
- * Standard type definitions.
- */
-typedef        __int32_t       __clock_t;              /* clock()... */
-typedef        long            __critical_t;
-typedef        double          __double_t;
-typedef        float           __float_t;
-typedef        long            __intfptr_t;
-typedef        __int64_t       __intmax_t;
-typedef        long            __intptr_t;
-typedef        __int32_t       __int_fast8_t;
-typedef        __int32_t       __int_fast16_t;
-typedef        __int32_t       __int_fast32_t;
-typedef        __int64_t       __int_fast64_t;
-typedef        __int8_t        __int_least8_t;
-typedef        __int16_t       __int_least16_t;
-typedef        __int32_t       __int_least32_t;
-typedef        __int64_t       __int_least64_t;
-typedef        long            __ptrdiff_t;            /* ptr1 - ptr2 */
-typedef        long            __register_t;
-typedef        long            __segsz_t;              /* segment size (in pages) */
-#ifdef AARCH32
-typedef        unsigned int    __size_t;               /* sizeof() */
-typedef        int             __ssize_t;              /* byte count or error */
-#elif defined AARCH64
-typedef        unsigned long   __size_t;               /* sizeof() */
-typedef        long            __ssize_t;              /* byte count or error */
-#else
-#error "Only AArch32 or AArch64 supported"
-#endif /* AARCH32 */
-typedef        __int64_t       __time_t;               /* time()... */
-typedef        unsigned long   __uintfptr_t;
-typedef        __uint64_t      __uintmax_t;
-typedef        unsigned long   __uintptr_t;
-typedef        __uint32_t      __uint_fast8_t;
-typedef        __uint32_t      __uint_fast16_t;
-typedef        __uint32_t      __uint_fast32_t;
-typedef        __uint64_t      __uint_fast64_t;
-typedef        __uint8_t       __uint_least8_t;
-typedef        __uint16_t      __uint_least16_t;
-typedef        __uint32_t      __uint_least32_t;
-typedef        __uint64_t      __uint_least64_t;
-typedef        unsigned long   __u_register_t;
-typedef        unsigned long   __vm_offset_t;
-typedef        __int64_t       __vm_ooffset_t;
-typedef        unsigned long   __vm_paddr_t;
-typedef        __uint64_t      __vm_pindex_t;
-typedef        unsigned long   __vm_size_t;
-
-/*
- * Unusual type definitions.
- */
-#ifdef __GNUCLIKE_BUILTIN_VARARGS
-typedef __builtin_va_list      __va_list;      /* internally known to gcc */
-#else
-typedef        char *                  __va_list;
-#endif /* __GNUCLIKE_BUILTIN_VARARGS */
-#if defined(__GNUCLIKE_BUILTIN_VAALIST) && !defined(__GNUC_VA_LIST) \
-    && !defined(__NO_GNUC_VA_LIST)
-#define __GNUC_VA_LIST
-typedef __va_list              __gnuc_va_list; /* compatibility w/GNU headers*/
-#endif
-
-#endif /* !_MACHINE__TYPES_H_ */
diff --git a/include/lib/stdlib/machine/endian.h b/include/lib/stdlib/machine/endian.h
deleted file mode 100644 (file)
index 57e33b1..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*-
- * Copyright (c) 2001 David E. O'Brien
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)endian.h    8.1 (Berkeley) 6/10/93
- * $NetBSD: endian.h,v 1.7 1999/08/21 05:53:51 simonb Exp $
- * $FreeBSD$
- */
-/*
- * Portions copyright (c) 2017, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef _MACHINE_ENDIAN_H_
-#define        _MACHINE_ENDIAN_H_
-
-#include <sys/_types.h>
-
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define        _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
-#define        _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
-#define        _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
-
-#define        _BYTE_ORDER     _LITTLE_ENDIAN
-
-#if __BSD_VISIBLE
-#define        LITTLE_ENDIAN   _LITTLE_ENDIAN
-#define        BIG_ENDIAN      _BIG_ENDIAN
-#define        PDP_ENDIAN      _PDP_ENDIAN
-#define        BYTE_ORDER      _BYTE_ORDER
-#endif
-
-#define        _QUAD_HIGHWORD  1
-#define        _QUAD_LOWWORD 0
-#define        __ntohl(x)        (__bswap32(x))
-#define        __ntohs(x)        (__bswap16(x))
-#define        __htonl(x)        (__bswap32(x))
-#define        __htons(x)        (__bswap16(x))
-
-#ifdef AARCH32
-static __inline __uint64_t
-__bswap64(__uint64_t _x)
-{
-
-       return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) |
-           ((_x >> 8) & 0xff000000) | ((_x << 8) & ((__uint64_t)0xff << 32)) |
-           ((_x << 24) & ((__uint64_t)0xff << 40)) |
-           ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56)));
-}
-
-static __inline __uint32_t
-__bswap32_var(__uint32_t v)
-{
-       __uint32_t t1;
-
-       __asm __volatile("eor %1, %0, %0, ror #16\n"
-                       "bic %1, %1, #0x00ff0000\n"
-                       "mov %0, %0, ror #8\n"
-                       "eor %0, %0, %1, lsr #8\n"
-                        : "+r" (v), "=r" (t1));
-
-       return (v);
-}
-
-static __inline __uint16_t
-__bswap16_var(__uint16_t v)
-{
-       __uint32_t ret = v & 0xffff;
-
-       __asm __volatile(
-           "mov    %0, %0, ror #8\n"
-           "orr    %0, %0, %0, lsr #16\n"
-           "bic    %0, %0, %0, lsl #16"
-           : "+r" (ret));
-
-       return ((__uint16_t)ret);
-}
-#elif defined AARCH64
-static __inline __uint64_t
-__bswap64(__uint64_t x)
-{
-       __uint64_t ret;
-
-       __asm __volatile("rev %0, %1\n"
-                        : "=&r" (ret), "+r" (x));
-       
-       return (ret);
-}
-
-static __inline __uint32_t
-__bswap32_var(__uint32_t v)
-{
-       __uint32_t ret;
-
-       __asm __volatile("rev32 %x0, %x1\n"
-                        : "=&r" (ret), "+r" (v));
-       
-       return (ret);
-}
-
-static __inline __uint16_t
-__bswap16_var(__uint16_t v)
-{
-       __uint32_t ret;
-
-       __asm __volatile("rev16 %w0, %w1\n"
-                        : "=&r" (ret), "+r" (v));
-
-       return ((__uint16_t)ret);
-}              
-#else
-#error "Only AArch32 or AArch64 supported"
-#endif /* AARCH32 */
-
-#ifdef __OPTIMIZE__
-
-#define        __bswap32_constant(x)   \
-    ((((x) & 0xff000000U) >> 24) |     \
-     (((x) & 0x00ff0000U) >>  8) |     \
-     (((x) & 0x0000ff00U) <<  8) |     \
-     (((x) & 0x000000ffU) << 24))
-
-#define        __bswap16_constant(x)   \
-    ((((x) & 0xff00) >> 8) |           \
-     (((x) & 0x00ff) << 8))
-
-#define        __bswap16(x)    \
-    ((__uint16_t)(__builtin_constant_p(x) ?    \
-     __bswap16_constant(x) :                   \
-     __bswap16_var(x)))
-
-#define        __bswap32(x)    \
-    ((__uint32_t)(__builtin_constant_p(x) ?    \
-     __bswap32_constant(x) :                   \
-     __bswap32_var(x)))
-
-#else
-#define        __bswap16(x)    __bswap16_var(x)
-#define        __bswap32(x)    __bswap32_var(x)
-
-#endif /* __OPTIMIZE__ */
-#endif /* !_MACHINE_ENDIAN_H_ */
diff --git a/include/lib/stdlib/stdbool.h b/include/lib/stdlib/stdbool.h
deleted file mode 100644 (file)
index e39aef7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef STDBOOL_H
-#define STDBOOL_H
-
-#define bool   _Bool
-
-#define true   1
-#define false  0
-
-#define __bool_true_false_are_defined  1
-
-#endif /* STDBOOL_H */
diff --git a/include/lib/stdlib/stddef.h b/include/lib/stdlib/stddef.h
deleted file mode 100644 (file)
index ea88214..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)stddef.h    8.1 (Berkeley) 6/2/93
- *
- * $FreeBSD$
- */
-
-#ifndef _STDDEF_H_
-#define _STDDEF_H_
-
-#include <sys/cdefs.h>
-#include <sys/_null.h>
-#include <sys/_types.h>
-
-typedef        __ptrdiff_t     ptrdiff_t;
-
-#if __BSD_VISIBLE
-#ifndef _RUNE_T_DECLARED
-typedef        __rune_t        rune_t;
-#define        _RUNE_T_DECLARED
-#endif
-#endif
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-#ifndef        __cplusplus
-#ifndef _WCHAR_T_DECLARED
-typedef        __wchar_t       wchar_t;
-#define        _WCHAR_T_DECLARED
-#endif
-#endif
-
-#define        offsetof(type, member)  __offsetof(type, member)
-
-#endif /* _STDDEF_H_ */
diff --git a/include/lib/stdlib/stdio.h b/include/lib/stdlib/stdio.h
deleted file mode 100644 (file)
index 57e5c7f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)stdio.h     8.5 (Berkeley) 4/29/95
- * $FreeBSD$
- */
-
-/*
- * Portions copyright (c) 2013-2014, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-
-#ifndef        _STDIO_H_
-#define        _STDIO_H_
-
-#include <sys/cdefs.h>
-#include <sys/_null.h>
-#include <sys/_types.h>
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-#ifndef _SSIZE_T_DECLARED
-#define        _SSIZE_T_DECLARED
-typedef        __ssize_t       ssize_t;
-#endif
-
-#define        EOF     (-1)
-
-int     printf(const char * __restrict, ...) __printflike(1, 2);
-int     putchar(int);
-int     puts(const char *);
-int     sprintf(char * __restrict, const char * __restrict, ...)
-       __printflike(2, 3);
-int     vsprintf(char * __restrict, const char * __restrict,
-          __va_list) __printflike(2, 0);
-
-int     sscanf(const char *__restrict, char const *__restrict, ...);
-
-#if __ISO_C_VISIBLE >= 1999
-int     snprintf(char * __restrict, size_t, const char * __restrict,
-          ...) __printflike(3, 4);
-int     vsnprintf(char * __restrict, size_t, const char * __restrict,
-          __va_list) __printflike(3, 0);
-#endif
-
-#endif /* !_STDIO_H_ */
diff --git a/include/lib/stdlib/stdlib.h b/include/lib/stdlib/stdlib.h
deleted file mode 100644 (file)
index b1ac1bf..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)stdlib.h    8.5 (Berkeley) 5/19/95
- * $FreeBSD$
- */
-
-#ifndef _STDLIB_H_
-#define        _STDLIB_H_
-
-#include <sys/cdefs.h>
-#include <sys/_null.h>
-#include <sys/_types.h>
-
-#if __BSD_VISIBLE
-#ifndef _RUNE_T_DECLARED
-typedef        __rune_t        rune_t;
-#define        _RUNE_T_DECLARED
-#endif
-#endif
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-typedef struct {
-       int     quot;           /* quotient */
-       int     rem;            /* remainder */
-} div_t;
-
-typedef struct {
-       long    quot;
-       long    rem;
-} ldiv_t;
-
-#define        EXIT_FAILURE    1
-#define        EXIT_SUCCESS    0
-
-#define        RAND_MAX        0x7ffffffd
-
-__BEGIN_DECLS
-#ifdef _XLOCALE_H_
-#include <xlocale/_stdlib.h>
-#endif
-extern int __mb_cur_max;
-extern int ___mb_cur_max(void);
-#define        MB_CUR_MAX      (___mb_cur_max())
-
-_Noreturn void  abort(void);
-int     abs(int) __pure2;
-int     atexit(void (*)(void));
-double  atof(const char *);
-int     atoi(const char *);
-long    atol(const char *);
-void   *bsearch(const void *, const void *, size_t,
-           size_t, int (*)(const void *, const void *));
-void   *calloc(size_t, size_t) __malloc_like;
-div_t   div(int, int) __pure2;
-_Noreturn void  exit(int);
-void    free(void *);
-char   *getenv(const char *);
-long    labs(long) __pure2;
-ldiv_t  ldiv(long, long) __pure2;
-void   *malloc(size_t) __malloc_like;
-int     mblen(const char *, size_t);
-void    qsort(void *, size_t, size_t,
-           int (*)(const void *, const void *));
-int     rand(void);
-void   *realloc(void *, size_t);
-void    srand(unsigned);
-double  strtod(const char *__restrict, char **__restrict);
-float   strtof(const char *__restrict, char **__restrict);
-long    strtol(const char *__restrict, char **__restrict, int);
-long double
-        strtold(const char *__restrict, char **__restrict);
-unsigned long
-        strtoul(const char *__restrict, char **__restrict, int);
-int     system(const char *);
-
-/*
- * Functions added in C99 which we make conditionally available in the
- * BSD^C89 namespace if the compiler supports `long long'.
- * The #if test is more complicated than it ought to be because
- * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
- * is not supported in the compilation environment (which therefore means
- * that it can't really be ISO C99).
- *
- * (The only other extension made by C99 in thie header is _Exit().)
- */
-#if __ISO_C_VISIBLE >= 1999
-#ifdef __LONG_LONG_SUPPORTED
-/* LONGLONG */
-typedef struct {
-       long long quot;
-       long long rem;
-} lldiv_t;
-
-/* LONGLONG */
-long long
-        atoll(const char *);
-/* LONGLONG */
-long long
-        llabs(long long) __pure2;
-/* LONGLONG */
-lldiv_t         lldiv(long long, long long) __pure2;
-/* LONGLONG */
-long long
-        strtoll(const char *__restrict, char **__restrict, int);
-/* LONGLONG */
-unsigned long long
-        strtoull(const char *__restrict, char **__restrict, int);
-#endif /* __LONG_LONG_SUPPORTED */
-
-_Noreturn void  _Exit(int);
-#endif /* __ISO_C_VISIBLE >= 1999 */
-
-/*
- * If we're in a mode greater than C99, expose C11 functions.
- */
-#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
-void *aligned_alloc(size_t, size_t) __malloc_like;
-int    at_quick_exit(void (*)(void));
-_Noreturn void
-       quick_exit(int);
-#endif /* __ISO_C_VISIBLE >= 2011 */
-/*
- * Extensions made by POSIX relative to C.
- */
-#if __POSIX_VISIBLE >= 199506 || __XSI_VISIBLE
-char   *realpath(const char *__restrict, char *__restrict);
-#endif
-#if __POSIX_VISIBLE >= 199506
-int     rand_r(unsigned *);                    /* (TSF) */
-#endif
-#if __POSIX_VISIBLE >= 200112
-int     posix_memalign(void **, size_t, size_t); /* (ADV) */
-int     setenv(const char *, const char *, int);
-int     unsetenv(const char *);
-#endif
-
-#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
-int     getsubopt(char **, char *const *, char **);
-#ifndef _MKDTEMP_DECLARED
-char   *mkdtemp(char *);
-#define        _MKDTEMP_DECLARED
-#endif
-#ifndef _MKSTEMP_DECLARED
-int     mkstemp(char *);
-#define        _MKSTEMP_DECLARED
-#endif
-#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */
-
-/*
- * The only changes to the XSI namespace in revision 6 were the deletion
- * of the ttyslot() and valloc() functions, which FreeBSD never declared
- * in this header.  For revision 7, ecvt(), fcvt(), and gcvt(), which
- * FreeBSD also does not have, and mktemp(), are to be deleted.
- */
-#if __XSI_VISIBLE
-/* XXX XSI requires pollution from <sys/wait.h> here.  We'd rather not. */
-long    a64l(const char *);
-double  drand48(void);
-/* char        *ecvt(double, int, int * __restrict, int * __restrict); */
-double  erand48(unsigned short[3]);
-/* char        *fcvt(double, int, int * __restrict, int * __restrict); */
-/* char        *gcvt(double, int, int * __restrict, int * __restrict); */
-int     grantpt(int);
-char   *initstate(unsigned long /* XSI requires u_int */, char *, long);
-long    jrand48(unsigned short[3]);
-char   *l64a(long);
-void    lcong48(unsigned short[7]);
-long    lrand48(void);
-#if !defined(_MKTEMP_DECLARED) && (__BSD_VISIBLE || __XSI_VISIBLE <= 600)
-char   *mktemp(char *);
-#define        _MKTEMP_DECLARED
-#endif
-long    mrand48(void);
-long    nrand48(unsigned short[3]);
-int     posix_openpt(int);
-char   *ptsname(int);
-int     putenv(char *);
-long    random(void);
-unsigned short
-       *seed48(unsigned short[3]);
-#ifndef _SETKEY_DECLARED
-int     setkey(const char *);
-#define        _SETKEY_DECLARED
-#endif
-char   *setstate(/* const */ char *);
-void    srand48(long);
-void    srandom(unsigned long);
-int     unlockpt(int);
-#endif /* __XSI_VISIBLE */
-
-#if __BSD_VISIBLE
-extern const char *malloc_conf;
-extern void (*malloc_message)(void *, const char *);
-
-/*
- * The alloca() function can't be implemented in C, and on some
- * platforms it can't be implemented at all as a callable function.
- * The GNU C compiler provides a built-in alloca() which we can use;
- * in all other cases, provide a prototype, mainly to pacify various
- * incarnations of lint.  On platforms where alloca() is not in libc,
- * programs which use it will fail to link when compiled with non-GNU
- * compilers.
- */
-#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
-#undef  alloca /* some GNU bits try to get cute and define this on their own */
-#define alloca(sz) __builtin_alloca(sz)
-#elif defined(lint)
-void   *alloca(size_t);
-#endif
-
-void    abort2(const char *, int, void **) __dead2;
-__uint32_t
-        arc4random(void);
-void    arc4random_addrandom(unsigned char *, int);
-void    arc4random_buf(void *, size_t);
-void    arc4random_stir(void);
-__uint32_t
-        arc4random_uniform(__uint32_t);
-#ifdef __BLOCKS__
-int     atexit_b(void (^)(void));
-void   *bsearch_b(const void *, const void *, size_t,
-           size_t, int (^)(const void *, const void *));
-#endif
-char   *getbsize(int *, long *);
-                                       /* getcap(3) functions */
-char   *cgetcap(char *, const char *, int);
-int     cgetclose(void);
-int     cgetent(char **, char **, const char *);
-int     cgetfirst(char **, char **);
-int     cgetmatch(const char *, const char *);
-int     cgetnext(char **, char **);
-int     cgetnum(char *, const char *, long *);
-int     cgetset(const char *);
-int     cgetstr(char *, const char *, char **);
-int     cgetustr(char *, const char *, char **);
-
-int     daemon(int, int);
-char   *devname(__dev_t, __mode_t);
-char   *devname_r(__dev_t, __mode_t, char *, int);
-char   *fdevname(int);
-char   *fdevname_r(int, char *, int);
-int     getloadavg(double [], int);
-const char *
-        getprogname(void);
-
-int     heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
-#ifdef __BLOCKS__
-int     heapsort_b(void *, size_t, size_t, int (^)(const void *, const void *));
-void    qsort_b(void *, size_t, size_t,
-           int (^)(const void *, const void *));
-#endif
-int     l64a_r(long, char *, int);
-int     mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
-#ifdef __BLOCKS__
-int     mergesort_b(void *, size_t, size_t, int (^)(const void *, const void *));
-#endif
-int     mkostemp(char *, int);
-int     mkostemps(char *, int, int);
-void    qsort_r(void *, size_t, size_t, void *,
-           int (*)(void *, const void *, const void *));
-int     radixsort(const unsigned char **, int, const unsigned char *,
-           unsigned);
-void    *reallocf(void *, size_t);
-int     rpmatch(const char *);
-void    setprogname(const char *);
-int     sradixsort(const unsigned char **, int, const unsigned char *,
-           unsigned);
-void    sranddev(void);
-void    srandomdev(void);
-long long
-       strtonum(const char *, long long, long long, const char **);
-
-/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
-__int64_t
-        strtoq(const char *, char **, int);
-__uint64_t
-        strtouq(const char *, char **, int);
-
-extern char *suboptarg;                        /* getsubopt(3) external variable */
-#endif /* __BSD_VISIBLE */
-__END_DECLS
-
-#endif /* !_STDLIB_H_ */
diff --git a/include/lib/stdlib/string.h b/include/lib/stdlib/string.h
deleted file mode 100644 (file)
index 56677b2..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)string.h    8.1 (Berkeley) 6/2/93
- * $FreeBSD$
- */
-
-/*
- * Portions copyright (c) 2013-2017, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef _STRING_H_
-#define        _STRING_H_
-
-#include <sys/cdefs.h>
-#include <sys/_null.h>
-#include <sys/_types.h>
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-__BEGIN_DECLS
-
-void   *memchr(const void *, int, size_t) __pure;
-int     memcmp(const void *, const void *, size_t) __pure;
-void   *memcpy(void * __restrict, const void * __restrict, size_t);
-void   *memcpy16(void * __restrict, const void * __restrict, size_t);
-void   *memmove(void *, const void *, size_t);
-void   *memset(void *, int, size_t);
-
-char   *strchr(const char *, int) __pure;
-int     strcmp(const char *, const char *) __pure;
-size_t  strlen(const char *) __pure;
-int     strncmp(const char *, const char *, size_t) __pure;
-size_t  strnlen(const char *, size_t) __pure;
-int     strcasecmp(const char *, const char *);
-int     timingsafe_bcmp(const void *, const void *, size_t);
-
-__END_DECLS
-
-#endif /* _STRING_H_ */
diff --git a/include/lib/stdlib/strings.h b/include/lib/stdlib/strings.h
deleted file mode 100644 (file)
index 2210df0..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*-
- * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _STRINGS_H_
-#define        _STRINGS_H_
-
-#include <sys/cdefs.h>
-#include <sys/_types.h>
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-__BEGIN_DECLS
-#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112
-int     bcmp(const void *, const void *, size_t) __pure;       /* LEGACY */
-void    bcopy(const void *, void *, size_t);                   /* LEGACY */
-void    bzero(void *, size_t);                                 /* LEGACY */
-#endif
-#if __BSD_VISIBLE
-void    explicit_bzero(void *, size_t);
-#endif
-#if __XSI_VISIBLE
-int     ffs(int) __pure2;
-#endif
-#if __BSD_VISIBLE
-int     ffsl(long) __pure2;
-int     ffsll(long long) __pure2;
-int     fls(int) __pure2;
-int     flsl(long) __pure2;
-int     flsll(long long) __pure2;
-#endif
-#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112
-char   *index(const char *, int) __pure;                       /* LEGACY */
-char   *rindex(const char *, int) __pure;                      /* LEGACY */
-#endif
-int     strcasecmp(const char *, const char *) __pure;
-int     strncasecmp(const char *, const char *, size_t) __pure;
-
-#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
-#include <xlocale/_strings.h>
-#endif
-__END_DECLS
-
-#endif /* _STRINGS_H_ */
diff --git a/include/lib/stdlib/sys/_null.h b/include/lib/stdlib/sys/_null.h
deleted file mode 100644 (file)
index 92706c6..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * Copyright (c) 2003 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef NULL
-
-#if !defined(__cplusplus)
-#define        NULL    ((void *)0)
-#else
-#if __cplusplus >= 201103L
-#define        NULL    nullptr
-#elif defined(__GNUG__) && defined(__GNUC__) && __GNUC__ >= 4
-#define        NULL    __null
-#else
-#if defined(__LP64__)
-#define        NULL    (0L)
-#else
-#define        NULL    0
-#endif /* __LP64__ */
-#endif /* __GNUG__ */
-#endif /* !__cplusplus */
-
-#endif
diff --git a/include/lib/stdlib/sys/_stdint.h b/include/lib/stdlib/sys/_stdint.h
deleted file mode 100644 (file)
index d0f9249..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*-
- * Copyright (c) 2011 David E. O'Brien <obrien@FreeBSD.org>
- * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS__STDINT_H_
-#define _SYS__STDINT_H_
-
-#ifndef _INT8_T_DECLARED
-typedef        __int8_t                int8_t;
-#define        _INT8_T_DECLARED
-#endif
-
-#ifndef _INT16_T_DECLARED
-typedef        __int16_t               int16_t;
-#define        _INT16_T_DECLARED
-#endif
-
-#ifndef _INT32_T_DECLARED
-typedef        __int32_t               int32_t;
-#define        _INT32_T_DECLARED
-#endif
-
-#ifndef _INT64_T_DECLARED
-typedef        __int64_t               int64_t;
-#define        _INT64_T_DECLARED
-#endif
-
-#ifndef _UINT8_T_DECLARED
-typedef        __uint8_t               uint8_t;
-#define        _UINT8_T_DECLARED
-#endif
-
-#ifndef _UINT16_T_DECLARED
-typedef        __uint16_t              uint16_t;
-#define        _UINT16_T_DECLARED
-#endif
-
-#ifndef _UINT32_T_DECLARED
-typedef        __uint32_t              uint32_t;
-#define        _UINT32_T_DECLARED
-#endif
-
-#ifndef _UINT64_T_DECLARED
-typedef        __uint64_t              uint64_t;
-#define        _UINT64_T_DECLARED
-#endif
-
-#ifndef _INTPTR_T_DECLARED
-typedef        __intptr_t              intptr_t;
-#define        _INTPTR_T_DECLARED
-#endif
-#ifndef _UINTPTR_T_DECLARED
-typedef        __uintptr_t             uintptr_t;
-#define        _UINTPTR_T_DECLARED
-#endif
-
-#endif /* !_SYS__STDINT_H_ */
diff --git a/include/lib/stdlib/sys/_timespec.h b/include/lib/stdlib/sys/_timespec.h
deleted file mode 100644 (file)
index d51559c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)time.h      8.5 (Berkeley) 5/4/95
- * from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
- *     $FreeBSD$
- */
-
-#ifndef _SYS__TIMESPEC_H_
-#define        _SYS__TIMESPEC_H_
-
-#include <sys/_types.h>
-
-#ifndef _TIME_T_DECLARED
-typedef        __time_t        time_t;
-#define        _TIME_T_DECLARED
-#endif
-
-struct timespec {
-       time_t  tv_sec;         /* seconds */
-       long    tv_nsec;        /* and nanoseconds */
-};
-
-#endif /* !_SYS__TIMESPEC_H_ */
diff --git a/include/lib/stdlib/sys/_types.h b/include/lib/stdlib/sys/_types.h
deleted file mode 100644 (file)
index c59afd3..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*-
- * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS__TYPES_H_
-#define _SYS__TYPES_H_
-
-#include <sys/cdefs.h>
-#include <machine/_types.h>
-
-/*
- * Standard type definitions.
- */
-typedef        __uint32_t      __blksize_t;    /* file block size */
-typedef        __int64_t       __blkcnt_t;     /* file block count */
-typedef        __int32_t       __clockid_t;    /* clock_gettime()... */
-typedef        __uint64_t      __cap_rights_t; /* capability rights */
-typedef        __uint32_t      __fflags_t;     /* file flags */
-typedef        __uint64_t      __fsblkcnt_t;
-typedef        __uint64_t      __fsfilcnt_t;
-typedef        __uint32_t      __gid_t;
-typedef        __int64_t       __id_t;         /* can hold a gid_t, pid_t, or uid_t */
-typedef        __uint32_t      __ino_t;        /* inode number */
-typedef        long            __key_t;        /* IPC key (for Sys V IPC) */
-typedef        __int32_t       __lwpid_t;      /* Thread ID (a.k.a. LWP) */
-typedef        __uint16_t      __mode_t;       /* permissions */
-typedef        int             __accmode_t;    /* access permissions */
-typedef        int             __nl_item;
-typedef        __uint16_t      __nlink_t;      /* link count */
-typedef        __int64_t       __off_t;        /* file offset */
-typedef        __int32_t       __pid_t;        /* process [group] */
-typedef        __int64_t       __rlim_t;       /* resource limit - intentionally */
-                                       /* signed, because of legacy code */
-                                       /* that uses -1 for RLIM_INFINITY */
-typedef        __uint8_t       __sa_family_t;
-typedef        __uint32_t      __socklen_t;
-typedef        long            __suseconds_t;  /* microseconds (signed) */
-typedef        struct __timer  *__timer_t;     /* timer_gettime()... */
-typedef        struct __mq     *__mqd_t;       /* mq_open()... */
-typedef        __uint32_t      __uid_t;
-typedef        unsigned int    __useconds_t;   /* microseconds (unsigned) */
-typedef        int             __cpuwhich_t;   /* which parameter for cpuset. */
-typedef        int             __cpulevel_t;   /* level parameter for cpuset. */
-typedef int            __cpusetid_t;   /* cpuset identifier. */
-
-/*
- * Unusual type definitions.
- */
-/*
- * rune_t is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''.  Two things are happening here.  It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used.  Also,
- * it looks like 10646 will be a 31 bit standard.  This means that if your
- * ints cannot hold 32 bits, you will be in trouble.  The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use __ct_rune_t instead of int.
- *
- * NOTE: rune_t is not covered by ANSI nor other standards, and should not
- * be instantiated outside of lib/libc/locale.  Use wchar_t.  wchar_t and
- * rune_t must be the same type.  Also, wint_t must be no narrower than
- * wchar_t, and should be able to hold all members of the largest
- * character set plus one extra value (WEOF), and must be at least 16 bits.
- */
-typedef        int             __ct_rune_t;    /* arg type for ctype funcs */
-typedef        __ct_rune_t     __rune_t;       /* rune_t (see above) */
-typedef        __ct_rune_t     __wchar_t;      /* wchar_t (see above) */
-typedef        __ct_rune_t     __wint_t;       /* wint_t (see above) */
-
-typedef        __uint32_t      __dev_t;        /* device number */
-
-typedef        __uint32_t      __fixpt_t;      /* fixed point number */
-
-/*
- * mbstate_t is an opaque object to keep conversion state during multibyte
- * stream conversions.
- */
-typedef union {
-       char            __mbstate8[128];
-       __int64_t       _mbstateL;      /* for alignment */
-} __mbstate_t;
-
-#endif /* !_SYS__TYPES_H_ */
diff --git a/include/lib/stdlib/sys/cdefs.h b/include/lib/stdlib/sys/cdefs.h
deleted file mode 100644 (file)
index 70c09fd..0000000
+++ /dev/null
@@ -1,688 +0,0 @@
-/*-
- * Copyright (c) 1991, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Berkeley Software Design, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)cdefs.h     8.8 (Berkeley) 1/9/95
- * $FreeBSD$
- */
-
-#ifndef        _SYS_CDEFS_H_
-#define        _SYS_CDEFS_H_
-
-#if defined(__cplusplus)
-#define        __BEGIN_DECLS   extern "C" {
-#define        __END_DECLS     }
-#else
-#define        __BEGIN_DECLS
-#define        __END_DECLS
-#endif
-
-/*
- * This code has been put in place to help reduce the addition of
- * compiler specific defines in FreeBSD code.  It helps to aid in
- * having a compiler-agnostic source tree.
- */
-
-#if defined(__GNUC__) || defined(__INTEL_COMPILER)
-
-#if __GNUC__ >= 3 || defined(__INTEL_COMPILER)
-#define __GNUCLIKE_ASM 3
-#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
-#else
-#define __GNUCLIKE_ASM 2
-#endif
-#define __GNUCLIKE___TYPEOF 1
-#define __GNUCLIKE___OFFSETOF 1
-#define __GNUCLIKE___SECTION 1
-
-#ifndef __INTEL_COMPILER
-# define __GNUCLIKE_CTOR_SECTION_HANDLING 1
-#endif
-
-#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
-# if defined(__INTEL_COMPILER) && defined(__cplusplus) \
-    && __INTEL_COMPILER < 800
-#  undef __GNUCLIKE_BUILTIN_CONSTANT_P
-# endif
-
-#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3) && !defined(__INTEL_COMPILER)
-# define __GNUCLIKE_BUILTIN_VARARGS 1
-# define __GNUCLIKE_BUILTIN_STDARG 1
-# define __GNUCLIKE_BUILTIN_VAALIST 1
-#endif
-
-#if defined(__GNUC__)
-# define __GNUC_VA_LIST_COMPATIBILITY 1
-#endif
-
-#ifndef __INTEL_COMPILER
-# define __GNUCLIKE_BUILTIN_NEXT_ARG 1
-# define __GNUCLIKE_MATH_BUILTIN_RELOPS
-#endif
-
-#define __GNUCLIKE_BUILTIN_MEMCPY 1
-
-/* XXX: if __GNUC__ >= 2: not tested everywhere originally, where replaced */
-#define __CC_SUPPORTS_INLINE 1
-#define __CC_SUPPORTS___INLINE 1
-#define __CC_SUPPORTS___INLINE__ 1
-
-#define __CC_SUPPORTS___FUNC__ 1
-#define __CC_SUPPORTS_WARNING 1
-
-#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */
-
-#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
-
-#endif /* __GNUC__ || __INTEL_COMPILER */
-
-/*
- * Macro to test if we're using a specific version of gcc or later.
- */
-#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
-#define        __GNUC_PREREQ__(ma, mi) \
-       (__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))
-#else
-#define        __GNUC_PREREQ__(ma, mi) 0
-#endif
-
-/*
- * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
- * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
- * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
- * mode -- there must be no spaces between its arguments, and for nested
- * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
- * concatenate double-quoted strings produced by the __STRING macro, but
- * this only works with ANSI C.
- *
- * __XSTRING is like __STRING, but it expands any macros in its argument
- * first.  It is only available with ANSI C.
- */
-#if defined(__STDC__) || defined(__cplusplus)
-#define        __P(protos)     protos          /* full-blown ANSI C */
-#define        __CONCAT1(x,y)  x ## y
-#define        __CONCAT(x,y)   __CONCAT1(x,y)
-#define        __STRING(x)     #x              /* stringify without expanding x */
-#define        __XSTRING(x)    __STRING(x)     /* expand x, then stringify */
-
-#define        __const         const           /* define reserved names to standard */
-#define        __signed        signed
-#define        __volatile      volatile
-#if defined(__cplusplus)
-#define        __inline        inline          /* convert to C++ keyword */
-#else
-#if !(defined(__CC_SUPPORTS___INLINE))
-#define        __inline                        /* delete GCC keyword */
-#endif /* ! __CC_SUPPORTS___INLINE */
-#endif /* !__cplusplus */
-
-#else  /* !(__STDC__ || __cplusplus) */
-#define        __P(protos)     ()              /* traditional C preprocessor */
-#define        __CONCAT(x,y)   x/**/y
-#define        __STRING(x)     "x"
-
-#if !defined(__CC_SUPPORTS___INLINE)
-#define        __const                         /* delete pseudo-ANSI C keywords */
-#define        __inline
-#define        __signed
-#define        __volatile
-/*
- * In non-ANSI C environments, new programs will want ANSI-only C keywords
- * deleted from the program and old programs will want them left alone.
- * When using a compiler other than gcc, programs using the ANSI C keywords
- * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
- * When using "gcc -traditional", we assume that this is the intent; if
- * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
- */
-#ifndef        NO_ANSI_KEYWORDS
-#define        const                           /* delete ANSI C keywords */
-#define        inline
-#define        signed
-#define        volatile
-#endif /* !NO_ANSI_KEYWORDS */
-#endif /* !__CC_SUPPORTS___INLINE */
-#endif /* !(__STDC__ || __cplusplus) */
-
-/*
- * Compiler-dependent macros to help declare dead (non-returning) and
- * pure (no side effects) functions, and unused variables.  They are
- * null except for versions of gcc that are known to support the features
- * properly (old versions of gcc-2 supported the dead and pure features
- * in a different (wrong) way).  If we do not provide an implementation
- * for a given compiler, let the compile fail if it is told to use
- * a feature that we cannot live without.
- */
-#ifdef lint
-#define        __dead2
-#define        __pure2
-#define        __unused
-#define        __packed
-#define        __aligned(x)
-#define        __section(x)
-#else
-#if !__GNUC_PREREQ__(2, 5) && !defined(__INTEL_COMPILER)
-#define        __dead2
-#define        __pure2
-#define        __unused
-#endif
-#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 && !defined(__INTEL_COMPILER)
-#define        __dead2         __attribute__((__noreturn__))
-#define        __pure2         __attribute__((__const__))
-#define        __unused
-/* XXX Find out what to do for __packed, __aligned and __section */
-#endif
-#if __GNUC_PREREQ__(2, 7)
-#define        __dead2         __attribute__((__noreturn__))
-#define        __pure2         __attribute__((__const__))
-#define        __unused        __attribute__((__unused__))
-#define        __used          __attribute__((__used__))
-#define        __packed        __attribute__((__packed__))
-#define        __aligned(x)    __attribute__((__aligned__(x)))
-#define        __section(x)    __attribute__((__section__(x)))
-#endif
-#if defined(__INTEL_COMPILER)
-#define __dead2                __attribute__((__noreturn__))
-#define __pure2                __attribute__((__const__))
-#define __unused       __attribute__((__unused__))
-#define __used         __attribute__((__used__))
-#define __packed       __attribute__((__packed__))
-#define __aligned(x)   __attribute__((__aligned__(x)))
-#define __section(x)   __attribute__((__section__(x)))
-#endif
-#endif
-
-#if !__GNUC_PREREQ__(2, 95)
-#define        __alignof(x)    __offsetof(struct { char __a; x __b; }, __b)
-#endif
-
-/*
- * Keywords added in C11.
- */
-#if defined(__cplusplus) && __cplusplus >= 201103L
-#define        _Alignas(e)             alignas(e)
-#define        _Alignof(e)             alignof(e)
-#define        _Noreturn               [[noreturn]]
-#define        _Static_assert(e, s)    static_assert(e, s)
-/* FIXME: change this to thread_local when clang in base supports it */
-#define        _Thread_local           __thread
-#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
-/* Do nothing.  They are language keywords. */
-#else
-/* Not supported.  Implement them using our versions. */
-#define        _Alignas(x)             __aligned(x)
-#define        _Alignof(x)             __alignof(x)
-#define        _Noreturn               __dead2
-#define        _Thread_local           __thread
-#ifdef __COUNTER__
-#define        _Static_assert(x, y)    __Static_assert(x, __COUNTER__)
-#define        __Static_assert(x, y)   ___Static_assert(x, y)
-#define        ___Static_assert(x, y)  typedef char __assert_ ## y[(x) ? 1 : -1]
-#else
-#define        _Static_assert(x, y)    struct __hack
-#endif
-#endif
-
-/*
- * Emulation of C11 _Generic().  Unlike the previously defined C11
- * keywords, it is not possible to implement this using exactly the same
- * syntax.  Therefore implement something similar under the name
- * __generic().  Unlike _Generic(), this macro can only distinguish
- * between a single type, so it requires nested invocations to
- * distinguish multiple cases.
- */
-
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
-#define        __generic(expr, t, yes, no)                                     \
-       _Generic(expr, t: yes, default: no)
-#elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus)
-#define        __generic(expr, t, yes, no)                                     \
-       __builtin_choose_expr(                                          \
-           __builtin_types_compatible_p(__typeof(expr), t), yes, no)
-#endif
-
-#if __GNUC_PREREQ__(2, 96)
-#define        __malloc_like   __attribute__((__malloc__))
-#define        __pure          __attribute__((__pure__))
-#else
-#define        __malloc_like
-#define        __pure
-#endif
-
-#if __GNUC_PREREQ__(3, 1) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800)
-#define        __always_inline __attribute__((__always_inline__))
-#else
-#define        __always_inline
-#endif
-
-#if __GNUC_PREREQ__(3, 1)
-#define        __noinline      __attribute__ ((__noinline__))
-#define        __deprecated    __attribute__ ((__deprecated__))
-#else
-#define        __noinline
-#define        __deprecated
-#endif
-
-#if __GNUC_PREREQ__(3, 3)
-#define __nonnull(x)   __attribute__((__nonnull__(x)))
-#else
-#define __nonnull(x)
-#endif
-
-#if __GNUC_PREREQ__(3, 4)
-#define        __fastcall      __attribute__((__fastcall__))
-#else
-#define        __fastcall
-#endif
-
-#if __GNUC_PREREQ__(4, 1)
-#define        __returns_twice __attribute__((__returns_twice__))
-#else
-#define        __returns_twice
-#endif
-
-/* XXX: should use `#if __STDC_VERSION__ < 199901'. */
-#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER)
-#define        __func__        NULL
-#endif
-
-#if (defined(__INTEL_COMPILER) || (defined(__GNUC__) && __GNUC__ >= 2)) && !defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901
-#define        __LONG_LONG_SUPPORTED
-#endif
-
-/* C++11 exposes a load of C99 stuff */
-#if defined(__cplusplus) && __cplusplus >= 201103L
-#define        __LONG_LONG_SUPPORTED
-#ifndef        __STDC_LIMIT_MACROS
-#define        __STDC_LIMIT_MACROS
-#endif
-#ifndef        __STDC_CONSTANT_MACROS
-#define        __STDC_CONSTANT_MACROS
-#endif
-#endif
-
-/*
- * GCC 2.95 provides `__restrict' as an extension to C90 to support the
- * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as
- * a way to define the `restrict' type qualifier without disturbing older
- * software that is unaware of C99 keywords.
- */
-#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95)
-#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901 || defined(lint)
-#define        __restrict
-#else
-#define        __restrict      restrict
-#endif
-#endif
-
-/*
- * GNU C version 2.96 adds explicit branch prediction so that
- * the CPU back-end can hint the processor and also so that
- * code blocks can be reordered such that the predicted path
- * sees a more linear flow, thus improving cache behavior, etc.
- *
- * The following two macros provide us with a way to utilize this
- * compiler feature.  Use __predict_true() if you expect the expression
- * to evaluate to true, and __predict_false() if you expect the
- * expression to evaluate to false.
- *
- * A few notes about usage:
- *
- *     * Generally, __predict_false() error condition checks (unless
- *       you have some _strong_ reason to do otherwise, in which case
- *       document it), and/or __predict_true() `no-error' condition
- *       checks, assuming you want to optimize for the no-error case.
- *
- *     * Other than that, if you don't know the likelihood of a test
- *       succeeding from empirical or other `hard' evidence, don't
- *       make predictions.
- *
- *     * These are meant to be used in places that are run `a lot'.
- *       It is wasteful to make predictions in code that is run
- *       seldomly (e.g. at subsystem initialization time) as the
- *       basic block reordering that this affects can often generate
- *       larger code.
- */
-#if __GNUC_PREREQ__(2, 96)
-#define __predict_true(exp)     __builtin_expect((exp), 1)
-#define __predict_false(exp)    __builtin_expect((exp), 0)
-#else
-#define __predict_true(exp)     (exp)
-#define __predict_false(exp)    (exp)
-#endif
-
-#if __GNUC_PREREQ__(4, 2)
-#define        __hidden        __attribute__((__visibility__("hidden")))
-#define        __exported      __attribute__((__visibility__("default")))
-#else
-#define        __hidden
-#define        __exported
-#endif
-
-/*
- * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h>
- * require it.
- */
-#if __GNUC_PREREQ__(4, 1)
-#define __offsetof(type, field)         __builtin_offsetof(type, field)
-#else
-#ifndef __cplusplus
-#define        __offsetof(type, field) \
-       ((__size_t)(__uintptr_t)((const volatile void *)&((type *)0)->field))
-#else
-#define __offsetof(type, field)                                        \
-  (__offsetof__ (reinterpret_cast <__size_t>                   \
-                 (&reinterpret_cast <const volatile char &>    \
-                  (static_cast<type *> (0)->field))))
-#endif
-#endif
-#define        __rangeof(type, start, end) \
-       (__offsetof(type, end) - __offsetof(type, start))
-
-/*
- * Given the pointer x to the member m of the struct s, return
- * a pointer to the containing structure.  When using GCC, we first
- * assign pointer x to a local variable, to check that its type is
- * compatible with member m.
- */
-#if __GNUC_PREREQ__(3, 1)
-#define        __containerof(x, s, m) ({                                       \
-       const volatile __typeof(((s *)0)->m) *__x = (x);                \
-       __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));\
-})
-#else
-#define        __containerof(x, s, m)                                          \
-       __DEQUALIFY(s *, (const volatile char *)(x) - __offsetof(s, m))
-#endif
-
-/*
- * Compiler-dependent macros to declare that functions take printf-like
- * or scanf-like arguments.  They are null except for versions of gcc
- * that are known to support the features properly (old versions of gcc-2
- * didn't permit keeping the keywords out of the application namespace).
- */
-#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER)
-#define        __printflike(fmtarg, firstvararg)
-#define        __scanflike(fmtarg, firstvararg)
-#define        __format_arg(fmtarg)
-#define        __strfmonlike(fmtarg, firstvararg)
-#define        __strftimelike(fmtarg, firstvararg)
-#else
-#define        __printflike(fmtarg, firstvararg) \
-           __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
-#define        __scanflike(fmtarg, firstvararg) \
-           __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
-#define        __format_arg(fmtarg)    __attribute__((__format_arg__ (fmtarg)))
-#define        __strfmonlike(fmtarg, firstvararg) \
-           __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
-#define        __strftimelike(fmtarg, firstvararg) \
-           __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
-#endif
-
-/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
-#if __FreeBSD_cc_version >= 300001 && defined(__GNUC__) && !defined(__INTEL_COMPILER)
-#define        __printf0like(fmtarg, firstvararg) \
-           __attribute__((__format__ (__printf0__, fmtarg, firstvararg)))
-#else
-#define        __printf0like(fmtarg, firstvararg)
-#endif
-
-#if defined(__GNUC__) || defined(__INTEL_COMPILER)
-#ifndef __INTEL_COMPILER
-#define        __strong_reference(sym,aliassym)        \
-       extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
-#endif
-#ifdef __STDC__
-#define        __weak_reference(sym,alias)     \
-       __asm__(".weak " #alias);       \
-       __asm__(".equ "  #alias ", " #sym)
-#define        __warn_references(sym,msg)      \
-       __asm__(".section .gnu.warning." #sym); \
-       __asm__(".asciz \"" msg "\"");  \
-       __asm__(".previous")
-#define        __sym_compat(sym,impl,verid)    \
-       __asm__(".symver " #impl ", " #sym "@" #verid)
-#define        __sym_default(sym,impl,verid)   \
-       __asm__(".symver " #impl ", " #sym "@@" #verid)
-#else
-#define        __weak_reference(sym,alias)     \
-       __asm__(".weak alias");         \
-       __asm__(".equ alias, sym")
-#define        __warn_references(sym,msg)      \
-       __asm__(".section .gnu.warning.sym"); \
-       __asm__(".asciz \"msg\"");      \
-       __asm__(".previous")
-#define        __sym_compat(sym,impl,verid)    \
-       __asm__(".symver impl, sym@verid")
-#define        __sym_default(impl,sym,verid)   \
-       __asm__(".symver impl, sym@@verid")
-#endif /* __STDC__ */
-#endif /* __GNUC__ || __INTEL_COMPILER */
-
-#define        __GLOBL1(sym)   __asm__(".globl " #sym)
-#define        __GLOBL(sym)    __GLOBL1(sym)
-
-#if defined(__GNUC__) || defined(__INTEL_COMPILER)
-#define        __IDSTRING(name,string) __asm__(".ident\t\"" string "\"")
-#else
-/*
- * The following definition might not work well if used in header files,
- * but it should be better than nothing.  If you want a "do nothing"
- * version, then it should generate some harmless declaration, such as:
- *    #define __IDSTRING(name,string)  struct __hack
- */
-#define        __IDSTRING(name,string) static const char name[] __unused = string
-#endif
-
-/*
- * Embed the rcs id of a source file in the resulting library.  Note that in
- * more recent ELF binutils, we use .ident allowing the ID to be stripped.
- * Usage:
- *     __FBSDID("$FreeBSD$");
- */
-#ifndef        __FBSDID
-#if !defined(lint) && !defined(STRIP_FBSDID)
-#define        __FBSDID(s)     __IDSTRING(__CONCAT(__rcsid_,__LINE__),s)
-#else
-#define        __FBSDID(s)     struct __hack
-#endif
-#endif
-
-#ifndef        __RCSID
-#ifndef        NO__RCSID
-#define        __RCSID(s)      __IDSTRING(__CONCAT(__rcsid_,__LINE__),s)
-#else
-#define        __RCSID(s)      struct __hack
-#endif
-#endif
-
-#ifndef        __RCSID_SOURCE
-#ifndef        NO__RCSID_SOURCE
-#define        __RCSID_SOURCE(s)       __IDSTRING(__CONCAT(__rcsid_source_,__LINE__),s)
-#else
-#define        __RCSID_SOURCE(s)       struct __hack
-#endif
-#endif
-
-#ifndef        __SCCSID
-#ifndef        NO__SCCSID
-#define        __SCCSID(s)     __IDSTRING(__CONCAT(__sccsid_,__LINE__),s)
-#else
-#define        __SCCSID(s)     struct __hack
-#endif
-#endif
-
-#ifndef        __COPYRIGHT
-#ifndef        NO__COPYRIGHT
-#define        __COPYRIGHT(s)  __IDSTRING(__CONCAT(__copyright_,__LINE__),s)
-#else
-#define        __COPYRIGHT(s)  struct __hack
-#endif
-#endif
-
-#ifndef        __DECONST
-#define        __DECONST(type, var)    ((type)(__uintptr_t)(const void *)(var))
-#endif
-
-#ifndef        __DEVOLATILE
-#define        __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var))
-#endif
-
-#ifndef        __DEQUALIFY
-#define        __DEQUALIFY(type, var)  ((type)(__uintptr_t)(const volatile void *)(var))
-#endif
-
-/*-
- * The following definitions are an extension of the behavior originally
- * implemented in <sys/_posix.h>, but with a different level of granularity.
- * POSIX.1 requires that the macros we test be defined before any standard
- * header file is included.
- *
- * Here's a quick run-down of the versions:
- *  defined(_POSIX_SOURCE)             1003.1-1988
- *  _POSIX_C_SOURCE == 1               1003.1-1990
- *  _POSIX_C_SOURCE == 2               1003.2-1992 C Language Binding Option
- *  _POSIX_C_SOURCE == 199309          1003.1b-1993
- *  _POSIX_C_SOURCE == 199506          1003.1c-1995, 1003.1i-1995,
- *                                     and the omnibus ISO/IEC 9945-1: 1996
- *  _POSIX_C_SOURCE == 200112          1003.1-2001
- *  _POSIX_C_SOURCE == 200809          1003.1-2008
- *
- * In addition, the X/Open Portability Guide, which is now the Single UNIX
- * Specification, defines a feature-test macro which indicates the version of
- * that specification, and which subsumes _POSIX_C_SOURCE.
- *
- * Our macros begin with two underscores to avoid namespace screwage.
- */
-
-/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
-#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1
-#undef _POSIX_C_SOURCE         /* Probably illegal, but beyond caring now. */
-#define        _POSIX_C_SOURCE         199009
-#endif
-
-/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
-#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         199209
-#endif
-
-/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
-#ifdef _XOPEN_SOURCE
-#if _XOPEN_SOURCE - 0 >= 700
-#define        __XSI_VISIBLE           700
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         200809
-#elif _XOPEN_SOURCE - 0 >= 600
-#define        __XSI_VISIBLE           600
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         200112
-#elif _XOPEN_SOURCE - 0 >= 500
-#define        __XSI_VISIBLE           500
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         199506
-#endif
-#endif
-
-/*
- * Deal with all versions of POSIX.  The ordering relative to the tests above is
- * important.
- */
-#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
-#define        _POSIX_C_SOURCE         198808
-#endif
-#ifdef _POSIX_C_SOURCE
-#if _POSIX_C_SOURCE >= 200809
-#define        __POSIX_VISIBLE         200809
-#define        __ISO_C_VISIBLE         1999
-#elif _POSIX_C_SOURCE >= 200112
-#define        __POSIX_VISIBLE         200112
-#define        __ISO_C_VISIBLE         1999
-#elif _POSIX_C_SOURCE >= 199506
-#define        __POSIX_VISIBLE         199506
-#define        __ISO_C_VISIBLE         1990
-#elif _POSIX_C_SOURCE >= 199309
-#define        __POSIX_VISIBLE         199309
-#define        __ISO_C_VISIBLE         1990
-#elif _POSIX_C_SOURCE >= 199209
-#define        __POSIX_VISIBLE         199209
-#define        __ISO_C_VISIBLE         1990
-#elif _POSIX_C_SOURCE >= 199009
-#define        __POSIX_VISIBLE         199009
-#define        __ISO_C_VISIBLE         1990
-#else
-#define        __POSIX_VISIBLE         198808
-#define        __ISO_C_VISIBLE         0
-#endif /* _POSIX_C_SOURCE */
-#else
-/*-
- * Deal with _ANSI_SOURCE:
- * If it is defined, and no other compilation environment is explicitly
- * requested, then define our internal feature-test macros to zero.  This
- * makes no difference to the preprocessor (undefined symbols in preprocessing
- * expressions are defined to have value zero), but makes it more convenient for
- * a test program to print out the values.
- *
- * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
- * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
- * environment (and in fact we will never get here).
- */
-#if defined(_ANSI_SOURCE)      /* Hide almost everything. */
-#define        __POSIX_VISIBLE         0
-#define        __XSI_VISIBLE           0
-#define        __BSD_VISIBLE           0
-#define        __ISO_C_VISIBLE         1990
-#elif defined(_C99_SOURCE)     /* Localism to specify strict C99 env. */
-#define        __POSIX_VISIBLE         0
-#define        __XSI_VISIBLE           0
-#define        __BSD_VISIBLE           0
-#define        __ISO_C_VISIBLE         1999
-#else                          /* Default environment: show everything. */
-#define        __POSIX_VISIBLE         200809
-#define        __XSI_VISIBLE           700
-#define        __BSD_VISIBLE           1
-#define        __ISO_C_VISIBLE         1999
-#endif
-#endif
-
-#ifndef        __has_feature
-#define        __has_feature(x) 0
-#endif
-#ifndef        __has_include
-#define        __has_include(x) 0
-#endif
-#ifndef        __has_builtin
-#define        __has_builtin(x) 0
-#endif
-
-#if defined(__mips) || defined(__powerpc64__) || defined(__arm__)
-#define __NO_TLS 1
-#endif
-
-#endif /* !_SYS_CDEFS_H_ */
diff --git a/include/lib/stdlib/sys/ctype.h b/include/lib/stdlib/sys/ctype.h
deleted file mode 100644 (file)
index f2758b7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*-
- * Copyright (c) 1982, 1988, 1991, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/*
- * Portions copyright (c) 2009-2014, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#ifndef _SYS_CTYPE_H_
-#define        _SYS_CTYPE_H_
-
-#define isspace(c)     ((c) == ' ' || ((c) >= '\t' && (c) <= '\r'))
-#define isascii(c)     (((c) & ~0x7f) == 0)
-#define isupper(c)     ((c) >= 'A' && (c) <= 'Z')
-#define islower(c)     ((c) >= 'a' && (c) <= 'z')
-#define isalpha(c)     (isupper(c) || islower(c))
-#define isdigit(c)     ((c) >= '0' && (c) <= '9')
-#define isxdigit(c)    (isdigit(c) \
-                         || ((c) >= 'A' && (c) <= 'F') \
-                         || ((c) >= 'a' && (c) <= 'f'))
-#define isprint(c)     ((c) >= ' ' && (c) <= '~')
-
-#define toupper(c)     ((c) - 0x20 * (((c) >= 'a') && ((c) <= 'z')))
-#define tolower(c)     ((c) + 0x20 * (((c) >= 'A') && ((c) <= 'Z')))
-
-#endif /* !_SYS_CTYPE_H_ */
diff --git a/include/lib/stdlib/sys/endian.h b/include/lib/stdlib/sys/endian.h
deleted file mode 100644 (file)
index d50110c..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*-
- * Copyright (c) 2002 Thomas Moestl <tmm@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_ENDIAN_H_
-#define _SYS_ENDIAN_H_
-
-#include <sys/cdefs.h>
-#include <sys/_types.h>
-#include <machine/endian.h>
-
-#ifndef _UINT8_T_DECLARED
-typedef        __uint8_t       uint8_t;
-#define        _UINT8_T_DECLARED
-#endif
-#ifndef _UINT16_T_DECLARED
-typedef        __uint16_t      uint16_t;
-#define        _UINT16_T_DECLARED
-#endif
-#ifndef _UINT32_T_DECLARED
-typedef        __uint32_t      uint32_t;
-#define        _UINT32_T_DECLARED
-#endif
-#ifndef _UINT64_T_DECLARED
-typedef        __uint64_t      uint64_t;
-#define        _UINT64_T_DECLARED
-#endif
-/*
- * General byte order swapping functions.
- */
-#define        bswap16(x)      __bswap16(x)
-#define        bswap32(x)      __bswap32(x)
-#define        bswap64(x)      __bswap64(x)
-
-/*
- * Host to big endian, host to little endian, big endian to host, and little
- * endian to host byte order functions as detailed in byteorder(9).
- */
-#if _BYTE_ORDER == _LITTLE_ENDIAN
-#define        htobe16(x)      bswap16((x))
-#define        htobe32(x)      bswap32((x))
-#define        htobe64(x)      bswap64((x))
-#define        htole16(x)      ((uint16_t)(x))
-#define        htole32(x)      ((uint32_t)(x))
-#define        htole64(x)      ((uint64_t)(x))
-
-#define        be16toh(x)      bswap16((x))
-#define        be32toh(x)      bswap32((x))
-#define        be64toh(x)      bswap64((x))
-#define        le16toh(x)      ((uint16_t)(x))
-#define        le32toh(x)      ((uint32_t)(x))
-#define        le64toh(x)      ((uint64_t)(x))
-#else /* _BYTE_ORDER != _LITTLE_ENDIAN */
-#define        htobe16(x)      ((uint16_t)(x))
-#define        htobe32(x)      ((uint32_t)(x))
-#define        htobe64(x)      ((uint64_t)(x))
-#define        htole16(x)      bswap16((x))
-#define        htole32(x)      bswap32((x))
-#define        htole64(x)      bswap64((x))
-
-#define        be16toh(x)      ((uint16_t)(x))
-#define        be32toh(x)      ((uint32_t)(x))
-#define        be64toh(x)      ((uint64_t)(x))
-#define        le16toh(x)      bswap16((x))
-#define        le32toh(x)      bswap32((x))
-#define        le64toh(x)      bswap64((x))
-#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
-
-/* Alignment-agnostic encode/decode bytestream to/from little/big endian. */
-
-static __inline uint16_t
-be16dec(const void *pp)
-{
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return ((p[0] << 8) | p[1]);
-}
-
-static __inline uint32_t
-be32dec(const void *pp)
-{
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return (((unsigned)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
-}
-
-static __inline uint64_t
-be64dec(const void *pp)
-{
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return (((uint64_t)be32dec(p) << 32) | be32dec(p + 4));
-}
-
-static __inline uint16_t
-le16dec(const void *pp)
-{
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return ((p[1] << 8) | p[0]);
-}
-
-static __inline uint32_t
-le32dec(const void *pp)
-{
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return (((unsigned)p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
-}
-
-static __inline uint64_t
-le64dec(const void *pp)
-{
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return (((uint64_t)le32dec(p + 4) << 32) | le32dec(p));
-}
-
-static __inline void
-be16enc(void *pp, uint16_t u)
-{
-       uint8_t *p = (uint8_t *)pp;
-
-       p[0] = (u >> 8) & 0xff;
-       p[1] = u & 0xff;
-}
-
-static __inline void
-be32enc(void *pp, uint32_t u)
-{
-       uint8_t *p = (uint8_t *)pp;
-
-       p[0] = (u >> 24) & 0xff;
-       p[1] = (u >> 16) & 0xff;
-       p[2] = (u >> 8) & 0xff;
-       p[3] = u & 0xff;
-}
-
-static __inline void
-be64enc(void *pp, uint64_t u)
-{
-       uint8_t *p = (uint8_t *)pp;
-
-       be32enc(p, (uint32_t)(u >> 32));
-       be32enc(p + 4, (uint32_t)(u & 0xffffffffU));
-}
-
-static __inline void
-le16enc(void *pp, uint16_t u)
-{
-       uint8_t *p = (uint8_t *)pp;
-
-       p[0] = u & 0xff;
-       p[1] = (u >> 8) & 0xff;
-}
-
-static __inline void
-le32enc(void *pp, uint32_t u)
-{
-       uint8_t *p = (uint8_t *)pp;
-
-       p[0] = u & 0xff;
-       p[1] = (u >> 8) & 0xff;
-       p[2] = (u >> 16) & 0xff;
-       p[3] = (u >> 24) & 0xff;
-}
-
-static __inline void
-le64enc(void *pp, uint64_t u)
-{
-       uint8_t *p = (uint8_t *)pp;
-
-       le32enc(p, (uint32_t)(u & 0xffffffffU));
-       le32enc(p + 4, (uint32_t)(u >> 32));
-}
-
-#endif /* _SYS_ENDIAN_H_ */
diff --git a/include/lib/stdlib/sys/errno.h b/include/lib/stdlib/sys/errno.h
deleted file mode 100644 (file)
index f595514..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986, 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)errno.h     8.5 (Berkeley) 1/21/94
- * $FreeBSD$
- */
-
-#ifndef _SYS_ERRNO_H_
-#define _SYS_ERRNO_H_
-
-#ifndef _KERNEL
-#include <sys/cdefs.h>
-__BEGIN_DECLS
-int *  __error(void);
-__END_DECLS
-#define        errno           (* __error())
-#endif
-
-#define        EPERM           1               /* Operation not permitted */
-#define        ENOENT          2               /* No such file or directory */
-#define        ESRCH           3               /* No such process */
-#define        EINTR           4               /* Interrupted system call */
-#define        EIO             5               /* Input/output error */
-#define        ENXIO           6               /* Device not configured */
-#define        E2BIG           7               /* Argument list too long */
-#define        ENOEXEC         8               /* Exec format error */
-#define        EBADF           9               /* Bad file descriptor */
-#define        ECHILD          10              /* No child processes */
-#define        EDEADLK         11              /* Resource deadlock avoided */
-                                       /* 11 was EAGAIN */
-#define        ENOMEM          12              /* Cannot allocate memory */
-#define        EACCES          13              /* Permission denied */
-#define        EFAULT          14              /* Bad address */
-#ifndef _POSIX_SOURCE
-#define        ENOTBLK         15              /* Block device required */
-#endif
-#define        EBUSY           16              /* Device busy */
-#define        EEXIST          17              /* File exists */
-#define        EXDEV           18              /* Cross-device link */
-#define        ENODEV          19              /* Operation not supported by device */
-#define        ENOTDIR         20              /* Not a directory */
-#define        EISDIR          21              /* Is a directory */
-#define        EINVAL          22              /* Invalid argument */
-#define        ENFILE          23              /* Too many open files in system */
-#define        EMFILE          24              /* Too many open files */
-#define        ENOTTY          25              /* Inappropriate ioctl for device */
-#ifndef _POSIX_SOURCE
-#define        ETXTBSY         26              /* Text file busy */
-#endif
-#define        EFBIG           27              /* File too large */
-#define        ENOSPC          28              /* No space left on device */
-#define        ESPIPE          29              /* Illegal seek */
-#define        EROFS           30              /* Read-only filesystem */
-#define        EMLINK          31              /* Too many links */
-#define        EPIPE           32              /* Broken pipe */
-
-/* math software */
-#define        EDOM            33              /* Numerical argument out of domain */
-#define        ERANGE          34              /* Result too large */
-
-/* non-blocking and interrupt i/o */
-#define        EAGAIN          35              /* Resource temporarily unavailable */
-#ifndef _POSIX_SOURCE
-#define        EWOULDBLOCK     EAGAIN          /* Operation would block */
-#define        EINPROGRESS     36              /* Operation now in progress */
-#define        EALREADY        37              /* Operation already in progress */
-
-/* ipc/network software -- argument errors */
-#define        ENOTSOCK        38              /* Socket operation on non-socket */
-#define        EDESTADDRREQ    39              /* Destination address required */
-#define        EMSGSIZE        40              /* Message too long */
-#define        EPROTOTYPE      41              /* Protocol wrong type for socket */
-#define        ENOPROTOOPT     42              /* Protocol not available */
-#define        EPROTONOSUPPORT 43              /* Protocol not supported */
-#define        ESOCKTNOSUPPORT 44              /* Socket type not supported */
-#define        EOPNOTSUPP      45              /* Operation not supported */
-#define        ENOTSUP         EOPNOTSUPP      /* Operation not supported */
-#define        EPFNOSUPPORT    46              /* Protocol family not supported */
-#define        EAFNOSUPPORT    47              /* Address family not supported by protocol family */
-#define        EADDRINUSE      48              /* Address already in use */
-#define        EADDRNOTAVAIL   49              /* Can't assign requested address */
-
-/* ipc/network software -- operational errors */
-#define        ENETDOWN        50              /* Network is down */
-#define        ENETUNREACH     51              /* Network is unreachable */
-#define        ENETRESET       52              /* Network dropped connection on reset */
-#define        ECONNABORTED    53              /* Software caused connection abort */
-#define        ECONNRESET      54              /* Connection reset by peer */
-#define        ENOBUFS         55              /* No buffer space available */
-#define        EISCONN         56              /* Socket is already connected */
-#define        ENOTCONN        57              /* Socket is not connected */
-#define        ESHUTDOWN       58              /* Can't send after socket shutdown */
-#define        ETOOMANYREFS    59              /* Too many references: can't splice */
-#define        ETIMEDOUT       60              /* Operation timed out */
-#define        ECONNREFUSED    61              /* Connection refused */
-
-#define        ELOOP           62              /* Too many levels of symbolic links */
-#endif /* _POSIX_SOURCE */
-#define        ENAMETOOLONG    63              /* File name too long */
-
-/* should be rearranged */
-#ifndef _POSIX_SOURCE
-#define        EHOSTDOWN       64              /* Host is down */
-#define        EHOSTUNREACH    65              /* No route to host */
-#endif /* _POSIX_SOURCE */
-#define        ENOTEMPTY       66              /* Directory not empty */
-
-/* quotas & mush */
-#ifndef _POSIX_SOURCE
-#define        EPROCLIM        67              /* Too many processes */
-#define        EUSERS          68              /* Too many users */
-#define        EDQUOT          69              /* Disc quota exceeded */
-
-/* Network File System */
-#define        ESTALE          70              /* Stale NFS file handle */
-#define        EREMOTE         71              /* Too many levels of remote in path */
-#define        EBADRPC         72              /* RPC struct is bad */
-#define        ERPCMISMATCH    73              /* RPC version wrong */
-#define        EPROGUNAVAIL    74              /* RPC prog. not avail */
-#define        EPROGMISMATCH   75              /* Program version wrong */
-#define        EPROCUNAVAIL    76              /* Bad procedure for program */
-#endif /* _POSIX_SOURCE */
-
-#define        ENOLCK          77              /* No locks available */
-#define        ENOSYS          78              /* Function not implemented */
-
-#ifndef _POSIX_SOURCE
-#define        EFTYPE          79              /* Inappropriate file type or format */
-#define        EAUTH           80              /* Authentication error */
-#define        ENEEDAUTH       81              /* Need authenticator */
-#define        EIDRM           82              /* Identifier removed */
-#define        ENOMSG          83              /* No message of desired type */
-#define        EOVERFLOW       84              /* Value too large to be stored in data type */
-#define        ECANCELED       85              /* Operation canceled */
-#define        EILSEQ          86              /* Illegal byte sequence */
-#define        ENOATTR         87              /* Attribute not found */
-
-#define        EDOOFUS         88              /* Programming error */
-#endif /* _POSIX_SOURCE */
-
-#define        EBADMSG         89              /* Bad message */
-#define        EMULTIHOP       90              /* Multihop attempted */
-#define        ENOLINK         91              /* Link has been severed */
-#define        EPROTO          92              /* Protocol error */
-
-#ifndef _POSIX_SOURCE
-#define        ENOTCAPABLE     93              /* Capabilities insufficient */
-#define        ECAPMODE        94              /* Not permitted in capability mode */
-#endif /* _POSIX_SOURCE */
-
-#ifndef _POSIX_SOURCE
-#define        ELAST           94              /* Must be equal largest errno */
-#endif /* _POSIX_SOURCE */
-
-#ifdef _KERNEL
-/* pseudo-errors returned inside kernel to modify return to process */
-#define        ERESTART        (-1)            /* restart syscall */
-#define        EJUSTRETURN     (-2)            /* don't modify regs, just return */
-#define        ENOIOCTL        (-3)            /* ioctl not handled by this layer */
-#define        EDIRIOCTL       (-4)            /* do direct ioctl in GEOM */
-#endif
-
-#endif
diff --git a/include/lib/stdlib/sys/limits.h b/include/lib/stdlib/sys/limits.h
deleted file mode 100644 (file)
index c56a337..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * Copyright (c) 1988, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_LIMITS_H_
-#define        _SYS_LIMITS_H_
-
-#include <sys/cdefs.h>
-#include <machine/_limits.h>
-
-#define        CHAR_BIT        __CHAR_BIT      /* number of bits in a char */
-
-#define        SCHAR_MAX       __SCHAR_MAX     /* max value for a signed char */
-#define        SCHAR_MIN       __SCHAR_MIN     /* min value for a signed char */
-
-#define        UCHAR_MAX       __UCHAR_MAX     /* max value for an unsigned char */
-
-#ifdef __CHAR_UNSIGNED__
-#define        CHAR_MAX        UCHAR_MAX       /* max value for a char */
-#define        CHAR_MIN        0               /* min value for a char */
-#else
-#define        CHAR_MAX        SCHAR_MAX
-#define        CHAR_MIN        SCHAR_MIN
-#endif
-
-#define        USHRT_MAX       __USHRT_MAX     /* max value for an unsigned short */
-#define        SHRT_MAX        __SHRT_MAX      /* max value for a short */
-#define        SHRT_MIN        __SHRT_MIN      /* min value for a short */
-
-#define        UINT_MAX        __UINT_MAX      /* max value for an unsigned int */
-#define        INT_MAX         __INT_MAX       /* max value for an int */
-#define        INT_MIN         __INT_MIN       /* min value for an int */
-
-#define        ULONG_MAX       __ULONG_MAX     /* max for an unsigned long */
-#define        LONG_MAX        __LONG_MAX      /* max for a long */
-#define        LONG_MIN        __LONG_MIN      /* min for a long */
-
-#ifdef __LONG_LONG_SUPPORTED
-#define        ULLONG_MAX      __ULLONG_MAX    /* max for an unsigned long long */
-#define        LLONG_MAX       __LLONG_MAX     /* max for a long long */
-#define        LLONG_MIN       __LLONG_MIN     /* min for a long long */
-#endif
-
-#if __POSIX_VISIBLE || __XSI_VISIBLE
-#define        SSIZE_MAX       __SSIZE_MAX     /* max value for an ssize_t */
-#endif
-
-#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE
-#define        SIZE_T_MAX      __SIZE_T_MAX    /* max value for a size_t */
-
-#define        OFF_MAX         __OFF_MAX       /* max value for an off_t */
-#define        OFF_MIN         __OFF_MIN       /* min value for an off_t */
-#endif
-
-#if __BSD_VISIBLE
-#define        GID_MAX         UINT_MAX        /* max value for a gid_t */
-#define        UID_MAX         UINT_MAX        /* max value for a uid_t */
-
-#define        UQUAD_MAX       (__UQUAD_MAX)   /* max value for a uquad_t */
-#define        QUAD_MAX        (__QUAD_MAX)    /* max value for a quad_t */
-#define        QUAD_MIN        (__QUAD_MIN)    /* min value for a quad_t */
-#endif
-
-#if __XSI_VISIBLE || __POSIX_VISIBLE >= 200809
-#define        LONG_BIT        __LONG_BIT
-#define        WORD_BIT        __WORD_BIT
-#endif
-
-#if __POSIX_VISIBLE
-#define        MQ_PRIO_MAX     64
-#endif
-
-#endif /* !_SYS_LIMITS_H_ */
diff --git a/include/lib/stdlib/sys/stdarg.h b/include/lib/stdlib/sys/stdarg.h
deleted file mode 100644 (file)
index c315dfc..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*-
- * Copyright (c) 2002 David E. O'Brien.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_STDARG_H_
-#define        _MACHINE_STDARG_H_
-
-#include <sys/cdefs.h>
-#include <sys/_types.h>
-
-#ifndef _VA_LIST_DECLARED
-#define        _VA_LIST_DECLARED
-typedef        __va_list       va_list;
-#endif
-
-#ifdef __GNUCLIKE_BUILTIN_STDARG
-
-#define        va_start(ap, last) \
-       __builtin_va_start((ap), (last))
-
-#define        va_arg(ap, type) \
-       __builtin_va_arg((ap), type)
-
-#define        __va_copy(dest, src) \
-       __builtin_va_copy((dest), (src))
-
-#if __ISO_C_VISIBLE >= 1999
-#define        va_copy(dest, src) \
-       __va_copy(dest, src)
-#endif
-
-#define        va_end(ap) \
-       __builtin_va_end(ap)
-
-#elif defined(lint)
-/* Provide a fake implementation for lint's benefit */
-#define        __va_size(type) \
-       (((sizeof(type) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
-#define        va_start(ap, last) \
-       ((ap) = (va_list)&(last) + __va_size(last))
-#define        va_arg(ap, type) \
-       (*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
-#define        va_end(ap)
-
-#else
-#error this file needs to be ported to your compiler
-#endif
-
-#endif /* !_MACHINE_STDARG_H_ */
diff --git a/include/lib/stdlib/sys/stdint.h b/include/lib/stdlib/sys/stdint.h
deleted file mode 100644 (file)
index aa5ac81..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*-
- * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_STDINT_H_
-#define _SYS_STDINT_H_
-
-#include <sys/cdefs.h>
-#include <sys/_types.h>
-
-#include <machine/_stdint.h>
-#include <sys/_stdint.h>
-
-typedef        __int_least8_t          int_least8_t;
-typedef        __int_least16_t         int_least16_t;
-typedef        __int_least32_t         int_least32_t;
-typedef        __int_least64_t         int_least64_t;
-
-typedef        __uint_least8_t         uint_least8_t;
-typedef        __uint_least16_t        uint_least16_t;
-typedef        __uint_least32_t        uint_least32_t;
-typedef        __uint_least64_t        uint_least64_t;
-
-typedef        __int_fast8_t           int_fast8_t;
-typedef        __int_fast16_t          int_fast16_t;
-typedef        __int_fast32_t          int_fast32_t;
-typedef        __int_fast64_t          int_fast64_t;
-
-typedef        __uint_fast8_t          uint_fast8_t;
-typedef        __uint_fast16_t         uint_fast16_t;
-typedef        __uint_fast32_t         uint_fast32_t;
-typedef        __uint_fast64_t         uint_fast64_t;
-
-#ifndef _INTMAX_T_DECLARED
-typedef        __intmax_t              intmax_t;
-#define        _INTMAX_T_DECLARED
-#endif
-#ifndef _UINTMAX_T_DECLARED
-typedef        __uintmax_t             uintmax_t;
-#define        _UINTMAX_T_DECLARED
-#endif
-
-/* GNU and Darwin define this and people seem to think it's portable */
-#if defined(UINTPTR_MAX) && defined(UINT64_MAX) && (UINTPTR_MAX == UINT64_MAX)
-#define        __WORDSIZE              64
-#else
-#define        __WORDSIZE              32
-#endif
-
-#endif /* !_SYS_STDINT_H_ */
diff --git a/include/lib/stdlib/sys/timespec.h b/include/lib/stdlib/sys/timespec.h
deleted file mode 100644 (file)
index 2505cef..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)time.h      8.5 (Berkeley) 5/4/95
- * from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
- *     $FreeBSD$
- */
-
-#ifndef _SYS_TIMESPEC_H_
-#define _SYS_TIMESPEC_H_
-
-#include <sys/cdefs.h>
-#include <sys/_timespec.h>
-
-#if __BSD_VISIBLE
-#define        TIMEVAL_TO_TIMESPEC(tv, ts)                                     \
-       do {                                                            \
-               (ts)->tv_sec = (tv)->tv_sec;                            \
-               (ts)->tv_nsec = (tv)->tv_usec * 1000;                   \
-       } while (0)
-#define        TIMESPEC_TO_TIMEVAL(tv, ts)                                     \
-       do {                                                            \
-               (tv)->tv_sec = (ts)->tv_sec;                            \
-               (tv)->tv_usec = (ts)->tv_nsec / 1000;                   \
-       } while (0)
-
-#endif /* __BSD_VISIBLE */
-
-/*
- * Structure defined by POSIX.1b to be like a itimerval, but with
- * timespecs. Used in the timer_*() system calls.
- */
-struct itimerspec {
-       struct timespec  it_interval;
-       struct timespec  it_value;
-};
-
-#endif /* _SYS_TIMESPEC_H_ */
diff --git a/include/lib/stdlib/sys/types.h b/include/lib/stdlib/sys/types.h
deleted file mode 100644 (file)
index ae2ea33..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986, 1991, 1993, 1994
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)types.h     8.6 (Berkeley) 2/19/95
- * $FreeBSD$
- */
-
-#ifndef _SYS_TYPES_H_
-#define        _SYS_TYPES_H_
-
-#include <sys/cdefs.h>
-
-/* Machine type dependent parameters. */
-#include <sys/_types.h>
-
-#if __BSD_VISIBLE
-typedef        unsigned char   u_char;
-typedef        unsigned short  u_short;
-typedef        unsigned int    u_int;
-typedef        unsigned long   u_long;
-#ifndef _KERNEL
-typedef        unsigned short  ushort;         /* Sys V compatibility */
-typedef        unsigned int    uint;           /* Sys V compatibility */
-#endif
-#endif
-
-/*
- * XXX POSIX sized integrals that should appear only in <sys/stdint.h>.
- */
-#include <sys/_stdint.h>
-
-typedef __uint8_t      u_int8_t;       /* unsigned integrals (deprecated) */
-typedef __uint16_t     u_int16_t;
-typedef __uint32_t     u_int32_t;
-typedef __uint64_t     u_int64_t;
-
-typedef        __uint64_t      u_quad_t;       /* quads (deprecated) */
-typedef        __int64_t       quad_t;
-typedef        quad_t          *qaddr_t;
-
-typedef        char            *caddr_t;       /* core address */
-typedef        const char      *c_caddr_t;     /* core address, pointer to const */
-
-#ifndef _BLKSIZE_T_DECLARED
-typedef        __blksize_t     blksize_t;
-#define        _BLKSIZE_T_DECLARED
-#endif
-
-typedef        __cpuwhich_t    cpuwhich_t;
-typedef        __cpulevel_t    cpulevel_t;
-typedef        __cpusetid_t    cpusetid_t;
-
-#ifndef _BLKCNT_T_DECLARED
-typedef        __blkcnt_t      blkcnt_t;
-#define        _BLKCNT_T_DECLARED
-#endif
-
-#ifndef _CLOCK_T_DECLARED
-typedef        __clock_t       clock_t;
-#define        _CLOCK_T_DECLARED
-#endif
-
-#ifndef _CLOCKID_T_DECLARED
-typedef        __clockid_t     clockid_t;
-#define        _CLOCKID_T_DECLARED
-#endif
-
-typedef        __critical_t    critical_t;     /* Critical section value */
-typedef        __int64_t       daddr_t;        /* disk address */
-
-#ifndef _DEV_T_DECLARED
-typedef        __dev_t         dev_t;          /* device number or struct cdev */
-#define        _DEV_T_DECLARED
-#endif
-
-#ifndef _FFLAGS_T_DECLARED
-typedef        __fflags_t      fflags_t;       /* file flags */
-#define        _FFLAGS_T_DECLARED
-#endif
-
-typedef        __fixpt_t       fixpt_t;        /* fixed point number */
-
-#ifndef _FSBLKCNT_T_DECLARED           /* for statvfs() */
-typedef        __fsblkcnt_t    fsblkcnt_t;
-typedef        __fsfilcnt_t    fsfilcnt_t;
-#define        _FSBLKCNT_T_DECLARED
-#endif
-
-#ifndef _GID_T_DECLARED
-typedef        __gid_t         gid_t;          /* group id */
-#define        _GID_T_DECLARED
-#endif
-
-#ifndef _IN_ADDR_T_DECLARED
-typedef        __uint32_t      in_addr_t;      /* base type for internet address */
-#define        _IN_ADDR_T_DECLARED
-#endif
-
-#ifndef _IN_PORT_T_DECLARED
-typedef        __uint16_t      in_port_t;
-#define        _IN_PORT_T_DECLARED
-#endif
-
-#ifndef _ID_T_DECLARED
-typedef        __id_t          id_t;           /* can hold a uid_t or pid_t */
-#define        _ID_T_DECLARED
-#endif
-
-#ifndef _INO_T_DECLARED
-typedef        __ino_t         ino_t;          /* inode number */
-#define        _INO_T_DECLARED
-#endif
-
-#ifndef _KEY_T_DECLARED
-typedef        __key_t         key_t;          /* IPC key (for Sys V IPC) */
-#define        _KEY_T_DECLARED
-#endif
-
-#ifndef _LWPID_T_DECLARED
-typedef        __lwpid_t       lwpid_t;        /* Thread ID (a.k.a. LWP) */
-#define        _LWPID_T_DECLARED
-#endif
-
-#ifndef _MODE_T_DECLARED
-typedef        __mode_t        mode_t;         /* permissions */
-#define        _MODE_T_DECLARED
-#endif
-
-#ifndef _ACCMODE_T_DECLARED
-typedef        __accmode_t     accmode_t;      /* access permissions */
-#define        _ACCMODE_T_DECLARED
-#endif
-
-#ifndef _NLINK_T_DECLARED
-typedef        __nlink_t       nlink_t;        /* link count */
-#define        _NLINK_T_DECLARED
-#endif
-
-#ifndef _OFF_T_DECLARED
-typedef        __off_t         off_t;          /* file offset */
-#define        _OFF_T_DECLARED
-#endif
-
-#ifndef _PID_T_DECLARED
-typedef        __pid_t         pid_t;          /* process id */
-#define        _PID_T_DECLARED
-#endif
-
-typedef        __register_t    register_t;
-
-#ifndef _RLIM_T_DECLARED
-typedef        __rlim_t        rlim_t;         /* resource limit */
-#define        _RLIM_T_DECLARED
-#endif
-
-typedef        __int64_t       sbintime_t;
-
-typedef        __segsz_t       segsz_t;        /* segment size (in pages) */
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-#ifndef _SSIZE_T_DECLARED
-typedef        __ssize_t       ssize_t;
-#define        _SSIZE_T_DECLARED
-#endif
-
-#ifndef _SUSECONDS_T_DECLARED
-typedef        __suseconds_t   suseconds_t;    /* microseconds (signed) */
-#define        _SUSECONDS_T_DECLARED
-#endif
-
-#ifndef _TIME_T_DECLARED
-typedef        __time_t        time_t;
-#define        _TIME_T_DECLARED
-#endif
-
-#ifndef _TIMER_T_DECLARED
-typedef        __timer_t       timer_t;
-#define        _TIMER_T_DECLARED
-#endif
-
-#ifndef _MQD_T_DECLARED
-typedef        __mqd_t mqd_t;
-#define        _MQD_T_DECLARED
-#endif
-
-typedef        __u_register_t  u_register_t;
-
-#ifndef _UID_T_DECLARED
-typedef        __uid_t         uid_t;          /* user id */
-#define        _UID_T_DECLARED
-#endif
-
-#ifndef _USECONDS_T_DECLARED
-typedef        __useconds_t    useconds_t;     /* microseconds (unsigned) */
-#define        _USECONDS_T_DECLARED
-#endif
-
-#ifndef _CAP_RIGHTS_T_DECLARED
-#define        _CAP_RIGHTS_T_DECLARED
-struct cap_rights;
-
-typedef        struct cap_rights       cap_rights_t;
-#endif
-
-typedef        __vm_offset_t   vm_offset_t;
-typedef        __vm_ooffset_t  vm_ooffset_t;
-typedef        __vm_paddr_t    vm_paddr_t;
-typedef        __vm_pindex_t   vm_pindex_t;
-typedef        __vm_size_t     vm_size_t;
-
-#endif /* !_SYS_TYPES_H_ */
diff --git a/include/lib/stdlib/time.h b/include/lib/stdlib/time.h
deleted file mode 100644 (file)
index 08200cf..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)time.h      8.3 (Berkeley) 1/21/94
- */
-
-/*
- * $FreeBSD$
- */
-
-#ifndef _TIME_H_
-#define        _TIME_H_
-
-#include <sys/cdefs.h>
-#include <sys/_null.h>
-#include <sys/_types.h>
-
-#if __POSIX_VISIBLE > 0 && __POSIX_VISIBLE < 200112 || __BSD_VISIBLE
-/*
- * Frequency of the clock ticks reported by times().  Deprecated - use
- * sysconf(_SC_CLK_TCK) instead.  (Removed in 1003.1-2001.)
- */
-#define        CLK_TCK         128
-#endif
-
-/* Frequency of the clock ticks reported by clock().  */
-#define        CLOCKS_PER_SEC  128
-
-#ifndef _CLOCK_T_DECLARED
-typedef        __clock_t       clock_t;
-#define        _CLOCK_T_DECLARED
-#endif
-
-#ifndef _TIME_T_DECLARED
-typedef        __time_t        time_t;
-#define        _TIME_T_DECLARED
-#endif
-
-#ifndef _SIZE_T_DECLARED
-typedef        __size_t        size_t;
-#define        _SIZE_T_DECLARED
-#endif
-
-#if __POSIX_VISIBLE >= 199309
-/*
- * New in POSIX 1003.1b-1993.
- */
-#ifndef _CLOCKID_T_DECLARED
-typedef        __clockid_t     clockid_t;
-#define        _CLOCKID_T_DECLARED
-#endif
-
-#ifndef _TIMER_T_DECLARED
-typedef        __timer_t       timer_t;
-#define        _TIMER_T_DECLARED
-#endif
-
-#include <sys/timespec.h>
-#endif /* __POSIX_VISIBLE >= 199309 */
-
-#if __POSIX_VISIBLE >= 200112
-#ifndef _PID_T_DECLARED
-typedef        __pid_t         pid_t;
-#define        _PID_T_DECLARED
-#endif
-#endif
-
-/* These macros are also in sys/time.h. */
-#if !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 200112
-#define CLOCK_REALTIME 0
-#ifdef __BSD_VISIBLE
-#define CLOCK_VIRTUAL  1
-#define CLOCK_PROF     2
-#endif
-#define CLOCK_MONOTONIC        4
-#define CLOCK_UPTIME   5               /* FreeBSD-specific. */
-#define CLOCK_UPTIME_PRECISE   7       /* FreeBSD-specific. */
-#define CLOCK_UPTIME_FAST      8       /* FreeBSD-specific. */
-#define CLOCK_REALTIME_PRECISE 9       /* FreeBSD-specific. */
-#define CLOCK_REALTIME_FAST    10      /* FreeBSD-specific. */
-#define CLOCK_MONOTONIC_PRECISE        11      /* FreeBSD-specific. */
-#define CLOCK_MONOTONIC_FAST   12      /* FreeBSD-specific. */
-#define CLOCK_SECOND   13              /* FreeBSD-specific. */
-#define CLOCK_THREAD_CPUTIME_ID        14
-#define        CLOCK_PROCESS_CPUTIME_ID        15
-#endif /* !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 200112 */
-
-#if !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 200112
-#if __BSD_VISIBLE
-#define TIMER_RELTIME  0x0     /* relative timer */
-#endif
-#define TIMER_ABSTIME  0x1     /* absolute timer */
-#endif /* !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 200112 */
-
-struct tm {
-       int     tm_sec;         /* seconds after the minute [0-60] */
-       int     tm_min;         /* minutes after the hour [0-59] */
-       int     tm_hour;        /* hours since midnight [0-23] */
-       int     tm_mday;        /* day of the month [1-31] */
-       int     tm_mon;         /* months since January [0-11] */
-       int     tm_year;        /* years since 1900 */
-       int     tm_wday;        /* days since Sunday [0-6] */
-       int     tm_yday;        /* days since January 1 [0-365] */
-       int     tm_isdst;       /* Daylight Savings Time flag */
-       long    tm_gmtoff;      /* offset from UTC in seconds */
-       char    *tm_zone;       /* timezone abbreviation */
-};
-
-#if __POSIX_VISIBLE
-extern char *tzname[];
-#endif
-
-__BEGIN_DECLS
-char *asctime(const struct tm *);
-clock_t clock(void);
-char *ctime(const time_t *);
-double difftime(time_t, time_t);
-/* XXX missing: getdate() */
-struct tm *gmtime(const time_t *);
-struct tm *localtime(const time_t *);
-time_t mktime(struct tm *);
-size_t strftime(char *__restrict, size_t, const char *__restrict,
-    const struct tm *__restrict);
-time_t time(time_t *);
-#if __POSIX_VISIBLE >= 200112
-struct sigevent;
-int timer_create(clockid_t, struct sigevent *__restrict, timer_t *__restrict);
-int timer_delete(timer_t);
-int timer_gettime(timer_t, struct itimerspec *);
-int timer_getoverrun(timer_t);
-int timer_settime(timer_t, int, const struct itimerspec *__restrict,
-       struct itimerspec *__restrict);
-#endif
-#if __POSIX_VISIBLE
-void tzset(void);
-#endif
-
-#if __POSIX_VISIBLE >= 199309
-int clock_getres(clockid_t, struct timespec *);
-int clock_gettime(clockid_t, struct timespec *);
-int clock_settime(clockid_t, const struct timespec *);
-/* XXX missing: clock_nanosleep() */
-int nanosleep(const struct timespec *, struct timespec *);
-#endif /* __POSIX_VISIBLE >= 199309 */
-
-#if __POSIX_VISIBLE >= 200112
-int clock_getcpuclockid(pid_t, clockid_t *);
-#endif
-
-#if __POSIX_VISIBLE >= 199506
-char *asctime_r(const struct tm *, char *);
-char *ctime_r(const time_t *, char *);
-struct tm *gmtime_r(const time_t *, struct tm *);
-struct tm *localtime_r(const time_t *, struct tm *);
-#endif
-
-#if __XSI_VISIBLE
-char *strptime(const char *__restrict, const char *__restrict,
-    struct tm *__restrict);
-#endif
-
-#if __BSD_VISIBLE
-char *timezone(int, int);      /* XXX XSI conflict */
-void tzsetwall(void);
-time_t timelocal(struct tm * const);
-time_t timegm(struct tm * const);
-#endif /* __BSD_VISIBLE */
-
-#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
-#include <xlocale/_time.h>
-#endif
-__END_DECLS
-
-#endif /* !_TIME_H_ */
diff --git a/include/lib/stdlib/xlocale/_strings.h b/include/lib/stdlib/xlocale/_strings.h
deleted file mode 100644 (file)
index da1cff3..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*-
- * Copyright (c) 2011, 2012 The FreeBSD Foundation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _LOCALE_T_DEFINED
-#define _LOCALE_T_DEFINED
-typedef struct _xlocale *locale_t;
-#endif
-
-/*
- * This file is included from both strings.h and xlocale.h.  We need to expose
- * the declarations unconditionally if we are included from xlocale.h, but only
- * if we are in POSIX2008 mode if included from string.h.
- */
-
-#ifndef _XLOCALE_STRINGS1_H
-#define _XLOCALE_STRINGS1_H
-
-/*
- * POSIX2008 functions
- */
-int     strcasecmp_l(const char *, const char *, locale_t);
-int     strncasecmp_l(const char *, const char *, size_t, locale_t);
-#endif /* _XLOCALE_STRINGS1_H */
diff --git a/include/lib/stdlib/xlocale/_time.h b/include/lib/stdlib/xlocale/_time.h
deleted file mode 100644 (file)
index 6da49a4..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*-
- * Copyright (c) 2011, 2012 The FreeBSD Foundation
- * All rights reserved.
- *
- * This software was developed by David Chisnall under sponsorship from
- * the FreeBSD Foundation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _LOCALE_T_DEFINED
-#define _LOCALE_T_DEFINED
-typedef struct _xlocale *locale_t;
-#endif
-
-/*
- * This file is included from both locale.h and xlocale.h.  We need to expose
- * the declarations unconditionally if we are included from xlocale.h, but only
- * if we are in POSIX2008 mode if included from locale.h.
- */
-#ifndef _XLOCALE_LOCALE1_H
-#define _XLOCALE_LOCALE1_H
-
-size_t  strftime_l(char *__restrict, size_t, const char *__restrict,
-           const struct tm *__restrict, locale_t) __strftimelike(3, 0);
-
-#endif /* _XLOCALE_LOCALE1_H */
-
-#ifdef _XLOCALE_H_
-#ifndef _XLOCALE_LOCALE2_H
-#define _XLOCALE_LOCALE2_H
-
-char   *strptime_l(const char *__restrict, const char *__restrict,
-               struct tm *__restrict, locale_t);
-
-#endif /* _XLOCALE_LOCALE2_H */
-#endif /* _XLOCALE_H_ */
index cd42c33e132e040c9dc139511a26185d16568e73..e1d02277ba8be0d1f826390e2ab808c3adc7fd3d 100644 (file)
@@ -67,15 +67,24 @@ void setup_mmu_cfg(uint64_t *params, unsigned int flags,
 
 #ifdef AARCH32
 /* AArch32 specific translation table API */
+#if !ERROR_DEPRECATED
 void enable_mmu_secure(unsigned int flags);
-
 void enable_mmu_direct(unsigned int flags);
+#endif
+
+void enable_mmu_svc_mon(unsigned int flags);
+void enable_mmu_hyp(unsigned int flags);
+
+void enable_mmu_direct_svc_mon(unsigned int flags);
+void enable_mmu_direct_hyp(unsigned int flags);
 #else
 /* AArch64 specific translation table APIs */
 void enable_mmu_el1(unsigned int flags);
+void enable_mmu_el2(unsigned int flags);
 void enable_mmu_el3(unsigned int flags);
 
 void enable_mmu_direct_el1(unsigned int flags);
+void enable_mmu_direct_el2(unsigned int flags);
 void enable_mmu_direct_el3(unsigned int flags);
 #endif /* AARCH32 */
 
index 022accee541bc046ff6dec579c1e8837355db95b..52c4dc6dd3a6ae215a1d049798f30b150e8445ed 100644 (file)
@@ -125,6 +125,7 @@ typedef struct mmap_region {
  * library to detect it at runtime.
  */
 #define EL1_EL0_REGIME         1
+#define EL2_REGIME             2
 #define EL3_REGIME             3
 #define EL_REGIME_INVALID      -1
 
index c3ae5643b6df6494c9f293333050ca2a478ebdf6..a388ed9acf714f80d17a549c24c556c609a1b0bc 100644 (file)
 #elif defined(IMAGE_BL32)
 # define PLAT_ARM_MMAP_ENTRIES         8
 # define MAX_XLAT_TABLES               5
-#else
+#elif !USE_ROMLIB
 # define PLAT_ARM_MMAP_ENTRIES         11
 # define MAX_XLAT_TABLES               5
+#else
+# define PLAT_ARM_MMAP_ENTRIES         12
+# define MAX_XLAT_TABLES               6
 #endif
 
 /*
  */
 #define PLAT_ARM_MAX_BL1_RW_SIZE       0xB000
 
+/*
+ * PLAT_ARM_MAX_ROMLIB_RW_SIZE is define to use a full page
+ */
+
+#if USE_ROMLIB
+#define PLAT_ARM_MAX_ROMLIB_RW_SIZE    0x1000
+#define PLAT_ARM_MAX_ROMLIB_RO_SIZE    0xe000
+#else
+#define PLAT_ARM_MAX_ROMLIB_RW_SIZE    0
+#define PLAT_ARM_MAX_ROMLIB_RO_SIZE    0
+#endif
+
 /*
  * PLAT_ARM_MAX_BL2_SIZE is calculated using the current BL2 debug size plus a
  * little space for growth.
index 47f2ac210a484d6b449112e28b71bc7516be1517..5da8cdb4a274a6634b7499cd7407b12ceb88bb3f 100644 (file)
                                                        - BL_COHERENT_RAM_BASE, \
                                                MT_DEVICE | MT_RW | MT_SECURE)
 #endif
+#if USE_ROMLIB
+#define ARM_MAP_ROMLIB_CODE            MAP_REGION_FLAT(                        \
+                                               ROMLIB_RO_BASE,                 \
+                                               ROMLIB_RO_LIMIT - ROMLIB_RO_BASE,\
+                                               MT_CODE | MT_SECURE)
+
+#define ARM_MAP_ROMLIB_DATA            MAP_REGION_FLAT(                        \
+                                               ROMLIB_RW_BASE,                 \
+                                               ROMLIB_RW_END   - ROMLIB_RW_BASE,\
+                                               MT_MEMORY | MT_RW | MT_SECURE)
+#endif
 
 /*
  * The max number of regions like RO(code), coherent and data required by
  ******************************************************************************/
 #define BL1_RO_BASE                    PLAT_ARM_TRUSTED_ROM_BASE
 #define BL1_RO_LIMIT                   (PLAT_ARM_TRUSTED_ROM_BASE      \
-                                        + PLAT_ARM_TRUSTED_ROM_SIZE)
+                                        + (PLAT_ARM_TRUSTED_ROM_SIZE - \
+                                           PLAT_ARM_MAX_ROMLIB_RO_SIZE))
 /*
  * Put BL1 RW at the top of the Trusted SRAM.
  */
 #define BL1_RW_BASE                    (ARM_BL_RAM_BASE +              \
                                                ARM_BL_RAM_SIZE -       \
-                                               PLAT_ARM_MAX_BL1_RW_SIZE)
-#define BL1_RW_LIMIT                   (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
+                                               (PLAT_ARM_MAX_BL1_RW_SIZE +\
+                                                PLAT_ARM_MAX_ROMLIB_RW_SIZE))
+#define BL1_RW_LIMIT                   (ARM_BL_RAM_BASE +              \
+                                           (ARM_BL_RAM_SIZE - PLAT_ARM_MAX_ROMLIB_RW_SIZE))
+
+#define ROMLIB_RO_BASE                 BL1_RO_LIMIT
+#define ROMLIB_RO_LIMIT                        (PLAT_ARM_TRUSTED_ROM_BASE + PLAT_ARM_TRUSTED_ROM_SIZE)
+
+#define ROMLIB_RW_BASE                 (BL1_RW_BASE + PLAT_ARM_MAX_BL1_RW_SIZE)
+#define ROMLIB_RW_END                  (ROMLIB_RW_BASE + PLAT_ARM_MAX_ROMLIB_RW_SIZE)
 
 /*******************************************************************************
  * BL2 specific defines.
index 506bed348de20a21a1e44716fdb52b445bfe3154..1af4dd1acb0ae502adad7bd8c32658aba158954c 100644 (file)
@@ -72,6 +72,8 @@ typedef struct arm_tzc_regions_info {
 void arm_setup_page_tables(const mmap_region_t bl_regions[],
                           const mmap_region_t plat_regions[]);
 
+void arm_setup_romlib(void);
+
 #if defined(IMAGE_BL31) || (defined(AARCH32) && defined(IMAGE_BL32))
 /*
  * Use this macro to instantiate lock before it is used in below
diff --git a/lib/libc/abort.c b/lib/libc/abort.c
new file mode 100644 (file)
index 0000000..65ce4cc
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <debug.h>
+#include <stdlib.h>
+
+/*
+ * This is a basic implementation. This could be improved.
+ */
+void abort (void)
+{
+       ERROR("ABORT\n");
+       panic();
+}
diff --git a/lib/libc/assert.c b/lib/libc/assert.c
new file mode 100644 (file)
index 0000000..97fab4b
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <assert.h>
+#include <console.h>
+#include <debug.h>
+#include <platform.h>
+
+/*
+* Only print the output if PLAT_LOG_LEVEL_ASSERT is higher or equal to
+* LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1.
+*/
+
+#if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE
+void __assert(const char *file, unsigned int line, const char *assertion)
+{
+       tf_printf("ASSERT: %s:%d:%s\n", file, line, assertion);
+       console_flush();
+       plat_panic_handler();
+}
+#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
+void __assert(const char *file, unsigned int line)
+{
+       tf_printf("ASSERT: %s:%d\n", file, line);
+       console_flush();
+       plat_panic_handler();
+}
+#else
+void __assert(void)
+{
+       plat_panic_handler();
+}
+#endif
diff --git a/lib/libc/exit.c b/lib/libc/exit.c
new file mode 100644 (file)
index 0000000..b2fde9c
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdlib.h>
+
+static void (*exitfun)(void);
+
+void exit(int status)
+{
+       if (exitfun)
+               (*exitfun)();
+       for (;;)
+               ;
+}
+
+int atexit(void (*fun)(void))
+{
+       if (exitfun)
+               return -1;
+       exitfun = fun;
+
+       return 0;
+}
diff --git a/lib/libc/libc.mk b/lib/libc/libc.mk
new file mode 100644 (file)
index 0000000..ded3d74
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+LIBC_SRCS      :=      $(addprefix lib/libc/,  \
+                       abort.c                         \
+                       assert.c                        \
+                       exit.c                          \
+                       mem.c                           \
+                       printf.c                        \
+                       putchar.c                       \
+                       puts.c                          \
+                       sscanf.c                        \
+                       strchr.c                        \
+                       strcmp.c                        \
+                       strlen.c                        \
+                       strncmp.c                       \
+                       strnlen.c                       \
+                       subr_prf.c                      \
+                       timingsafe_bcmp.c)
+
+INCLUDES       +=      -Iinclude/lib/libc              \
+                       -Iinclude/lib/libc/sys
diff --git a/lib/libc/mem.c b/lib/libc/mem.c
new file mode 100644 (file)
index 0000000..65b62fd
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stddef.h> /* size_t */
+
+/*
+ * Fill @count bytes of memory pointed to by @dst with @val
+ */
+void *memset(void *dst, int val, size_t count)
+{
+       char *ptr = dst;
+
+       while (count--)
+               *ptr++ = val;
+
+       return dst;
+}
+
+/*
+ * Compare @len bytes of @s1 and @s2
+ */
+int memcmp(const void *s1, const void *s2, size_t len)
+{
+       const unsigned char *s = s1;
+       const unsigned char *d = s2;
+       unsigned char sc;
+       unsigned char dc;
+
+       while (len--) {
+               sc = *s++;
+               dc = *d++;
+               if (sc - dc)
+                       return (sc - dc);
+       }
+
+       return 0;
+}
+
+/*
+ * Copy @len bytes from @src to @dst
+ */
+void *memcpy(void *dst, const void *src, size_t len)
+{
+       const char *s = src;
+       char *d = dst;
+
+       while (len--)
+               *d++ = *s++;
+
+       return dst;
+}
+
+/*
+ * Move @len bytes from @src to @dst
+ */
+void *memmove(void *dst, const void *src, size_t len)
+{
+       /*
+        * The following test makes use of unsigned arithmetic overflow to
+        * more efficiently test the condition !(src <= dst && dst < str+len).
+        * It also avoids the situation where the more explicit test would give
+        * incorrect results were the calculation str+len to overflow (though
+        * that issue is probably moot as such usage is probably undefined
+        * behaviour and a bug anyway.
+        */
+       if ((size_t)dst - (size_t)src >= len) {
+               /* destination not in source data, so can safely use memcpy */
+               return memcpy(dst, src, len);
+       } else {
+               /* copy backwards... */
+               const char *end = dst;
+               const char *s = (const char *)src + len;
+               char *d = (char *)dst + len;
+               while (d != end)
+                       *--d = *--s;
+       }
+       return dst;
+}
+
+/*
+ * Scan @len bytes of @src for value @c
+ */
+void *memchr(const void *src, int c, size_t len)
+{
+       const char *s = src;
+
+       while (len--) {
+               if (*s == c)
+                       return (void *) s;
+               s++;
+       }
+
+       return NULL;
+}
diff --git a/lib/libc/printf.c b/lib/libc/printf.c
new file mode 100644 (file)
index 0000000..f615641
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+
+/* Choose max of 128 chars for now. */
+#define PRINT_BUFFER_SIZE 128
+int printf(const char *fmt, ...)
+{
+       va_list args;
+       char buf[PRINT_BUFFER_SIZE];
+       int count;
+
+       va_start(args, fmt);
+       vsnprintf(buf, sizeof(buf) - 1, fmt, args);
+       va_end(args);
+
+       /* Use putchar directly as 'puts()' adds a newline. */
+       buf[PRINT_BUFFER_SIZE - 1] = '\0';
+       count = 0;
+       while (buf[count])
+       {
+               if (putchar(buf[count]) != EOF) {
+                       count++;
+               } else {
+                       count = EOF;
+                       break;
+               }
+       }
+
+       return count;
+}
diff --git a/lib/libc/putchar.c b/lib/libc/putchar.c
new file mode 100644 (file)
index 0000000..8265667
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <console.h>
+
+/* Putchar() should either return the character printed or EOF in case of error.
+ * Our current console_putc() function assumes success and returns the
+ * character. Write all other printing functions in terms of putchar(), if
+ * possible, so they all benefit when this is improved.
+ */
+int putchar(int c)
+{
+       int res;
+       if (console_putc((unsigned char)c) >= 0)
+               res = c;
+       else
+               res = EOF;
+
+       return res;
+}
diff --git a/lib/libc/puts.c b/lib/libc/puts.c
new file mode 100644 (file)
index 0000000..284cf8c
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+
+int puts(const char *s)
+{
+       int count = 0;
+       while(*s) {
+               if (putchar(*s++) == EOF)
+                       return EOF;
+               count++;
+       }
+
+       /* According to the puts(3) manpage, the function should write a
+        * trailing newline.
+        */
+       if (putchar('\n') == EOF)
+               return EOF;
+
+       return count + 1;
+}
diff --git a/lib/libc/sscanf.c b/lib/libc/sscanf.c
new file mode 100644 (file)
index 0000000..a5876cf
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <sys/cdefs.h>
+
+/*
+ * TODO: This is not a real implementation of the sscanf() function. It just
+ * returns the number of expected arguments based on the number of '%' found
+ * in the format string.
+ */
+int
+sscanf(const char *__restrict str, char const *__restrict fmt, ...)
+{
+       int ret = 0;
+
+       while (*fmt != '\0') {
+               if (*fmt++ == '%') {
+                       ret++;
+               }
+       }
+
+       return ret;
+}
diff --git a/lib/libc/strchr.c b/lib/libc/strchr.c
new file mode 100644 (file)
index 0000000..4247dcd
--- /dev/null
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions copyright (c) 2013-2014, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#include <sys/cdefs.h>
+#include <stddef.h>
+#include <string.h>
+
+char *
+strchr(const char *p, int ch)
+{
+       char c;
+
+       c = ch;
+       for (;; ++p) {
+               if (*p == c)
+                       return ((char *)p);
+               if (*p == '\0')
+                       return (NULL);
+       }
+       /* NOTREACHED */
+}
diff --git a/lib/libc/strcmp.c b/lib/libc/strcmp.c
new file mode 100644 (file)
index 0000000..bb86e0f
--- /dev/null
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions copyright (c) 2014, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#include <sys/cdefs.h>
+#include <sys/ctype.h>
+#include <string.h>
+
+/*
+ * Compare strings.
+ */
+int
+strcmp(const char *s1, const char *s2)
+{
+       while (*s1 == *s2++)
+               if (*s1++ == '\0')
+                       return 0;
+       return *(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1);
+}
+
+int
+strcasecmp(const char *s1, const char *s2)
+{
+       const unsigned char *us1 = (const unsigned char *)s1;
+       const unsigned char *us2 = (const unsigned char *)s2;
+
+       while (tolower(*us1) == tolower(*us2)) {
+               if (*us1++ == '\0')
+                       return 0;
+               us2++;
+       }
+       return tolower(*us1) - tolower(*us2);
+}
diff --git a/lib/libc/strlen.c b/lib/libc/strlen.c
new file mode 100644 (file)
index 0000000..23c3d39
--- /dev/null
@@ -0,0 +1,44 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions copyright (c) 2009-2014, ARM Limited and Contributors. All rights reserved.
+ */
+
+#include <stddef.h>
+
+size_t
+strlen(str)
+       const char *str;
+{
+       register const char *s;
+
+       for (s = str; *s; ++s);
+       return(s - str);
+}
diff --git a/lib/libc/strncmp.c b/lib/libc/strncmp.c
new file mode 100644 (file)
index 0000000..f45f4a2
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions copyright (c) 2014, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#include <sys/cdefs.h>
+#include <string.h>
+
+int
+strncmp(const char *s1, const char *s2, size_t n)
+{
+
+       if (n == 0)
+               return 0;
+       do {
+               if (*s1 != *s2++)
+                       return (*(const unsigned char *)s1 -
+                               *(const unsigned char *)(s2 - 1));
+               if (*s1++ == '\0')
+                       break;
+       } while (--n != 0);
+       return 0;
+}
diff --git a/lib/libc/strnlen.c b/lib/libc/strnlen.c
new file mode 100644 (file)
index 0000000..d48502b
--- /dev/null
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2009 David Schultz <das@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
+ */
+
+#include <sys/cdefs.h>
+
+#include <string.h>
+
+size_t
+strnlen(const char *s, size_t maxlen)
+{
+       size_t len;
+
+       for (len = 0; len < maxlen; len++, s++) {
+               if (!*s)
+                       break;
+       }
+       return (len);
+}
diff --git a/lib/libc/subr_prf.c b/lib/libc/subr_prf.c
new file mode 100644 (file)
index 0000000..c103562
--- /dev/null
@@ -0,0 +1,548 @@
+/*-
+ * Copyright (c) 1986, 1988, 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)subr_prf.c  8.3 (Berkeley) 1/21/94
+ */
+
+/*
+ * Portions copyright (c) 2009-2014, ARM Limited and Contributors.
+ * All rights reserved.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <ctype.h>
+
+typedef unsigned char u_char;
+typedef unsigned int u_int;
+typedef int64_t quad_t;
+typedef uint64_t u_quad_t;
+typedef unsigned long u_long;
+typedef unsigned short u_short;
+
+static inline int imax(int a, int b) { return (a > b ? a : b); }
+
+/*
+ * Note that stdarg.h and the ANSI style va_start macro is used for both
+ * ANSI and traditional C compilers.
+ */
+
+#define TOCONS 0x01
+#define TOTTY  0x02
+#define TOLOG  0x04
+
+/* Max number conversion buffer length: a u_quad_t in base 2, plus NUL byte. */
+#define MAXNBUF        (sizeof(intmax_t) * 8 + 1)
+
+struct putchar_arg {
+       int     flags;
+       int     pri;
+       struct  tty *tty;
+       char    *p_bufr;
+       size_t  n_bufr;
+       char    *p_next;
+       size_t  remain;
+};
+
+struct snprintf_arg {
+       char    *str;
+       size_t  remain;
+};
+
+extern int log_open;
+
+static char *ksprintn(char *nbuf, uintmax_t num, int base, int *len, int upper);
+static void  snprintf_func(int ch, void *arg);
+static int kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_list ap);
+
+int vsnprintf(char *str, size_t size, const char *format, va_list ap);
+
+static char const hex2ascii_data[] = "0123456789abcdefghijklmnopqrstuvwxyz";
+#define hex2ascii(hex) (hex2ascii_data[hex])
+
+/*
+ * Scaled down version of sprintf(3).
+ */
+int
+sprintf(char *buf, const char *cfmt, ...)
+{
+       int retval;
+       va_list ap;
+
+       va_start(ap, cfmt);
+       retval = kvprintf(cfmt, NULL, (void *)buf, 10, ap);
+       buf[retval] = '\0';
+       va_end(ap);
+       return (retval);
+}
+
+/*
+ * Scaled down version of vsprintf(3).
+ */
+int
+vsprintf(char *buf, const char *cfmt, va_list ap)
+{
+       int retval;
+
+       retval = kvprintf(cfmt, NULL, (void *)buf, 10, ap);
+       buf[retval] = '\0';
+       return (retval);
+}
+
+/*
+ * Scaled down version of snprintf(3).
+ */
+int
+snprintf(char *str, size_t size, const char *format, ...)
+{
+       int retval;
+       va_list ap;
+
+       va_start(ap, format);
+       retval = vsnprintf(str, size, format, ap);
+       va_end(ap);
+       return(retval);
+}
+
+/*
+ * Scaled down version of vsnprintf(3).
+ */
+int
+vsnprintf(char *str, size_t size, const char *format, va_list ap)
+{
+       struct snprintf_arg info;
+       int retval;
+
+       info.str = str;
+       info.remain = size;
+       retval = kvprintf(format, snprintf_func, &info, 10, ap);
+       if (info.remain >= 1)
+               *info.str++ = '\0';
+       return (retval);
+}
+
+static void
+snprintf_func(int ch, void *arg)
+{
+       struct snprintf_arg *const info = arg;
+
+       if (info->remain >= 2) {
+               *info->str++ = ch;
+               info->remain--;
+       }
+}
+
+
+/*
+ * Kernel version which takes radix argument vsnprintf(3).
+ */
+int
+vsnrprintf(char *str, size_t size, int radix, const char *format, va_list ap)
+{
+       struct snprintf_arg info;
+       int retval;
+
+       info.str = str;
+       info.remain = size;
+       retval = kvprintf(format, snprintf_func, &info, radix, ap);
+       if (info.remain >= 1)
+               *info.str++ = '\0';
+       return (retval);
+}
+
+
+/*
+ * Put a NUL-terminated ASCII number (base <= 36) in a buffer in reverse
+ * order; return an optional length and a pointer to the last character
+ * written in the buffer (i.e., the first character of the string).
+ * The buffer pointed to by `nbuf' must have length >= MAXNBUF.
+ */
+static char *
+ksprintn(char *nbuf, uintmax_t num, int base, int *lenp, int upper)
+{
+       char *p, c;
+
+       p = nbuf;
+       *p = '\0';
+       do {
+               c = hex2ascii(num % base);
+               *++p = upper ? toupper(c) : c;
+       } while (num /= base);
+       if (lenp)
+               *lenp = p - nbuf;
+       return (p);
+}
+
+/*
+ * Scaled down version of printf(3).
+ *
+ * Two additional formats:
+ *
+ * The format %b is supported to decode error registers.
+ * Its usage is:
+ *
+ *     printf("reg=%b\n", regval, "<base><arg>*");
+ *
+ * where <base> is the output base expressed as a control character, e.g.
+ * \10 gives octal; \20 gives hex.  Each arg is a sequence of characters,
+ * the first of which gives the bit number to be inspected (origin 1), and
+ * the next characters (up to a control character, i.e. a character <= 32),
+ * give the name of the register.  Thus:
+ *
+ *     kvprintf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n");
+ *
+ * would produce output:
+ *
+ *     reg=3<BITTWO,BITONE>
+ *
+ * XXX:  %D  -- Hexdump, takes pointer and separator string:
+ *             ("%6D", ptr, ":")   -> XX:XX:XX:XX:XX:XX
+ *             ("%*D", len, ptr, " " -> XX XX XX XX ...
+ */
+int
+kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_list ap)
+{
+#define PCHAR(c) {int cc=(c); if (func) (*func)(cc,arg); else *d++ = cc; retval++; }
+       char nbuf[MAXNBUF];
+       char *d;
+       const char *p, *percent, *q;
+       u_char *up;
+       int ch, n;
+       uintmax_t num;
+       int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot;
+       int cflag, hflag, jflag, tflag, zflag;
+       int dwidth, upper;
+       char padc;
+       int stop = 0, retval = 0;
+
+       num = 0;
+       if (!func)
+               d = (char *) arg;
+       else
+               d = NULL;
+
+       if (fmt == NULL)
+               fmt = "(fmt null)\n";
+
+       if (radix < 2 || radix > 36)
+               radix = 10;
+
+       for (;;) {
+               padc = ' ';
+               width = 0;
+               while ((ch = (u_char)*fmt++) != '%' || stop) {
+                       if (ch == '\0')
+                               return (retval);
+                       PCHAR(ch);
+               }
+               percent = fmt - 1;
+               qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0;
+               sign = 0; dot = 0; dwidth = 0; upper = 0;
+               cflag = 0; hflag = 0; jflag = 0; tflag = 0; zflag = 0;
+reswitch:      switch (ch = (u_char)*fmt++) {
+               case '.':
+                       dot = 1;
+                       goto reswitch;
+               case '#':
+                       sharpflag = 1;
+                       goto reswitch;
+               case '+':
+                       sign = 1;
+                       goto reswitch;
+               case '-':
+                       ladjust = 1;
+                       goto reswitch;
+               case '%':
+                       PCHAR(ch);
+                       break;
+               case '*':
+                       if (!dot) {
+                               width = va_arg(ap, int);
+                               if (width < 0) {
+                                       ladjust = !ladjust;
+                                       width = -width;
+                               }
+                       } else {
+                               dwidth = va_arg(ap, int);
+                       }
+                       goto reswitch;
+               case '0':
+                       if (!dot) {
+                               padc = '0';
+                               goto reswitch;
+                       }
+               case '1': case '2': case '3': case '4':
+               case '5': case '6': case '7': case '8': case '9':
+                               for (n = 0;; ++fmt) {
+                                       n = n * 10 + ch - '0';
+                                       ch = *fmt;
+                                       if (ch < '0' || ch > '9')
+                                               break;
+                               }
+                       if (dot)
+                               dwidth = n;
+                       else
+                               width = n;
+                       goto reswitch;
+               case 'b':
+                       num = (u_int)va_arg(ap, int);
+                       p = va_arg(ap, char *);
+                       for (q = ksprintn(nbuf, num, *p++, NULL, 0); *q;)
+                               PCHAR(*q--);
+
+                       if (num == 0)
+                               break;
+
+                       for (tmp = 0; *p;) {
+                               n = *p++;
+                               if (num & (1 << (n - 1))) {
+                                       PCHAR(tmp ? ',' : '<');
+                                       for (; (n = *p) > ' '; ++p)
+                                               PCHAR(n);
+                                       tmp = 1;
+                               } else
+                                       for (; *p > ' '; ++p)
+                                               continue;
+                       }
+                       if (tmp)
+                               PCHAR('>');
+                       break;
+               case 'c':
+                       PCHAR(va_arg(ap, int));
+                       break;
+               case 'D':
+                       up = va_arg(ap, u_char *);
+                       p = va_arg(ap, char *);
+                       if (!width)
+                               width = 16;
+                       while(width--) {
+                               PCHAR(hex2ascii(*up >> 4));
+                               PCHAR(hex2ascii(*up & 0x0f));
+                               up++;
+                               if (width)
+                                       for (q=p;*q;q++)
+                                               PCHAR(*q);
+                       }
+                       break;
+               case 'd':
+               case 'i':
+                       base = 10;
+                       sign = 1;
+                       goto handle_sign;
+               case 'h':
+                       if (hflag) {
+                               hflag = 0;
+                               cflag = 1;
+                       } else
+                               hflag = 1;
+                       goto reswitch;
+               case 'j':
+                       jflag = 1;
+                       goto reswitch;
+               case 'l':
+                       if (lflag) {
+                               lflag = 0;
+                               qflag = 1;
+                       } else
+                               lflag = 1;
+                       goto reswitch;
+               case 'n':
+                       if (jflag)
+                               *(va_arg(ap, intmax_t *)) = retval;
+                       else if (qflag)
+                               *(va_arg(ap, quad_t *)) = retval;
+                       else if (lflag)
+                               *(va_arg(ap, long *)) = retval;
+                       else if (zflag)
+                               *(va_arg(ap, size_t *)) = retval;
+                       else if (hflag)
+                               *(va_arg(ap, short *)) = retval;
+                       else if (cflag)
+                               *(va_arg(ap, char *)) = retval;
+                       else
+                               *(va_arg(ap, int *)) = retval;
+                       break;
+               case 'o':
+                       base = 8;
+                       goto handle_nosign;
+               case 'p':
+                       base = 16;
+                       sharpflag = (width == 0);
+                       sign = 0;
+                       num = (uintptr_t)va_arg(ap, void *);
+                       goto number;
+               case 'q':
+                       qflag = 1;
+                       goto reswitch;
+               case 'r':
+                       base = radix;
+                       if (sign)
+                               goto handle_sign;
+                       goto handle_nosign;
+               case 's':
+                       p = va_arg(ap, char *);
+                       if (p == NULL)
+                               p = "(null)";
+                       if (!dot)
+                               n = strlen (p);
+                       else
+                               for (n = 0; n < dwidth && p[n]; n++)
+                                       continue;
+
+                       width -= n;
+
+                       if (!ladjust && width > 0)
+                               while (width--)
+                                       PCHAR(padc);
+                       while (n--)
+                               PCHAR(*p++);
+                       if (ladjust && width > 0)
+                               while (width--)
+                                       PCHAR(padc);
+                       break;
+               case 't':
+                       tflag = 1;
+                       goto reswitch;
+               case 'u':
+                       base = 10;
+                       goto handle_nosign;
+               case 'X':
+                       upper = 1;
+               case 'x':
+                       base = 16;
+                       goto handle_nosign;
+               case 'y':
+                       base = 16;
+                       sign = 1;
+                       goto handle_sign;
+               case 'z':
+                       zflag = 1;
+                       goto reswitch;
+handle_nosign:
+                       sign = 0;
+                       if (jflag)
+                               num = va_arg(ap, uintmax_t);
+                       else if (qflag)
+                               num = va_arg(ap, u_quad_t);
+                       else if (tflag)
+                               num = va_arg(ap, ptrdiff_t);
+                       else if (lflag)
+                               num = va_arg(ap, u_long);
+                       else if (zflag)
+                               num = va_arg(ap, size_t);
+                       else if (hflag)
+                               num = (u_short)va_arg(ap, int);
+                       else if (cflag)
+                               num = (u_char)va_arg(ap, int);
+                       else
+                               num = va_arg(ap, u_int);
+                       goto number;
+handle_sign:
+                       if (jflag)
+                               num = va_arg(ap, intmax_t);
+                       else if (qflag)
+                               num = va_arg(ap, quad_t);
+                       else if (tflag)
+                               num = va_arg(ap, ptrdiff_t);
+                       else if (lflag)
+                               num = va_arg(ap, long);
+                       else if (zflag)
+                               num = va_arg(ap, ssize_t);
+                       else if (hflag)
+                               num = (short)va_arg(ap, int);
+                       else if (cflag)
+                               num = (char)va_arg(ap, int);
+                       else
+                               num = va_arg(ap, int);
+number:
+                       if (sign && (intmax_t)num < 0) {
+                               neg = 1;
+                               num = -(intmax_t)num;
+                       }
+                       p = ksprintn(nbuf, num, base, &n, upper);
+                       tmp = 0;
+                       if (sharpflag && num != 0) {
+                               if (base == 8)
+                                       tmp++;
+                               else if (base == 16)
+                                       tmp += 2;
+                       }
+                       if (neg)
+                               tmp++;
+
+                       if (!ladjust && padc == '0')
+                               dwidth = width - tmp;
+                       width -= tmp + imax(dwidth, n);
+                       dwidth -= n;
+                       if (!ladjust)
+                               while (width-- > 0)
+                                       PCHAR(' ');
+                       if (neg)
+                               PCHAR('-');
+                       if (sharpflag && num != 0) {
+                               if (base == 8) {
+                                       PCHAR('0');
+                               } else if (base == 16) {
+                                       PCHAR('0');
+                                       PCHAR('x');
+                               }
+                       }
+                       while (dwidth-- > 0)
+                               PCHAR('0');
+
+                       while (*p)
+                               PCHAR(*p--);
+
+                       if (ladjust)
+                               while (width-- > 0)
+                                       PCHAR(' ');
+
+                       break;
+               default:
+                       while (percent < fmt)
+                               PCHAR(*percent++);
+                       /*
+                        * Since we ignore an formatting argument it is no 
+                        * longer safe to obey the remaining formatting
+                        * arguments as the arguments will no longer match
+                        * the format specs.
+                        */
+                       stop = 1;
+                       break;
+               }
+       }
+#undef PCHAR
+}
diff --git a/lib/libc/timingsafe_bcmp.c b/lib/libc/timingsafe_bcmp.c
new file mode 100644 (file)
index 0000000..d098158
--- /dev/null
@@ -0,0 +1,36 @@
+/*     $OpenBSD: timingsafe_bcmp.c,v 1.3 2015/08/31 02:53:57 guenther Exp $    */
+/*
+ * Copyright (c) 2010 Damien Miller.  All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <string.h>
+
+int __timingsafe_bcmp(const void *, const void *, size_t);
+
+int
+__timingsafe_bcmp(const void *b1, const void *b2, size_t n)
+{
+       const unsigned char *p1 = b1, *p2 = b2;
+       int ret = 0;
+
+       for (; n > 0; n--)
+               ret |= *p1++ ^ *p2++;
+       return (ret != 0);
+}
+
+__weak_reference(__timingsafe_bcmp, timingsafe_bcmp);
index d03dde20421f8632e13becdeefb474005d0e4b8f..1cbbd785212dbf0735047e3c820e0a49bf12db68 100644 (file)
@@ -15,3 +15,5 @@ LIBFDT_SRCS   :=      $(addprefix lib/libfdt/,        \
                        fdt_wip.c)                      \
 
 INCLUDES       +=      -Iinclude/lib/libfdt
+
+$(eval $(call MAKE_LIB,fdt))
diff --git a/lib/romlib/Makefile b/lib/romlib/Makefile
new file mode 100644 (file)
index 0000000..46b9206
--- /dev/null
@@ -0,0 +1,71 @@
+#
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+AS          = $(CROSS_COMPILE)as
+LD          = $(CROSS_COMPILE)ld
+OC          = $(CROSS_COMPILE)objcopy
+CPP         = $(CROSS_COMPILE)cpp
+BUILD_DIR   = ../../$(BUILD_PLAT)/romlib
+LIB_DIR     = ../../$(BUILD_PLAT)/lib
+WRAPPER_DIR = ../../$(BUILD_PLAT)/libwrapper
+LIBS        = -lmbedtls -lfdt -lc
+INC         = $(INCLUDES:-I%=-I../../%)
+PPFLAGS     = $(INC) $(DEFINES) -P -D__ASSEMBLY__ -D__LINKER__ -MD -MP -MT $(BUILD_DIR)/romlib.ld
+OBJS        = $(BUILD_DIR)/jmptbl.o $(BUILD_DIR)/init.o
+
+V ?= 0
+ifeq ($(V),0)
+  Q := @
+else
+  Q :=
+endif
+
+ifeq ($(DEBUG),1)
+   CFLAGS  := -g
+   LDFLAGS := -g
+endif
+
+
+.PHONY: all clean distclean
+
+all: $(BUILD_DIR)/romlib.bin $(LIB_DIR)/libwrappers.a
+
+%.o: %.s
+       @echo "  AS      $@"
+       $(Q)$(AS) $(ASFLAGS) -o $@ $<
+
+$(BUILD_DIR)/%.o: %.s
+       @echo "  AS      $@"
+       $(Q)$(AS) $(ASFLAGS) -o $@ $<
+
+$(BUILD_DIR)/romlib.ld: romlib.ld.S
+       @echo "  PP      $@"
+       $(Q)$(CPP) $(PPFLAGS) -o $@ romlib.ld.S
+
+$(BUILD_DIR)/romlib.elf: $(OBJS) $(BUILD_DIR)/romlib.ld
+       @echo "  LD      $@"
+       $(Q)$(LD) -T $(BUILD_DIR)/romlib.ld -L$(LIB_DIR) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
+$(BUILD_DIR)/romlib.bin: $(BUILD_DIR)/romlib.elf
+       @echo "  BIN     $@"
+       $(Q)$(OC) -O binary $(BUILD_DIR)/romlib.elf $@
+
+$(WRAPPER_DIR)/jmpvar.s: $(BUILD_DIR)/romlib.elf
+       @echo "  VAR     $@"
+       $(Q)./genvar.sh -o $@ $(BUILD_DIR)/romlib.elf
+
+$(LIB_DIR)/libwrappers.a: jmptbl.i $(WRAPPER_DIR)/jmpvar.o
+       @echo "  AR      $@"
+       $(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ jmptbl.i
+
+$(BUILD_DIR)/jmptbl.s: jmptbl.i
+       @echo "  TBL     $@"
+       $(Q)./gentbl.sh -o $@ jmptbl.i
+
+clean:
+       @rm -f $(BUILD_DIR)/*
+
+-include $(BUILD_DIR)/romlib.d
diff --git a/lib/romlib/gentbl.sh b/lib/romlib/gentbl.sh
new file mode 100755 (executable)
index 0000000..0695f6e
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+set -e
+
+output=jmptbl.s
+
+for i
+do
+       case $i in
+       -o)
+               output=$2
+               shift 2
+               ;;
+       --)
+               shift
+               break
+               ;;
+       -*)
+               echo usage: gentbl.sh [-o output]  file ... >&2
+               exit 1
+               ;;
+       esac
+done
+
+tmp=`mktemp`
+trap "rm -f $tmp" EXIT INT QUIT
+
+rm -f $output
+
+awk -v OFS="\n" '
+BEGIN {print "\t.text",
+             "\t.globl\tjmptbl",
+             "jmptbl:"}
+      {sub(/[:blank:]*#.*/,"")}
+!/^$/ {print "\tb\t" $3}' "$@" > $tmp
+
+mv $tmp $output
diff --git a/lib/romlib/genvar.sh b/lib/romlib/genvar.sh
new file mode 100755 (executable)
index 0000000..a3e2cdf
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+set -e
+
+output=jmpvar.s
+for i
+do
+       case $i in
+       -o)
+               output=$2
+               shift 2
+               ;;
+       --)
+               shift
+               break
+               ;;
+       -*)
+               echo usage: genvar.sh [-o output] file... >&2
+               ;;
+       esac
+done
+
+tmp=`mktemp`
+trap "rm -f $tmp" EXIT INT QUIT
+
+nm -a "$@" |
+awk -v OFS="\n" '
+$3 == ".text" {print "\t.data",
+                     "\t.globl\tjmptbl",
+                     "\t.align\t4",
+                     "jmptbl:\t.quad\t0x" $1}' > $tmp
+
+mv $tmp $output
diff --git a/lib/romlib/genwrappers.sh b/lib/romlib/genwrappers.sh
new file mode 100755 (executable)
index 0000000..bcf670b
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+set -e
+
+build=.
+out=output.a
+
+for i
+do
+       case $i in
+       -o)
+               out=$2
+               shift 2
+               ;;
+       -b)
+               build=$2
+               shift 2
+               ;;
+       --)
+               shift
+               break
+               ;;
+       -*)
+               echo usage: genwrappers.sh [-o output] [-b dir] file ... >&2
+               exit 1
+               ;;
+       esac
+done
+
+awk  '{sub(/[:blank:]*#.*/,"")}
+!/^$/ {print $1*4, $2, $3}' "$@" |
+while read idx lib sym
+do
+       file=$build/${lib}_$sym
+
+       cat <<EOF > $file.s
+       .globl  $sym
+$sym:
+       ldr     x17, =jmptbl
+       ldr     x17, [x17]
+       mov     x16, $idx
+       add     x16, x16, x17
+       br      x16
+EOF
+
+       ${CROSS_COMPILE}as -o $file.o $file.s
+done
+
+${CROSS_COMPILE}ar -rc $out $build/*.o
diff --git a/lib/romlib/init.s b/lib/romlib/init.s
new file mode 100644 (file)
index 0000000..5cf2aca
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+       .globl  rom_lib_init
+       .extern __DATA_RAM_START__, __DATA_ROM_START__, __DATA_SIZE__
+       .extern memset, memcpy
+
+rom_lib_init:
+       cmp     w0, #1
+       mov     w0, #0
+       b.le    1f
+       ret
+
+1:     stp     x29, x30, [sp, #-16]!
+       adrp    x0, __DATA_RAM_START__
+       ldr     x1,= __DATA_ROM_START__
+       ldr     x2, =__DATA_SIZE__
+       bl      memcpy
+
+       ldr     x0, =__BSS_START__
+       mov     x1, #0
+       ldr     x2, =__BSS_SIZE__
+       bl      memset
+       ldp     x29, x30, [sp], #16
+
+       mov     w0, #1
+       ret
diff --git a/lib/romlib/jmptbl.i b/lib/romlib/jmptbl.i
new file mode 100644 (file)
index 0000000..338cd8a
--- /dev/null
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+0      rom     rom_lib_init
+1      fdt     fdt_getprop_namelen
+2      fdt     fdt_setprop_inplace
+3      fdt     fdt_check_header
+4      fdt     fdt_node_offset_by_compatible
+5      mbedtls mbedtls_asn1_get_alg
+6      mbedtls mbedtls_asn1_get_alg_null
+7      mbedtls mbedtls_asn1_get_bitstring_null
+8      mbedtls mbedtls_asn1_get_bool
+9      mbedtls mbedtls_asn1_get_int
+10     mbedtls mbedtls_asn1_get_tag
+11     mbedtls mbedtls_free
+12     mbedtls mbedtls_md
+13     mbedtls mbedtls_md_get_size
+14     mbedtls mbedtls_memory_buffer_alloc_init
+15     mbedtls mbedtls_oid_get_md_alg
+16     mbedtls mbedtls_oid_get_numeric_string
+17     mbedtls mbedtls_oid_get_pk_alg
+18     mbedtls mbedtls_oid_get_sig_alg
+19     mbedtls mbedtls_pk_free
+20     mbedtls mbedtls_pk_init
+21     mbedtls mbedtls_pk_parse_subpubkey
+22     mbedtls mbedtls_pk_verify_ext
+23     mbedtls mbedtls_platform_set_snprintf
+24     mbedtls mbedtls_x509_get_rsassa_pss_params
+25     mbedtls mbedtls_x509_get_sig_alg
+26     mbedtls mbedtls_md_info_from_type
+27     c       exit
+28     c       atexit
diff --git a/lib/romlib/romlib.ld.S b/lib/romlib/romlib.ld.S
new file mode 100644 (file)
index 0000000..8f0bc62
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <platform_def.h>
+#include <xlat_tables_defs.h>
+
+MEMORY {
+       ROM (rx): ORIGIN = ROMLIB_RO_BASE, LENGTH = ROMLIB_RO_LIMIT - ROMLIB_RO_BASE
+       RAM (rwx): ORIGIN = ROMLIB_RW_BASE, LENGTH = ROMLIB_RW_END - ROMLIB_RW_BASE
+}
+
+OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
+OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
+ENTRY(jmptbl)
+
+SECTIONS
+{
+       . = ROMLIB_RO_BASE;
+       .text : {
+               *jmptbl.o(.text)
+               *(.text*)
+               *(.rodata*)
+       } >ROM
+
+       __DATA_ROM_START__ = LOADADDR(.data);
+
+       .data : {
+               __DATA_RAM_START__ = .;
+               *(.data*)
+               __DATA_RAM_END__ = .;
+       } >RAM AT>ROM
+
+       __DATA_SIZE__ = SIZEOF(.data);
+
+       .bss : {
+               __BSS_START__ = .;
+               *(.bss*)
+               __BSS_END__ = .;
+        } >RAM
+       __BSS_SIZE__ = SIZEOF(.bss);
+}
diff --git a/lib/stdlib/abort.c b/lib/stdlib/abort.c
deleted file mode 100644 (file)
index 65ce4cc..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <debug.h>
-#include <stdlib.h>
-
-/*
- * This is a basic implementation. This could be improved.
- */
-void abort (void)
-{
-       ERROR("ABORT\n");
-       panic();
-}
diff --git a/lib/stdlib/assert.c b/lib/stdlib/assert.c
deleted file mode 100644 (file)
index 97fab4b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-#include <console.h>
-#include <debug.h>
-#include <platform.h>
-
-/*
-* Only print the output if PLAT_LOG_LEVEL_ASSERT is higher or equal to
-* LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1.
-*/
-
-#if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE
-void __assert(const char *file, unsigned int line, const char *assertion)
-{
-       tf_printf("ASSERT: %s:%d:%s\n", file, line, assertion);
-       console_flush();
-       plat_panic_handler();
-}
-#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
-void __assert(const char *file, unsigned int line)
-{
-       tf_printf("ASSERT: %s:%d\n", file, line);
-       console_flush();
-       plat_panic_handler();
-}
-#else
-void __assert(void)
-{
-       plat_panic_handler();
-}
-#endif
diff --git a/lib/stdlib/exit.c b/lib/stdlib/exit.c
deleted file mode 100644 (file)
index afc3f93..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <debug.h>
-#include <stdlib.h>
-
-void exit(int v)
-{
-       ERROR("EXIT\n");
-       panic();
-}
diff --git a/lib/stdlib/mem.c b/lib/stdlib/mem.c
deleted file mode 100644 (file)
index 65b62fd..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <stddef.h> /* size_t */
-
-/*
- * Fill @count bytes of memory pointed to by @dst with @val
- */
-void *memset(void *dst, int val, size_t count)
-{
-       char *ptr = dst;
-
-       while (count--)
-               *ptr++ = val;
-
-       return dst;
-}
-
-/*
- * Compare @len bytes of @s1 and @s2
- */
-int memcmp(const void *s1, const void *s2, size_t len)
-{
-       const unsigned char *s = s1;
-       const unsigned char *d = s2;
-       unsigned char sc;
-       unsigned char dc;
-
-       while (len--) {
-               sc = *s++;
-               dc = *d++;
-               if (sc - dc)
-                       return (sc - dc);
-       }
-
-       return 0;
-}
-
-/*
- * Copy @len bytes from @src to @dst
- */
-void *memcpy(void *dst, const void *src, size_t len)
-{
-       const char *s = src;
-       char *d = dst;
-
-       while (len--)
-               *d++ = *s++;
-
-       return dst;
-}
-
-/*
- * Move @len bytes from @src to @dst
- */
-void *memmove(void *dst, const void *src, size_t len)
-{
-       /*
-        * The following test makes use of unsigned arithmetic overflow to
-        * more efficiently test the condition !(src <= dst && dst < str+len).
-        * It also avoids the situation where the more explicit test would give
-        * incorrect results were the calculation str+len to overflow (though
-        * that issue is probably moot as such usage is probably undefined
-        * behaviour and a bug anyway.
-        */
-       if ((size_t)dst - (size_t)src >= len) {
-               /* destination not in source data, so can safely use memcpy */
-               return memcpy(dst, src, len);
-       } else {
-               /* copy backwards... */
-               const char *end = dst;
-               const char *s = (const char *)src + len;
-               char *d = (char *)dst + len;
-               while (d != end)
-                       *--d = *--s;
-       }
-       return dst;
-}
-
-/*
- * Scan @len bytes of @src for value @c
- */
-void *memchr(const void *src, int c, size_t len)
-{
-       const char *s = src;
-
-       while (len--) {
-               if (*s == c)
-                       return (void *) s;
-               s++;
-       }
-
-       return NULL;
-}
diff --git a/lib/stdlib/printf.c b/lib/stdlib/printf.c
deleted file mode 100644 (file)
index f615641..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-
-/* Choose max of 128 chars for now. */
-#define PRINT_BUFFER_SIZE 128
-int printf(const char *fmt, ...)
-{
-       va_list args;
-       char buf[PRINT_BUFFER_SIZE];
-       int count;
-
-       va_start(args, fmt);
-       vsnprintf(buf, sizeof(buf) - 1, fmt, args);
-       va_end(args);
-
-       /* Use putchar directly as 'puts()' adds a newline. */
-       buf[PRINT_BUFFER_SIZE - 1] = '\0';
-       count = 0;
-       while (buf[count])
-       {
-               if (putchar(buf[count]) != EOF) {
-                       count++;
-               } else {
-                       count = EOF;
-                       break;
-               }
-       }
-
-       return count;
-}
diff --git a/lib/stdlib/putchar.c b/lib/stdlib/putchar.c
deleted file mode 100644 (file)
index 8265667..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <stdio.h>
-#include <console.h>
-
-/* Putchar() should either return the character printed or EOF in case of error.
- * Our current console_putc() function assumes success and returns the
- * character. Write all other printing functions in terms of putchar(), if
- * possible, so they all benefit when this is improved.
- */
-int putchar(int c)
-{
-       int res;
-       if (console_putc((unsigned char)c) >= 0)
-               res = c;
-       else
-               res = EOF;
-
-       return res;
-}
diff --git a/lib/stdlib/puts.c b/lib/stdlib/puts.c
deleted file mode 100644 (file)
index 284cf8c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <stdio.h>
-
-int puts(const char *s)
-{
-       int count = 0;
-       while(*s) {
-               if (putchar(*s++) == EOF)
-                       return EOF;
-               count++;
-       }
-
-       /* According to the puts(3) manpage, the function should write a
-        * trailing newline.
-        */
-       if (putchar('\n') == EOF)
-               return EOF;
-
-       return count + 1;
-}
diff --git a/lib/stdlib/sscanf.c b/lib/stdlib/sscanf.c
deleted file mode 100644 (file)
index a5876cf..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <stdio.h>
-#include <sys/cdefs.h>
-
-/*
- * TODO: This is not a real implementation of the sscanf() function. It just
- * returns the number of expected arguments based on the number of '%' found
- * in the format string.
- */
-int
-sscanf(const char *__restrict str, char const *__restrict fmt, ...)
-{
-       int ret = 0;
-
-       while (*fmt != '\0') {
-               if (*fmt++ == '%') {
-                       ret++;
-               }
-       }
-
-       return ret;
-}
diff --git a/lib/stdlib/stdlib.mk b/lib/stdlib/stdlib.mk
deleted file mode 100644 (file)
index 8211623..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-
-STDLIB_SRCS    :=      $(addprefix lib/stdlib/,        \
-                       abort.c                         \
-                       assert.c                        \
-                       exit.c                          \
-                       mem.c                           \
-                       printf.c                        \
-                       putchar.c                       \
-                       puts.c                          \
-                       sscanf.c                        \
-                       strchr.c                        \
-                       strcmp.c                        \
-                       strlen.c                        \
-                       strncmp.c                       \
-                       strnlen.c                       \
-                       subr_prf.c                      \
-                       timingsafe_bcmp.c)
-
-INCLUDES       +=      -Iinclude/lib/stdlib            \
-                       -Iinclude/lib/stdlib/sys
diff --git a/lib/stdlib/strchr.c b/lib/stdlib/strchr.c
deleted file mode 100644 (file)
index 4247dcd..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions copyright (c) 2013-2014, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#include <sys/cdefs.h>
-#include <stddef.h>
-#include <string.h>
-
-char *
-strchr(const char *p, int ch)
-{
-       char c;
-
-       c = ch;
-       for (;; ++p) {
-               if (*p == c)
-                       return ((char *)p);
-               if (*p == '\0')
-                       return (NULL);
-       }
-       /* NOTREACHED */
-}
diff --git a/lib/stdlib/strcmp.c b/lib/stdlib/strcmp.c
deleted file mode 100644 (file)
index bb86e0f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions copyright (c) 2014, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#include <sys/cdefs.h>
-#include <sys/ctype.h>
-#include <string.h>
-
-/*
- * Compare strings.
- */
-int
-strcmp(const char *s1, const char *s2)
-{
-       while (*s1 == *s2++)
-               if (*s1++ == '\0')
-                       return 0;
-       return *(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1);
-}
-
-int
-strcasecmp(const char *s1, const char *s2)
-{
-       const unsigned char *us1 = (const unsigned char *)s1;
-       const unsigned char *us2 = (const unsigned char *)s2;
-
-       while (tolower(*us1) == tolower(*us2)) {
-               if (*us1++ == '\0')
-                       return 0;
-               us2++;
-       }
-       return tolower(*us1) - tolower(*us2);
-}
diff --git a/lib/stdlib/strlen.c b/lib/stdlib/strlen.c
deleted file mode 100644 (file)
index 23c3d39..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions copyright (c) 2009-2014, ARM Limited and Contributors. All rights reserved.
- */
-
-#include <stddef.h>
-
-size_t
-strlen(str)
-       const char *str;
-{
-       register const char *s;
-
-       for (s = str; *s; ++s);
-       return(s - str);
-}
diff --git a/lib/stdlib/strncmp.c b/lib/stdlib/strncmp.c
deleted file mode 100644 (file)
index f45f4a2..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions copyright (c) 2014, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#include <sys/cdefs.h>
-#include <string.h>
-
-int
-strncmp(const char *s1, const char *s2, size_t n)
-{
-
-       if (n == 0)
-               return 0;
-       do {
-               if (*s1 != *s2++)
-                       return (*(const unsigned char *)s1 -
-                               *(const unsigned char *)(s2 - 1));
-               if (*s1++ == '\0')
-                       break;
-       } while (--n != 0);
-       return 0;
-}
diff --git a/lib/stdlib/strnlen.c b/lib/stdlib/strnlen.c
deleted file mode 100644 (file)
index d48502b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-
- * Copyright (c) 2009 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
- */
-
-#include <sys/cdefs.h>
-
-#include <string.h>
-
-size_t
-strnlen(const char *s, size_t maxlen)
-{
-       size_t len;
-
-       for (len = 0; len < maxlen; len++, s++) {
-               if (!*s)
-                       break;
-       }
-       return (len);
-}
diff --git a/lib/stdlib/subr_prf.c b/lib/stdlib/subr_prf.c
deleted file mode 100644 (file)
index c103562..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-/*-
- * Copyright (c) 1986, 1988, 1991, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)subr_prf.c  8.3 (Berkeley) 1/21/94
- */
-
-/*
- * Portions copyright (c) 2009-2014, ARM Limited and Contributors.
- * All rights reserved.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <ctype.h>
-
-typedef unsigned char u_char;
-typedef unsigned int u_int;
-typedef int64_t quad_t;
-typedef uint64_t u_quad_t;
-typedef unsigned long u_long;
-typedef unsigned short u_short;
-
-static inline int imax(int a, int b) { return (a > b ? a : b); }
-
-/*
- * Note that stdarg.h and the ANSI style va_start macro is used for both
- * ANSI and traditional C compilers.
- */
-
-#define TOCONS 0x01
-#define TOTTY  0x02
-#define TOLOG  0x04
-
-/* Max number conversion buffer length: a u_quad_t in base 2, plus NUL byte. */
-#define MAXNBUF        (sizeof(intmax_t) * 8 + 1)
-
-struct putchar_arg {
-       int     flags;
-       int     pri;
-       struct  tty *tty;
-       char    *p_bufr;
-       size_t  n_bufr;
-       char    *p_next;
-       size_t  remain;
-};
-
-struct snprintf_arg {
-       char    *str;
-       size_t  remain;
-};
-
-extern int log_open;
-
-static char *ksprintn(char *nbuf, uintmax_t num, int base, int *len, int upper);
-static void  snprintf_func(int ch, void *arg);
-static int kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_list ap);
-
-int vsnprintf(char *str, size_t size, const char *format, va_list ap);
-
-static char const hex2ascii_data[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-#define hex2ascii(hex) (hex2ascii_data[hex])
-
-/*
- * Scaled down version of sprintf(3).
- */
-int
-sprintf(char *buf, const char *cfmt, ...)
-{
-       int retval;
-       va_list ap;
-
-       va_start(ap, cfmt);
-       retval = kvprintf(cfmt, NULL, (void *)buf, 10, ap);
-       buf[retval] = '\0';
-       va_end(ap);
-       return (retval);
-}
-
-/*
- * Scaled down version of vsprintf(3).
- */
-int
-vsprintf(char *buf, const char *cfmt, va_list ap)
-{
-       int retval;
-
-       retval = kvprintf(cfmt, NULL, (void *)buf, 10, ap);
-       buf[retval] = '\0';
-       return (retval);
-}
-
-/*
- * Scaled down version of snprintf(3).
- */
-int
-snprintf(char *str, size_t size, const char *format, ...)
-{
-       int retval;
-       va_list ap;
-
-       va_start(ap, format);
-       retval = vsnprintf(str, size, format, ap);
-       va_end(ap);
-       return(retval);
-}
-
-/*
- * Scaled down version of vsnprintf(3).
- */
-int
-vsnprintf(char *str, size_t size, const char *format, va_list ap)
-{
-       struct snprintf_arg info;
-       int retval;
-
-       info.str = str;
-       info.remain = size;
-       retval = kvprintf(format, snprintf_func, &info, 10, ap);
-       if (info.remain >= 1)
-               *info.str++ = '\0';
-       return (retval);
-}
-
-static void
-snprintf_func(int ch, void *arg)
-{
-       struct snprintf_arg *const info = arg;
-
-       if (info->remain >= 2) {
-               *info->str++ = ch;
-               info->remain--;
-       }
-}
-
-
-/*
- * Kernel version which takes radix argument vsnprintf(3).
- */
-int
-vsnrprintf(char *str, size_t size, int radix, const char *format, va_list ap)
-{
-       struct snprintf_arg info;
-       int retval;
-
-       info.str = str;
-       info.remain = size;
-       retval = kvprintf(format, snprintf_func, &info, radix, ap);
-       if (info.remain >= 1)
-               *info.str++ = '\0';
-       return (retval);
-}
-
-
-/*
- * Put a NUL-terminated ASCII number (base <= 36) in a buffer in reverse
- * order; return an optional length and a pointer to the last character
- * written in the buffer (i.e., the first character of the string).
- * The buffer pointed to by `nbuf' must have length >= MAXNBUF.
- */
-static char *
-ksprintn(char *nbuf, uintmax_t num, int base, int *lenp, int upper)
-{
-       char *p, c;
-
-       p = nbuf;
-       *p = '\0';
-       do {
-               c = hex2ascii(num % base);
-               *++p = upper ? toupper(c) : c;
-       } while (num /= base);
-       if (lenp)
-               *lenp = p - nbuf;
-       return (p);
-}
-
-/*
- * Scaled down version of printf(3).
- *
- * Two additional formats:
- *
- * The format %b is supported to decode error registers.
- * Its usage is:
- *
- *     printf("reg=%b\n", regval, "<base><arg>*");
- *
- * where <base> is the output base expressed as a control character, e.g.
- * \10 gives octal; \20 gives hex.  Each arg is a sequence of characters,
- * the first of which gives the bit number to be inspected (origin 1), and
- * the next characters (up to a control character, i.e. a character <= 32),
- * give the name of the register.  Thus:
- *
- *     kvprintf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n");
- *
- * would produce output:
- *
- *     reg=3<BITTWO,BITONE>
- *
- * XXX:  %D  -- Hexdump, takes pointer and separator string:
- *             ("%6D", ptr, ":")   -> XX:XX:XX:XX:XX:XX
- *             ("%*D", len, ptr, " " -> XX XX XX XX ...
- */
-int
-kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_list ap)
-{
-#define PCHAR(c) {int cc=(c); if (func) (*func)(cc,arg); else *d++ = cc; retval++; }
-       char nbuf[MAXNBUF];
-       char *d;
-       const char *p, *percent, *q;
-       u_char *up;
-       int ch, n;
-       uintmax_t num;
-       int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot;
-       int cflag, hflag, jflag, tflag, zflag;
-       int dwidth, upper;
-       char padc;
-       int stop = 0, retval = 0;
-
-       num = 0;
-       if (!func)
-               d = (char *) arg;
-       else
-               d = NULL;
-
-       if (fmt == NULL)
-               fmt = "(fmt null)\n";
-
-       if (radix < 2 || radix > 36)
-               radix = 10;
-
-       for (;;) {
-               padc = ' ';
-               width = 0;
-               while ((ch = (u_char)*fmt++) != '%' || stop) {
-                       if (ch == '\0')
-                               return (retval);
-                       PCHAR(ch);
-               }
-               percent = fmt - 1;
-               qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0;
-               sign = 0; dot = 0; dwidth = 0; upper = 0;
-               cflag = 0; hflag = 0; jflag = 0; tflag = 0; zflag = 0;
-reswitch:      switch (ch = (u_char)*fmt++) {
-               case '.':
-                       dot = 1;
-                       goto reswitch;
-               case '#':
-                       sharpflag = 1;
-                       goto reswitch;
-               case '+':
-                       sign = 1;
-                       goto reswitch;
-               case '-':
-                       ladjust = 1;
-                       goto reswitch;
-               case '%':
-                       PCHAR(ch);
-                       break;
-               case '*':
-                       if (!dot) {
-                               width = va_arg(ap, int);
-                               if (width < 0) {
-                                       ladjust = !ladjust;
-                                       width = -width;
-                               }
-                       } else {
-                               dwidth = va_arg(ap, int);
-                       }
-                       goto reswitch;
-               case '0':
-                       if (!dot) {
-                               padc = '0';
-                               goto reswitch;
-                       }
-               case '1': case '2': case '3': case '4':
-               case '5': case '6': case '7': case '8': case '9':
-                               for (n = 0;; ++fmt) {
-                                       n = n * 10 + ch - '0';
-                                       ch = *fmt;
-                                       if (ch < '0' || ch > '9')
-                                               break;
-                               }
-                       if (dot)
-                               dwidth = n;
-                       else
-                               width = n;
-                       goto reswitch;
-               case 'b':
-                       num = (u_int)va_arg(ap, int);
-                       p = va_arg(ap, char *);
-                       for (q = ksprintn(nbuf, num, *p++, NULL, 0); *q;)
-                               PCHAR(*q--);
-
-                       if (num == 0)
-                               break;
-
-                       for (tmp = 0; *p;) {
-                               n = *p++;
-                               if (num & (1 << (n - 1))) {
-                                       PCHAR(tmp ? ',' : '<');
-                                       for (; (n = *p) > ' '; ++p)
-                                               PCHAR(n);
-                                       tmp = 1;
-                               } else
-                                       for (; *p > ' '; ++p)
-                                               continue;
-                       }
-                       if (tmp)
-                               PCHAR('>');
-                       break;
-               case 'c':
-                       PCHAR(va_arg(ap, int));
-                       break;
-               case 'D':
-                       up = va_arg(ap, u_char *);
-                       p = va_arg(ap, char *);
-                       if (!width)
-                               width = 16;
-                       while(width--) {
-                               PCHAR(hex2ascii(*up >> 4));
-                               PCHAR(hex2ascii(*up & 0x0f));
-                               up++;
-                               if (width)
-                                       for (q=p;*q;q++)
-                                               PCHAR(*q);
-                       }
-                       break;
-               case 'd':
-               case 'i':
-                       base = 10;
-                       sign = 1;
-                       goto handle_sign;
-               case 'h':
-                       if (hflag) {
-                               hflag = 0;
-                               cflag = 1;
-                       } else
-                               hflag = 1;
-                       goto reswitch;
-               case 'j':
-                       jflag = 1;
-                       goto reswitch;
-               case 'l':
-                       if (lflag) {
-                               lflag = 0;
-                               qflag = 1;
-                       } else
-                               lflag = 1;
-                       goto reswitch;
-               case 'n':
-                       if (jflag)
-                               *(va_arg(ap, intmax_t *)) = retval;
-                       else if (qflag)
-                               *(va_arg(ap, quad_t *)) = retval;
-                       else if (lflag)
-                               *(va_arg(ap, long *)) = retval;
-                       else if (zflag)
-                               *(va_arg(ap, size_t *)) = retval;
-                       else if (hflag)
-                               *(va_arg(ap, short *)) = retval;
-                       else if (cflag)
-                               *(va_arg(ap, char *)) = retval;
-                       else
-                               *(va_arg(ap, int *)) = retval;
-                       break;
-               case 'o':
-                       base = 8;
-                       goto handle_nosign;
-               case 'p':
-                       base = 16;
-                       sharpflag = (width == 0);
-                       sign = 0;
-                       num = (uintptr_t)va_arg(ap, void *);
-                       goto number;
-               case 'q':
-                       qflag = 1;
-                       goto reswitch;
-               case 'r':
-                       base = radix;
-                       if (sign)
-                               goto handle_sign;
-                       goto handle_nosign;
-               case 's':
-                       p = va_arg(ap, char *);
-                       if (p == NULL)
-                               p = "(null)";
-                       if (!dot)
-                               n = strlen (p);
-                       else
-                               for (n = 0; n < dwidth && p[n]; n++)
-                                       continue;
-
-                       width -= n;
-
-                       if (!ladjust && width > 0)
-                               while (width--)
-                                       PCHAR(padc);
-                       while (n--)
-                               PCHAR(*p++);
-                       if (ladjust && width > 0)
-                               while (width--)
-                                       PCHAR(padc);
-                       break;
-               case 't':
-                       tflag = 1;
-                       goto reswitch;
-               case 'u':
-                       base = 10;
-                       goto handle_nosign;
-               case 'X':
-                       upper = 1;
-               case 'x':
-                       base = 16;
-                       goto handle_nosign;
-               case 'y':
-                       base = 16;
-                       sign = 1;
-                       goto handle_sign;
-               case 'z':
-                       zflag = 1;
-                       goto reswitch;
-handle_nosign:
-                       sign = 0;
-                       if (jflag)
-                               num = va_arg(ap, uintmax_t);
-                       else if (qflag)
-                               num = va_arg(ap, u_quad_t);
-                       else if (tflag)
-                               num = va_arg(ap, ptrdiff_t);
-                       else if (lflag)
-                               num = va_arg(ap, u_long);
-                       else if (zflag)
-                               num = va_arg(ap, size_t);
-                       else if (hflag)
-                               num = (u_short)va_arg(ap, int);
-                       else if (cflag)
-                               num = (u_char)va_arg(ap, int);
-                       else
-                               num = va_arg(ap, u_int);
-                       goto number;
-handle_sign:
-                       if (jflag)
-                               num = va_arg(ap, intmax_t);
-                       else if (qflag)
-                               num = va_arg(ap, quad_t);
-                       else if (tflag)
-                               num = va_arg(ap, ptrdiff_t);
-                       else if (lflag)
-                               num = va_arg(ap, long);
-                       else if (zflag)
-                               num = va_arg(ap, ssize_t);
-                       else if (hflag)
-                               num = (short)va_arg(ap, int);
-                       else if (cflag)
-                               num = (char)va_arg(ap, int);
-                       else
-                               num = va_arg(ap, int);
-number:
-                       if (sign && (intmax_t)num < 0) {
-                               neg = 1;
-                               num = -(intmax_t)num;
-                       }
-                       p = ksprintn(nbuf, num, base, &n, upper);
-                       tmp = 0;
-                       if (sharpflag && num != 0) {
-                               if (base == 8)
-                                       tmp++;
-                               else if (base == 16)
-                                       tmp += 2;
-                       }
-                       if (neg)
-                               tmp++;
-
-                       if (!ladjust && padc == '0')
-                               dwidth = width - tmp;
-                       width -= tmp + imax(dwidth, n);
-                       dwidth -= n;
-                       if (!ladjust)
-                               while (width-- > 0)
-                                       PCHAR(' ');
-                       if (neg)
-                               PCHAR('-');
-                       if (sharpflag && num != 0) {
-                               if (base == 8) {
-                                       PCHAR('0');
-                               } else if (base == 16) {
-                                       PCHAR('0');
-                                       PCHAR('x');
-                               }
-                       }
-                       while (dwidth-- > 0)
-                               PCHAR('0');
-
-                       while (*p)
-                               PCHAR(*p--);
-
-                       if (ladjust)
-                               while (width-- > 0)
-                                       PCHAR(' ');
-
-                       break;
-               default:
-                       while (percent < fmt)
-                               PCHAR(*percent++);
-                       /*
-                        * Since we ignore an formatting argument it is no 
-                        * longer safe to obey the remaining formatting
-                        * arguments as the arguments will no longer match
-                        * the format specs.
-                        */
-                       stop = 1;
-                       break;
-               }
-       }
-#undef PCHAR
-}
diff --git a/lib/stdlib/timingsafe_bcmp.c b/lib/stdlib/timingsafe_bcmp.c
deleted file mode 100644 (file)
index d098158..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*     $OpenBSD: timingsafe_bcmp.c,v 1.3 2015/08/31 02:53:57 guenther Exp $    */
-/*
- * Copyright (c) 2010 Damien Miller.  All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <string.h>
-
-int __timingsafe_bcmp(const void *, const void *, size_t);
-
-int
-__timingsafe_bcmp(const void *b1, const void *b2, size_t n)
-{
-       const unsigned char *p1 = b1, *p2 = b2;
-       int ret = 0;
-
-       for (; n > 0; n--)
-               ret |= *p1++ ^ *p2++;
-       return (ret != 0);
-}
-
-__weak_reference(__timingsafe_bcmp, timingsafe_bcmp);
index 87b15b8cf971b4b0be86aa51e920807dcddd1378..033e2375f0b47ab52c4ca0e5495a1802c9c10810 100644 (file)
@@ -65,7 +65,19 @@ void init_xlat_tables(void)
  * Function for enabling the MMU in Secure PL1, assuming that the
  * page-tables have already been created.
  ******************************************************************************/
+#if !ERROR_DEPRECATED
 void enable_mmu_secure(unsigned int flags)
+{
+       enable_mmu_svc_mon(flags);
+}
+
+void enable_mmu_direct(unsigned int flags)
+{
+       enable_mmu_direct_svc_mon(flags);
+}
+#endif
+
+void enable_mmu_svc_mon(unsigned int flags)
 {
        unsigned int mair0, ttbcr, sctlr;
        uint64_t ttbr0;
@@ -131,7 +143,7 @@ void enable_mmu_secure(unsigned int flags)
        isb();
 }
 
-void enable_mmu_direct(unsigned int flags)
+void enable_mmu_direct_svc_mon(unsigned int flags)
 {
-       enable_mmu_secure(flags);
+       enable_mmu_svc_mon(flags);
 }
index 99cf0881e92c0f05c014ce6c1583d4d05b2b705b..4a4ac30f512500c303291f0f9d0d443bccaf35fe 100644 (file)
@@ -8,9 +8,11 @@
 #include <assert_macros.S>
 #include <xlat_tables_v2.h>
 
-       .global enable_mmu_direct
+       .global enable_mmu_direct_svc_mon
+       .global enable_mmu_direct_hyp
 
-func enable_mmu_direct
+       /* void enable_mmu_direct_svc_mon(unsigned int flags) */
+func enable_mmu_direct_svc_mon
        /* Assert that MMU is turned off */
 #if ENABLE_ASSERTIONS
        ldcopr  r1, SCTLR
@@ -63,4 +65,56 @@ func enable_mmu_direct
        isb
 
        bx      lr
-endfunc enable_mmu_direct
+endfunc enable_mmu_direct_svc_mon
+
+
+       /* void enable_mmu_direct_hyp(unsigned int flags) */
+func enable_mmu_direct_hyp
+       /* Assert that MMU is turned off */
+#if ENABLE_ASSERTIONS
+       ldcopr  r1, HSCTLR
+       tst     r1, #HSCTLR_M_BIT
+       ASM_ASSERT(eq)
+#endif
+
+       /* Invalidate TLB entries */
+       TLB_INVALIDATE(r0, TLBIALL)
+
+       mov     r3, r0
+       ldr     r0, =mmu_cfg_params
+
+       /* HMAIR0 */
+       ldr     r1, [r0, #(MMU_CFG_MAIR << 3)]
+       stcopr  r1, HMAIR0
+
+       /* HTCR */
+       ldr     r2, [r0, #(MMU_CFG_TCR << 3)]
+       stcopr  r2, HTCR
+
+       /* HTTBR */
+       ldr     r1, [r0, #(MMU_CFG_TTBR0 << 3)]
+       ldr     r2, [r0, #((MMU_CFG_TTBR0 << 3) + 4)]
+       stcopr16        r1, r2, HTTBR_64
+
+       /*
+        * Ensure all translation table writes have drained into memory, the TLB
+        * invalidation is complete, and translation register writes are
+        * committed before enabling the MMU
+        */
+       dsb     ish
+       isb
+
+       /* Enable enable MMU by honoring flags */
+       ldcopr  r1, HSCTLR
+       ldr     r2, =(HSCTLR_WXN_BIT | HSCTLR_C_BIT | HSCTLR_M_BIT)
+       orr     r1, r1, r2
+
+       /* Clear C bit if requested */
+       tst     r3, #DISABLE_DCACHE
+       bicne   r1, r1, #HSCTLR_C_BIT
+
+       stcopr  r1, HSCTLR
+       isb
+
+       bx      lr
+endfunc enable_mmu_direct_hyp
index 24828409cee23bbacd3d0ae2a223ad2d4cfb19b9..66938e5f1bab566108c23b36afbe0bc032c8dcb9 100644 (file)
@@ -43,22 +43,38 @@ unsigned long long xlat_arch_get_max_supported_pa(void)
 }
 #endif /* ENABLE_ASSERTIONS*/
 
-bool is_mmu_enabled_ctx(const xlat_ctx_t *ctx __unused)
+bool is_mmu_enabled_ctx(const xlat_ctx_t *ctx)
 {
-       return (read_sctlr() & SCTLR_M_BIT) != 0;
+       if (ctx->xlat_regime == EL1_EL0_REGIME) {
+               assert(xlat_arch_current_el() == 1U);
+               return (read_sctlr() & SCTLR_M_BIT) != 0U;
+       } else {
+               assert(ctx->xlat_regime == EL2_REGIME);
+               assert(xlat_arch_current_el() == 2U);
+               return (read_hsctlr() & HSCTLR_M_BIT) != 0U;
+       }
 }
 
 bool is_dcache_enabled(void)
 {
-       return (read_sctlr() & SCTLR_C_BIT) != 0;
+       if (IS_IN_EL2()) {
+               return (read_hsctlr() & HSCTLR_C_BIT) != 0U;
+       } else {
+               return (read_sctlr() & SCTLR_C_BIT) != 0U;
+       }
 }
 
-uint64_t xlat_arch_regime_get_xn_desc(int xlat_regime __unused)
+uint64_t xlat_arch_regime_get_xn_desc(int xlat_regime)
 {
-       return UPPER_ATTRS(XN);
+       if (xlat_regime == EL1_EL0_REGIME) {
+               return UPPER_ATTRS(XN) | UPPER_ATTRS(PXN);
+       } else {
+               assert(xlat_regime == EL2_REGIME);
+               return UPPER_ATTRS(XN);
+       }
 }
 
-void xlat_arch_tlbi_va(uintptr_t va, int xlat_regime __unused)
+void xlat_arch_tlbi_va(uintptr_t va, int xlat_regime)
 {
        /*
         * Ensure the translation table write has drained into memory before
@@ -66,7 +82,12 @@ void xlat_arch_tlbi_va(uintptr_t va, int xlat_regime __unused)
         */
        dsbishst();
 
-       tlbimvaais(TLBI_ADDR(va));
+       if (xlat_regime == EL1_EL0_REGIME) {
+               tlbimvaais(TLBI_ADDR(va));
+       } else {
+               assert(xlat_regime == EL2_REGIME);
+               tlbimvahis(TLBI_ADDR(va));
+       }
 }
 
 void xlat_arch_tlbi_va_sync(void)
@@ -97,19 +118,25 @@ void xlat_arch_tlbi_va_sync(void)
 
 unsigned int xlat_arch_current_el(void)
 {
-       /*
-        * If EL3 is in AArch32 mode, all secure PL1 modes (Monitor, System,
-        * SVC, Abort, UND, IRQ and FIQ modes) execute at EL3.
-        *
-        * The PL1&0 translation regime in AArch32 behaves like the EL1&0 regime
-        * in AArch64 except for the XN bits, but we set and unset them at the
-        * same time, so there's no difference in practice.
-        */
-       return 1U;
+       if (IS_IN_HYP()) {
+               return 2U;
+       } else {
+               assert(IS_IN_SVC() || IS_IN_MON());
+               /*
+                * If EL3 is in AArch32 mode, all secure PL1 modes (Monitor,
+                * System, SVC, Abort, UND, IRQ and FIQ modes) execute at EL3.
+                *
+                * The PL1&0 translation regime in AArch32 behaves like the
+                * EL1&0 regime in AArch64 except for the XN bits, but we set
+                * and unset them at the same time, so there's no difference in
+                * practice.
+                */
+               return 1U;
+       }
 }
 
 /*******************************************************************************
- * Function for enabling the MMU in Secure PL1, assuming that the page tables
+ * Function for enabling the MMU in PL1 or PL2, assuming that the page tables
  * have already been created.
  ******************************************************************************/
 void setup_mmu_cfg(uint64_t *params, unsigned int flags,
@@ -119,8 +146,6 @@ void setup_mmu_cfg(uint64_t *params, unsigned int flags,
        uint64_t mair, ttbr0;
        uint32_t ttbcr;
 
-       assert(IS_IN_SECURE());
-
        /* Set attributes in the right indices of the MAIR */
        mair = MAIR0_ATTR_SET(ATTR_DEVICE, ATTR_DEVICE_INDEX);
        mair |= MAIR0_ATTR_SET(ATTR_IWBWA_OWBWA_NTR,
@@ -129,18 +154,32 @@ void setup_mmu_cfg(uint64_t *params, unsigned int flags,
                        ATTR_NON_CACHEABLE_INDEX);
 
        /*
-        * Configure the control register for stage 1 of the PL1&0 translation
-        * regime.
+        * Configure the control register for stage 1 of the PL1&0 or EL2
+        * translation regimes.
         */
 
        /* Use the Long-descriptor translation table format. */
        ttbcr = TTBCR_EAE_BIT;
 
-       /*
-        * Disable translation table walk for addresses that are translated
-        * using TTBR1. Therefore, only TTBR0 is used.
-        */
-       ttbcr |= TTBCR_EPD1_BIT;
+       if (xlat_regime == EL1_EL0_REGIME) {
+               assert(IS_IN_SVC() || IS_IN_MON());
+               /*
+                * Disable translation table walk for addresses that are
+                * translated using TTBR1. Therefore, only TTBR0 is used.
+                */
+               ttbcr |= TTBCR_EPD1_BIT;
+       } else {
+               assert(xlat_regime == EL2_REGIME);
+               assert(IS_IN_HYP());
+
+               /*
+                * Set HTCR bits as well. Set HTTBR table properties
+                * as Inner & outer WBWA & shareable.
+                */
+               ttbcr |= HTCR_RES1 |
+                        HTCR_SH0_INNER_SHAREABLE | HTCR_RGN0_OUTER_WBA |
+                        HTCR_RGN0_INNER_WBA;
+       }
 
        /*
         * Limit the input address ranges and memory region sizes translated
index 5c5a2a927c680836435a239c424d08b0e357796e..21717d28a847ab04367554ee12cbd3824a4fc0c4 100644 (file)
@@ -9,6 +9,7 @@
 #include <xlat_tables_v2.h>
 
        .global enable_mmu_direct_el1
+       .global enable_mmu_direct_el2
        .global enable_mmu_direct_el3
 
        /* Macros to read and write to system register for a given EL. */
        mrs     \gp_reg, \reg_name\()_el\()\el
        .endm
 
+       .macro tlbi_invalidate_all el
+       .if \el == 1
+               TLB_INVALIDATE(vmalle1)
+       .elseif \el == 2
+               TLB_INVALIDATE(alle2)
+       .elseif \el == 3
+               TLB_INVALIDATE(alle3)
+       .else
+               .error "EL must be 1, 2 or 3"
+       .endif
+       .endm
+
+       /* void enable_mmu_direct_el<x>(unsigned int flags) */
        .macro define_mmu_enable_func el
        func enable_mmu_direct_\()el\el
 #if ENABLE_ASSERTIONS
                tst     x1, #SCTLR_M_BIT
                ASM_ASSERT(eq)
 #endif
-
-               /* Invalidate TLB entries */
-               .if \el == 1
-               TLB_INVALIDATE(vmalle1)
-               .else
-               .if \el == 3
-               TLB_INVALIDATE(alle3)
-               .else
-               .error "EL must be 1 or 3"
-               .endif
-               .endif
+               /* Invalidate all TLB entries */
+               tlbi_invalidate_all \el
 
                mov     x7, x0
                ldr     x0, =mmu_cfg_params
@@ -86,4 +91,5 @@
         *  enable_mmu_direct_el3
         */
        define_mmu_enable_func 1
+       define_mmu_enable_func 2
        define_mmu_enable_func 3
index cf8070ad8e731833ed39c7db08283d287c085e4c..d1555bf2763550dbb92a592b669624273da807ea 100644 (file)
@@ -105,6 +105,9 @@ bool is_mmu_enabled_ctx(const xlat_ctx_t *ctx)
        if (ctx->xlat_regime == EL1_EL0_REGIME) {
                assert(xlat_arch_current_el() >= 1U);
                return (read_sctlr_el1() & SCTLR_M_BIT) != 0U;
+       } else if (ctx->xlat_regime == EL2_REGIME) {
+               assert(xlat_arch_current_el() >= 2U);
+               return (read_sctlr_el2() & SCTLR_M_BIT) != 0U;
        } else {
                assert(ctx->xlat_regime == EL3_REGIME);
                assert(xlat_arch_current_el() >= 3U);
@@ -118,6 +121,8 @@ bool is_dcache_enabled(void)
 
        if (el == 1U) {
                return (read_sctlr_el1() & SCTLR_C_BIT) != 0U;
+       } else if (el == 2U) {
+               return (read_sctlr_el2() & SCTLR_C_BIT) != 0U;
        } else {
                return (read_sctlr_el3() & SCTLR_C_BIT) != 0U;
        }
@@ -128,7 +133,8 @@ uint64_t xlat_arch_regime_get_xn_desc(int xlat_regime)
        if (xlat_regime == EL1_EL0_REGIME) {
                return UPPER_ATTRS(UXN) | UPPER_ATTRS(PXN);
        } else {
-               assert(xlat_regime == EL3_REGIME);
+               assert((xlat_regime == EL2_REGIME) ||
+                      (xlat_regime == EL3_REGIME));
                return UPPER_ATTRS(XN);
        }
 }
@@ -151,6 +157,9 @@ void xlat_arch_tlbi_va(uintptr_t va, int xlat_regime)
        if (xlat_regime == EL1_EL0_REGIME) {
                assert(xlat_arch_current_el() >= 1U);
                tlbivaae1is(TLBI_ADDR(va));
+       } else if (xlat_regime == EL2_REGIME) {
+               assert(xlat_arch_current_el() >= 2U);
+               tlbivae2is(TLBI_ADDR(va));
        } else {
                assert(xlat_regime == EL3_REGIME);
                assert(xlat_arch_current_el() >= 3U);
@@ -245,6 +254,8 @@ void setup_mmu_cfg(uint64_t *params, unsigned int flags,
                 * that are translated using TTBR1_EL1.
                 */
                tcr |= TCR_EPD1_BIT | (tcr_ps_bits << TCR_EL1_IPS_SHIFT);
+       } else if (xlat_regime == EL2_REGIME) {
+               tcr |= TCR_EL2_RES1 | (tcr_ps_bits << TCR_EL2_PS_SHIFT);
        } else {
                assert(xlat_regime == EL3_REGIME);
                tcr |= TCR_EL3_RES1 | (tcr_ps_bits << TCR_EL3_PS_SHIFT);
index 143f08ab3e239e78b45dff88c4102945f172e634..bf0cc9f5d6bb7fc101bbc64df297d46bff924571 100644 (file)
@@ -82,6 +82,8 @@ void init_xlat_tables(void)
 
        if (current_el == 1U) {
                tf_xlat_ctx.xlat_regime = EL1_EL0_REGIME;
+       } else if (current_el == 2U) {
+               tf_xlat_ctx.xlat_regime = EL2_REGIME;
        } else {
                assert(current_el == 3U);
                tf_xlat_ctx.xlat_regime = EL3_REGIME;
@@ -119,12 +121,32 @@ int xlat_change_mem_attributes(uintptr_t base_va, size_t size, uint32_t attr)
 
 #ifdef AARCH32
 
+#if !ERROR_DEPRECATED
 void enable_mmu_secure(unsigned int flags)
+{
+       enable_mmu_svc_mon(flags);
+}
+
+void enable_mmu_direct(unsigned int flags)
+{
+       enable_mmu_direct_svc_mon(flags);
+}
+#endif
+
+void enable_mmu_svc_mon(unsigned int flags)
 {
        setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
                      tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
                      tf_xlat_ctx.va_max_address, EL1_EL0_REGIME);
-       enable_mmu_direct(flags);
+       enable_mmu_direct_svc_mon(flags);
+}
+
+void enable_mmu_hyp(unsigned int flags)
+{
+       setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
+                     tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
+                     tf_xlat_ctx.va_max_address, EL2_REGIME);
+       enable_mmu_direct_hyp(flags);
 }
 
 #else
@@ -137,6 +159,14 @@ void enable_mmu_el1(unsigned int flags)
        enable_mmu_direct_el1(flags);
 }
 
+void enable_mmu_el2(unsigned int flags)
+{
+       setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
+                     tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
+                     tf_xlat_ctx.va_max_address, EL2_REGIME);
+       enable_mmu_direct_el2(flags);
+}
+
 void enable_mmu_el3(unsigned int flags)
 {
        setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
index 56b9514c36116b9ea5d1d9a4f5958ce2c3e018f0..0340bf632acff00183ccb29c416e65cb6a692a6e 100644 (file)
@@ -142,7 +142,8 @@ uint64_t xlat_desc(const xlat_ctx_t *ctx, uint32_t attr,
                        desc |= LOWER_ATTRS(AP_NO_ACCESS_UNPRIVILEGED);
                }
        } else {
-               assert(ctx->xlat_regime == EL3_REGIME);
+               assert((ctx->xlat_regime == EL2_REGIME) ||
+                      (ctx->xlat_regime == EL3_REGIME));
                desc |= LOWER_ATTRS(AP_ONE_VA_RANGE_RES1);
        }
 
@@ -1016,6 +1017,7 @@ void init_xlat_tables_ctx(xlat_ctx_t *ctx)
        assert(ctx != NULL);
        assert(!ctx->initialized);
        assert((ctx->xlat_regime == EL3_REGIME) ||
+              (ctx->xlat_regime == EL2_REGIME) ||
               (ctx->xlat_regime == EL1_EL0_REGIME));
        assert(!is_mmu_enabled_ctx(ctx));
 
index 8cad3483ffd06e73020f8c502a51ff9f0816e701..05533c61d315a677cb2de1ea7d8ae4ed2a2e4fca 100644 (file)
@@ -60,8 +60,8 @@ static void xlat_desc_print(const xlat_ctx_t *ctx, uint64_t desc)
                tf_printf("DEV");
        }
 
-       if (xlat_regime == EL3_REGIME) {
-               /* For EL3 only check the AP[2] and XN bits. */
+       if ((xlat_regime == EL3_REGIME) || (xlat_regime == EL2_REGIME)) {
+               /* For EL3 and EL2 only check the AP[2] and XN bits. */
                tf_printf(((desc & LOWER_ATTRS(AP_RO)) != 0ULL) ? "-RO" : "-RW");
                tf_printf(((desc & UPPER_ATTRS(XN)) != 0ULL) ? "-XN" : "-EXEC");
        } else {
@@ -200,6 +200,8 @@ void xlat_tables_print(xlat_ctx_t *ctx)
 
        if (ctx->xlat_regime == EL1_EL0_REGIME) {
                xlat_regime_str = "1&0";
+       } else if (ctx->xlat_regime == EL2_REGIME) {
+               xlat_regime_str = "2";
        } else {
                assert(ctx->xlat_regime == EL3_REGIME);
                xlat_regime_str = "3";
@@ -329,6 +331,7 @@ static int xlat_get_mem_attributes_internal(const xlat_ctx_t *ctx,
        assert(ctx != NULL);
        assert(ctx->initialized);
        assert((ctx->xlat_regime == EL1_EL0_REGIME) ||
+              (ctx->xlat_regime == EL2_REGIME) ||
               (ctx->xlat_regime == EL3_REGIME));
 
        virt_addr_space_size = (unsigned long long)ctx->va_max_address + 1ULL;
index 28127f89eb4403e129b68dd70febdb5b9734fedb..1424f859ad5ae3ffa84bd8e9d17abe1da64850ae 100644 (file)
@@ -34,13 +34,11 @@ eMMC/UFS drivers
 ----------------
 :M: Haojian Zhuang <haojian.zhuang@linaro.org>
 :G: `hzhuang1`_
-:F: drivers/emmc/
 :F: drivers/partition/
 :F: drivers/synopsys/emmc/
 :F: drivers/synopsys/ufs/
 :F: drivers/ufs/
 :F: include/drivers/dw_ufs.h
-:F: include/drivers/emmc.h
 :F: include/drivers/ufs.h
 :F: include/drivers/synopsys/dw_mmc.h
 
index 1184b7af8996f6b4df30b28ebcf768b069d47b2a..92a0f6e86efbd49d7b47f2b5503535717730426e 100644 (file)
@@ -189,6 +189,24 @@ GZIP_SUFFIX := .gz
 
 MAKE_DEP = -Wp,-MD,$(DEP) -MT $$@ -MP
 
+
+# MAKE_C_LIB builds a C source file and generates the dependency file
+#   $(1) = output directory
+#   $(2) = source file (%.c)
+#   $(3) = library name
+define MAKE_C_LIB
+$(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2))))
+$(eval DEP := $(patsubst %.o,%.d,$(OBJ)))
+
+$(OBJ): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | lib$(3)_dirs
+       @echo "  CC      $$<"
+       $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) $(MAKE_DEP) -c $$< -o $$@
+
+-include $(DEP)
+
+endef
+
+
 # MAKE_C builds a C source file and generates the dependency file
 #   $(1) = output directory
 #   $(2) = source file (%.c)
@@ -243,6 +261,18 @@ $(1): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | bl$(3)_dirs
 
 endef
 
+# MAKE_LIB_OBJS builds both C source files
+#   $(1) = output directory
+#   $(2) = list of source files
+#   $(3) = name of the library
+define MAKE_LIB_OBJS
+        $(eval C_OBJS := $(filter %.c,$(2)))
+        $(eval REMAIN := $(filter-out %.c,$(2)))
+        $(eval $(foreach obj,$(C_OBJS),$(call MAKE_C_LIB,$(1),$(obj),$(3))))
+
+        $(and $(REMAIN),$(error Unexpected source files present: $(REMAIN)))
+endef
+
 
 # MAKE_OBJS builds both C and assembly source files
 #   $(1) = output directory
@@ -274,6 +304,49 @@ endef
 # This must be set to a C string (including quotes where applicable).
 BUILD_MESSAGE_TIMESTAMP ?= __TIME__", "__DATE__
 
+.PHONY: libraries
+
+# MAKE_LIB_DIRS macro defines the target for the directory where
+# libraries are created
+define MAKE_LIB_DIRS
+        $(eval LIB_DIR    := ${BUILD_PLAT}/lib)
+        $(eval ROMLIB_DIR    := ${BUILD_PLAT}/romlib)
+        $(eval LIBWRAPPER_DIR := ${BUILD_PLAT}/libwrapper)
+        $(eval $(call MAKE_PREREQ_DIR,${LIB_DIR},${BUILD_PLAT}))
+        $(eval $(call MAKE_PREREQ_DIR,${ROMLIB_DIR},${BUILD_PLAT}))
+        $(eval $(call MAKE_PREREQ_DIR,${LIBWRAPPER_DIR},${BUILD_PLAT}))
+endef
+
+# MAKE_LIB macro defines the targets and options to build each BL image.
+# Arguments:
+#   $(1) = Library name
+define MAKE_LIB
+        $(eval BUILD_DIR  := ${BUILD_PLAT}/lib$(1))
+        $(eval LIB_DIR    := ${BUILD_PLAT}/lib)
+        $(eval ROMLIB_DIR    := ${BUILD_PLAT}/romlib)
+        $(eval SOURCES    := $(LIB$(call uppercase,$(1))_SRCS))
+        $(eval OBJS       := $(addprefix $(BUILD_DIR)/,$(call SOURCES_TO_OBJS,$(SOURCES))))
+
+$(eval $(call MAKE_PREREQ_DIR,${BUILD_DIR},${BUILD_PLAT}))
+$(eval $(call MAKE_LIB_OBJS,$(BUILD_DIR),$(SOURCES),$(1)))
+
+.PHONY : lib${1}_dirs
+lib${1}_dirs: | ${BUILD_DIR} ${LIB_DIR}  ${ROMLIB_DIR} ${LIBWRAPPER_DIR}
+libraries: ${LIB_DIR}/lib$(1).a
+LDPATHS = -L${LIB_DIR}
+LDLIBS += -l$(1)
+
+ifeq ($(USE_ROMLIB),1)
+LDLIBS := -lwrappers -lc
+endif
+
+all: ${LIB_DIR}/lib$(1).a
+
+${LIB_DIR}/lib$(1).a: $(OBJS)
+       @echo "  AR      $$@"
+       $$(Q)$$(AR) cr $$@ $$?
+endef
+
 # MAKE_BL macro defines the targets and options to build each BL image.
 # Arguments:
 #   $(1) = BL stage (2, 2u, 30, 31, 32, 33)
@@ -313,7 +386,11 @@ bl${1}_dirs: | ${OBJ_DIRS}
 $(eval $(call MAKE_OBJS,$(BUILD_DIR),$(SOURCES),$(1)))
 $(eval $(call MAKE_LD,$(LINKERFILE),$(BL_LINKERFILE),$(1)))
 
-$(ELF): $(OBJS) $(LINKERFILE) | bl$(1)_dirs $(BL_LIBS)
+ifeq ($(USE_ROMLIB),1)
+$(ELF): romlib.bin
+endif
+
+$(ELF): $(OBJS) $(LINKERFILE) | bl$(1)_dirs libraries $(BL_LIBS)
        @echo "  LD      $$@"
 ifdef MAKE_BUILD_STRINGS
        $(call MAKE_BUILD_STRINGS, $(BUILD_DIR)/build_message.o)
@@ -323,7 +400,8 @@ else
                $$(CC) $$(TF_CFLAGS) $$(CFLAGS) -xc -c - -o $(BUILD_DIR)/build_message.o
 endif
        $$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) -Map=$(MAPFILE) \
-               --script $(LINKERFILE) $(BUILD_DIR)/build_message.o $(OBJS) $(LDLIBS) $(BL_LIBS)
+               --script $(LINKERFILE) $(BUILD_DIR)/build_message.o \
+               $(OBJS) $(LDPATHS) $(LDLIBS) $(BL_LIBS)
 
 $(DUMP): $(ELF)
        @echo "  OD      $$@"
index cea8533813c68ea4912f1d8e3fad3d71feadd2c5..e4b5bdc92154d7bfa46dab6394ddf7a2a66903a3 100644 (file)
@@ -166,6 +166,9 @@ TRUSTED_BOARD_BOOT          := 0
 # Build option to choose whether Trusted firmware uses Coherent memory or not.
 USE_COHERENT_MEM               := 1
 
+# Build option to choose wheter Trusted firmware uses library at ROM
+USE_ROMLIB                             := 0
+
 # Use tbbr_oid.h instead of platform_oid.h
 USE_TBBR_DEFS                  = $(ERROR_DEPRECATED)
 
index a781c4f097e383568f252605e285214377c90c59..3f71d7355ecc3b0711b0180512dc42b313a1afb8 100644 (file)
@@ -67,6 +67,8 @@
  * in debug mode. We can test TBB on Juno bypassing the ROM and using 128 KB of
  * flash
  */
+#define PLAT_ARM_MAX_ROMLIB_RO_SIZE    0
+
 #if TRUSTED_BOARD_BOOT
 #define PLAT_ARM_TRUSTED_ROM_SIZE      0x00020000
 #else
 # define PLAT_ARM_MAX_BL1_RW_SIZE      0x6000
 #endif
 
+/*
+ * PLAT_ARM_MAX_ROMLIB_RW_SIZE is define to use a full page
+ */
+#if USE_ROMLIB
+#define PLAT_ARM_MAX_ROMLIB_RW_SIZE    0x1000
+#else
+#define PLAT_ARM_MAX_ROMLIB_RW_SIZE    0
+#endif
+
 /*
  * PLAT_ARM_MAX_BL2_SIZE is calculated using the current BL2 debug size plus a
  * little space for growth.
index a192a063501a207ebfcf2b61c2905ce6e68127e0..d43555382dc15a99d6df556fccd3e318b16bdd6b 100644 (file)
@@ -117,15 +117,21 @@ void arm_bl1_plat_arch_setup(void)
        const mmap_region_t bl_regions[] = {
                MAP_BL1_TOTAL,
                MAP_BL1_RO,
+#if USE_ROMLIB
+               ARM_MAP_ROMLIB_CODE,
+               ARM_MAP_ROMLIB_DATA,
+ #endif
                {0}
        };
 
        arm_setup_page_tables(bl_regions, plat_arm_get_mmap());
 #ifdef AARCH32
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 #else
        enable_mmu_el3(0);
 #endif /* AARCH32 */
+
+       arm_setup_romlib();
 }
 
 void bl1_plat_arch_setup(void)
index 1c93214eb2032b393e31756c77db1672ccc0f876..c67ab4914271ce60d67300041001cf9eb0ee6c4e 100644 (file)
@@ -82,7 +82,7 @@ void arm_bl2_el3_plat_arch_setup(void)
        arm_setup_page_tables(bl_regions, plat_arm_get_mmap());
 
 #ifdef AARCH32
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 #else
        enable_mmu_el3(0);
 #endif
index 39aceb3b9764e262264af8ffe8bd98d1bb9afabe..01ae8f3487cf6e15a7cc7f1bba7d3a95852aebd5 100644 (file)
@@ -246,16 +246,22 @@ void arm_bl2_plat_arch_setup(void)
        const mmap_region_t bl_regions[] = {
                MAP_BL2_TOTAL,
                ARM_MAP_BL_RO,
+#if USE_ROMLIB
+               ARM_MAP_ROMLIB_CODE,
+               ARM_MAP_ROMLIB_DATA,
+#endif
                {0}
        };
 
        arm_setup_page_tables(bl_regions, plat_arm_get_mmap());
 
 #ifdef AARCH32
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 #else
        enable_mmu_el1(0);
 #endif
+
+       arm_setup_romlib();
 }
 
 void bl2_plat_arch_setup(void)
index a626830231ffad00d7faba8d83360fbbfdcebec3..b518f0f62fec0a10472cdc4d8f19aacf7711cd38 100644 (file)
@@ -73,16 +73,21 @@ void arm_bl2u_plat_arch_setup(void)
        const mmap_region_t bl_regions[] = {
                MAP_BL2U_TOTAL,
                ARM_MAP_BL_RO,
+#if USE_ROMLIB
+               ARM_MAP_ROMLIB_CODE,
+               ARM_MAP_ROMLIB_DATA,
+#endif
                {0}
        };
 
        arm_setup_page_tables(bl_regions, plat_arm_get_mmap());
 
 #ifdef AARCH32
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 #else
        enable_mmu_el1(0);
 #endif
+       arm_setup_romlib();
 }
 
 void bl2u_plat_arch_setup(void)
index 0b648049faf0fb28bd542ec5d52839018447eead..c7c45b0d7f3daecc3a2fee08076844dc224a1987 100644 (file)
@@ -285,9 +285,18 @@ void bl31_plat_runtime_setup(void)
 void arm_bl31_plat_arch_setup(void)
 {
 
+#define ARM_MAP_BL_ROMLIB      MAP_REGION_FLAT(                        \
+                                       BL31_BASE,                      \
+                                       BL31_END - BL31_BASE,           \
+                                       MT_MEMORY | MT_RW | MT_SECURE)
+
        const mmap_region_t bl_regions[] = {
                MAP_BL31_TOTAL,
                ARM_MAP_BL_RO,
+#if USE_ROMLIB
+               ARM_MAP_ROMLIB_CODE,
+               ARM_MAP_ROMLIB_DATA,
+#endif
 #if USE_COHERENT_MEM
                ARM_MAP_BL_COHERENT_RAM,
 #endif
@@ -297,6 +306,8 @@ void arm_bl31_plat_arch_setup(void)
        arm_setup_page_tables(bl_regions, plat_arm_get_mmap());
 
        enable_mmu_el3(0);
+
+       arm_setup_romlib();
 }
 
 void bl31_plat_arch_setup(void)
index f83005f64c69e678715c308ab4752e18f01560c1..ed43c379d347807561ae1fb33309d09b1c2c79a9 100644 (file)
@@ -10,8 +10,9 @@
 #include <debug.h>
 #include <mmio.h>
 #include <plat_arm.h>
-#include <platform_def.h>
 #include <platform.h>
+#include <platform_def.h>
+#include <romlib.h>
 #include <secure_partition.h>
 
 /* Weak definitions may be overridden in specific ARM standard platform */
 #pragma weak plat_get_syscnt_freq2
 #endif
 
+
+void arm_setup_romlib(void)
+{
+#if USE_ROMLIB
+       if (!rom_lib_init(ROMLIB_VERSION))
+               panic();
+#endif
+}
+
 /*
  * Set up the page tables for the generic and platform-specific memory regions.
  * The size of the Trusted SRAM seen by the BL image must be specified as well
index 67b574de6c70f0c9023d0217d94798cafd4a1203..d8eda35b6413eb9e4eef3ac265df1098bac2b296 100644 (file)
@@ -185,8 +185,7 @@ include lib/libfdt/libfdt.mk
 
 DYN_CFG_SOURCES                +=      plat/arm/common/arm_dyn_cfg.c           \
                                plat/arm/common/arm_dyn_cfg_helpers.c   \
-                               common/fdt_wrappers.c                   \
-                               ${LIBFDT_SRCS}
+                               common/fdt_wrappers.c
 
 BL1_SOURCES            +=      ${DYN_CFG_SOURCES}
 BL2_SOURCES            +=      ${DYN_CFG_SOURCES}
index 935290ed6c34edd8cc27dead60bbc6c8f91d84c2..5191d69ba90ff4bc05ceb8d731ea2dbb01e13530 100644 (file)
@@ -212,5 +212,5 @@ void sp_min_plat_arch_setup(void)
 
        arm_setup_page_tables(bl_regions, plat_arm_get_mmap());
 
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 }
index 4f27149024575c6dc6b888fb9875e954b6845507..16c2b5c952e7c0c52d803b4f8b4f345eb5b5b8d1 100644 (file)
@@ -17,5 +17,5 @@
 
 void bl32_plat_enable_mmu(uint32_t flags)
 {
-       enable_mmu_secure(flags);
+       enable_mmu_svc_mon(flags);
 }
index da6f6a51949f2428b36e94d51aa6fb90368c29de..ec779f46a4f0784e1c903e63110de724d8fc4383 100644 (file)
 #include <console.h>
 #include <debug.h>
 #include <dw_mmc.h>
-#include <emmc.h>
 #include <errno.h>
 #include <hi6220.h>
 #include <hikey_def.h>
 #include <hikey_layout.h>
+#include <mmc.h>
 #include <mmio.h>
 #include <platform.h>
 #include <string.h>
@@ -97,6 +97,7 @@ void bl1_plat_arch_setup(void)
 void bl1_platform_setup(void)
 {
        dw_mmc_params_t params;
+       struct mmc_device_info info;
 
        assert((HIKEY_BL1_MMC_DESC_BASE >= SRAM_BASE) &&
               ((SRAM_BASE + SRAM_SIZE) >=
@@ -115,9 +116,10 @@ void bl1_platform_setup(void)
        params.desc_base = HIKEY_BL1_MMC_DESC_BASE;
        params.desc_size = 1 << 20;
        params.clk_rate = 24 * 1000 * 1000;
-       params.bus_width = EMMC_BUS_WIDTH_8;
-       params.flags = EMMC_FLAG_CMD23;
-       dw_mmc_init(&params);
+       params.bus_width = MMC_BUS_WIDTH_8;
+       params.flags = MMC_FLAG_CMD23;
+       info.mmc_dev_type = MMC_IS_EMMC;
+       dw_mmc_init(&params, &info);
 
        hikey_io_setup();
 }
index a3fc607bb241c5cf2836c59a1109e9c31c192403..aad350bf81ad01533f11ee9796852cff799dabf4 100644 (file)
 #include <debug.h>
 #include <desc_image_load.h>
 #include <dw_mmc.h>
-#include <emmc.h>
 #include <errno.h>
 #include <hi6220.h>
 #include <hisi_mcu.h>
 #include <hisi_sram_map.h>
+#include <mmc.h>
 #include <mmio.h>
 #ifdef SPD_opteed
 #include <optee_utils.h>
@@ -299,6 +299,7 @@ void bl2_el3_plat_arch_setup(void)
 void bl2_platform_setup(void)
 {
        dw_mmc_params_t params;
+       struct mmc_device_info info;
 
        hikey_sp804_init();
        hikey_gpio_init();
@@ -328,9 +329,10 @@ void bl2_platform_setup(void)
        params.desc_base = HIKEY_MMC_DESC_BASE;
        params.desc_size = 1 << 20;
        params.clk_rate = 24 * 1000 * 1000;
-       params.bus_width = EMMC_BUS_WIDTH_8;
-       params.flags = EMMC_FLAG_CMD23;
-       dw_mmc_init(&params);
+       params.bus_width = MMC_BUS_WIDTH_8;
+       params.flags = MMC_FLAG_CMD23;
+       info.mmc_dev_type = MMC_IS_EMMC;
+       dw_mmc_init(&params, &info);
 
        hikey_io_setup();
 }
index ef552244887dc11ec6c869fd5f5c2884d5300cd1..3efbefe8c6a1fdb498aefe54df30dd91bd857cd5 100644 (file)
@@ -7,7 +7,6 @@
 #include <arch_helpers.h>
 #include <assert.h>
 #include <debug.h>
-#include <emmc.h>
 #include <errno.h>
 #include <firmware_image_package.h>
 #include <io_block.h>
@@ -15,6 +14,7 @@
 #include <io_fip.h>
 #include <io_memmap.h>
 #include <io_storage.h>
+#include <mmc.h>
 #include <mmio.h>
 #include <platform_def.h>
 #include <semihosting.h>       /* For FOPEN_MODE_... */
@@ -59,10 +59,10 @@ static const io_block_dev_spec_t emmc_dev_spec = {
        },
 #endif
        .ops            = {
-               .read   = emmc_read_blocks,
-               .write  = emmc_write_blocks,
+               .read   = mmc_read_blocks,
+               .write  = mmc_write_blocks,
        },
-       .block_size     = EMMC_BLOCK_SIZE,
+       .block_size     = MMC_BLOCK_SIZE,
 };
 
 static const io_uuid_spec_t bl31_uuid_spec = {
index 0469a08b98ed2841833469af7ac1047a0c7111cb..4936f8316974f20520db795edf3e0a16be5084fa 100644 (file)
@@ -1,16 +1,16 @@
 /*
- * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
 
 #include <arch_helpers.h>
+#include <debug.h>
 #include <hisi_ipc.h>
 #include <hisi_sram_map.h>
 #include <mmio.h>
 #include <platform_def.h>
 #include <stdarg.h>
-#include <stdio.h>
 #include <string.h>
 
 static int ipc_init;
@@ -63,7 +63,7 @@ int hisi_cpus_powered_off_besides_curr(unsigned int cpu)
 static void hisi_ipc_send(unsigned int ipc_num)
 {
        if (!ipc_init) {
-               printf("error ipc base is null!!!\n");
+               tf_printf("error ipc base is null!!!\n");
                return;
        }
 
index 6a2474e8eb4c0df823ce23237a119822892ef533..ccc7296023d6ef1d35d5f5cbda283c1f888c16c4 100644 (file)
@@ -65,7 +65,7 @@ BL1_SOURCES           +=      bl1/tbbr/tbbr_img_desc.c                \
                                drivers/io/io_block.c                   \
                                drivers/io/io_fip.c                     \
                                drivers/io/io_storage.c                 \
-                               drivers/emmc/emmc.c                     \
+                               drivers/mmc/mmc.c                       \
                                drivers/synopsys/emmc/dw_mmc.c          \
                                lib/cpus/aarch64/cortex_a53.S           \
                                plat/hisilicon/hikey/aarch64/hikey_helpers.S \
@@ -81,7 +81,7 @@ BL2_SOURCES           +=      common/desc_image_load.c                \
                                drivers/io/io_block.c                   \
                                drivers/io/io_fip.c                     \
                                drivers/io/io_storage.c                 \
-                               drivers/emmc/emmc.c                     \
+                               drivers/mmc/mmc.c                       \
                                drivers/synopsys/emmc/dw_mmc.c          \
                                lib/cpus/aarch64/cortex_a53.S           \
                                plat/hisilicon/hikey/aarch64/hikey_helpers.S \
index 25eed5938cf3c129ad1fbb3b4c04b5889d964795..6fc4f3328c508b31e9cc3e5957b087e59bb2dc6b 100644 (file)
@@ -10,9 +10,9 @@
 #include <console.h>
 #include <debug.h>
 #include <dw_mmc.h>
-#include <emmc.h>
 #include <errno.h>
 #include <generic_delay_timer.h>
+#include <mmc.h>
 #include <mmio.h>
 #include <pl061_gpio.h>
 #include <platform.h>
@@ -92,6 +92,7 @@ void bl1_plat_arch_setup(void)
 void bl1_platform_setup(void)
 {
        int i;
+       struct mmc_device_info info;
 #if !POPLAR_RECOVERY
        dw_mmc_params_t params = EMMC_INIT_PARAMS(POPLAR_EMMC_DESC_BASE);
 #endif
@@ -105,7 +106,8 @@ void bl1_platform_setup(void)
 #if !POPLAR_RECOVERY
        /* SoC-specific emmc register are initialized/configured by bootrom */
        INFO("BL1: initializing emmc\n");
-       dw_mmc_init(&params);
+       info.mmc_dev_type = MMC_IS_EMMC;
+       dw_mmc_init(&params, &info);
 #endif
 
        plat_io_setup();
index 2671994a2ad32fbc85365cadf6d76abc64177ad7..041ed4ad5e83a7c00bc578489b26dca7cd69a5b2 100644 (file)
@@ -11,9 +11,9 @@
 #include <debug.h>
 #include <desc_image_load.h>
 #include <dw_mmc.h>
-#include <emmc.h>
 #include <errno.h>
 #include <generic_delay_timer.h>
+#include <mmc.h>
 #include <mmio.h>
 #include <optee_utils.h>
 #include <partition/partition.h>
@@ -333,6 +333,8 @@ void bl2_plat_get_bl33_meminfo(meminfo_t *bl33_meminfo)
 
 void bl2_early_platform_setup(meminfo_t *mem_layout)
 {
+       struct mmc_device_info info;
+
 #if !POPLAR_RECOVERY
        dw_mmc_params_t params = EMMC_INIT_PARAMS(POPLAR_EMMC_DESC_BASE);
 #endif
@@ -347,7 +349,8 @@ void bl2_early_platform_setup(meminfo_t *mem_layout)
 #if !POPLAR_RECOVERY
        /* SoC-specific emmc register are initialized/configured by bootrom */
        INFO("BL2: initializing emmc\n");
-       dw_mmc_init(&params);
+       info.mmc_dev_type = MMC_IS_EMMC;
+       dw_mmc_init(&params, &info);
 #endif
 
        plat_io_setup();
index 125b04841b95b976dc1a260556c8af186269692f..254b35715d7a5ef43e99393cd53636d84f7d1f76 100644 (file)
 
 #define EMMC_DESC_SIZE                 U(0x00100000) /* 1MB */
 #define EMMC_INIT_PARAMS(base)                         \
-       {       .bus_width = EMMC_BUS_WIDTH_8,          \
+       {       .bus_width = MMC_BUS_WIDTH_8,           \
                .clk_rate = 25 * 1000 * 1000,           \
                .desc_base = (base),    \
                .desc_size = EMMC_DESC_SIZE,            \
-               .flags =  EMMC_FLAG_CMD23,              \
+               .flags =  MMC_FLAG_CMD23,               \
                .reg_base = REG_BASE_MCI,               \
        }
 
index db52c67626f22c46d2d8e34dc2c688db784186c6..925274ce4e4aa2c0f19c6461ab3bcf518c8a469e 100644 (file)
@@ -7,13 +7,13 @@
 #include <arch_helpers.h>
 #include <assert.h>
 #include <debug.h>
-#include <emmc.h>
 #include <firmware_image_package.h>
 #include <io_block.h>
 #include <io_driver.h>
 #include <io_fip.h>
 #include <io_memmap.h>
 #include <io_storage.h>
+#include <mmc.h>
 #include <mmio.h>
 #include <partition/partition.h>
 #include <semihosting.h>
@@ -38,10 +38,10 @@ static const io_block_dev_spec_t emmc_dev_spec = {
                .length = POPLAR_EMMC_DATA_SIZE,
        },
        .ops            = {
-               .read   = emmc_read_blocks,
-               .write  = emmc_write_blocks,
+               .read   = mmc_read_blocks,
+               .write  = mmc_write_blocks,
        },
-       .block_size     = EMMC_BLOCK_SIZE,
+       .block_size     = MMC_BLOCK_SIZE,
 };
 #else
 static const io_dev_connector_t *mmap_dev_con;
index 14ffa99ea1fcd8bc9226c0cac575b3129b7decc1..3cdbe5999b10d760884f0d87a036bf7a13cceb6c 100644 (file)
@@ -82,7 +82,7 @@ PLAT_BL_COMMON_SOURCES        :=                                              \
 BL1_SOURCES    +=                                                      \
                lib/cpus/aarch64/cortex_a53.S                           \
                drivers/arm/pl061/pl061_gpio.c                          \
-               drivers/emmc/emmc.c                                     \
+               drivers/mmc/mmc.c                                       \
                drivers/synopsys/emmc/dw_mmc.c                          \
                drivers/io/io_storage.c                                 \
                drivers/io/io_block.c                                   \
@@ -94,7 +94,7 @@ BL1_SOURCES   +=                                                      \
 
 BL2_SOURCES    +=                                                      \
                drivers/arm/pl061/pl061_gpio.c                          \
-               drivers/emmc/emmc.c                                     \
+               drivers/mmc/mmc.c                                       \
                drivers/synopsys/emmc/dw_mmc.c                          \
                drivers/io/io_storage.c                                 \
                drivers/io/io_block.c                                   \
index 43f745070986048270de76eaf31fc68d41e7c449..0642b5ef7d27ce5a3c89eadcfa869caafd6528b1 100644 (file)
@@ -59,7 +59,7 @@ void ls_bl1_plat_arch_setup(void)
                             );
        VERBOSE("After setup the page tables\n");
 #ifdef AARCH32
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 #else
        enable_mmu_el3(0);
 #endif /* AARCH32 */
index 6e6ad6eb17b4d724d5fcb75a17e447b06bdd9395..4b2dc7245476e1af7d75f09f23a776d48befe97a 100644 (file)
@@ -53,7 +53,7 @@ void ls_bl2_plat_arch_setup(void)
                              );
 
 #ifdef AARCH32
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 #else
        enable_mmu_el1(0);
 #endif
index 6688551f447c93c01e4f1e66249b7ddf111bf841..21541855ba036ff1799a2f3c48060a4a5020fb03 100644 (file)
@@ -85,7 +85,6 @@ int bl2_plat_handle_scp_bl2(image_info_t *scp_bl2_image_info)
        int ret;
 
        INFO("BL2: Initiating SCP_BL2 transfer to SCP\n");
-       printf("BL2: Initiating SCP_BL2 transfer to SCP\n");
 
        /* initialize time (for delay functionality) */
        plat_delay_timer_init();
index 379ab3dcae4dd2a533ea3749c0a7857182fff3a8..1d46eeccd6eff239929d7e22cdb60b03e4fc527e 100644 (file)
@@ -132,8 +132,7 @@ BL2_SOURCES         +=      drivers/io/io_semihosting.c             \
                                plat/qemu/qemu_io_storage.c             \
                                plat/qemu/${ARCH}/plat_helpers.S        \
                                plat/qemu/qemu_bl2_setup.c              \
-                               plat/qemu/dt.c                          \
-                               $(LIBFDT_SRCS)
+                               plat/qemu/dt.c
 ifeq (${LOAD_IMAGE_V2},1)
 BL2_SOURCES            +=      plat/qemu/qemu_bl2_mem_params_desc.c    \
                                plat/qemu/qemu_image_load.c             \
index 68ca7db32771e25e3b5b5623a40858505de67508..7d84da1f8736826ffe95fbfc335e014b708498b4 100644 (file)
@@ -74,7 +74,7 @@ void configure_mmu(void)
        mmap_add(stm32mp1_mmap);
        init_xlat_tables();
 
-       enable_mmu_secure(0);
+       enable_mmu_svc_mon(0);
 }
 
 uintptr_t plat_get_ns_image_entrypoint(void)
index a82af64a03dc35f9959c11b21a8f75b82ad960a2..4897f36bcaf5adffe6b280a1a4b520c2571ed72c 100644 (file)
@@ -228,6 +228,13 @@ See the `Contributing Guidelines`_ for information on how to contribute to this
 project and the `Acknowledgments`_ file for a list of contributors to the
 project.
 
+IRC channel
+~~~~~~~~~~~
+
+Development discussion takes place on the #trusted-firmware-a channel
+on the Freenode IRC network. This is not an official support channel.
+If you have an issue to raise, please use the `GitHub issue tracker`_.
+
 Feedback and support
 ~~~~~~~~~~~~~~~~~~~~
 
index feeecaa49c2fa30bd1542b2e3888d6db41d4bf33..1362c1c6861554fd7fee535b0eeebcd2de94d261 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -29,14 +29,14 @@ static void trusty_dputc(char ch, int secure)
        s->linebuf[s->l++] = ch;
        if (s->l == sizeof(s->linebuf) || ch == '\n') {
                if (secure)
-                       printf("secure os: ");
+                       tf_printf("secure os: ");
                else
-                       printf("non-secure os: ");
+                       tf_printf("non-secure os: ");
                for (i = 0; i < s->l; i++) {
                        putchar(s->linebuf[i]);
                }
                if (ch != '\n') {
-                       printf(" <...>\n");
+                       tf_printf(" <...>\n");
                }
                s->l = 0;
        }