History log of /seL4-test-master/projects/musllibc/src/setjmp/arm_sel4/longjmp.s
Revision Date Author Comments
# fbbeda17 17-Dec-2016 Rich Felker <dalias@aerifal.cx>

make arm setjmp/longjmp asm thumb2-compatible

sp cannot be used in the ldm/stm register set in thumb mode.


# 4e73d121 09-Nov-2015 Rich Felker <dalias@aerifal.cx>

explicitly assemble all arm asm sources as UAL

these files are all accepted as legacy arm syntax when producing arm
code, but legacy syntax cannot be used for producing thumb2 with
access to the full ISA. even after switching to UAL, some asm source
files contain instructions which are not valid in thumb mode, so these
will need to be addressed separately.


# 9f290a49 09-Nov-2015 Rich Felker <dalias@aerifal.cx>

remove non-working pre-armv4t support from arm asm

the idea of the three-instruction sequence being removed was to be
able to return to thumb code when used on armv4t+ from a thumb caller,
but also to be able to run on armv4 without the bx instruction
available (in which case the low bit of lr would always be 0).
however, without compiler support for generating such a sequence from
C code, which does not exist and which there is unlikely to be
interest in implementing, there is little point in having it in the
asm, and it would likely be easier to add pre-armv4t support via
enhanced linker handling of R_ARM_V4BX than at the compiler level.

removing this code simplifies adding support for building libc in
thumb2-only form (for cortex-m).


# cf40375e 09-Nov-2015 Rich Felker <dalias@aerifal.cx>

use vfp mnemonics rather than hard-coded opcodes in arm setjmp/longjmp

the code to save/restore vfp registers needs to build even when the
configured target does not have fpu; this is because code using vfp
fpu (but with the standard soft-float EABI) may call a libc built for
a soft-float only, and the EABI considers these registers call-saved
when they exist. thus, extra directives are used to force the
assembler to allow vfp instructions and to avoid marking the resulting
object files as requiring vfp.

moving away from using hard-coded opcode words is necessary in order
to eventually support producing thumb2-only output for cortex-m.

conditional execution of these instructions based on hwcap flags was
already implemented. when building for arm (non-thumb) output, the
only currently-supported configuration, this commit does not change
the code emitted.


# 921c26e0 23-Nov-2014 Rich Felker <dalias@aerifal.cx>

fix build regression in arm asm for setjmp/longjmp with old assemblers


# 27828f7e 06-Nov-2014 Joakim Sindholt <opensource@zhasha.com>

arm assembly changes for clang compatibility


# 4b43f05f 05-Dec-2012 Rich Felker <dalias@aerifal.cx>

remove fenv saving/loading code from setjmp/longjmp on arm

the issue is identical to the recent commit fixing the mips versions:
despite other implementations doing this, it conflicts with the
requirements of ISO C and it's a waste of time and code size.


# 5a3a3786 05-Aug-2012 Rich Felker <dalias@aerifal.cx>

floating point support for arm setjmp/longjmp

not heavily tested, but at least they don't seem to break anything on
soft float targets with or without coprocessors. they check the auxv
AT_HWCAP flags to determine which coprocessor, if any, is available.


# 5aac5e21 26-Jul-2012 Rich Felker <dalias@aerifal.cx>

optimize arm setjmp/longjmp register saving/loading

the original code was wrongly based on how it would be done in thumb
mode, but that's not needed because musl's asm only targets arm.


# d960d4f2 18-Sep-2011 Rich Felker <dalias@aerifal.cx>

initial commit of the arm port

this port assumes eabi calling conventions, eabi linux syscall
convention, and presence of the kernel helpers at 0xffff0f?0 needed
for threads support. otherwise it makes very few assumptions, and the
code should work even on armv4 without thumb support, as well as on
systems with thumb interworking. the bits headers declare this a
little endian system, but as far as i can tell the code should work
equally well on big endian.

some small details are probably broken; so far, testing has been
limited to qemu/aboriginal linux.