Home | History | Annotate | only in /src/lib/libc/arch/arm
History log of /src/lib/libc/arch/arm
RevisionDateAuthorComments
 1.29 31-Oct-2021  thorpej Tidy up how __sigaction14_sigtramp.c is added to SRCS.
 1.28 20-Aug-2015  pooka In rumprun mode on ARM, don't build syscall or signal code into libc.
(like on x86)
 1.27 29-Jan-2014  joerg Include compiler-rt in libc, libm and libkern.
 1.26 17-Jan-2014  joerg Use generic version of fabs for softfloat.
 1.25 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.24 21-Aug-2013  matt If not earmv7, use -marm on all assembly files
 1.23 18-Aug-2013  skrll Revert previous.
 1.22 18-Aug-2013  skrll Only add in __aeabi_read_tp.S when building for earm.
 1.21 30-Apr-2013  matt Match against LIBC_MACHINE_ARCH for MKCOMPAT
 1.20 03-Feb-2013  matt Add support for earmhf and earmhfeb and add SRCS.hardfloat.
 1.19 29-Jan-2013  matt for earm*, add arm_initfini.c
 1.18 26-Jan-2013  matt When building for earm*, compile __aeabi_[df]cmpun.c and __aeabi_[il]div0.c
 1.17 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.16 27-Sep-2012  skrll Remove magic numbers.
 1.15 06-Aug-2012  matt branches: 1.15.2;
Use the generic fixuns ieee754 instead of the ones from softfloat.
 1.14 06-Aug-2012  matt Don't need -I${.CURDIR}/arch/arm anymore
 1.13 05-Aug-2012  matt Only compile __aeabi_*ldivmod for earm/earmeb.
 1.12 05-Aug-2012  matt For ARM EABI, we need -DDSOFTFLOAT_NEED_FIXUNS too.
 1.11 05-Aug-2012  matt Add __aeabi_uldivmod (unsigned long long div/mod).
Only use 32-bit softfloat if arm/armeb.
earm/earmeb will use the 64-bit softfloat.
 1.10 18-Nov-2011  joerg branches: 1.10.4;
Hook up TLS support on ARM. Tested by martin@, kernel support from matt@
 1.9 06-Jul-2010  mrg branches: 1.9.6;
remove almost all the ability to build netbsd with an a.out target.
we're ELF now, and there are many missing checks against OBJECT_FMT.
if we ever consider switching, the we can figure out what new ones
we need but for now it's just clutter.

this doesn't remove any of the support for exec_aout or any actually
required-for-boot a.out support, only the ability to build a netbsd
release in a.out format. ie, most of this code has been dead for
over a decade.

i've tested builds on vax, amd64, i386, mac68k, macppc, sparc, atari,
amiga, shark, cats, dreamcast, landisk, mmeye and x68k. this covers
the 5 MACHINE_ARCH's affected, and all the other arch code touched.
it also includes some actual run-time testing of sparc, i386 and
shark, and i performed binary comparison upon amiga and x68k as well.


some minor details relevant:
- move shlib.[ch] from ld.aout_so into ldconfig proper, and cut them
down to only the parts ldconfig needs
- remove various unused source files
- switch amiga bootblocks to using elf2bb.h instead of aout2bb.h
 1.8 17-Jun-2006  uwe G/c KMSRCS and KMINCLUDES now that we have common/lib/libc
 1.7 16-Oct-2005  christos move to the new compat layout.
 1.6 05-Oct-2003  matt Add SA_SIGINFO support for ARM.
 1.5 10-Jul-2002  thorpej Enable the libc-provided signal trampoline. The old __sigaction14
entry point has been replaced by the new __sigaction14() which is a
wrapper around the __sigaction_sigtramp system call (which is itself
not directly exposed outside of libc).

No shared library version change is necessary; no new symbols
are exposed outside of libc.
 1.4 21-May-2002  bjh21 Import the 32-bit version of SoftFloat 2a and separate it and the 64-bit
version into different directories. Which version a given port uses is
controlled by the SOFTFLOAT_BITS make variable. This is set to 64 (which
uses the same code we had before) by default. 32-bit platforms that don't
need extended precision support might get better performance by using 32.

Set the ARM port to use the 32-bit version of SoftFloat, since this is more
than a factor of two faster than the 64-bit version. This should get the
floating-point performance back to what it was in 1.5.
 1.3 08-Mar-2001  bjh21 Re-instate __fixunssfsi() and __fixunsdfsi(), but only for arm32 with a.out
binaries, because libc's provided them there forever.
 1.2 07-Mar-2001  bjh21 Leave selection of APCS mode to the compiler -- future versions of cpp will
get it right.

Always include new softfloat code -- it seems OK on arm32.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.3 01-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 21-Jun-2002  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.9.6.4 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.9.6.3 23-Jan-2013  yamt sync with head
 1.9.6.2 30-Oct-2012  yamt sync with head
 1.9.6.1 17-Apr-2012  yamt sync with head
 1.10.4.1 28-Nov-2012  matt Pullup EABI changes.
 1.15.2.4 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.15.2.3 23-Jun-2013  tls resync from head
 1.15.2.2 25-Feb-2013  tls resync with head
 1.15.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.16 23-Jul-2023  skrll ENTRY / END indentation. NFCI.
 1.15 19-Aug-2013  matt Group all syscalls together.
 1.14 16-Aug-2013  matt Save r3 instead of r4 when calling CERROR in thumb mode.
 1.13 16-Aug-2013  matt Rework SYSTRAP for thumb.
Add END to PSEUDO_NOERROR and PSEUDO
 1.12 01-Aug-2013  matt Make __minbrk, __curbrk, and CERROR hidden and avoid using the GOT to access
them.
 1.11 18-Jul-2013  matt Remove non-__ELF__ defines
 1.10 14-Jan-2011  matt branches: 1.10.6; 1.10.12; 1.10.16;
Change __cerror to be marked hidden and change callers to avoid the PLT.
 1.9 21-Aug-2004  rearnsha branches: 1.9.16;
Use RET macro for returning from PSEUDO & PSEUDO_NOERROR
 1.8 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.7 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.6 26-May-2002  wiz Revert previous: .S files are currently compiled with -traditional-cpp,
so __STDC__ is _not_ always defined.
 1.5 26-May-2002  wiz __STDC__ is always defined on NetBSD.
 1.4 10-Feb-2002  bjh21 Switch libc syscall veneers over to using our shiny new official SWI range.
 1.3 14-Jan-2002  thorpej * Add WSYSCALL() to SYS.h, which creates a system call with an
internal name and a weak alias for the name.
* Add a WEAKASM syscall list, and process it.
* Make sysarch() have an internal name (_sysarch()).
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.5 21-Jun-2002  nathanw Catch up to -current.
 1.1.2.4 22-Mar-2002  nathanw Catch up to -current.
 1.1.2.3 08-Mar-2002  nathanw Catch up to -current.
 1.1.2.2 28-Jan-2002  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.9.16.1 28-Aug-2007  matt More thumb support
 1.10.16.1 23-Jul-2013  riastradh sync with HEAD
 1.10.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.10.6.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2 06-Aug-2012  matt Moving this to <arm/aeabi.h> in sys
 1.1 06-Aug-2012  matt Mostly for reference, this header defines the "C" portion of the ARM
run time API for AAPCS (EABI).
 1.4 23-Nov-2021  thorpej Decorate the ARM signal trampoline with the appropriate .cfi
directives to allow exception unwind / backtrace across a signal
handler.
 1.3 24-Oct-2020  skrll Provide _UC_REGS_* defines for all registers
 1.2 30-Apr-2013  skrll Don't hardcode offset in assembler. This ensures the return value in the
context is the correct value (0) on earm*
 1.1 27-Sep-2012  skrll branches: 1.1.2; 1.1.4; 1.1.6;
Remove magic numbers.
 1.1.6.2 28-Nov-2012  matt Pullup EABI changes.
 1.1.6.1 27-Sep-2012  matt file genassym.cf was added on branch matt-nb6-plus on 2012-11-28 02:21:41 +0000
 1.1.4.3 23-Jun-2013  tls resync from head
 1.1.4.2 27-Sep-2012  skrll Remove magic numbers.
 1.1.4.1 27-Sep-2012  skrll file genassym.cf was added on branch tls-maxphys on 2012-09-27 11:20:21 +0000
 1.1.2.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.2.2 30-Oct-2012  yamt sync with head
 1.1.2.1 27-Sep-2012  yamt file genassym.cf was added on branch yamt-pagecache on 2012-10-30 18:58:39 +0000
 1.1 15-Mar-2006  kleink Add strtof(3) and strtold(3); welcome libc 12.137.
 1.1 25-Jan-2006  kleink Add machine-dependent definitions for gdtoa.
 1.1 25-Jan-2006  kleink Add machine-dependent definitions for gdtoa.
 1.28 29-Jan-2014  joerg Include compiler-rt in libc, libm and libkern.
 1.27 17-Jan-2014  joerg Use generic version of fabs for softfloat.
 1.26 25-Dec-2013  joerg Explicitly enable FPU support.
 1.25 21-Aug-2013  matt divide.S need -marm
 1.24 20-Jun-2013  msaitoh Fix compile error.
 1.23 20-Jun-2013  matt modsi3/umodsi3 is not needed for earm since __aeabi_*divmod takes care of it.
 1.22 30-Apr-2013  matt Match against LIBC_MACHINE_ARCH for MKCOMPAT
 1.21 26-Jan-2013  matt When building for earm*, compile __aeabi_[df]cmpun.c and __aeabi_[il]div0.c
 1.20 30-Oct-2012  christos add new files to fix static linking
 1.19 10-Oct-2012  christos add split files
 1.18 30-Jul-2012  skrll branches: 1.18.2;
Backout previous. ld.so requires the division routines so this needs
more thought.
 1.17 11-Jul-2012  reinoud On the libc/libgcc clashes cleanup that removed divsi3.o from libc, ARM/evbarm
was forgotten. This patch fixes it making static binaries possible again!
 1.16 06-Dec-2009  uebayasi branches: 1.16.6; 1.16.8;
Rename ${SRCS.{alpha,arm,...}.gen} to ${LSRCS.{alpha,arm,...}.gen} because
they ended up in ${LSRCS}, not ${SRCS}. ${SRCS.*} namespace will be used
for more useful things. No functional changes intended.
 1.15 28-Jun-2006  drochner build frexp/ldexp/modf in the "compat" part (code is identical)
(These are the easy cases where no assembler implementations exist.)
 1.14 16-Oct-2005  christos compat shuffle.
 1.13 15-Apr-2005  kleink Push back the descriptions of NaN formats, and descriptions of the
distinction between signalling NaNs and quiet NaNs back into the
machine-dependent headers; treat the implementation of __nanf in the
same spirit.

IEEE 754 leaves the distinction between signalling NaNs and quiet NANs
to the implementation, and unlike our headers used to suggest they're
not identical in the interpretation of the fraction's MSb; in due
course, make those of hppa, mips, sh3, and sh5 reflect reality.
 1.12 04-Mar-2004  kleink branches: 1.12.6;
* Turn isinf(3) and isnan(3) into C99-style macros.
* Make it possible for ports to override these (i.e., VAX).
* Remove isnanl(), which was internal to libc only.
 1.11 15-Jan-2004  kleink Add C99 fpclassify(), isfinite(), isnormal(), and signbit() macros.
 1.10 28-Oct-2003  kleink Retire FPA support from this file at last; suggested by Richard Earnshaw
and not objected to by port-arm.
 1.9 26-Oct-2003  kleink On FPA, switch back `long double' to double-precision. According to
Richard Earnshaw, extended-precision was never supported by the compiler.
 1.8 25-Oct-2003  kleink Add __infinityf and __infinityl, float respectively long double analogs
of __infinity.
 1.7 24-Oct-2003  kleink * Since there is no single portable IEEE 754 format for a long double,
keep a common implementation of isinfl() and isnanl() to be used by
platforms where `long double' == `double'; move others into
machine-dependent code.
* In due course, consider __VFP_FP__ on arm.
 1.6 01-Aug-2003  lukem Rework how dependency generation is performed:

* DPSRCS contains extra dependencies, but is _NOT_ added to CLEANFILES.
This is a change of behaviour. If a Makefile wants the clean semantics
it must specifically append to CLEANFILES.
Resolves PR toolchain/5204.

* To recap: .d (depend) files are generated for all files in SRCS and DPSRCS
that have a suffix of: .c .m .s .S .C .cc .cpp .cxx

