Commit Graph

906 Commits

Author SHA1 Message Date
matt e70564d7d6 apcs-gnu only passes one register on the stack.
ldrd always loads little endian (low address, low register).
2014-03-05 17:20:48 +00:00
macallan 1890dda80c on 601 CPUs skip to normal memcpy if both source and destination are 32bit
aligned
2014-03-04 17:05:14 +00:00
matt ab7ecd2ca6 Don't export __sync* if _KERNEL || _STANDALONE are defined.
(except if _RUMPKERNEL is defined)
2014-03-04 16:15:28 +00:00
matt 4fa1971b77 Fix #if/#endif nesting 2014-03-04 07:01:26 +00:00
matt f2d0e50b73 fix typo. 2014-03-04 06:36:41 +00:00
matt 2e6bec6f0d Make this work with coldfire. 2014-03-04 06:15:33 +00:00
matt ab9be61dac Make this coldfire compatible 2014-03-04 04:03:49 +00:00
matt 37c6d125b7 Fix non-EABI loading of argument. Deal with endian issues.
Fixes PR/48635
2014-03-04 03:50:37 +00:00
matt 674350cab3 Add atomic_sub_64.S 2014-03-04 03:49:07 +00:00
matt 308d85879d Load new value from correct stack location in _atomic_cas_64_up 2014-03-04 03:36:24 +00:00
matt be9a2e2448 Fetch value from correct stack location. Push an even number of registers
so ldrd won't fail.
2014-03-04 03:34:22 +00:00
matt f3eefe6cf1 Use _KERNEL_OPT around #include "opt_ppcarch.h" 2014-03-03 18:55:02 +00:00
macallan a00f9ab046 on ppc601 do byte-wise copies when in _KERNEL
from scole_mail, ok matt@
2014-03-03 15:30:31 +00:00
matt d9d3fe3d18 Add atomic_cas_64 support for ARM EABI on V5TE and V5TEJ cpus.
(strd is atomic).
2014-02-27 09:39:00 +00:00
matt 99ca27526b Add a method to test the compiler for things like LDREX availability,
LDRD availability, THUMB2, EABI.
2014-02-27 09:37:02 +00:00
martin 7d33c23876 Provide CAS variants for 16 and 8 bit when running with more that 1 cpu 2014-02-24 17:18:27 +00:00
martin a9af946581 Provide cas_16 and cas_8 emulation via cas_32 and use that for mips64 2014-02-24 16:15:43 +00:00
martin acddc8c970 Remove misplaced #endif 2014-02-23 07:43:38 +00:00
martin 0bc3e372de Missed one __sync_* op (or gcc4.8 does inline it, while 4.5 does not?) 2014-02-22 17:16:12 +00:00
martin b290679a78 Try to hide the C runtime implementation specific __sync_* ops from librump,
to avoid duplicates.
2014-02-22 17:08:30 +00:00
martin a41f5c9de6 Add missing __sunc_* ops for sun2 2014-02-22 14:51:34 +00:00
martin 1e4743d51f Add missing __sync_* ops to libc 2014-02-22 12:12:30 +00:00
skrll ee0ea75254 Add the missing __sync_* ops to libc 2014-02-22 10:23:24 +00:00
martin fc2fa9ee78 Add the missing __sync_* ops to libc 2014-02-22 08:53:33 +00:00
skrll 685e258fc7 Another layout change 2014-02-22 08:24:27 +00:00
skrll 59b3381179 Layout changes - no functional change. 2014-02-22 08:21:03 +00:00
martin 7c40818eed Move the __sync_* ops added in the previous change to a libc-only section 2014-02-22 08:08:56 +00:00
martin 6868f31bc9 Provide the missing __sync_* ops for earlier arm versions 2014-02-21 21:54:38 +00:00
martin c2b8beffc9 Provide all __sync_* ops in libc. 2014-02-21 19:05:33 +00:00
martin dd367c0e94 Provide the missing __sync_* ops for sparc. 2014-02-21 16:21:02 +00:00
martin de9cd3f918 Add a few missing namespace includes 2014-02-21 16:06:48 +00:00
martin e39d980f88 Provide 8 and 16 bit sync ops (using 16 bit and 8 bit cas) 2014-02-21 15:51:07 +00:00
martin 181d8404c2 Fix previous: move the alias declaration outside of a #ifdef _LP64 2014-02-21 14:42:09 +00:00
martin badf055197 Provide 32bit __sync ops based on atomic_cas_32. 2014-02-21 10:52:50 +00:00
martin 3f9f137185 Add missing __sync_lock_test_and_set_* aliases for PR lib/48601 2014-02-21 10:27:34 +00:00
martin ce6031c29a Add missing __sync_* ops 2014-02-20 20:39:01 +00:00
martin 566b4de508 Simplify the variants returning a bool 2014-02-20 16:33:23 +00:00
martin 0ac513ac84 Add a few __sync_* and atomic functions. 2014-02-18 16:19:28 +00:00
martin 1a7bc9a039 Make the _and_fetch_8 primitives return the new value they calculated
and set - not whatever is found in memory later.
2014-02-18 13:21:04 +00:00
martin 7925d62af9 Do not include <stdbool.h> in the kernel 2014-02-18 12:23:07 +00:00
martin 7c94bf0860 Provide most missing __sync_*64 primitives for i386 2014-02-18 10:16:55 +00:00
matt a857702bee switch to unified syntax 2014-01-30 06:39:16 +00:00
joerg 720b2586bd Include compiler-rt in libc, libm and libkern. 2014-01-29 23:37:18 +00:00
joerg 1f8490615f Kernel and standalone code uses panic() for broken code. 2014-01-29 22:29:43 +00:00
joerg 80d48117e3 Fix up the remaining __sync_* functions to build with Clang on ARM. 2014-01-29 15:59:11 +00:00
martin 25bbb5795c Fix a few more copy&pastos - now it actually builds. 2014-01-29 14:49:35 +00:00
martin 428c02d983 Fix copy&pasto 2014-01-29 14:44:32 +00:00
martin 0c99b2643b Provide _atomic_cas_{16,8}_up 2014-01-29 13:06:36 +00:00
skrll b39a3f4728 Copyright 2014-01-29 11:34:25 +00:00
skrll 0271e6c132 Provide _atomic_cas_8_up and _atomic_cas_16_up functions 2014-01-29 11:03:04 +00:00
martin d5d5b0e6b1 Provide _atomic_cas_8_up and _atomic_cas_16_up as assembler functions 2014-01-29 10:20:11 +00:00
joerg 8ee8f2a279 Allow building with clang.
XXX __RENAME is currently not allowed for the kernel, so use plain asm.
Clang rejects definitions of builtins, so it doesn't work without.
2014-01-28 21:47:48 +00:00
matt 96e5c530c7 fix c&p bug. 2014-01-27 20:44:29 +00:00
matt 7544d0a287 Return old 2014-01-27 20:01:50 +00:00
matt 40a93006ff Fix tpyo (add->and) 2014-01-27 18:43:07 +00:00
matt 0e4f0176c5 fix tpyos. 2014-01-27 18:36:52 +00:00
matt f5dc673f71 Add __sync_<OP>_and_fetch_<N> aliases 2014-01-27 18:36:37 +00:00
matt 56b80ae3d6 Rework so that __sync_fetch_and_<OP>_<N> actually returns a value. 2014-01-27 18:29:47 +00:00
matt 3f7729ad00 Add __sync_fetch_and_<OP>_<N> aliases 2014-01-27 18:12:57 +00:00
matt 739e8f6504 Add __sync_fetch_and_add_8 alias 2014-01-27 18:09:51 +00:00
matt b139333299 Add __sync_fetch_and_add_4 alias 2014-01-27 18:08:37 +00:00
matt d9f098af4b Add _atomic_cas_16_up and _atomic_cas_8_up 2014-01-27 18:05:24 +00:00
matt 335ea84251 Add _atomic_cas_16 and _atomic_cas_8 and their aliases
__sync_val_compare_and_swap_2 & __sync_val_compare_and_swap_1
2014-01-27 18:03:44 +00:00
martin 4bb25a32b9 PR port-arm/48543: do provide __ffssi2 as strong alias (in case libgcc.a gets
not linked in) for now.
OK: skrll@
2014-01-23 11:45:46 +00:00
joerg b8bd769d63 Include bsd.own.mk in case it hasn't been yet. 2014-01-16 11:43:49 +00:00
joerg 2356df897c Use the quad support from compiler-rt for MKLIBGCC=no. 2014-01-15 20:58:09 +00:00
apb bfdedd98f6 Make strnlen implementation usable from src/tools/compat. 2014-01-09 11:25:11 +00:00
christos 96602b9efa make it kernel friendly. 2013-12-27 20:26:53 +00:00
christos 967db62434 kernel needs it now too. 2013-12-27 20:24:45 +00:00
joerg 0c87c94ac0 Write out register pairs for strd. 2013-12-17 01:27:21 +00:00
matt 589d55678c Fix a bug in the divby0 case. 2013-12-12 18:01:14 +00:00
joerg aceb213538 Allow kernel code to access constant databases by moving cdbr(3) and the
required mi_vector_hash(3) into src/common.
2013-12-11 01:24:08 +00:00
skrll cd08339278 Add __sync_synchronize alias. 2013-12-07 13:09:55 +00:00
joerg 96f5bbd28d Improve EABI handling of string functions. Most importantly, fix
__aeabi_memset, which has the arguments in the wrong order.
2013-12-02 21:21:33 +00:00
joerg 5249048f1e Fix aliases. 2013-12-02 12:20:44 +00:00
lneto c4a02e0a12 changed lua_Number to int64_t 2013-12-02 04:39:10 +00:00
joerg 5ce8d6df3c Use explicit form of register pair operations by specifying both. 2013-11-30 21:09:11 +00:00
joerg 96195b9815 Explicitly name the register pairs. 2013-11-30 20:43:53 +00:00
joerg d0dcd65c88 Use PLT_SYM. 2013-11-30 20:20:42 +00:00
jakllsch 0182da6369 Remove x86_64 bzero.S; which since 2009 has only contained instructions
that it should be removed in 2010.
2013-11-23 16:57:52 +00:00
matt 918e319dfb Add support for the gcc __sync builtins.
Note that these need earmv6 or later to get the ldrex/strex instructions
2013-11-08 22:42:52 +00:00
christos 4fbaa41dd1 mark variables as used 2013-11-07 17:26:13 +00:00
rmind ecc1424a7c murmurhash2: add an optimised path for the aligned pointer case. 2013-10-26 21:06:38 +00:00
christos 7c7c6fd125 remove unused 2013-10-20 21:16:54 +00:00
martin 5fb50cc6c4 Make this compilable with gcc 4.8.1 without options DIAGNOSTIC. 2013-10-18 18:26:20 +00:00
skrll d3b6b7a500 More (stylistic) whitespace. 2013-09-30 13:07:51 +00:00
skrll fff36bdac8 Appease new gas 2013-09-30 12:31:27 +00:00
joerg 4d12bfcd15 Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
2013-09-12 15:36:14 +00:00
matt 47c1ea4ca3 Remove movw/movt due to linker problems.
Check for 0 divisor and __aeabi_idiv0 if needed (EABI && _LIBC only).
2013-09-09 07:33:54 +00:00
matt 4e222a409b s/__libc/_libc/ 2013-09-09 00:34:10 +00:00
matt 0e3a78e197 Support using hwdiv instructions if those are available.
But only for EABI.
2013-09-08 13:24:16 +00:00
chs 18ec38ea7c switch to ELF naming for local labels. 2013-09-07 19:06:29 +00:00
matt ca7975ae61 Use __ARM_EABI__ and new __UNWIND_TABLES__ to decide when to use .cfi ops 2013-09-05 05:15:47 +00:00
riastradh 3db7caeeb3 Comment on possible data-dependent branch in `!res'. 2013-08-28 19:31:14 +00:00
riastradh 1239c2bb08 Publish explicit_memset and consttime_memequal in userland libc.
Remove the double-underscore from the userland versions, and do the
weak alias dance instead, now that these are public parts of libc.

As discussed on tech-userlevel:

https://mail-index.netbsd.org/tech-userlevel/2013/06/24/msg007843.html
(option 3)
2013-08-28 17:47:07 +00:00
riastradh 495fdb7e9a Make explicit_memset match memset's return value. 2013-08-28 15:46:23 +00:00
riastradh cc79193075 Fix sense of consttime_memequal and update all callers.
Now it returns true (nonzero) to mean equal and false (zero) to mean
inequal, as the name suggests.

As promised on tech-userlevel back in June:

https://mail-index.netbsd.org/tech-userlevel/2013/06/24/msg007843.html
2013-08-28 15:24:41 +00:00
matt 5fa3a11dc7 move a misplaced #endif 2013-08-25 06:15:06 +00:00
matt 3202e91ce2 Don't include .cfi info if _KERNEL || _STANDALONE 2013-08-22 19:25:00 +00:00
matt 879bc2893e Use __section(".test.startup") for the init routines 2013-08-21 03:00:56 +00:00
matt afb7a3b050 write of final NUL in strlcpy doesn't need to be post-incremented 2013-08-20 21:37:39 +00:00
matt 61e4023f77 If compiling standalone with Thumb, use the thumb version instead of the
naive version.
2013-08-20 21:35:24 +00:00
matt bb45e513c6 Thumb versions of strcpy/strlcpy/strncpy 2013-08-20 21:32:50 +00:00
matt e61510c225 strlcat_arm.S is smaller than strlcat_naive.S so always use it. 2013-08-20 21:08:54 +00:00
matt 1a52a42b91 Add a missing it gt before movgt for thumb 2013-08-20 16:34:47 +00:00
matt 59eed4d06e Use the arm versions of strnlen if compiling thumb2 2013-08-20 08:08:59 +00:00
matt 04d357d985 Use the arm versions of strlen/strchr/strrchr if compiling thumb2 2013-08-20 08:07:30 +00:00
matt 7477ad6ac7 thumbify (part2) 2013-08-20 08:06:30 +00:00
matt b628072a9d swap r1 & ip
use adds, eors, etc.
teq -> cmp
2013-08-20 08:05:49 +00:00
matt 7eb7e9aa67 Push two registers to keep stack aligned. 2013-08-20 07:52:31 +00:00
matt 3444a5b35b Unless we are using an XSCALE, default to the normal arm version of memcpy. 2013-08-20 07:25:52 +00:00
matt 4ca1b3cb84 Add two thumb2 bits. 2013-08-19 17:50:04 +00:00
matt c2b4a072b1 Missing one teq -> cmp 2013-08-19 17:41:47 +00:00
matt 5df59dfb3f Swap use of r1 and ip
teq -> cmp.
add s to few instructions
(thumbify part 1)
2013-08-19 17:38:47 +00:00
matt ddea6e9586 cbnz/cbz can not branch backwards so nuke 'em.
Use the same register usage in strlen as in strnlen
2013-08-19 17:02:25 +00:00
matt 3d4b320a67 Add END() 2013-08-19 06:23:59 +00:00
matt 5958fbf1be fix cfi_register -> cfi_offset 2013-08-19 06:11:20 +00:00
matt 1045cebc5a Rework to allow thumb armv7 compilation.
Add atomic_simplelock.c for thumb
2013-08-19 03:55:12 +00:00
matt 578c0a5078 Thumbify (and use .cfi ops) 2013-08-19 03:54:15 +00:00
matt 556b3d5814 thumbify
add .cfi ops (for thumb)
2013-08-19 03:51:04 +00:00
matt 3302b194a2 This is ARM only 2013-08-19 03:47:06 +00:00
matt 14ba29f9a7 Add thumb version
Use STRONG_ALIAS
2013-08-19 03:44:47 +00:00
matt a546978def Use STRONG_ALIAS
Add thumb variation
2013-08-19 03:44:18 +00:00
matt d2610c9da2 Add .cfi ops
Thumbify
2013-08-19 03:43:07 +00:00
matt eeddcf15a5 Add cfi ops.
Thumbify
2013-08-19 03:27:34 +00:00
matt 4f50540e20 Add END() and clarify thumb/arm 2013-08-19 02:55:19 +00:00
matt d0a4289725 Thumbify 2013-08-19 02:54:02 +00:00
matt 70e4c7e047 Add END() 2013-08-19 02:37:12 +00:00
matt de1d51c4ce Thumbify 2013-08-19 02:36:27 +00:00
matt f66bbc4e80 ip -> r2
teq -> cmp
2013-08-19 02:24:09 +00:00
matt 7ed75e50a6 Thumbify 2013-08-19 02:22:25 +00:00
matt d3ce3f542d ip -> r2
teq -> cmp
2013-08-19 02:20:06 +00:00
matt 8ba242506b Thumbify 2013-08-19 02:13:13 +00:00
matt 414db3a8ba Use ip as a temporary 2013-08-19 02:11:03 +00:00
matt 0b070291c7 Change previous use of r2 to r3 2013-08-19 02:08:41 +00:00
matt ad93040ca6 teq -> cmp
ip -> r2
add/sub -> adds/subs
(thumbify part 1)
2013-08-19 02:07:22 +00:00
matt 4373b1a3d8 For EABI, add .cfi ops 2013-08-19 01:17:32 +00:00
matt 9dae71ed91 Add .cfi for __ARM_EABI__
Thumbify
2013-08-19 01:12:08 +00:00
matt b4e387d260 Add END(memcpy) 2013-08-19 01:08:53 +00:00
matt c2438985ca For Thumb, use naive version 2013-08-19 01:08:29 +00:00
matt f37c7d04a2 Thumbify 2013-08-19 00:56:12 +00:00
matt 4640cf4296 Add .cfi ops if EABI.
Thumbify.
2013-08-19 00:36:29 +00:00
matt dcdd476662 Thumbify 2013-08-19 00:35:06 +00:00
matt 034de21d59 Add a hidden version for libpthread. 2013-08-16 01:47:41 +00:00
matt 48a3833972 When compiling for Thumb1, the swp instruction is not availble. So this
stub is added to provide __cpu_simple_lock and __cpu_simple_lock_try via
thumb interwork support.  It is compiled with -mno-thumb.
2013-08-15 22:42:50 +00:00
matt f376e753f4 Only assemble if !__ARM_EABI__ 2013-08-15 21:40:11 +00:00
matt c4948bca36 Use mvnge AHI, #0x80000000 instead of mvnge AHI, ALO, lsr #1 2013-08-13 15:52:00 +00:00
matt 1271d298bd 0x800000000 -> 0x80000000 (one too many zeroes) 2013-08-13 15:46:31 +00:00
matt 11f1fec6ba Fix movlt 2013-08-13 15:45:30 +00:00
matt 85779a4007 andlt -> movlt 2013-08-13 15:44:35 +00:00