1f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#ifndef __ASM_SPARC64_ELF_H 2f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define __ASM_SPARC64_ELF_H 3f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 4f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* 5f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * ELF register definitions.. 6f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 7f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 8f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#include <asm/ptrace.h> 9f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#include <asm/processor.h> 10f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#include <asm/uaccess.h> 11f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#include <asm/spitfire.h> 12f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 13f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* 14f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * Sparc section types 15f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 16f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define STT_REGISTER 13 17f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 18f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* 19f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * Sparc ELF relocation types 20f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 21f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_NONE 0 22f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_8 1 23f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_16 2 24f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_32 3 25f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_DISP8 4 26f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_DISP16 5 27f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_DISP32 6 28f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_WDISP30 7 29f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_WDISP22 8 30f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_HI22 9 31f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_22 10 32f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_13 11 33f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_LO10 12 34f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_GOT10 13 35f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_GOT13 14 36f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_GOT22 15 37f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_PC10 16 38f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_PC22 17 39f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_WPLT30 18 40f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_COPY 19 41f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_GLOB_DAT 20 42f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_JMP_SLOT 21 43f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_RELATIVE 22 44f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_UA32 23 45f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_PLT32 24 46f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_HIPLT22 25 47f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_LOPLT10 26 48f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_PCPLT32 27 49f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_PCPLT22 28 50f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_PCPLT10 29 51f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_10 30 52f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_11 31 53f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_64 32 54f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_OLO10 33 55f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_WDISP16 40 56f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_WDISP19 41 57f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_7 43 58f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_5 44 59f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define R_SPARC_6 45 60f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 61f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* Bits present in AT_HWCAP, primarily for Sparc32. */ 62ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_FLUSH 0x00000001 63ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_STBAR 0x00000002 64ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_SWAP 0x00000004 65ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_MULDIV 0x00000008 66ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_V9 0x00000010 67ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_ULTRA3 0x00000020 68ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_BLKINIT 0x00000040 69ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define HWCAP_SPARC_N2 0x00000080 70ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller 71ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller/* Solaris compatible AT_HWCAP bits. */ 72ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_MUL32 0x00000100 /* 32x32 multiply is efficient */ 73ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_DIV32 0x00000200 /* 32x32 divide is efficient */ 74ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_FSMULD 0x00000400 /* 'fsmuld' is efficient */ 75ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_V8PLUS 0x00000800 /* v9 insn available to 32bit */ 76ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_POPC 0x00001000 /* 'popc' is efficient */ 77ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_VIS 0x00002000 /* VIS insns available */ 78ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_VIS2 0x00004000 /* VIS2 insns available */ 79ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_ASI_BLK_INIT 0x00008000 /* block init ASIs available */ 80ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_FMAF 0x00010000 /* fused multiply-add */ 81ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_VIS3 0x00020000 /* VIS3 insns available */ 82ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_HPC 0x00040000 /* HPC insns available */ 83ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_RANDOM 0x00080000 /* 'random' insn available */ 84ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_TRANS 0x00100000 /* transaction insns available */ 85ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_FJFMAU 0x00200000 /* unfused multiply-add */ 86ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_IMA 0x00400000 /* integer multiply-add */ 87ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define AV_SPARC_ASI_CACHE_SPARING \ 88ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller 0x00800000 /* cache sparing ASIs available */ 896f859c0e96f0737a543610a189d12420c569110fDavid S. Miller#define AV_SPARC_PAUSE 0x01000000 /* PAUSE available */ 906f859c0e96f0737a543610a189d12420c569110fDavid S. Miller#define AV_SPARC_CBCOND 0x02000000 /* CBCOND insns available */ 916f859c0e96f0737a543610a189d12420c569110fDavid S. Miller 926f859c0e96f0737a543610a189d12420c569110fDavid S. Miller/* Solaris decided to enumerate every single crypto instruction type 936f859c0e96f0737a543610a189d12420c569110fDavid S. Miller * in the AT_HWCAP bits. This is wasteful, since if crypto is present, 946f859c0e96f0737a543610a189d12420c569110fDavid S. Miller * you still need to look in the CFR register to see if the opcode is 956f859c0e96f0737a543610a189d12420c569110fDavid S. Miller * really available. So we simply advertise only "crypto" support. 966f859c0e96f0737a543610a189d12420c569110fDavid S. Miller */ 976f859c0e96f0737a543610a189d12420c569110fDavid S. Miller#define HWCAP_SPARC_CRYPTO 0x04000000 /* CRYPTO insns available */ 98f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 99f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define CORE_DUMP_USE_REGSET 100f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 101f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* 102f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * These are used to set parameters in the core dumps. 103f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 104f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_ARCH EM_SPARCV9 105f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_CLASS ELFCLASS64 106f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_DATA ELFDATA2MSB 107f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 108f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* Format of 64-bit elf_gregset_t is: 109f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * G0 --> G7 110f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * O0 --> O7 111f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * L0 --> L7 112f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * I0 --> I7 113f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * TSTATE 114f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * TPC 115f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * TNPC 116f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * Y 117f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 118f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef unsigned long elf_greg_t; 119f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_NGREG 36 120f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef elf_greg_t elf_gregset_t[ELF_NGREG]; 121f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 122f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef struct { 123f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_regs[32]; 124f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_fsr; 125f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_gsr; 126f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_fprs; 127f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg} elf_fpregset_t; 128f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 129f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* Format of 32-bit elf_gregset_t is: 130f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * G0 --> G7 131f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * O0 --> O7 132f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * L0 --> L7 133f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * I0 --> I7 134f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * PSR, PC, nPC, Y, WIM, TBR 135f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 136f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef unsigned int compat_elf_greg_t; 137f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define COMPAT_ELF_NGREG 38 138f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; 139f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 140f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef struct { 141f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg union { 142f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_regs[32]; 143f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_dregs[16]; 144f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg } pr_fr; 145f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int __unused; 146f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_fsr; 147f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned char pr_qcnt; 148f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned char pr_q_entrysize; 149f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned char pr_en; 150f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_q[64]; 151f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg} compat_elf_fpregset_t; 152f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 153f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* UltraSparc extensions. Still unused, but will be eventually. */ 154f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborgtypedef struct { 155f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_type; 156f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_align; 157f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg union { 158f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg struct { 159f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg union { 160f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_regs[32]; 161f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_dregs[16]; 162f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg long double pr_qregs[8]; 163f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg } pr_xfr; 164f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg } pr_v8p; 165f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_xfsr; 166f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_fprs; 167f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_xg[8]; 168f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_xo[8]; 169f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned long pr_tstate; 170f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg unsigned int pr_filler[8]; 171f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg } pr_un; 172f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg} elf_xregset_t; 173f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 174f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* 175f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg * This is used to ensure we don't load something for the wrong architecture. 176f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg */ 177f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define elf_check_arch(x) ((x)->e_machine == ELF_ARCH) 178f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define compat_elf_check_arch(x) ((x)->e_machine == EM_SPARC || \ 179f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg (x)->e_machine == EM_SPARC32PLUS) 180f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define compat_start_thread start_thread32 181f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 182f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_EXEC_PAGESIZE PAGE_SIZE 183f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 184f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* This is the location that an ET_DYN program is loaded if exec'ed. Typical 185f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg use of this is to invoke "./ld.so someprog" to test out a new version of 186f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg the loader. We need to make sure that it is out of the way of the program 187f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg that it will "exec", and that there is sufficient room for the brk. */ 188f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 189f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_ET_DYN_BASE 0x0000010000000000UL 190f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define COMPAT_ELF_ET_DYN_BASE 0x0000000070000000UL 191f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 192ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Millerextern unsigned long sparc64_elf_hwcap; 193ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#define ELF_HWCAP sparc64_elf_hwcap 194f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 195f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg/* This yields a string that ld.so will use to load implementation 196f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg specific libraries for optimization. This is more specific in 197f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg intent than poking at uname or /proc/cpuinfo. */ 198f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 199f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#define ELF_PLATFORM (NULL) 200f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 2010b59268285ca6cdc46191f2995bf632088e3e277Martin Schwidefsky#define SET_PERSONALITY(ex) \ 20294673e968cbcce07fa78dac4b0ae05d24b5816e1David Millerdo { if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ 20394673e968cbcce07fa78dac4b0ae05d24b5816e1David Miller set_thread_flag(TIF_32BIT); \ 204f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg else \ 20594673e968cbcce07fa78dac4b0ae05d24b5816e1David Miller clear_thread_flag(TIF_32BIT); \ 206f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg /* flush_thread will update pgd cache */ \ 207d3584183d2f40f40371e288ceef187d04da213b5David S. Miller if (personality(current->personality) != PER_LINUX32) \ 208d3584183d2f40f40371e288ceef187d04da213b5David S. Miller set_personality(PER_LINUX | \ 209d3584183d2f40f40371e288ceef187d04da213b5David S. Miller (current->personality & (~PER_MASK))); \ 210f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg} while (0) 211f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg 212f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#endif /* !(__ASM_SPARC64_ELF_H) */ 213