Home | History | Annotate | Download | only in gen
History log of /src/lib/libc/arch/arm/gen/_setjmp.S
RevisionDateAuthorComments
 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

RSS XML Feed