* If YHEADER is set, automatically add the .y->.h to DPSRCS & CLEANFILES

* Ensure that ${OBJS} ${POBJS} ${LOBJS} ${SOBJS} *.d depend upon ${DPSRCS}

* Deprecate the (short lived) DEPENDSRCS


Update the various Makefiles to these new semantics; generally either
adding to CLEANFILES (because DPSRCS doesn't do that anymore), or replacing
specific .o dependencies with DPSRCS entries.

Tested with "make -j 8 distribution" and "make distribution".
 1.5 17-May-2003  thorpej Build _isinfl() and _isnanl().
 1.4 12-May-2003  kleink Rename ieee754_function.c to function_ieee754.c, following the convention
used in exec_format.c, loadfile_format.c, subsys_machdep.c etc.
Per discussion with Christos.
 1.3 18-Jan-2003  thorpej Merge the nathanw_sa branch.
 1.2 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.4 22-Mar-2002  nathanw Catch up to -current.
 1.1.2.3 08-Mar-2002  nathanw Catch up to -current.
 1.1.2.2 16-Nov-2001  thorpej Implement _lwp_makecontext().
 1.1.2.1 15-Nov-2001  thorpej ARM-specific makecontext(), _resumecontext(), swapcontext(),
and getcontext(). From Klaus Kein <kleink@netbsd.org>.
 1.12.6.1 19-Apr-2005  tron Pull up revision 1.13 (requested by kleink in ticket #163):
Push back the descriptions of NaN formats, and descriptions of the
distinction between signalling NaNs and quiet NaNs back into the
machine-dependent headers; treat the implementation of __nanf in the
same spirit.
IEEE 754 leaves the distinction between signalling NaNs and quiet NANs
to the implementation, and unlike our headers used to suggest they're
not identical in the interpretation of the fraction's MSb; in due
course, make those of hppa, mips, sh3, and sh5 reflect reality.
 1.16.8.3 19-Nov-2012  riz Pull up following revision(s) (requested by christos in ticket #654):
common/lib/libc/arch/arm/gen/modsi3.S: revision 1.1
common/lib/libc/arch/arm/gen/umodsi3.S: revision 1.1
sys/lib/libkern/arch/arm/Makefile.inc: revision 1.11
sys/lib/libkern/arch/arm/Makefile.inc: revision 1.12
common/lib/libc/arch/arm/gen/divide.S: revision 1.1
lib/libc/arch/arm/gen/Makefile.inc: revision 1.20
common/lib/libc/arch/arm/gen/divsi3.S: revision 1.3
common/lib/libc/arch/arm/gen/udivsi3.S: revision 1.1
common/lib/libc/arch/arm/gen/divsi3.S: revision 1.4
Split out modsi3 and umodsi3 from the divsi3 file. This is so that
we don't get re-defined symbols in libc from libgcc in static linking.
Example: cc -pthread -static main-calls-pthread-create.c
add split files.
add new divsi3 related files.
add new files to fix static linking
split udivsi3 and divsi3 to fix static linking. This could be done better.
Fixes PR#47139
 1.16.8.2 31-Jul-2012  martin branches: 1.16.8.2.2;
Backout #416 (requested by skrll in ticket #416):
lib/libc/arch/arm/gen/Makefile.inc: revision 1.18
Backout previous (pulled up via #416) - it causes major regressions
and needs more thought.
 1.16.8.1 16-Jul-2012  riz Pull up following revision(s) (requested by reinoud in ticket #416):
lib/libc/arch/arm/gen/Makefile.inc: revision 1.17
On the libc/libgcc clashes cleanup that removed divsi3.o from libc, ARM/evbarm
was forgotten. This patch fixes it making static binaries possible again!
 1.16.8.2.2.1 28-Nov-2012  matt Merge from HEAD.
split udivsi3 and divsi3 to fix static linking.
 1.16.6.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.16.6.2 16-Jan-2013  yamt sync with (a bit old) head
 1.16.6.1 30-Oct-2012  yamt sync with head
 1.18.2.4 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.18.2.3 23-Jun-2013  tls resync from head
 1.18.2.2 25-Feb-2013  tls resync with head
 1.18.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.1 26-Jan-2013  matt branches: 1.1.4; 1.1.10;
Add __aeabi_[fd]cmpun for IEEE unordered compares (requires by ARM RTABI).
 1.1.10.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.10.1 26-Jan-2013  yamt file __aeabi_dcmpun.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.4.2 25-Feb-2013  tls resync with head
 1.1.4.1 26-Jan-2013  tls file __aeabi_dcmpun.c was added on branch tls-maxphys on 2013-02-25 00:27:48 +0000
 1.1 26-Jan-2013  matt branches: 1.1.4; 1.1.10;
Add __aeabi_[fd]cmpun for IEEE unordered compares (requires by ARM RTABI).
 1.1.10.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.10.1 26-Jan-2013  yamt file __aeabi_fcmpun.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.4.2 25-Feb-2013  tls resync with head
 1.1.4.1 26-Jan-2013  tls file __aeabi_fcmpun.c was added on branch tls-maxphys on 2013-02-25 00:27:48 +0000
 1.7 16-Oct-2005  christos compat shuffle.
 1.6 21-Aug-2004  rearnsha Use RET and RETc macros for returning.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 17-Aug-2002  thorpej Local label fixup.
 1.3 13-Nov-2001  chris Update asm files to use sp instead of r13. Also tweak a couple of bits in the longjmp code to save an instruction.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 14-Nov-2001  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.4 16-Oct-2005  christos compat shuffle.
 1.3 17-Aug-2002  thorpej Local label fixup.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.8 22-Mar-2012  he Follow the pattern from powerpc, make lint happy.
 1.7 21-Mar-2012  christos no need for linted annotations
 1.6 21-Mar-2012  bsh shut up lint(1)
 1.5 24-Feb-2011  joerg branches: 1.5.4; 1.5.8;
Allow storing and receiving the LWP private pointer via ucontext_t
on all platforms except VAX and IA64. Add fast access via register for
AMD64, i386 and SH3 ports. Use this fast access in libpthread to replace
the stack based pthread_self(). Implement skeleton support for Alpha,
HPPA, PowerPC, SPARC and SPARC64, but leave it disabled.

Ports that support this feature provide __HAVE____LWP_GETPRIVATE_FAST in
machine/types.h and a corresponding __lwp_getprivate_fast in
machine/mcontext.h.

This material is based upon work partially supported by
The NetBSD Foundation under a contract with Joerg Sonnenberger.
 1.4 12-Jun-2005  lukem branches: 1.4.40;
Add missing __RCSID()
 1.3 07-Apr-2003  kleink Make sure we reference getcontext() by its internal name.
 1.2 18-Jan-2003  thorpej Merge the nathanw_sa branch.
 1.1 16-Nov-2001  thorpej branches: 1.1.2;
file _lwp.c was initially added on branch nathanw_sa.
 1.1.2.2 16-Nov-2001  thorpej Make sure the stack provided to the new LWP is 8-byte aligned.
 1.1.2.1 16-Nov-2001  thorpej Implement _lwp_makecontext().
 1.4.40.1 05-Mar-2011  bouyer Sync with HEAD
 1.5.8.1 28-Nov-2012  matt Pullup EABI changes.
 1.5.4.1 17-Apr-2012  yamt sync with head
 1.20 08-May-2025  uwe arm: setjmp - fix thumb

"mov" should be spelled "movs" for thumb in unified syntax
 1.19 06-May-2025  uwe arm/asm.h: revert PCREL_GET &c in previous (ok riastradh)

This change needs to be redone and re-verified. I have detailed some
issues in the PR, and it also turns out that some of the changes were
in the !_REENTRANT branch of #ifdef and thus not checked at all.
riastradh asked to back out the changes for now.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.18 03-May-2025  riastradh arm: Nix most __PIC__ conditionals in .S files.

New macros PCREL_GET(rN,label,pclabel) and PCREL_SYM(label,pclabel)
to enable this by the pattern:

ldr rN, label
#ifdef __PIC__
pclabel:
add rN, rN, pc
#endif
...
label:
#ifdef __PIC__
.word (label - (pclabel + 2*sizeof(instruction)))
#else
.word label
#endif

(sizeof(instruction) = 2 for thumb, 4 for non-thumb.)

No binary change in libc with MKPIE=no (i.e., testing both for
changes to the PIC build and changes to the non-PIC build).

In principle, assembly routines could improve instruction scheduling
by splitting up the ldr and add instructions. But in practice, the
maintenance and auditing burden likely makes this worthwhile by
improving legibility vs a tangle of in-line #ifdefs.

brk.S does things a little differently making it harder to unify.
Could redo it but I don't want to make changes without testing them
first.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.17 05-Dec-2020  skrll branches: 1.17.8;
spaces to tab
 1.16 30-Nov-2013  joerg Use PLT_SYM.
 1.15 21-Oct-2013  skrll Fix bug introduced in revision 1.13 which meant longjmp would never
work on EABI where VFP didn't exist.

Hi gimpy!
 1.14 12-Sep-2013  joerg Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
 1.13 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.12 19-Apr-2013  matt A small optimization
 1.11 19-Apr-2013  skrll Actually fail if the magic number is found to be wrong in __longjmp.

Avoid overwriting the {,_}longjmp return value in __ARM_EABI__

ok matt@
 1.10 29-Jan-2013  matt AAPCS (EABI) requires that VFP D8-D15 are always saved, regardless whether
the soft float or hard float ABI is being used. However, if there isn't a
FPU that can't be done. So only save/restore them if a FPU is present. When
libc initializes, it does a sysctl to determine if there is a FPU and stores
the result which _setjmp/setjmp uses. If there was a FPU, the magic in the
jmp_buf is changed to reflect that the VFP registers were saved. longjmp uses
the magic to determine if it needs to restore the VFP registers.
 1.9 25-Jan-2013  matt Use __ARM_PCS_VFP to determine whether the VFP is being used.
 1.8 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.7 01-Aug-2012  matt branches: 1.7.2;
Add #error cases in case someone tries to compile hardfloat VFP libraries.
 1.6 21-Aug-2004  rearnsha branches: 1.6.16; 1.6.50;
Use RET and RETc macros for returning.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 17-Aug-2002  thorpej Local label fixup.
 1.3 13-Nov-2001  chris Update asm files to use sp instead of r13. Also tweak a couple of bits in the longjmp code to save an instruction.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 14-Nov-2001  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.6.50.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.6.50.2 23-Jan-2013  yamt sync with head
 1.6.50.1 30-Oct-2012  yamt sync with head
 1.6.16.1 28-Aug-2007  matt More thumb support
 1.7.2.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.7.2.2 23-Jun-2013  tls resync from head
 1.7.2.1 25-Feb-2013  tls resync with head
 1.17.8.1 02-Aug-2025  perseant Sync with HEAD
 1.5 17-Aug-2013  matt Thumbify & add END
 1.4 21-Aug-2004  rearnsha branches: 1.4.16; 1.4.50; 1.4.56;
Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 13-Nov-2001  chris Update arm libc files for 8 byte aligned stack.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 14-Nov-2001  nathanw Catch up to -current.
 1.4.56.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.4.50.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.4.16.1 28-Aug-2007  matt More thumb support
 1.5 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.4 21-Aug-2004  rearnsha Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 01-Jul-2002  bjh21 Avoid leaving junk in the top half of R0 on return.
This fixes port-arm/17440.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2; 1.1.4;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.4.1 02-Jul-2002  lukem Pull up revision 1.2 (requested by bjh21 in ticket #419):
Avoid leaving junk in the top half of R0 on return.
This fixes port-arm/17440.
 1.1.2.1 01-Aug-2002  nathanw Catch up to -current.
 1.4 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.3 21-Aug-2004  rearnsha Use RET and RETc macros for returning.
 1.2 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.7 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.6 21-Aug-2004  rearnsha Use RET and RETc macros for returning.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 17-Aug-2002  thorpej Local label fixup.
 1.3 13-Nov-2001  chris Update arm libc files for 8 byte aligned stack.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 14-Nov-2001  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.4 17-Jan-2014  joerg GC
 1.3 16-May-2006  mrg branches: 1.3.44; 1.3.50;
make sure there is a prototype in scope.
 1.2 26-May-2002  wiz __STDC__ is always defined on NetBSD.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 21-Jun-2002  nathanw Catch up to -current.
 1.3.50.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.3.44.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.6 08-Apr-2022  andvar fix various typos, mainly in comments, but also log messages, docs, game text.
 1.5 19-Mar-2015  joerg Call libc's fpgetround.
 1.4 21-Mar-2012  he branches: 1.4.10;
Use c89 function declaration.
 1.3 25-Feb-2006  wiz branches: 1.3.44;
Fix typos, reported by Alexey Dobriyan ("Gathered from Linux"),
forwarded by jmc@openbsd.
 1.2 12-Jun-2005  lukem Add missing __RCSID()
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.3.44.1 17-Apr-2012  yamt sync with head
 1.4.10.1 21-Mar-2015  snj Pull up following revision(s) (requested by joerg in ticket #632):
lib/libc/arch/arm/gen/flt_rounds.c: revision 1.5
lib/libc/arch/mips/gen/flt_rounds.c: revision 1.9
lib/libc/arch/powerpc/gen/flt_rounds.c: revision 1.12
lib/libc/arch/powerpc64/gen/flt_rounds.c: revision 1.2
lib/libc/arch/sh3/gen/flt_rounds.c: revision 1.6
Call libc's fpgetround.
 1.2 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Mar-2002  nathanw Catch up to -current.
 1.6 28-Oct-2003  kleink Retire FPA support from this file at last; suggested by Richard Earnshaw
and not objected to by port-arm.
 1.5 26-Oct-2003  kleink On FPA, switch back `long double' to double-precision. According to
Richard Earnshaw, extended-precision was never supported by the compiler.
 1.4 25-Oct-2003  kleink Redo the VFP/endianness conditional logic of this file, making it easier
to read. No functional change except for the side-effect of fixing the
ARMEB FPA case, which wasn't supported anyway.
 1.3 19-Feb-2002  bjh21 Replace infinity.c with one in the style of the new ieee754_infinity.c, but
with extra #ifdefs for FPA-format doubles. This gets it compiling again.
 1.2 28-Oct-2001  bjh21 Handle machines using VFP-format doubles (as we do in ARM ELF) and big-endian
systems correctly.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.3 22-Mar-2002  nathanw Catch up to -current.
 1.1.2.2 08-Mar-2002  nathanw Catch up to -current.
 1.1.2.1 14-Nov-2001  nathanw Catch up to -current.
 1.3 28-Oct-2003  kleink Retire FPA support from this file at last; suggested by Richard Earnshaw
and not objected to by port-arm.
 1.2 26-Oct-2003  kleink On FPA, switch back `long double' to double-precision. According to
Richard Earnshaw, extended-precision was never supported by the compiler.
 1.1 25-Oct-2003  kleink Add __infinityf and __infinityl, float respectively long double analogs
of __infinity.
 1.3 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.2 29-Oct-2001  bjh21 Change isnan() and isinf() to use a union to convert from double to
struct ieee_double, rather than a pointer cast. This seems to enable
GCC 2.95.3 to get the instruction dependencies right (the old one fell
foul of ANSI aliasing rules), and it also generates more sensible code in
general.

If this is the correct solution, it should be applied to the other ports.
If it's not, someone should come up with one that _is_ correct.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 08-Mar-2002  nathanw Catch up to -current.
 1.1.2.1 14-Nov-2001  nathanw Catch up to -current.
 1.5 26-Oct-2003  kleink On FPA, switch back `long double' to double-precision. According to
Richard Earnshaw, extended-precision was never supported by the compiler.
 1.4 25-Oct-2003  kleink Remove an unnecessary line continuation backslash from previous.
 1.3 25-Oct-2003  kleink Update for FPA 80-bit extended-precision format.
 1.2 25-Oct-2003  kleink Swap VFP and FPA sections to match the style of most other code;
no functional change.
 1.1 24-Oct-2003  kleink * Since there is no single portable IEEE 754 format for a long double,
keep a common implementation of isinfl() and isnanl() to be used by
platforms where `long double' == `double'; move others into
machine-dependent code.
* In due course, consider __VFP_FP__ on arm.
 1.3 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.2 29-Oct-2001  bjh21 Change isnan() and isinf() to use a union to convert from double to
struct ieee_double, rather than a pointer cast. This seems to enable
GCC 2.95.3 to get the instruction dependencies right (the old one fell
foul of ANSI aliasing rules), and it also generates more sensible code in
general.

If this is the correct solution, it should be applied to the other ports.
If it's not, someone should come up with one that _is_ correct.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 08-Mar-2002  nathanw Catch up to -current.
 1.1.2.1 14-Nov-2001  nathanw Catch up to -current.
 1.4 26-Oct-2003  kleink On FPA, switch back `long double' to double-precision. According to
Richard Earnshaw, extended-precision was never supported by the compiler.
 1.3 25-Oct-2003  kleink Update for FPA 80-bit extended-precision format.
 1.2 25-Oct-2003  kleink Swap VFP and FPA sections to match the style of most other code;
no functional change.
 1.1 24-Oct-2003  kleink * Since there is no single portable IEEE 754 format for a long double,
keep a common implementation of isinfl() and isnanl() to be used by
platforms where `long double' == `double'; move others into
machine-dependent code.
* In due course, consider __VFP_FP__ on arm.
 1.3 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.2 08-Nov-2001  bjh21 Rename a parameter to fix build problem with new toolchain.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 08-Mar-2002  nathanw Catch up to -current.
 1.1.2.1 14-Nov-2001  nathanw Catch up to -current.
 1.4 21-Mar-2012  christos no need for linted annotations
 1.3 28-Apr-2008  martin branches: 1.3.4; 1.3.8; 1.3.26;
Remove clause 3 and 4 from TNF licenses
 1.2 18-Jan-2003  thorpej branches: 1.2.30;
Merge the nathanw_sa branch.
 1.1 15-Nov-2001  thorpej branches: 1.1.2;
file makecontext.c was initially added on branch nathanw_sa.
 1.1.2.2 16-Nov-2001  kleink As observed on the trunk: Update arm libc files for 8 byte aligned stack.
 1.1.2.1 15-Nov-2001  thorpej ARM-specific makecontext(), _resumecontext(), swapcontext(),
and getcontext(). From Klaus Kein <kleink@netbsd.org>.
 1.2.30.1 18-May-2008  yamt sync with head.
 1.3.26.1 28-Nov-2012  matt Pullup EABI changes.
 1.3.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.3.8.1 28-Apr-2008  martin file makecontext.c was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.3.4.1 17-Apr-2012  yamt sync with head
 1.2 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Mar-2002  nathanw Catch up to -current.
 1.4 22-Feb-2009  martin Make NAN a compile time constant (with help from the compiler). Suggested
by krister. Fixes PR 40695.
Make references to the old construct (which we can't remove for binary
compatibility reasons) emit a linker warning.
 1.3 15-Apr-2005  kleink branches: 1.3.2; 1.3.32;
Push back the descriptions of NaN formats, and descriptions of the
distinction between signalling NaNs and quiet NaNs back into the
machine-dependent headers; treat the implementation of __nanf in the
same spirit.

IEEE 754 leaves the distinction between signalling NaNs and quiet NANs
to the implementation, and unlike our headers used to suggest they're
not identical in the interpretation of the fraction's MSb; in due
course, make those of hppa, mips, sh3, and sh5 reflect reality.
 1.2 19-Feb-2002  simonb Clean up some rampant code duplication wrt ieee number handling:
- Add alignment-safe double and float unions.
- Use the above for the __infinity and __nan constants on all
architectures that use the standard ieee754 representation of
those constants.
- Add a single copy of various ieee754 math functions (frexp, isinf,
isnan, ldexp and modf) that had numerous duplicates among the
arch-specific directories.
- Use the above functions on all architectures where the generic C
versions where used. Architectures that had local assembly
routines are untouched (for those functions only).
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Mar-2002  nathanw Catch up to -current.
 1.3.32.1 13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.3.2.2 19-Apr-2005  tron Pull up revision 1.3 (requested by kleink in ticket #163):
Push back the descriptions of NaN formats, and descriptions of the
distinction between signalling NaNs and quiet NaNs back into the
machine-dependent headers; treat the implementation of __nanf in the
same spirit.
IEEE 754 leaves the distinction between signalling NaNs and quiet NANs
to the implementation, and unlike our headers used to suggest they're
not identical in the interpretation of the fraction's MSb; in due
course, make those of hppa, mips, sh3, and sh5 reflect reality.
 1.3.2.1 15-Apr-2005  tron file nanf.c was added on branch netbsd-3 on 2005-04-19 12:30:50 +0000
 1.5 19-Sep-2011  joerg Mark _resumecontext as dead. ANSIfy all declarations for it.
 1.4 28-Apr-2008  martin branches: 1.4.8;
Remove clause 3 and 4 from TNF licenses
 1.3 08-Dec-2006  martin branches: 1.3.10;
Sync all resumecontext.c versions with the changes originally made
by Matthias Drochner to i386 and alpha:

-check for a NULL uc_link before calling setcontext(2); do a real exit(3)
instead with exit handlers and all that
-If setcontext(2) returns (which it shouldn't), do an _exit(-1) rather
than relying on a sensible return value to use as exit code. Makes
it less likely that an ucontext corruption goes unnoticed.
 1.2 18-Jan-2003  thorpej branches: 1.2.16;
Merge the nathanw_sa branch.
 1.1 15-Nov-2001  thorpej branches: 1.1.2;
file resumecontext.c was initially added on branch nathanw_sa.
 1.1.2.1 15-Nov-2001  thorpej ARM-specific makecontext(), _resumecontext(), swapcontext(),
and getcontext(). From Klaus Kein <kleink@netbsd.org>.
 1.2.16.1 09-Dec-2006  bouyer Pull up following revision(s) (requested by martin in ticket #264):
lib/libc/arch/sh5/gen/resumecontext.c: revision 1.2
lib/libc/arch/sh3/gen/resumecontext.c: revision 1.3
lib/libc/arch/sparc/gen/resumecontext.c: revision 1.3
lib/libc/arch/powerpc/gen/resumecontext.c: revision 1.3
lib/libc/arch/arm/gen/resumecontext.c: revision 1.3
lib/libc/arch/mips/gen/resumecontext.c: revision 1.3
lib/libc/arch/vax/gen/resumecontext.c: revision 1.2
lib/libc/arch/powerpc64/gen/resumecontext.c: revision 1.2
lib/libc/arch/hppa/gen/resumecontext.c: revision 1.2
Sync all resumecontext.c versions with the changes originally made
by Matthias Drochner to i386 and alpha:
-check for a NULL uc_link before calling setcontext(2); do a real exit(3)
instead with exit handlers and all that
-If setcontext(2) returns (which it shouldn't), do an _exit(-1) rather
than relying on a sensible return value to use as exit code. Makes
it less likely that an ucontext corruption goes unnoticed.
 1.3.10.1 18-May-2008  yamt sync with head.
 1.4.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.4.8.1 28-Apr-2008  martin file resumecontext.c was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.22 08-May-2025  uwe arm: setjmp - fix thumb

"mov" should be spelled "movs" for thumb in unified syntax
 1.21 06-May-2025  uwe arm/asm.h: revert PCREL_GET &c in previous (ok riastradh)

This change needs to be redone and re-verified. I have detailed some
issues in the PR, and it also turns out that some of the changes were
in the !_REENTRANT branch of #ifdef and thus not checked at all.
riastradh asked to back out the changes for now.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.20 03-May-2025  riastradh arm: Nix most __PIC__ conditionals in .S files.

New macros PCREL_GET(rN,label,pclabel) and PCREL_SYM(label,pclabel)
to enable this by the pattern:

ldr rN, label
#ifdef __PIC__
pclabel:
add rN, rN, pc
#endif
...
label:
#ifdef __PIC__
.word (label - (pclabel + 2*sizeof(instruction)))
#else
.word label
#endif

(sizeof(instruction) = 2 for thumb, 4 for non-thumb.)

No binary change in libc with MKPIE=no (i.e., testing both for
changes to the PIC build and changes to the non-PIC build).

In principle, assembly routines could improve instruction scheduling
by splitting up the ldr and add instructions. But in practice, the
maintenance and auditing burden likely makes this worthwhile by
improving legibility vs a tangle of in-line #ifdefs.

brk.S does things a little differently making it harder to unify.
Could redo it but I don't want to make changes without testing them
first.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.19 06-May-2024  skrll branches: 1.19.2;
arm longjmp: Restore stack first, then signal mask.

Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:

- Move the botched sp and lr tests earlier.

PR lib/57946
 1.18 13-Dec-2022  skrll branches: 1.18.2;
Trailing whitespace
 1.17 30-Nov-2013  joerg branches: 1.17.28;
Use PLT_SYM.
 1.16 12-Sep-2013  joerg Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
 1.15 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.14 19-Apr-2013  matt A small optimization
 1.13 19-Apr-2013  skrll Actually fail if the magic number is found to be wrong in __longjmp.

Avoid overwriting the {,_}longjmp return value in __ARM_EABI__

ok matt@
 1.12 29-Jan-2013  matt AAPCS (EABI) requires that VFP D8-D15 are always saved, regardless whether
the soft float or hard float ABI is being used. However, if there isn't a
FPU that can't be done. So only save/restore them if a FPU is present. When
libc initializes, it does a sysctl to determine if there is a FPU and stores
the result which _setjmp/setjmp uses. If there was a FPU, the magic in the
jmp_buf is changed to reflect that the VFP registers were saved. longjmp uses
the magic to determine if it needs to restore the VFP registers.
 1.11 25-Jan-2013  matt Use __ARM_PCS_VFP to determine whether the VFP is being used.
 1.10 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.9 01-Aug-2012  matt branches: 1.9.2;
Add #error cases in case someone tries to compile hardfloat VFP libraries.
 1.8 16-Oct-2005  christos branches: 1.8.10; 1.8.44;
more renaming.
 1.7 16-Oct-2005  christos compat shuffle.
 1.6 21-Aug-2004  rearnsha Use RET and RETc macros for returning.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 17-Aug-2002  thorpej Local label fixup.
 1.3 13-Nov-2001  chris Update arm libc files for 8 byte aligned stack.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 14-Nov-2001  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.8.44.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.8.44.2 23-Jan-2013  yamt sync with head
 1.8.44.1 30-Oct-2012  yamt sync with head
 1.8.10.1 28-Aug-2007  matt More thumb support
 1.9.2.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.2.2 23-Jun-2013  tls resync from head
 1.9.2.1 25-Feb-2013  tls resync with head
 1.17.28.1 23-Aug-2024  martin Pull up following revision(s) (requested by riastradh in ticket #795):

tests/lib/libc/setjmp/Makefile: revision 1.3
distrib/sets/lists/debug/mi: revision 1.425
lib/libc/arch/sh3/gen/setjmp.S: revision 1.12
lib/libc/arch/i386/gen/sigsetjmp.S: revision 1.19
lib/libc/arch/x86_64/gen/__setjmp14.S: revision 1.4
tests/lib/libc/setjmp/t_sigstack.c: revision 1.10
tests/lib/libc/setjmp/t_sigstack.c: revision 1.11
tests/lib/libc/setjmp/t_sigstack.c: revision 1.12
tests/lib/libc/setjmp/t_sigstack.c: revision 1.1
lib/libc/arch/sh3/gen/sigsetjmp.S: revision 1.11
tests/lib/libc/setjmp/t_sigstack.c: revision 1.2
tests/lib/libc/setjmp/t_sigstack.c: revision 1.3
tests/lib/libc/setjmp/t_sigstack.c: revision 1.4
tests/lib/libc/setjmp/t_sigstack.c: revision 1.5
tests/lib/libc/setjmp/t_sigstack.c: revision 1.6
lib/libc/arch/arm/gen/setjmp.S: revision 1.19
tests/lib/libc/setjmp/t_sigstack.c: revision 1.7
tests/lib/libc/setjmp/t_sigstack.c: revision 1.8
tests/lib/libc/setjmp/t_sigstack.c: revision 1.9
lib/libc/arch/i386/gen/setjmp.S: revision 1.18
lib/libc/arch/x86_64/gen/__sigsetjmp14.S: revision 1.4
distrib/sets/lists/tests/mi: revision 1.1306 (patch)

longjmp(3): Add test for PR lib/57946.

longjmp(3): Paranoia: more error checking in PR lib/57946 test.

longjmp(3): Test signal mask vs stack restore with siglongjmp too.
PR lib/57946

longjmp(3) t_sigstack: Print which entry failed.
PR lib/57946

longjmp(3) t_sigstack: Note aarch64 seems to DTRT.
But only by code inspection; it appears to have another problem: on
re-entry, the signal handler is called on the normal stack, not on
the alternate signal stack.
PR lib/57946

longjmp(3) t_sigstack: Use a sigaltstack per handler entry.
longjmp evidently doesn't reset the state of whether the process is
executing on the alternate signal stack. So when we re-enter the
signal handler, the alternate stack appears to be still in use, and
the system chooses the original stack for the second call to the
signal handler -- which trips our assertion asking to verify that the
signal handler is always using an alternate stack.

Not strictly necessary for the signal handler to use an alternate
stack on re-entry, but this makes it clearer that the signal handler
itself is always using the alternate stack so we can verify that the
interrupted code is _not_ in the signal handler.
With this change, the test now passes on aarch64.
PR lib/57946

longjmp(3) t_sigstack: Fix fencepost error.
Extremely unlikely to cause trouble, but let's just turn that into
`never' to keep it easier for readers.
PR lib/57946

amd64 longjmp: Restore stack first, then signal mask.
Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:
- Tidy the code a little bit.
- Sprinkle comments to explain what's going on.
- Use `xorl %eXX,%eXX' instead of `xorq %rXX,%rXX'.
=> Same effect, one byte shorter, breaks dep chain on more uarches.
- Use forward branches for statically predicted not-taken.
=> val==0 is unlikely in longjmp
PR lib/57946

i386 longjmp: Restore stack first, then signal mask.
Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:
- Tidy the code a little bit.
- Sprinkle comments to explain what's going on.
- Use forward branches for statically predicted not-taken.
=> val==0 is unlikely in longjmp
PR lib/57946

arm longjmp: Restore stack first, then signal mask.
Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:
- Move the botched sp and lr tests earlier.
PR lib/57946
arm has been fixed

tests/lib/libc/setjmp/t_sigstack: Add missing comment for 1.10.
PR lib/57946

sh3: siglongjmp - restore register context first (PR lib/57946)
 1.18.2.1 23-Aug-2024  martin Pull up following revision(s) (requested by riastradh in ticket #795):

tests/lib/libc/setjmp/Makefile: revision 1.3
distrib/sets/lists/debug/mi: revision 1.425
lib/libc/arch/sh3/gen/setjmp.S: revision 1.12
lib/libc/arch/i386/gen/sigsetjmp.S: revision 1.19
lib/libc/arch/x86_64/gen/__setjmp14.S: revision 1.4
tests/lib/libc/setjmp/t_sigstack.c: revision 1.10
tests/lib/libc/setjmp/t_sigstack.c: revision 1.11
tests/lib/libc/setjmp/t_sigstack.c: revision 1.12
tests/lib/libc/setjmp/t_sigstack.c: revision 1.1
lib/libc/arch/sh3/gen/sigsetjmp.S: revision 1.11
tests/lib/libc/setjmp/t_sigstack.c: revision 1.2
tests/lib/libc/setjmp/t_sigstack.c: revision 1.3
tests/lib/libc/setjmp/t_sigstack.c: revision 1.4
tests/lib/libc/setjmp/t_sigstack.c: revision 1.5
tests/lib/libc/setjmp/t_sigstack.c: revision 1.6
lib/libc/arch/arm/gen/setjmp.S: revision 1.19
tests/lib/libc/setjmp/t_sigstack.c: revision 1.7
tests/lib/libc/setjmp/t_sigstack.c: revision 1.8
tests/lib/libc/setjmp/t_sigstack.c: revision 1.9
lib/libc/arch/i386/gen/setjmp.S: revision 1.18
lib/libc/arch/x86_64/gen/__sigsetjmp14.S: revision 1.4
distrib/sets/lists/tests/mi: revision 1.1306

longjmp(3): Add test for PR lib/57946.

longjmp(3): Paranoia: more error checking in PR lib/57946 test.

longjmp(3): Test signal mask vs stack restore with siglongjmp too.
PR lib/57946

longjmp(3) t_sigstack: Print which entry failed.
PR lib/57946

longjmp(3) t_sigstack: Note aarch64 seems to DTRT.
But only by code inspection; it appears to have another problem: on
re-entry, the signal handler is called on the normal stack, not on
the alternate signal stack.
PR lib/57946

longjmp(3) t_sigstack: Use a sigaltstack per handler entry.
longjmp evidently doesn't reset the state of whether the process is
executing on the alternate signal stack. So when we re-enter the
signal handler, the alternate stack appears to be still in use, and
the system chooses the original stack for the second call to the
signal handler -- which trips our assertion asking to verify that the
signal handler is always using an alternate stack.

Not strictly necessary for the signal handler to use an alternate
stack on re-entry, but this makes it clearer that the signal handler
itself is always using the alternate stack so we can verify that the
interrupted code is _not_ in the signal handler.
With this change, the test now passes on aarch64.
PR lib/57946

longjmp(3) t_sigstack: Fix fencepost error.
Extremely unlikely to cause trouble, but let's just turn that into
`never' to keep it easier for readers.
PR lib/57946

amd64 longjmp: Restore stack first, then signal mask.
Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:
- Tidy the code a little bit.
- Sprinkle comments to explain what's going on.
- Use `xorl %eXX,%eXX' instead of `xorq %rXX,%rXX'.
=> Same effect, one byte shorter, breaks dep chain on more uarches.
- Use forward branches for statically predicted not-taken.
=> val==0 is unlikely in longjmp
PR lib/57946

i386 longjmp: Restore stack first, then signal mask.
Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:
- Tidy the code a little bit.
- Sprinkle comments to explain what's going on.
- Use forward branches for statically predicted not-taken.
=> val==0 is unlikely in longjmp
PR lib/57946

arm longjmp: Restore stack first, then signal mask.
Otherwise, a pending signal may be delivered on the wrong stack when
we restore the signal mask.

While here:
- Move the botched sp and lr tests earlier.
PR lib/57946
arm has been fixed

tests/lib/libc/setjmp/t_sigstack: Add missing comment for 1.10.
PR lib/57946

sh3: siglongjmp - restore register context first (PR lib/57946)
 1.19.2.1 02-Aug-2025  perseant Sync with HEAD
 1.8 30-Nov-2013  joerg Use PLT_SYM.
 1.7 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.6 19-Apr-2013  matt Ignore VFP bit in magic.
 1.5 16-Oct-2005  christos branches: 1.5.10; 1.5.44; 1.5.50;
more renaming.
 1.4 16-Oct-2005  christos compat shuffle.
 1.3 17-Aug-2002  thorpej Local label fixup.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.5.50.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.5.50.1 23-Jun-2013  tls resync from head
 1.5.44.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.5.10.1 28-Aug-2007  matt More thumb support
 1.18 30-Jun-2021  skrll Do previous differtly by pushing two registers in the same way as the
_INVOKE_CERROR macro
 1.17 30-Jun-2021  rin Fix previous. For Thumb-1:
- sp cannot be manipulated directly
- {add,sub}s should be used instead of {add,sub}
 1.16 29-Jun-2021  rin Align sp to 8-byte boundary as required by EABI.

IIUC, this change only affects libc compiled for ``Thumb-mode userland'',
which we've not officially supported yet.
 1.15 21-Nov-2018  skrll branches: 1.15.2;
Fix a comment
 1.14 30-Nov-2013  joerg branches: 1.14.24; 1.14.26;
Use PLT_SYM.
 1.13 04-Sep-2013  matt Fix the .cfi correctly.
 1.12 04-Sep-2013  htodd Fix build by matching .cfi/#if.
 1.11 04-Sep-2013  matt only emit cfi if __ARM_EABI__ && __UNWIND_TABLES__
 1.10 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.9 28-Nov-2012  matt Add missing registers.
 1.8 27-Sep-2012  skrll Remove magic numbers.
 1.7 27-Sep-2012  skrll Fixup the stack pointer in the ucontext returned by getcontext.

This fixes the following tests

lib/libc/sys/t_swapcontext.c
lib/libpthread/t_swapcontext.c
 1.6 05-Aug-2012  skrll branches: 1.6.2;
Ensure stack alignment. "looks fine" matt@
 1.5 28-Apr-2008  martin branches: 1.5.4; 1.5.8; 1.5.24; 1.5.26;
Remove clause 3 and 4 from TNF licenses
 1.4 21-Aug-2004  rearnsha branches: 1.4.16; 1.4.24;
Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 18-Jan-2003  thorpej Merge the nathanw_sa branch.
 1.1 15-Nov-2001  thorpej branches: 1.1.2;
file swapcontext.S was initially added on branch nathanw_sa.
 1.1.2.2 18-Nov-2001  thorpej * Make this work with ELF.
* We don't appear to have an internal name for setcontext(), so
don't use one (i.e. call setcontext(), rather than _setcontext()).

XXX Namespace considerations wrt. the ucontext functions are not
consistent -- need to revisit.
 1.1.2.1 15-Nov-2001  thorpej ARM-specific makecontext(), _resumecontext(), swapcontext(),
and getcontext(). From Klaus Kein <kleink@netbsd.org>.
 1.4.24.1 18-May-2008  yamt sync with head.
 1.4.16.1 28-Aug-2007  matt More thumb support
 1.5.26.2 28-Nov-2012  matt Pullup EABI changes.
 1.5.26.1 01-Nov-2012  matt sync with netbsd-6-0-RELEASE.
 1.5.24.1 01-Oct-2012  riz Pull up following revision(s) (requested by skrll in ticket #576):
lib/libc/arch/arm/gen/swapcontext.S: revision 1.7
Fixup the stack pointer in the ucontext returned by getcontext.
This fixes the following tests
lib/libc/sys/t_swapcontext.c
lib/libpthread/t_swapcontext.c
 1.5.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.5.8.1 28-Apr-2008  martin file swapcontext.S was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.5.4.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.5.4.2 16-Jan-2013  yamt sync with (a bit old) head
 1.5.4.1 30-Oct-2012  yamt sync with head
 1.6.2.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.6.2.2 25-Feb-2013  tls resync with head
 1.6.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.14.26.1 10-Jun-2019  christos Sync with HEAD
 1.14.24.1 26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.15.2.1 08-Aug-2021  martin Pull up following revision(s) (requested by skrll in ticket #1329):

lib/libc/arch/arm/gen/swapcontext.S: revision 1.18
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S: revision 1.2
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S: revision 1.3
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S: revision 1.2
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S: revision 1.3
lib/libc/arch/arm/sys/__clone.S: revision 1.10
lib/libc/arch/arm/sys/__clone.S: revision 1.11
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S: revision 1.2
lib/libc/arch/arm/sys/__clone.S: revision 1.12
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S: revision 1.3
lib/libc/arch/arm/sys/__clone.S: revision 1.13
lib/libc/arch/arm/sys/__clone.S: revision 1.14
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S: revision 1.2
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S: revision 1.3
lib/libc/arch/arm/gen/swapcontext.S: revision 1.16
lib/libc/arch/arm/gen/swapcontext.S: revision 1.17

Align sp to 8-byte boundary as required by EABI.

This is especially important for non-leaf functions; GCC optimizes codes
based on assumption that sp is aligned properly.

Mostly fix broken earmv5 userland compiled by GCC10 due to alignment
faults in ld.elf_so, where {ld,st}rd are used for [sp, #8x].

No regression for ATF is observed for earmv[67]{,hf}{,eb}.

Align sp to 8-byte boundary as required by EABI.
IIUC, this change only affects libc compiled for ``Thumb-mode userland'',
which we've not officially supported yet.

Fix previous. For Thumb-1:
- sp cannot be manipulated directly
- {add,sub}s should be used instead of {add,sub}

Trailing whitespace

The _INVOKE_CERROR macro deals with thumb so simplify the code (at the
expense of a couple more instructions).

Do previous differently by pushing even number of registers and remove
strange r7 usage.

Do previous differtly by pushing two registers in the same way as the
_INVOKE_CERROR macro
 1.3 17-Jan-2014  joerg Use generic version of fabs for softfloat.
 1.2 30-Nov-2013  joerg fabsl alias.
 1.1 03-Feb-2013  matt branches: 1.1.4;
Add hardfloat version of fabs using the vabs.f64 instruction
 1.1.4.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.1.4.2 25-Feb-2013  tls resync with head
 1.1.4.1 03-Feb-2013  tls file fabs.S was added on branch tls-maxphys on 2013-02-25 00:27:48 +0000
 1.1 17-Jan-2014  joerg branches: 1.1.4; 1.1.8;
Use generic version of fabs for softfloat.
 1.1.8.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.1.8.1 17-Jan-2014  tls file fabs_ieee754.S was added on branch tls-maxphys on 2014-08-20 00:02:09 +0000
 1.1.4.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.4.1 17-Jan-2014  yamt file fabs_ieee754.S was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.7 02-Aug-2013  matt Use vmrs instead of mrc
 1.6 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.5 01-Aug-2012  matt branches: 1.5.2;
Error out if compiled with -mfp=vfp and -mhard-float
 1.4 21-Aug-2004  rearnsha branches: 1.4.50;
Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 13-Jan-2002  thorpej Add internal names for fp{get,set}{mask,round,sticky}(), and
externally-visible weak aliases for the internal names.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 28-Jan-2002  nathanw Catch up to -current.
 1.4.50.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.4.50.2 23-Jan-2013  yamt sync with head
 1.4.50.1 30-Oct-2012  yamt sync with head
 1.5.2.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.5.2.1 25-Feb-2013  tls resync with head
 1.6 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.5 24-Jun-2012  christos branches: 1.5.2;
fix old style definitions; XXX: gcc should have picked them up but it did not.
 1.4 25-Feb-2006  wiz branches: 1.4.44;
Fix some typos.
 1.3 12-Jun-2005  lukem Add missing __RCSID()
 1.2 13-Jan-2002  thorpej Add internal names for fp{get,set}{mask,round,sticky}(), and
externally-visible weak aliases for the internal names.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 28-Jan-2002  nathanw Catch up to -current.
 1.4.44.2 23-Jan-2013  yamt sync with head
 1.4.44.1 30-Oct-2012  yamt sync with head
 1.5.2.1 25-Feb-2013  tls resync with head
 1.6 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.5 01-Aug-2012  matt branches: 1.5.2;
Error out if compiled with -mfp=vfp and -mhard-float
 1.4 21-Aug-2004  rearnsha branches: 1.4.50;
Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 13-Jan-2002  thorpej Add internal names for fp{get,set}{mask,round,sticky}(), and
externally-visible weak aliases for the internal names.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 28-Jan-2002  nathanw Catch up to -current.
 1.4.50.2 23-Jan-2013  yamt sync with head
 1.4.50.1 30-Oct-2012  yamt sync with head
 1.5.2.1 25-Feb-2013  tls resync with head
 1.7 23-Jan-2014  joerg One vmsr is enough.
 1.6 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.5 01-Aug-2012  matt branches: 1.5.2;
Error out if compiled with -mfp=vfp and -mhard-float
 1.4 21-Aug-2004  rearnsha branches: 1.4.50;
Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 13-Jan-2002  thorpej Add internal names for fp{get,set}{mask,round,sticky}(), and
externally-visible weak aliases for the internal names.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 28-Jan-2002  nathanw Catch up to -current.
 1.4.50.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.4.50.2 23-Jan-2013  yamt sync with head
 1.4.50.1 30-Oct-2012  yamt sync with head
 1.5.2.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.5.2.1 25-Feb-2013  tls resync with head
 1.8 03-Feb-2013  matt include <arm/vfpreg.h>
 1.7 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.6 25-Feb-2006  wiz branches: 1.6.44; 1.6.50;
Fix some typos.
 1.5 12-Jun-2005  lukem Add missing __RCSID()
 1.4 19-Mar-2002  bjh21 Only abort() if the user specifies a rounding mode other than FP_RN.
 1.3 19-Mar-2002  bjh21 ANSIfy.
 1.2 13-Jan-2002  thorpej Add internal names for fp{get,set}{mask,round,sticky}(), and
externally-visible weak aliases for the internal names.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 22-Mar-2002  nathanw Catch up to -current.
 1.1.2.1 28-Jan-2002  nathanw Catch up to -current.
 1.6.50.1 25-Feb-2013  tls resync with head
 1.6.44.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.6.44.1 23-Jan-2013  yamt sync with head
 1.6 11-Jan-2013  matt Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no
 1.5 01-Aug-2012  matt branches: 1.5.2;
Error out if compiled with -mfp=vfp and -mhard-float
 1.4 21-Aug-2004  rearnsha branches: 1.4.50;
Use RET and RETc macros for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 13-Jan-2002  thorpej Add internal names for fp{get,set}{mask,round,sticky}(), and
externally-visible weak aliases for the internal names.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 28-Jan-2002  nathanw Catch up to -current.
 1.4.50.2 23-Jan-2013  yamt sync with head
 1.4.50.1 30-Oct-2012  yamt sync with head
 1.5.2.1 25-Feb-2013  tls resync with head
 1.10 03-Mar-2025  christos don't abort, just fail.
 1.9 27-Feb-2025  christos use the latest version that does not abort on error.
 1.8 27-Feb-2025  christos PR/59063: Martin Husemann: Avoid using malloc through sysctlbyname by doing
the sysctl name to mib translation directly. Thanks martin@ for testing!
 1.7 08-Sep-2013  matt branches: 1.7.4; 1.7.40;
detect whether hw divide is present.
 1.6 08-Sep-2013  matt Detect presence of hardware divide.
 1.5 19-Aug-2013  matt Put the startup code in .text.startup
 1.4 16-Aug-2013  matt Make _libc_arm_fpu_present hidden
 1.3 30-Jul-2013  skrll include namespace.h - this fixes 48091
 1.2 31-Jan-2013  matt branches: 1.2.4;
Reorganize to appease lint.
 1.1 29-Jan-2013  matt Add a constructor for EABI to determine if a FPU is present on the system.
 1.2.4.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.2.4.2 25-Feb-2013  tls resync with head
 1.2.4.1 31-Jan-2013  tls file arm_initfini.c was added on branch tls-maxphys on 2013-02-25 00:27:49 +0000
 1.7.40.1 02-Aug-2025  perseant Sync with HEAD
 1.7.4.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.7.4.1 08-Sep-2013  yamt file arm_initfini.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_dcmpeq.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_dcmpeq.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.2 16-Apr-2013  matt branches: 1.2.2; 1.2.8;
Deal with arguments being NaNs
 1.1 16-Apr-2013  matt aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.2.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2.8.1 16-Apr-2013  yamt file __aeabi_dcmpge.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.2.2.2 23-Jun-2013  tls resync from head
 1.2.2.1 16-Apr-2013  tls file __aeabi_dcmpge.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.2 16-Apr-2013  matt branches: 1.2.2; 1.2.8;
Deal with arguments being NaNs
 1.1 16-Apr-2013  matt aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.2.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2.8.1 16-Apr-2013  yamt file __aeabi_dcmpgt.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.2.2.2 23-Jun-2013  tls resync from head
 1.2.2.1 16-Apr-2013  tls file __aeabi_dcmpgt.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_dcmple.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_dcmple.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_dcmplt.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_dcmplt.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_dcmpun.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_dcmpun.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_fcmpeq.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_fcmpeq.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.2 16-Apr-2013  matt branches: 1.2.2; 1.2.8;
Deal with arguments being NaNs
 1.1 16-Apr-2013  matt aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.2.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2.8.1 16-Apr-2013  yamt file __aeabi_fcmpge.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.2.2.2 23-Jun-2013  tls resync from head
 1.2.2.1 16-Apr-2013  tls file __aeabi_fcmpge.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.2 16-Apr-2013  matt branches: 1.2.2; 1.2.8;
Deal with arguments being NaNs
 1.1 16-Apr-2013  matt aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.2.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2.8.1 16-Apr-2013  yamt file __aeabi_fcmpgt.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.2.2.2 23-Jun-2013  tls resync from head
 1.2.2.1 16-Apr-2013  tls file __aeabi_fcmpgt.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_fcmple.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_fcmple.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_fcmplt.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_fcmplt.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.1 16-Apr-2013  matt branches: 1.1.2; 1.1.8;
aeabi floating compare ops are different from the normal gcc softfloat ones.
 1.1.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.8.1 16-Apr-2013  yamt file __aeabi_fcmpun.c was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.2.2 23-Jun-2013  tls resync from head
 1.1.2.1 16-Apr-2013  tls file __aeabi_fcmpun.c was added on branch tls-maxphys on 2013-06-23 06:21:04 +0000
 1.4 26-Jan-2013  matt Appease clang by making 64-bit literals use ULL
 1.3 24-Dec-2005  perry branches: 1.3.44; 1.3.50;
Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete.
 1.2 21-Feb-2001  bjh21 Add support for ARM VFP-format doubles, conditional on __VFP_FP__.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.3.50.1 25-Feb-2013  tls resync with head
 1.3.44.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2 21-Apr-2002  bjh21 All the versions of softfloat-specialize were practically identical, so replace
them with a single one.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 25-Apr-2002  nathanw Catch up to -current.
 1.10 24-Apr-2013  matt Add #include <stdint.h>
 1.9 07-Jul-2011  matt branches: 1.9.2; 1.9.8;
Don't define a new enum. Just #define round_* to their FP_Rx instead.
 1.8 04-Jul-2011  matt Add __floatunsidf __floatunsisf __floatunsitf routines.
XXX i think they are correct but not sure.
 1.7 16-May-2006  mrg if SOFTFLOAT_FOR_GCC is not defined, don't declare float_detect_tininess.
 1.6 12-May-2002  bjh21 Add SIGFPE support to SoftFloat, so fpsetmask/fpgetmask now work. A new
variable, float_exception_mask (#defined to _softfloat_float_exception_mask)
contains the current exception mask.
Also make the argument to float_raise into an fp_except.
Also synchronise file header comments between files.
 1.5 06-May-2002  bjh21 Consistently declare the types of float_rounding_mode and float_exception_flags
as fp_rnd and fp_except respectively.
 1.4 10-Mar-2002  bjh21 Use the values from <machine/ieeefp.h> to define the exception flags, and
rounding modes, rather than different ones (oops).
 1.3 08-Mar-2001  bjh21 Re-instate __fixunssfsi() and __fixunsdfsi(), but only for arm32 with a.out
binaries, because libc's provided them there forever.
 1.2 08-Feb-2001  bjh21 branches: 1.2.2;
Don't declare functions that are provided elsewhere in libc.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.3 21-Jun-2002  nathanw Catch up to -current.
 1.2.2.2 22-Mar-2002  nathanw Catch up to -current.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.9.8.1 23-Jun-2013  tls resync from head
 1.9.2.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.4 31-Jul-2009  dsl Add the 'abs', 'div' and 'erand48' sources to stdlib/Makefile.inc.
Change the arch files only include the .S files.
This adds imaxdiv() to some archs where it was missing.
 1.3 04-Aug-2008  matt branches: 1.3.6;
Add C99 functions imaxabs and imaxdiv.
 1.2 22-Mar-2006  drochner branches: 1.2.20;
build erand48_ieee754.c on everything but vax
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.20.1 18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.3.6.2 04-Aug-2008  matt Add C99 functions imaxabs and imaxdiv.
 1.3.6.1 04-Aug-2008  matt file Makefile.inc was added on branch christos-time_t on 2008-08-04 21:29:29 +0000
 1.9 21-Aug-2013  matt Add -marm to those sources who aren't thumb friendly.
 1.8 30-Jul-2009  dsl branches: 1.8.6; 1.8.12;
If SRCS contains any .S files then remove the corresponding .c file from
SRCS and add to LSRCS (for lint).
Change the 'string' Makefiles so that the arch/*/string/Makefile.inc
need only specify the .S files for that architecture and not the .c
files for all the files they don't override.
 1.7 18-Jul-2009  dsl Remove references to index.c and rindex.c (strchr.c and strrchr.c
now provide the definitions).
 1.6 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.5 23-Nov-2002  chris Add arm asm version of memcmp, basically it's strncmp.S without the
check for *src != 0
 1.4 23-Nov-2002  chris Add an asm version of strncmp, based on strcmp.
Add RCSID to strcmp, also use numeric label, rather than named label for
loop.
 1.3 16-Nov-2002  rearnsha Add an assembler version of strcmp, based on example code from the ARM
ARM. As an example of the performance difference that this provides
a Dhrystone score on my Shark goes from 213k to 261k.
 1.2 11-Nov-2001  chris Update the libc version of ffs to make use of an optimsed asm version.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 10-Dec-2002  thorpej Sync with HEAD.
 1.1.2.1 14-Nov-2001  nathanw Catch up to -current.
 1.8.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.8.6.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.7 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.6 09-Oct-2003  ichiro dont use __ARMEB__
It changed so that it might distinguish by BYTE_ORDER
 1.5 09-Oct-2003  ichiro support big endian
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 17-Aug-2002  thorpej Local label fixup.
 1.2 23-Jan-2001  bjh21 branches: 1.2.2;
Correct licence to current TNF one.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.1 27-Aug-2002  nathanw Catch up to -current.
 1.3 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.4 28-Apr-2008  martin branches: 1.4.8;
Remove clause 3 and 4 from TNF licenses
 1.3 14-Oct-2003  scw branches: 1.3.22; 1.3.30;
Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.3.30.1 18-May-2008  yamt sync with head.
 1.3.22.1 28-Aug-2007  matt More thumb support
 1.4.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.4.8.1 28-Apr-2008  martin file bzero.S was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.9 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.8 06-May-2005  rearnsha On ARMv5 reduce the value to the LSB before using CLZ. Otherwise we'll
calculate the position of the MSB not the LSB.
 1.7 21-Aug-2004  rearnsha branches: 1.7.2;
Add missing new line.
 1.6 21-Aug-2004  rearnsha Use RET to return.

If ARMv5 or later then use CLZ rather than long-winded tale-lookup.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 17-Aug-2002  thorpej Local label fixup.
 1.3 17-Aug-2002  chris correct comment, it's r0, not a0.
 1.2 13-Nov-2001  bjh21 branches: 1.2.2;
Fix .type directive to use the right name for L_ffs_table (pointed out by
Ian Fry).

Also, add RCSID and fix some comments.
 1.1 11-Nov-2001  chris Update the libc version of ffs to make use of an optimsed asm version.
 1.2.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.2.2.2 14-Nov-2001  nathanw Catch up to -current.
 1.2.2.1 13-Nov-2001  nathanw file ffs.S was added on branch nathanw_sa on 2001-11-14 19:31:52 +0000
 1.7.2.1 07-May-2005  tron Pull up revision 1.8 (requested by rearnsha in ticket #255):
On ARMv5 reduce the value to the LSB before using CLZ. Otherwise we'll
calculate the position of the MSB not the LSB.
 1.6 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.5 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.4 23-Oct-2003  scw Duh, fix the align-to-32-bits code.
 1.3 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.2 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.1 23-Nov-2002  chris branches: 1.1.2;
Add arm asm version of memcmp, basically it's strncmp.S without the
check for *src != 0
 1.1.2.2 10-Dec-2002  thorpej Sync with HEAD.
 1.1.2.1 23-Nov-2002  thorpej file memcmp.S was added on branch nathanw_sa on 2002-12-10 06:25:43 +0000
 1.5 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.4 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.3 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.2 02-Jun-2005  scw Nuke trailing whitespace.
 1.1 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.4 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.3 02-Jun-2005  scw Nuke trailing whitespace.
 1.2 21-Aug-2004  rearnsha branches: 1.2.2;
Always use bx for returning (this code is always ARMv5TE.
 1.1 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.2.2.1 26-Aug-2007  bouyer Apply patch, requested by scw in ticket #1806:
lib/libc/arch/arm/string/memcpy_xscale.S: patch
sys/lib/libkern/arch/arm/memcpy_xscale.S: patch
Apply the patch, with some minor tweaks, supplied in PR/36513.
This prevents a possible prefetch past the end of the source buffer.
 1.7 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.6 02-Jun-2005  scw Nuke trailing whitespace.
 1.5 21-Aug-2004  rearnsha branches: 1.5.2;
Use RET and RETc for returning.
 1.4 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.5.2.1 22-Jun-2007  liamjfoy Pull up following revision(s) (requested by scw in ticket #1805):
common/lib/libc/arch/arm/string/memmove.S: revision 1.2
Apply the patch supplied in PR/36512 to fix the buffer overlap check. The patch
to memmove.S was provided via patch.
 1.6 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.5 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.4 14-Oct-2003  scw Xscale-optimised mem* routines. Contributed by Wasabi Systems.
(Note: memcmp/memset improvements also benefit non-Xscale).

memcmp() - Compare 32-bits at a time if possible. Special-case 6-byte
comparisons, for the benefit of the network stack.

memset() - More loop unrolling, plus use of 'strd' instruction,
bzero() results in > 100% speedup on Xscale.

memcpy() - Big-endian support, unrolled loops, 'strd/pld', plus special-
cases for very common length/alignment combinations.
Benchmarks show ~50% improvment on Xscale.

memmove() - Big-endian support. Use fast memcpy(), above, if the regions
bcopy() don't overlap. Otherwise unchanged

XXX: The Xscale optimisations are not enabled by default, unless /etc/mk.conf
XXX: has the right compiler options. The intention is to pull them in via
XXX: something like libxscale.so, selected at runtime by ld.so.conf.
XXX: (Big-endian support is not affected by this).
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 17-Aug-2002  thorpej Local label fixup.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.1 27-Aug-2002  nathanw Catch up to -current.
 1.5 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.4 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 23-Nov-2002  chris branches: 1.2.2;
Add an asm version of strncmp, based on strcmp.
Add RCSID to strcmp, also use numeric label, rather than named label for
loop.
 1.1 16-Nov-2002  rearnsha Add an assembler version of strcmp, based on example code from the ARM
ARM. As an example of the performance difference that this provides
a Dhrystone score on my Shark goes from 213k to 261k.
 1.2.2.2 10-Dec-2002  thorpej Sync with HEAD.
 1.2.2.1 23-Nov-2002  thorpej file strcmp.S was added on branch nathanw_sa on 2002-12-10 06:25:43 +0000
 1.1 23-Jan-2013  matt branches: 1.1.2; 1.1.6; 1.1.12;
Add simple version of strncat for ARM.
 1.1.12.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.1.12.1 23-Jan-2013  yamt file strncat_naive.S was added on branch yamt-pagecache on 2014-05-22 11:36:46 +0000
 1.1.6.2 25-Feb-2013  tls resync with head
 1.1.6.1 23-Jan-2013  tls file strncat_naive.S was added on branch tls-maxphys on 2013-02-25 00:27:49 +0000
 1.1.2.2 07-Feb-2013  matt Sync with HEAD
 1.1.2.1 23-Jan-2013  matt file strncat_naive.S was added on branch matt-nb6-plus on 2013-02-07 07:06:28 +0000
 1.4 20-Dec-2005  christos Use reach-over sources from common/lib/libc
 1.3 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.2 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.1 23-Nov-2002  chris branches: 1.1.2;
Add an asm version of strncmp, based on strcmp.
Add RCSID to strcmp, also use numeric label, rather than named label for
loop.
 1.1.2.2 10-Dec-2002  thorpej Sync with HEAD.
 1.1.2.1 23-Nov-2002  thorpej file strncmp.S was added on branch nathanw_sa on 2002-12-10 06:25:43 +0000
 1.8 16-Oct-2005  christos move to the new compat layout.
 1.7 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.6 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.3 09-Jan-2001  bjh21 branches: 1.3.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.2 09-Jan-2001  bjh21 Add some explanatory comments.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.3.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.5 19-Aug-2013  matt Always compile as ARM even if -mthumb is given.
 1.4 17-Aug-2013  matt Enforce that this must be not compiled using Thumb1
 1.3 20-Nov-2012  matt Add $NetBSD$ tag. Use ip to save r1 instead of the stack.
 1.2 14-Feb-2012  matt branches: 1.2.2; 1.2.4; 1.2.6; 1.2.8;
Add workaround for ARM cores that don't properly implement the MRC instruction
used for reading the thread pointer. This is the corresponding change which
was made to <arm/mcontext.h>
 1.1 18-Nov-2011  joerg Hook up TLS support on ARM. Tested by martin@, kernel support from matt@
 1.2.8.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.2.8.1 25-Feb-2013  tls resync with head
 1.2.6.1 20-Nov-2012  matt Don't push/pop r1 around SYSTRAP, save it in ip instead.
 1.2.4.4 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2.4.3 16-Jan-2013  yamt sync with (a bit old) head
 1.2.4.2 17-Apr-2012  yamt sync with head
 1.2.4.1 14-Feb-2012  yamt file __aeabi_read_tp.S was added on branch yamt-pagecache on 2012-04-17 00:05:13 +0000
 1.2.2.1 24-Nov-2012  riz Pull up following revision(s) (requested by matt in ticket #701):
lib/libc/arch/arm/sys/__aeabi_read_tp.S: revision 1.3
Add $NetBSD$ tag. Use ip to save r1 instead of the stack.
 1.14 30-Jun-2021  skrll Do previous differtly by pushing two registers in the same way as the
_INVOKE_CERROR macro
 1.13 30-Jun-2021  skrll The _INVOKE_CERROR macro deals with thumb so simplify the code (at the
expense of a couple more instructions).
 1.12 30-Jun-2021  skrll Trailing whitespace
 1.11 30-Jun-2021  rin Fix previous. For Thumb-1:
- sp cannot be manipulated directly
- {add,sub}s should be used instead of {add,sub}
 1.10 29-Jun-2021  rin Align sp to 8-byte boundary as required by EABI.

IIUC, this change only affects libc compiled for ``Thumb-mode userland'',
which we've not officially supported yet.
 1.9 30-Nov-2013  joerg branches: 1.9.28;
Use PLT_SYM.
 1.8 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.7 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.6 24-Apr-2006  snj branches: 1.6.10; 1.6.44; 1.6.50;
It's "its."
 1.5 21-Aug-2004  rearnsha Use RETc for returning. When v4T or later use BX for calling the target.
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 27-Aug-2002  mycroft Do the appropriate PIC magic for the jump to _exit().
 1.2 17-Aug-2002  thorpej Local label fixup.
 1.1 22-Jul-2001  chris branches: 1.1.2; 1.1.4;
Add __clone() for arm.
 1.1.4.1 27-Aug-2002  lukem Pull up revision 1.3 (requested by mycroft in ticket #737):
Do the appropriate PIC magic for the jump to _exit().
 1.1.2.4 17-Sep-2002  nathanw Catch up to -current.
 1.1.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 08-Oct-2001  nathanw Catch up to -current.
 1.1.2.1 22-Jul-2001  nathanw file __clone.S was added on branch nathanw_sa on 2001-10-08 20:17:07 +0000
 1.6.50.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.6.44.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.6.10.1 28-Aug-2007  matt More thumb support
 1.9.28.1 08-Aug-2021  martin Pull up following revision(s) (requested by skrll in ticket #1329):

lib/libc/arch/arm/gen/swapcontext.S: revision 1.18
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S: revision 1.2
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S: revision 1.3
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S: revision 1.2
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S: revision 1.3
lib/libc/arch/arm/sys/__clone.S: revision 1.10
lib/libc/arch/arm/sys/__clone.S: revision 1.11
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S: revision 1.2
lib/libc/arch/arm/sys/__clone.S: revision 1.12
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S: revision 1.3
lib/libc/arch/arm/sys/__clone.S: revision 1.13
lib/libc/arch/arm/sys/__clone.S: revision 1.14
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S: revision 1.2
sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S: revision 1.3
lib/libc/arch/arm/gen/swapcontext.S: revision 1.16
lib/libc/arch/arm/gen/swapcontext.S: revision 1.17

Align sp to 8-byte boundary as required by EABI.

This is especially important for non-leaf functions; GCC optimizes codes
based on assumption that sp is aligned properly.

Mostly fix broken earmv5 userland compiled by GCC10 due to alignment
faults in ld.elf_so, where {ld,st}rd are used for [sp, #8x].

No regression for ATF is observed for earmv[67]{,hf}{,eb}.

Align sp to 8-byte boundary as required by EABI.
IIUC, this change only affects libc compiled for ``Thumb-mode userland'',
which we've not officially supported yet.

Fix previous. For Thumb-1:
- sp cannot be manipulated directly
- {add,sub}s should be used instead of {add,sub}

Trailing whitespace

The _INVOKE_CERROR macro deals with thumb so simplify the code (at the
expense of a couple more instructions).

Do previous differently by pushing even number of registers and remove
strange r7 usage.

Do previous differtly by pushing two registers in the same way as the
_INVOKE_CERROR macro
 1.2 16-Oct-2005  christos move to the new compat layout.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.8 26-Oct-2021  christos Merge all MD __sigaction14_sigtramp.c copies into one:
- sparc and sparc64 were not using version 0 sigcontext when there were
no arguments in the signal version. This was probably a bug.
- vax is using +1 the version numbers of the other archs.
- Only hppa was defining __LIBC12_SOURCE__ so it was getting a working
sigcontext before. all the other ports that supported sigcontext had
the compat code disabled.
[pointed out by thorpej, thanks!]
If we want to remove sigcontext support from userland at least now there
is less work to do so.
 1.7 28-Apr-2008  martin branches: 1.7.8;
Remove clause 3 and 4 from TNF licenses
 1.6 19-Feb-2006  christos branches: 1.6.18;
make these consistent.
 1.5 12-Jun-2005  lukem Add missing __RCSID()
 1.4 23-Mar-2004  drochner save errno while trying to install a !SA_SIGINFO trampoline -- this
is expected to fail with !COMPAT_16 kernels, and we shouldn't
overwrite errno in this case
 1.3 05-Oct-2003  matt Add SA_SIGINFO support for ARM.
 1.2 18-Jan-2003  thorpej Merge the nathanw_sa branch.
 1.1 09-Jul-2002  thorpej branches: 1.1.2;
New __sigaction14() system call stub which registers the signal
trampoline, and the signal trampolines themselves.

NOTE: These are not yet enabled; they will be enabled after further
testing on more architectures.
 1.1.2.3 02-Oct-2002  thorpej libc:
Internally rename __sigaction14 to __libc_sigaction14. Provide a
weak alias of __sigaction14 -> __libc_sigaction14.

libpthread:
Use __libc_sigaction14 to actually register the signal handler, rather
than using __sigaction_sigtramp() directly with a hard-coded trampoline
version. While we don't actually use the libc trampoline, we want to
avoid depending on any COMPAT_* kernel options down the road (this is
already the case for the VAX port).

Be explicit about which version of the signal interface we're interposing
(...14), and build pthread_sig.c with __LIBC12_SOURCE__ (required to get
the libc-internal interfaces).
 1.1.2.2 01-Aug-2002  nathanw Catch up to -current.
 1.1.2.1 09-Jul-2002  nathanw file __sigaction14_sigtramp.c was added on branch nathanw_sa on 2002-08-01 03:27:55 +0000
 1.6.18.1 18-May-2008  yamt sync with head.
 1.7.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.7.8.1 28-Apr-2008  martin file __sigaction14_sigtramp.c was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.5 16-Oct-2005  christos move to the new compat layout.
 1.4 26-Mar-2004  drochner fix references to the syscall formerly known as SYS___sigreturn14
 1.3 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.2 09-Jan-2001  bjh21 Replace boiler-plate code sequences with macro invocations from SYS.h.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.3 16-Oct-2005  christos move to the new compat layout.
 1.2 26-Mar-2004  drochner fix references to the syscall formerly known as SYS___sigreturn14
 1.1 09-Jul-2002  thorpej branches: 1.1.2;
New __sigaction14() system call stub which registers the signal
trampoline, and the signal trampolines themselves.

NOTE: These are not yet enabled; they will be enabled after further
testing on more architectures.
 1.1.2.2 01-Aug-2002  nathanw Catch up to -current.
 1.1.2.1 09-Jul-2002  nathanw file __sigtramp1.S was added on branch nathanw_sa on 2002-08-01 03:27:55 +0000
 1.5 27-Nov-2021  skrll Trailing whitespace
 1.4 23-Nov-2021  thorpej Decorate the ARM signal trampoline with the appropriate .cfi
directives to allow exception unwind / backtrace across a signal
handler.
 1.3 16-Aug-2013  matt Add END
 1.2 28-Apr-2008  martin branches: 1.2.4; 1.2.8; 1.2.28;
Remove clause 3 and 4 from TNF licenses
 1.1 05-Oct-2003  matt branches: 1.1.30;
Add SA_SIGINFO support for ARM.
 1.1.30.1 18-May-2008  yamt sync with head.
 1.2.28.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.2.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.2.8.1 28-Apr-2008  martin file __sigtramp2.S was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.2.4.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.4 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.3 09-Jan-2001  bjh21 Replace boiler-plate code sequences with macro invocations from SYS.h.
 1.2 09-Jan-2001  bjh21 Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.10 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.9 16-Aug-2013  matt Thumbify & optimize a little
 1.8 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.7 21-Aug-2004  rearnsha branches: 1.7.16; 1.7.50; 1.7.56;
Use RET and RETc for returning.
 1.6 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.3 09-Jan-2001  bjh21 branches: 1.3.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.2 09-Jan-2001  bjh21 Add some explanatory comments.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.3.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.7.56.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.7.50.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.7.16.1 28-Aug-2007  matt More thumb support
 1.13 12-Sep-2013  joerg Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
 1.12 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.11 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.10 01-Aug-2013  matt Make __minbrk, __curbrk, and CERROR hidden and avoid using the GOT to access
them.
 1.9 13-May-2011  nonaka branches: 1.9.4; 1.9.10;
Use "_end" instead of "end" for consistency with other architectures.
 1.8 21-Aug-2004  rearnsha branches: 1.8.16;
Use RET and RETc for returning.
 1.7 26-Dec-2003  martin Use an unsigned comparison against minbrk.
From Steve Woodford, inspired by a similar change to other archs from
OpenBSD.
 1.6 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.5 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.4 17-Aug-2002  thorpej Local label fixup.
 1.3 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.2 27-Aug-2002  nathanw Catch up to -current.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.8.16.1 28-Aug-2007  matt More thumb support
 1.9.10.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.4.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.18 07-May-2025  uwe arm: asm.h - change GOT_INIT to take the normal asm label

Don't pass the label to use for the "current address" as the macro
parameter. It obscures its purpose and makes the use of local labels
extremely unobvious, so you are forced to invent a name that is mostly
useless otherwise:

GOT_INIT(r3, .Lgot.execsp_start, .Lpc.execsp_start)
GOT_INITSYM(.Lgot.execsp_start, .Lpc.execsp_start)
vs.
0: GOT_INIT(r3, .Lgot.execsp_start)
GOT_INITSYM(.Lgot.execsp_start, 0b)

Same object code is generated.
 1.17 07-May-2025  uwe arm: cerror.S - use GOT_SYM

Use GOT_SYM instead of open-coding it. It's defined in asm.h but
doesn't seem to be used anywhere, so perk it up.

While here, be consistent about declaring errno and use that as a
chance to provide a comment why #ifdef _REENTRANT is needed here.
 1.16 07-May-2025  uwe arm: cerror.S - factor out code to return -1

Do not repeat verbose ifdefed code that sets (long long){ r0, r1 } to
-1LL that indicates an error return from a syscall. Define it once as
a macro and use it. Fix the code to actually be compilable as thumb
("mov" vs "movs").

Modulo one fixed "mov" vs "movs" the same object code is generated for
all 8 permutations of (arm/thumb x non/reentrant x absolute/pic).
 1.15 06-May-2025  uwe arm/asm.h: revert PCREL_GET &c in previous (ok riastradh)

This change needs to be redone and re-verified. I have detailed some
issues in the PR, and it also turns out that some of the changes were
in the !_REENTRANT branch of #ifdef and thus not checked at all.
riastradh asked to back out the changes for now.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.14 03-May-2025  riastradh arm: Nix most __PIC__ conditionals in .S files.

New macros PCREL_GET(rN,label,pclabel) and PCREL_SYM(label,pclabel)
to enable this by the pattern:

ldr rN, label
#ifdef __PIC__
pclabel:
add rN, rN, pc
#endif
...
label:
#ifdef __PIC__
.word (label - (pclabel + 2*sizeof(instruction)))
#else
.word label
#endif

(sizeof(instruction) = 2 for thumb, 4 for non-thumb.)

No binary change in libc with MKPIE=no (i.e., testing both for
changes to the PIC build and changes to the non-PIC build).

In principle, assembly routines could improve instruction scheduling
by splitting up the ldr and add instructions. But in practice, the
maintenance and auditing burden likely makes this worthwhile by
improving legibility vs a tangle of in-line #ifdefs.

brk.S does things a little differently making it harder to unify.
Could redo it but I don't want to make changes without testing them
first.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.13 30-Nov-2013  joerg branches: 1.13.38;
Use PLT_SYM.
 1.12 12-Sep-2013  joerg Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
 1.11 04-Sep-2013  matt only emit cfi if __ARM_EABI__ && __UNWIND_TABLES__
 1.10 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.9 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.8 27-Feb-2012  joerg branches: 1.8.2;
Make __cerror protected to restore ABI leak in older libc versions,
where e.g. librt referenced the copy from libc. This still allows libc
to use PC-relative jumps.
 1.7 14-Jan-2011  matt branches: 1.7.6; 1.7.8;
Change __cerror to be marked hidden and change callers to avoid the PLT.
 1.6 21-Aug-2004  rearnsha branches: 1.6.16;
Use RET and RETc for returning.
 1.5 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 17-Aug-2002  thorpej Local label fixup.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 27-Aug-2002  nathanw Catch up to -current.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.6.16.1 28-Aug-2007  matt More thumb support
 1.7.8.1 27-Feb-2012  riz Pull up following revision(s) (requested by joerg in ticket #57):
lib/libc/arch/arm/sys/cerror.S: revision 1.8
lib/libc/arch/vax/SYS.h: revision 1.12
lib/libc/arch/powerpc64/sys/cerror.S: revision 1.3
lib/libc/arch/powerpc64/sys/cerror.S: revision 1.4
lib/libc/arch/i386/sys/cerror.S: revision 1.16
lib/libc/arch/x86_64/sys/cerror.S: revision 1.5
lib/libc/arch/powerpc/sys/cerror.S: revision 1.10
lib/libc/arch/mips/sys/cerror.S: revision 1.17
lib/libc/arch/powerpc/sys/cerror.S: revision 1.9
Make __cerror protected to restore ABI leak in older libc versions,
where e.g. librt referenced the copy from libc. This still allows libc
to use PC-relative jumps.
PowerPC doesn't have CERROR since it never had a.out.
Use _C_LABEL(__cerror) instead.
 1.7.6.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.7.6.1 17-Apr-2012  yamt sync with head
 1.8.2.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.13.38.1 02-Aug-2025  perseant Sync with HEAD
 1.5 07-Feb-2017  kamil Mark exect(3) obsolete and bind it to plain execve(2) on all platforms

The original exect(2) from BSD4.2 was enabling bit for tracing
(single-step mode) and calling execve(2). The purpose of it was to generate
a signal for a tracer once the application will change its image to a new
program.

This approach no longer works as:
- exect(2) traces (single-steps) libc and it requires hundreds or
thousands steps before entering a new image
- it's vax and x86 specific code
- this functionality has been moved to the kernel - once a process is
traced it will generate SIGTRAP with si_code TRAP_EXEC and route it to
its debugger
- the side effects and unportability make this interface unusable
- there are no known users of this interface
- it apparently never worked better since day0 of NetBSD ("day0 bug")

Users are requested to move to other execve(2) variants. Calling current
execve(2) as it is the most similar behavior to this one from BSD4.2.

Discussed several times on mailing lists and in PR/51700.

Add warning to exect(3) telling about marking this function obsolete.

This function is prepared to be removed in next libc major bump.

Sponsored by <The NetBSD Foundation>
 1.4 07-Aug-2003  agc branches: 1.4.80; 1.4.84;
Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.3 09-Jan-2001  bjh21 Replace boiler-plate code sequences with macro invocations from SYS.h.
 1.2 09-Jan-2001  bjh21 Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.4.84.1 21-Apr-2017  bouyer Sync with HEAD
 1.4.80.1 20-Mar-2017  pgoyette Sync with HEAD
 1.7 16-Aug-2013  matt thumbify and add END
 1.6 21-Aug-2004  rearnsha branches: 1.6.50; 1.6.56;
Use RET and RETc for returning.
 1.5 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 13-Feb-2003  nathanw Implement pthread_atfork() (in libc, because the required threadlib
stub behavior is exactly the same as the usual behavior).
 1.2 09-Jan-2001  bjh21 Add some explanatory comments.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.6.56.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.6.50.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.10 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.9 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.8 30-Apr-2013  skrll include assym.h
 1.7 30-Apr-2013  skrll Don't hardcode offset in assembler. This ensures the return value in the
context is the correct value (0) on earm*
 1.6 28-Apr-2008  martin branches: 1.6.4; 1.6.8; 1.6.28;
Remove clause 3 and 4 from TNF licenses
 1.5 30-Mar-2008  chris branches: 1.5.2;
Use SYSTRAP macro, rather than inlining the swi instruction.

This makes sure the SWI will be in the NetBSD assigned range of swi
numbers.
 1.4 21-Aug-2004  rearnsha branches: 1.4.16;
Use RET and RETc for returning.
 1.3 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.2 18-Jan-2003  thorpej Merge the nathanw_sa branch.
 1.1 15-Nov-2001  thorpej branches: 1.1.2;
file getcontext.S was initially added on branch nathanw_sa.
 1.1.2.2 18-Nov-2001  thorpej Make this file work with ELF.
 1.1.2.1 15-Nov-2001  thorpej ARM-specific makecontext(), _resumecontext(), swapcontext(),
and getcontext(). From Klaus Kein <kleink@netbsd.org>.
 1.4.16.1 28-Aug-2007  matt More thumb support
 1.5.2.1 18-May-2008  yamt sync with head.
 1.6.28.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.6.28.1 23-Jun-2013  tls resync from head
 1.6.8.2 28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.6.8.1 28-Apr-2008  martin file getcontext.S was added on branch christos-time_t on 2008-04-28 20:22:56 +0000
 1.6.4.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2 16-Oct-2005  christos move to the new compat layout.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.8 16-Aug-2013  matt Use _INVOKE_CERROR
use stmia instead of two str
add END
 1.7 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.6 21-Aug-2004  rearnsha branches: 1.6.16; 1.6.50; 1.6.56;
Use RET and RETc for returning.
 1.5 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.6.56.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.6.50.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.6.16.1 28-Aug-2007  matt More thumb support
 1.14 06-May-2025  uwe arm/asm.h: revert PCREL_GET &c in previous (ok riastradh)

This change needs to be redone and re-verified. I have detailed some
issues in the PR, and it also turns out that some of the changes were
in the !_REENTRANT branch of #ifdef and thus not checked at all.
riastradh asked to back out the changes for now.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.13 03-May-2025  riastradh arm: Nix most __PIC__ conditionals in .S files.

New macros PCREL_GET(rN,label,pclabel) and PCREL_SYM(label,pclabel)
to enable this by the pattern:

ldr rN, label
#ifdef __PIC__
pclabel:
add rN, rN, pc
#endif
...
label:
#ifdef __PIC__
.word (label - (pclabel + 2*sizeof(instruction)))
#else
.word label
#endif

(sizeof(instruction) = 2 for thumb, 4 for non-thumb.)

No binary change in libc with MKPIE=no (i.e., testing both for
changes to the PIC build and changes to the non-PIC build).

In principle, assembly routines could improve instruction scheduling
by splitting up the ldr and add instructions. But in practice, the
maintenance and auditing burden likely makes this worthwhile by
improving legibility vs a tangle of in-line #ifdefs.

brk.S does things a little differently making it harder to unify.
Could redo it but I don't want to make changes without testing them
first.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.12 30-Nov-2013  joerg branches: 1.12.38;
Use PLT_SYM.
 1.11 12-Sep-2013  joerg Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
 1.10 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.9 01-Aug-2013  matt CERROR is now hidden so no need to call it via the PLT
 1.8 21-Aug-2004  rearnsha branches: 1.8.16; 1.8.50; 1.8.56;
Use RET and RETc for returning.
 1.7 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.6 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.5 17-Aug-2002  thorpej Local label fixup.
 1.4 13-Nov-2001  chris Update arm libc files for 8 byte aligned stack.
 1.3 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.3 27-Aug-2002  nathanw Catch up to -current.
 1.2.2.2 14-Nov-2001  nathanw Catch up to -current.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.8.56.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.8.50.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.8.16.1 28-Aug-2007  matt More thumb support
 1.12.38.1 02-Aug-2025  perseant Sync with HEAD
 1.14 06-May-2025  uwe arm/asm.h: revert PCREL_GET &c in previous (ok riastradh)

This change needs to be redone and re-verified. I have detailed some
issues in the PR, and it also turns out that some of the changes were
in the !_REENTRANT branch of #ifdef and thus not checked at all.
riastradh asked to back out the changes for now.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.13 03-May-2025  riastradh arm: Nix most __PIC__ conditionals in .S files.

New macros PCREL_GET(rN,label,pclabel) and PCREL_SYM(label,pclabel)
to enable this by the pattern:

ldr rN, label
#ifdef __PIC__
pclabel:
add rN, rN, pc
#endif
...
label:
#ifdef __PIC__
.word (label - (pclabel + 2*sizeof(instruction)))
#else
.word label
#endif

(sizeof(instruction) = 2 for thumb, 4 for non-thumb.)

No binary change in libc with MKPIE=no (i.e., testing both for
changes to the PIC build and changes to the non-PIC build).

In principle, assembly routines could improve instruction scheduling
by splitting up the ldr and add instructions. But in practice, the
maintenance and auditing burden likely makes this worthwhile by
improving legibility vs a tangle of in-line #ifdefs.

brk.S does things a little differently making it harder to unify.
Could redo it but I don't want to make changes without testing them
first.

PR lib/59391: unnecessary __PIC__ conditionals clutter .S files
 1.12 12-Sep-2013  joerg branches: 1.12.38;
Pass PICFLAGS down to cc-as-as and use __PIC__ to decide if it is small
vs big PIC mode. Retire -DPIC and -DBIGPIC.
 1.11 03-Sep-2013  matt Use less got, add END(), make thumb tolerant.
 1.10 01-Aug-2013  matt Make __minbrk, __curbrk, and CERROR hidden and avoid using the GOT to access
them.
 1.9 13-May-2011  nonaka branches: 1.9.4; 1.9.10;
Use "_end" instead of "end" for consistency with other architectures.
 1.8 21-Aug-2004  rearnsha branches: 1.8.16;
Use RET and RETc for returning.
 1.7 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.6 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.5 17-Aug-2002  thorpej Local label fixup.
 1.4 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.3 05-May-2001  kleink Shameless hack to reference end when using a.out and _end when using ELF.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.2 27-Aug-2002  nathanw Catch up to -current.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.8.16.1 28-Aug-2007  matt More thumb support
 1.9.10.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.4.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.12.38.1 02-Aug-2025  perseant Sync with HEAD
 1.4 18-Jan-2003  thorpej Merge the nathanw_sa branch.
 1.3 17-Aug-2002  thorpej Local label fixup.
 1.2 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.1 29-Dec-2000  bjh21 branches: 1.1.2;
Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.1.2.2 25-Feb-2002  nathanw Move setlogin() stub to C code, and namespace-protect it.
 1.1.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2 16-Oct-2005  christos move to the new compat layout.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2 16-Oct-2005  christos move to the new compat layout.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.7 16-Oct-2005  christos move to the new compat layout.
 1.6 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.5 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.7 16-Oct-2005  christos move to the new compat layout.
 1.6 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.5 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.4 16-Oct-2005  christos move to the new compat layout.
 1.3 26-Mar-2004  drochner the WARN_REFERENCES text "include <signal.h> for correct reference" is pointless
as <signal.h> won't help you, so remove it
 1.2 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.8 16-Oct-2005  christos move to the new compat layout.
 1.7 21-Aug-2004  rearnsha Use RET and RETc for returning.
 1.6 07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.5 05-Apr-2003  bjh21 Use the correct instruction for returning ffrom a function (MOV rather
than MOVS).
 1.4 05-Apr-2003  bjh21 NetBSD/acorn26 has been using APCS-32 for years, so unifdef -U__APCS_26__.
 1.3 16-Jul-2001  matt Changes needed for ARM ELF shared library support.
 1.2 09-Jan-2001  bjh21 branches: 1.2.2;
Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.2.2.1 08-Oct-2001  nathanw Catch up to -current.
 1.5 18-Apr-2020  thorpej Rename "syscall" to "_syscall" and provide "syscall" as a weak alias.
 1.4 07-Aug-2003  agc branches: 1.4.98;
Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22280, verified by myself.
 1.3 09-Jan-2001  bjh21 Replace boiler-plate code sequences with macro invocations from SYS.h.
 1.2 09-Jan-2001  bjh21 Use SYSTRAP() everywhere rather than coding SWI instructions directly.
 1.1 29-Dec-2000  bjh21 Create shared ARM source for libc, and move arm26 port over to using it.
The code is (almost) a direct copy of the current arm26 sources.
It's identical to the current arm32 sources, with the following exceptions:
- _C_LABEL is used on references to C labels from assembler.
- Function returns in assembler have APCS-26 versions in #ifdef __APCS_26__.
- It uses SoftFloat 2a rather than SoftFloat 1a.

The first two of these should be inconsequential. I believe that SoftFloat 2a
should work on arm32 and be backward-compatible with existing code, but this
is not obviously true. For now, arm32 remains using its own bits of libc.
 1.4.98.1 21-Apr-2020  martin Sync with HEAD

RSS XML Feed