diff options
author | John Marino <marino@FreeBSD.org> | 2017-02-03 05:29:43 +0000 |
---|---|---|
committer | John Marino <marino@FreeBSD.org> | 2017-02-03 05:29:43 +0000 |
commit | d8cee0a48b5dd72643e9a8059cebdd4d7a5ddc78 (patch) | |
tree | 877db11ce344b4ce48b2301c4224f28f54db0865 /lang/gcc6-aux | |
parent | cd6fe2f54092abd478764c879f97c13d30ab5eea (diff) |
Notes
Diffstat (limited to 'lang/gcc6-aux')
-rw-r--r-- | lang/gcc6-aux/Makefile.version | 4 | ||||
-rw-r--r-- | lang/gcc6-aux/files/diff-ada | 122 | ||||
-rw-r--r-- | lang/gcc6-aux/files/diff-core | 227 |
3 files changed, 337 insertions, 16 deletions
diff --git a/lang/gcc6-aux/Makefile.version b/lang/gcc6-aux/Makefile.version index c9eeef54045d..bd2bbce8eba7 100644 --- a/lang/gcc6-aux/Makefile.version +++ b/lang/gcc6-aux/Makefile.version @@ -7,7 +7,9 @@ SNAPSHOT= 20161221 BUILD_RELEASE= yes MAIN_PR= 0 UTIL_PR= 0 -ARMV7_PR= 0 +ARMV7_PR= 1 +ARM64_PR= 0 +X86_PR= 1 .if ${BUILD_RELEASE:Mno} # Snapshot naming pattern diff --git a/lang/gcc6-aux/files/diff-ada b/lang/gcc6-aux/files/diff-ada index 6b2eee05721a..d40eed2845b6 100644 --- a/lang/gcc6-aux/files/diff-ada +++ b/lang/gcc6-aux/files/diff-ada @@ -1003,7 +1003,7 @@ THREADSLIB = -lposix4 -lthread MISCLIB = -lposix4 -lnsl -lsocket SO_OPTS = -Wl,-h, -@@ -1390,6 +1394,39 @@ +@@ -1475,10 +1479,45 @@ LIBRARY_VERSION := $(LIB_VERSION) endif @@ -1040,10 +1040,7 @@ + LIBRARY_VERSION := $(LIB_VERSION) +endif + - # x86 kfreebsd - ifeq ($(strip $(filter-out %86 kfreebsd%,$(target_cpu) $(target_os))),) - LIBGNAT_TARGET_PAIRS = \ -@@ -1450,6 +1487,8 @@ + # x86 FreeBSD ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-freebsd.ads \ @@ -1052,7 +1049,7 @@ s-inmaop.adb<s-inmaop-posix.adb \ s-intman.adb<s-intman-posix.adb \ s-mudido.adb<s-mudido-affinity.adb \ -@@ -1467,6 +1506,8 @@ +@@ -1496,6 +1535,8 @@ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb GNATLIB_SHARED = gnatlib-shared-dual @@ -1061,7 +1058,7 @@ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o EH_MECHANISM=-gcc -@@ -1480,6 +1521,8 @@ +@@ -1509,6 +1550,8 @@ ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-freebsd.ads \ @@ -1070,7 +1067,7 @@ s-inmaop.adb<s-inmaop-posix.adb \ s-intman.adb<s-intman-posix.adb \ s-mudido.adb<s-mudido-affinity.adb \ -@@ -1497,6 +1540,8 @@ +@@ -1526,6 +1569,8 @@ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb GNATLIB_SHARED = gnatlib-shared-dual @@ -1079,7 +1076,44 @@ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o EH_MECHANISM=-gcc -@@ -1510,6 +1555,8 @@ +@@ -1535,10 +1580,45 @@ + MISCLIB = -lutil + endif + ++# aarch64 FreeBSD ++ifeq ($(strip $(filter-out %aarch64 freebsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ s-osinte.adb<s-osinte-freebsd.adb \ ++ s-osinte.ads<s-osinte-freebsd.ads \ ++ s-osprim.adb<s-osprim-posix.adb \ ++ s-taprop.adb<s-taprop-posix.adb \ ++ s-taspri.ads<s-taspri-posix.ads \ ++ s-tpopsp.adb<s-tpopsp-posix.adb \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(ATOMICS_BUILTINS_TARGET_PAIRS) \ ++ system.ads<system-freebsd-x86_64.ads ++ ++ TOOLS_TARGET_PAIRS = \ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ + # x86-64 DragonFly ifeq ($(strip $(filter-out %86_64 dragonfly%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-dragonfly.ads \ @@ -1088,12 +1122,80 @@ s-inmaop.adb<s-inmaop-posix.adb \ s-intman.adb<s-intman-posix.adb \ s-mudido.adb<s-mudido-affinity.adb \ -@@ -1527,6 +1574,8 @@ +@@ -1556,6 +1636,76 @@ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb GNATLIB_SHARED = gnatlib-shared-dual + EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c + EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86 NetBSD ++ifeq ($(strip $(filter-out %86 netbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ s-osinte.adb<s-osinte-netbsd.adb \ ++ s-osinte.ads<s-osinte-netbsd.ads \ ++ s-osprim.adb<s-osprim-posix.adb \ ++ s-taprop.adb<s-taprop-posix.adb \ ++ s-taspri.ads<s-taspri-posix.ads \ ++ s-tpopsp.adb<s-tpopsp-posix.adb \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_TARGET_PAIRS) \ ++ system.ads<system-freebsd-x86.ads ++ ++ TOOLS_TARGET_PAIRS = \ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86-64 NetBSD (must succeed x86 because %86 matches x86_64) ++ifeq ($(strip $(filter-out x86_64 netbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ s-osinte.adb<s-osinte-netbsd.adb \ ++ s-osinte.ads<s-osinte-netbsd.ads \ ++ s-osprim.adb<s-osprim-posix.adb \ ++ s-taprop.adb<s-taprop-posix.adb \ ++ s-taspri.ads<s-taspri-posix.ads \ ++ s-tpopsp.adb<s-tpopsp-posix.adb \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_64_TARGET_PAIRS) \ ++ system.ads<system-freebsd-x86_64.ads ++ ++ TOOLS_TARGET_PAIRS = \ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o EH_MECHANISM=-gcc diff --git a/lang/gcc6-aux/files/diff-core b/lang/gcc6-aux/files/diff-core index 615aac84a00e..6f7ea9002098 100644 --- a/lang/gcc6-aux/files/diff-core +++ b/lang/gcc6-aux/files/diff-core @@ -9,6 +9,130 @@ %{symbolic:-Bsymbolic}" #undef LINK_SPEC +--- /dev/null ++++ gcc/config/aarch64/aarch64-freebsd.h +@@ -0,0 +1,97 @@ ++/* Definitions for AArch64 running FreeBSD ++ Copyright (C) 2016 Free Software Foundation, Inc. ++ ++ This file is part of GCC. ++ ++ GCC is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3, or (at your option) ++ any later version. ++ ++ GCC is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GCC; see the file COPYING3. If not see ++ <http://www.gnu.org/licenses/>. */ ++ ++#ifndef GCC_AARCH64_FREEBSD_H ++#define GCC_AARCH64_FREEBSD_H ++ ++#undef SUBTARGET_CPP_SPEC ++#define SUBTARGET_CPP_SPEC FBSD_CPP_SPEC ++ ++#if TARGET_BIG_ENDIAN_DEFAULT ++#define TARGET_LINKER_EMULATION "aarch64fbsdb" ++#else ++#define TARGET_LINKER_EMULATION "aarch64fbsd" ++#endif ++ ++#undef SUBTARGET_EXTRA_LINK_SPEC ++#define SUBTARGET_EXTRA_LINK_SPEC " -m" TARGET_LINKER_EMULATION ++ ++#undef FBSD_TARGET_LINK_SPEC ++#define FBSD_TARGET_LINK_SPEC " \ ++ %{p:%nconsider using `-pg' instead of `-p' with gprof (1) } \ ++ %{v:-V} \ ++ %{assert*} %{R*} %{rpath*} %{defsym*} \ ++ %{shared:-Bshareable %{h*} %{soname*}} \ ++ %{symbolic:-Bsymbolic} \ ++ %{static:-Bstatic} \ ++ %{!static: \ ++ %{!static: --hash-style=gnu -rpath @PREFIX@/@GCCAUX@/lib} \ ++ %{rdynamic:-export-dynamic} \ ++ %{!shared:-dynamic-linker " FBSD_DYNAMIC_LINKER " }} \ ++ -X" SUBTARGET_EXTRA_LINK_SPEC " \ ++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" ++ ++#if TARGET_FIX_ERR_A53_835769_DEFAULT ++#define CA53_ERR_835769_SPEC \ ++ " %{!mno-fix-cortex-a53-835769:--fix-cortex-a53-835769}" ++#else ++#define CA53_ERR_835769_SPEC \ ++ " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}" ++#endif ++ ++#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT ++#define CA53_ERR_843419_SPEC \ ++ " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}" ++#else ++#define CA53_ERR_843419_SPEC \ ++ " %{mfix-cortex-a53-843419:--fix-cortex-a53-843419}" ++#endif ++ ++#undef LINK_SPEC ++#define LINK_SPEC FBSD_TARGET_LINK_SPEC \ ++ CA53_ERR_835769_SPEC \ ++ CA53_ERR_843419_SPEC ++ ++#define GNU_USER_TARGET_MATHFILE_SPEC \ ++ "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" ++ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC \ ++ GNU_USER_TARGET_MATHFILE_SPEC " " \ ++ FBSD_ENDFILE_SPEC ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ FBSD_TARGET_OS_CPP_BUILTINS (); \ ++ } \ ++ while (false) ++ ++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack ++ ++/* Uninitialized common symbols in non-PIE executables, even with ++ strong definitions in dependent shared libraries, will resolve ++ to COPY relocated symbol in the executable. See PR65780. */ ++#undef TARGET_BINDS_LOCAL_P ++#define TARGET_BINDS_LOCAL_P default_binds_local_p_2 ++ ++/* Static stack checking is supported by means of probes. */ ++#define STACK_CHECK_STATIC_BUILTIN 1 ++#endif /* GCC_AARCH64_FREEBSD_H */ +--- /dev/null ++++ gcc/config/aarch64/t-aarch64-freebsd +@@ -0,0 +1,21 @@ ++# Machine description for AArch64 architecture. ++# Copyright (C) 2016 Free Software Foundation, Inc. ++# ++# This file is part of GCC. ++# ++# GCC is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 3, or (at your option) ++# any later version. ++# ++# GCC is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++# General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GCC; see the file COPYING3. If not see ++# <http://www.gnu.org/licenses/>. ++ ++LIB1ASMSRC = aarch64/lib1funcs.asm ++LIB1ASMFUNCS = _aarch64_sync_cache_range --- gcc/config/i386/freebsd.h.orig +++ gcc/config/i386/freebsd.h @@ -77,6 +77,12 @@ @@ -40,6 +164,18 @@ %{static:-Bstatic}} \ + %{!static:" ELF_HASH_STYLE "-rpath @PREFIX@/@GCCAUX@/lib} \ %{symbolic:-Bsymbolic}" +--- configure.orig ++++ configure +@@ -3483,6 +3483,9 @@ + *-*-vxworks*) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; ++ aarch64*-*-freebsd*) ++ noconfigdirs="$noconfigdirs target-libffi" ++ ;; + alpha*-*-*vms*) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; --- gcc/Makefile.in.orig +++ gcc/Makefile.in @@ -1185,7 +1185,6 @@ @@ -50,7 +186,7 @@ insn-opinit.o \ insn-output.o \ insn-peep.o \ -@@ -1556,6 +1555,7 @@ +@@ -1557,6 +1556,7 @@ $(OBJS-libcommon-target) main.o c-family/cppspec.o \ $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ $(GCOV_TOOL_OBJS) $(GENGTYPE_OBJS) gcc-ar.o gcc-nm.o gcc-ranlib.o \ @@ -58,7 +194,7 @@ lto-wrapper.o collect-utils.o # This lists all host object files, whether they are included in this -@@ -1563,6 +1563,11 @@ +@@ -1564,6 +1564,11 @@ ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS) BACKEND = libbackend.a main.o libcommon-target.a libcommon.a \ @@ -70,7 +206,7 @@ $(CPPLIB) $(LIBDECNUMBER) # This is defined to "yes" if Tree checking is enabled, which roughly means -@@ -2217,6 +2222,7 @@ +@@ -2218,6 +2223,7 @@ insn-modes.c: s-modes; @true insn-modes.h: s-modes-h; @true @@ -78,7 +214,7 @@ min-insn-modes.c: s-modes-m; @true s-modes: build/genmodes$(build_exeext) -@@ -2234,6 +2240,12 @@ +@@ -2235,6 +2241,12 @@ $(SHELL) $(srcdir)/../move-if-change tmp-min-modes.c min-insn-modes.c $(STAMP) s-modes-m @@ -91,7 +227,7 @@ insn-preds.c: s-preds; @true tm-preds.h: s-preds-h; @true tm-constrs.h: s-constrs-h; @true -@@ -3419,6 +3431,9 @@ +@@ -3420,6 +3432,9 @@ ( cd $(DESTDIR)$(bindir) && \ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(FULL_DRIVER_NAME) ); \ fi; \ @@ -101,3 +237,84 @@ if [ ! -f gcc-cross$(exeext) ] \ && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ +--- gcc/config.gcc.orig ++++ gcc/config.gcc +@@ -941,6 +941,11 @@ + done + TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'` + ;; ++aarch64*-*-freebsd*) ++ tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file}" ++ tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-freebsd.h" ++ tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-freebsd" ++ ;; + aarch64*-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h" + tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-linux.h" +@@ -1445,12 +1450,16 @@ + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h" + ;; + i[34567]86-*-netbsdelf*) +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h freebsd-stdint.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ use_gcc_stdint=wrap + ;; + x86_64-*-netbsd*) +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h freebsd-stdint.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ use_gcc_stdint=wrap + ;; + i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h" +--- gcc/config.host.orig ++++ gcc/config.host +@@ -99,7 +99,7 @@ + esac + + case ${host} in +- aarch64*-*-linux*) ++ aarch64*-*-freebsd* | aarch64*-*-linux*) + case ${target} in + aarch64*-*-*) + host_extra_gcc_objs="driver-aarch64.o" +--- libgcc/config.host.orig ++++ libgcc/config.host +@@ -242,7 +242,8 @@ + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + ;; + *-*-netbsd*) +- tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ++ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" ++ tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" + # NetBSD 1.7 and later are set up to use GCC's crtstuff for + # ELF configurations. We will clear extra_parts in the + # a.out configurations. +@@ -333,6 +334,11 @@ + tmake_file="${tmake_file} ${cpu_type}/t-aarch64" + tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm" + ;; ++aarch64*-*-freebsd*) ++ extra_parts="$extra_parts crtfastmath.o" ++ tmake_file="${tmake_file} ${cpu_type}/t-aarch64" ++ tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm" ++ ;; + aarch64*-*-linux*) + extra_parts="$extra_parts crtfastmath.o" + md_unwind_header=aarch64/linux-unwind.h +@@ -597,9 +603,12 @@ + md_unwind_header=i386/freebsd-unwind.h + ;; + i[34567]86-*-netbsdelf*) ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ #md_unwind_header=i386/netbsd-unwind.h + ;; + x86_64-*-netbsd*) + tmake_file="${tmake_file} i386/t-crtstuff" ++ #md_unwind_header=i386/netbsd-unwind.h + ;; + i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + ;; |