1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 2001 David E. O'Brien 5a9643ea8Slogwang * Copyright (c) 1996-1997 John D. Polstra. 6a9643ea8Slogwang * All rights reserved. 7a9643ea8Slogwang * 8a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 9a9643ea8Slogwang * modification, are permitted provided that the following conditions 10a9643ea8Slogwang * are met: 11a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 12a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 13a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 14a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 15a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 16a9643ea8Slogwang * 17a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19a9643ea8Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20a9643ea8Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21a9643ea8Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22a9643ea8Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23a9643ea8Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24a9643ea8Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25a9643ea8Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26a9643ea8Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27a9643ea8Slogwang * SUCH DAMAGE. 28a9643ea8Slogwang * 29a9643ea8Slogwang * $FreeBSD$ 30a9643ea8Slogwang */ 31a9643ea8Slogwang 32a9643ea8Slogwang #ifndef _MACHINE_ELF_H_ 33a9643ea8Slogwang #define _MACHINE_ELF_H_ 1 34a9643ea8Slogwang 35a9643ea8Slogwang /* 36a9643ea8Slogwang * EABI ELF definitions for the StrongARM architecture. 37a9643ea8Slogwang * See "ARM ELF", document no. `SWS ESPC 0003 A-08' for details. 38a9643ea8Slogwang */ 39a9643ea8Slogwang 40a9643ea8Slogwang #include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */ 41a9643ea8Slogwang 42a9643ea8Slogwang #define __ELF_WORD_SIZE 32 /* Used by <sys/elf_generic.h> */ 43a9643ea8Slogwang #include <sys/elf_generic.h> 44a9643ea8Slogwang 45a9643ea8Slogwang typedef struct { /* Auxiliary vector entry on initial stack */ 46a9643ea8Slogwang int a_type; /* Entry type. */ 47a9643ea8Slogwang union { 48a9643ea8Slogwang long a_val; /* Integer value. */ 49a9643ea8Slogwang void *a_ptr; /* Address. */ 50a9643ea8Slogwang void (*a_fcn)(void); /* Function pointer (not used). */ 51a9643ea8Slogwang } a_un; 52a9643ea8Slogwang } Elf32_Auxinfo; 53a9643ea8Slogwang 54a9643ea8Slogwang __ElfType(Auxinfo); 55a9643ea8Slogwang 56a9643ea8Slogwang #define ELF_ARCH EM_ARM 57a9643ea8Slogwang 58a9643ea8Slogwang #define ELF_MACHINE_OK(x) ((x) == EM_ARM) 59a9643ea8Slogwang 60a9643ea8Slogwang /* 61a9643ea8Slogwang * Relocation types. 62a9643ea8Slogwang */ 63a9643ea8Slogwang 64a9643ea8Slogwang #define R_ARM_COUNT 33 /* Count of defined relocation types. */ 65a9643ea8Slogwang 66a9643ea8Slogwang /* Define "machine" characteristics */ 67a9643ea8Slogwang #define ELF_TARG_CLASS ELFCLASS32 68a9643ea8Slogwang #ifdef __ARMEB__ 69a9643ea8Slogwang #define ELF_TARG_DATA ELFDATA2MSB 70a9643ea8Slogwang #else 71a9643ea8Slogwang #define ELF_TARG_DATA ELFDATA2LSB 72a9643ea8Slogwang #endif 73a9643ea8Slogwang #define ELF_TARG_MACH EM_ARM 74a9643ea8Slogwang #define ELF_TARG_VER 1 75a9643ea8Slogwang 76a9643ea8Slogwang /* Defines specific for arm headers */ 77a9643ea8Slogwang #define EF_ARM_EABI_VERSION(x) (((x) & EF_ARM_EABIMASK) >> 24) 78a9643ea8Slogwang #define EF_ARM_EABI_VERSION_UNKNOWN 0 79a9643ea8Slogwang #define EF_ARM_EABI_FREEBSD_MIN 4 80a9643ea8Slogwang 81*22ce4affSfengbojiang #define ET_DYN_LOAD_ADDR 0x500000 82a9643ea8Slogwang 83*22ce4affSfengbojiang /* Flags passed in AT_HWCAP. */ 84*22ce4affSfengbojiang #define HWCAP_SWP 0x00000001 /* Unsupported, never set. */ 85*22ce4affSfengbojiang #define HWCAP_HALF 0x00000002 /* Always set. */ 86*22ce4affSfengbojiang #define HWCAP_THUMB 0x00000004 87*22ce4affSfengbojiang #define HWCAP_26BIT 0x00000008 /* Unsupported, never set. */ 88*22ce4affSfengbojiang #define HWCAP_FAST_MULT 0x00000010 /* Always set. */ 89*22ce4affSfengbojiang #define HWCAP_FPA 0x00000020 /* Unsupported, never set. */ 90*22ce4affSfengbojiang #define HWCAP_VFP 0x00000040 91*22ce4affSfengbojiang #define HWCAP_EDSP 0x00000080 /* Always set for ARMv6+. */ 92*22ce4affSfengbojiang #define HWCAP_JAVA 0x00000100 /* Unsupported, never set. */ 93*22ce4affSfengbojiang #define HWCAP_IWMMXT 0x00000200 /* Unsupported, never set. */ 94*22ce4affSfengbojiang #define HWCAP_CRUNCH 0x00000400 /* Unsupported, never set. */ 95*22ce4affSfengbojiang #define HWCAP_THUMBEE 0x00000800 96*22ce4affSfengbojiang #define HWCAP_NEON 0x00001000 97*22ce4affSfengbojiang #define HWCAP_VFPv3 0x00002000 98*22ce4affSfengbojiang #define HWCAP_VFPv3D16 0x00004000 99*22ce4affSfengbojiang #define HWCAP_TLS 0x00008000 /* Always set for ARMv6+. */ 100*22ce4affSfengbojiang #define HWCAP_VFPv4 0x00010000 101*22ce4affSfengbojiang #define HWCAP_IDIVA 0x00020000 102*22ce4affSfengbojiang #define HWCAP_IDIVT 0x00040000 103*22ce4affSfengbojiang #define HWCAP_VFPD32 0x00080000 104*22ce4affSfengbojiang #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT) 105*22ce4affSfengbojiang #define HWCAP_LPAE 0x00100000 106*22ce4affSfengbojiang #define HWCAP_EVTSTRM 0x00200000 /* Not implemented yet. */ 107*22ce4affSfengbojiang 108*22ce4affSfengbojiang /* Flags passed in AT_HWCAP2. */ 109*22ce4affSfengbojiang #define HWCAP2_AES 0x00000001 110*22ce4affSfengbojiang #define HWCAP2_PMULL 0x00000002 111*22ce4affSfengbojiang #define HWCAP2_SHA1 0x00000004 112*22ce4affSfengbojiang #define HWCAP2_SHA2 0x00000008 113*22ce4affSfengbojiang #define HWCAP2_CRC32 0x00000010 114a9643ea8Slogwang 115a9643ea8Slogwang #endif /* !_MACHINE_ELF_H_ */ 116