1d422e6f9SAndrew Turner/*- 2d422e6f9SAndrew Turner * Copyright (c) 2014 The FreeBSD Foundation 3d422e6f9SAndrew Turner * 4d422e6f9SAndrew Turner * This software was developed by Andrew Turner under 5d422e6f9SAndrew Turner * sponsorship from the FreeBSD Foundation. 6d422e6f9SAndrew Turner * 7d422e6f9SAndrew Turner * Redistribution and use in source and binary forms, with or without 8d422e6f9SAndrew Turner * modification, are permitted provided that the following conditions 9d422e6f9SAndrew Turner * are met: 10d422e6f9SAndrew Turner * 1. Redistributions of source code must retain the above copyright 11d422e6f9SAndrew Turner * notice, this list of conditions and the following disclaimer. 12d422e6f9SAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 13d422e6f9SAndrew Turner * notice, this list of conditions and the following disclaimer in the 14d422e6f9SAndrew Turner * documentation and/or other materials provided with the distribution. 15d422e6f9SAndrew Turner * 16d422e6f9SAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17d422e6f9SAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18d422e6f9SAndrew Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19d422e6f9SAndrew Turner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20d422e6f9SAndrew Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21d422e6f9SAndrew Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22d422e6f9SAndrew Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23d422e6f9SAndrew Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24d422e6f9SAndrew Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25d422e6f9SAndrew Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26d422e6f9SAndrew Turner * SUCH DAMAGE. 27d422e6f9SAndrew Turner */ 28d422e6f9SAndrew Turner 29d422e6f9SAndrew Turner#include <machine/asm.h> 30d422e6f9SAndrew Turner#include <machine/setjmp.h> 31*fd5aaf2eSAndrew Turner#include <sys/elf_common.h> 32d422e6f9SAndrew Turner 33d422e6f9SAndrew TurnerENTRY(sigsetjmp) 34d422e6f9SAndrew Turner cmp x1, #0 35e46bcb7dSJason Evans b.eq 1f 36d422e6f9SAndrew Turner b _C_LABEL(setjmp) 37e46bcb7dSJason Evans1: 38e46bcb7dSJason Evans b _C_LABEL(_setjmp) 39d422e6f9SAndrew TurnerEND(sigsetjmp) 40d422e6f9SAndrew Turner 41d422e6f9SAndrew TurnerENTRY(siglongjmp) 42d422e6f9SAndrew Turner /* Load the _setjmp magic */ 43d422e6f9SAndrew Turner ldr x2, .Lmagic 44d422e6f9SAndrew Turner ldr x3, [x0] 45d422e6f9SAndrew Turner 46d422e6f9SAndrew Turner /* Check the magic */ 47d422e6f9SAndrew Turner cmp x2, x3 48e46bcb7dSJason Evans b.eq 1f 49d422e6f9SAndrew Turner b _C_LABEL(longjmp) 50e46bcb7dSJason Evans1: 51e46bcb7dSJason Evans b _C_LABEL(_longjmp) 52d422e6f9SAndrew Turner .align 3 53a998adbbSAndrew Turner.Lmagic: 54d422e6f9SAndrew Turner .quad _JB_MAGIC__SETJMP 55d422e6f9SAndrew TurnerEND(siglongjmp) 56*fd5aaf2eSAndrew Turner 57*fd5aaf2eSAndrew TurnerGNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) 58