root/usr/src/uts/common/sys/elf_386.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 *      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
 *        All Rights Reserved
 *
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_ELF_386_H
#define _SYS_ELF_386_H

#ifdef  __cplusplus
extern "C" {
#endif

#define R_386_NONE              0       /* relocation type */
#define R_386_32                1
#define R_386_PC32              2
#define R_386_GOT32             3
#define R_386_PLT32             4
#define R_386_COPY              5
#define R_386_GLOB_DAT          6
#define R_386_JMP_SLOT          7
#define R_386_RELATIVE          8
#define R_386_GOTOFF            9
#define R_386_GOTPC             10
#define R_386_32PLT             11
#define R_386_TLS_GD_PLT        12
#define R_386_TLS_LDM_PLT       13
#define R_386_TLS_TPOFF         14
#define R_386_TLS_IE            15
#define R_386_TLS_GOTIE         16
#define R_386_TLS_LE            17
#define R_386_TLS_GD            18
#define R_386_TLS_LDM           19
#define R_386_16                20
#define R_386_PC16              21
#define R_386_8                 22
#define R_386_PC8               23
#define R_386_TLS_GD_32         24
#define R_386_TLS_GD_PUSH       25
#define R_386_TLS_GD_CALL       26
#define R_386_TLS_GD_POP        27
#define R_386_TLS_LDM_32        28
#define R_386_TLS_LDM_PUSH      29
#define R_386_TLS_LDM_CALL      30
#define R_386_TLS_LDM_POP       31
#define R_386_TLS_LDO_32        32
#define R_386_TLS_IE_32         33
#define R_386_TLS_LE_32         34
#define R_386_TLS_DTPMOD32      35
#define R_386_TLS_DTPOFF32      36
#define R_386_TLS_TPOFF32       37
#define R_386_SIZE32            38
#define R_386_TLS_GOTDESC       39
#define R_386_TLS_DESC_CALL     40
#define R_386_TLS_DESC          41
#define R_386_IRELATIVE         42
#define R_386_GOT32X            43
#define R_386_NUM               44

#define ELF_386_MAXPGSZ         0x10000 /* maximum page size */

#define SHF_ORDERED     0x40000000
#define SHF_EXCLUDE     0x80000000

#define SHN_BEFORE      0xff00
#define SHN_AFTER       0xff01

/*
 * There are consumers of this file that want to include elf defines for
 * all architectures.  This is a problem for the defines below, because
 * while they are architecture specific they have common names.  Hence to
 * prevent attempts to redefine these variables we'll check if any of
 * the other elf architecture header files have been included.  If
 * they have then we'll just stick with the existing definitions.
 */
#if !defined(_SYS_ELF_MACH_COMMON)
#define _SYS_ELF_MACH_COMMON
#define _SYS_ELF_MACH_386

/*
 * Plt and Got information; the first few .got and .plt entries are reserved
 *      PLT[0]  jump to dynamic linker
 *      GOT[0]  address of _DYNAMIC
 */
#define M_PLT_INSSIZE           6       /* single plt instruction size */
#define M_PLT_XNumber           1       /* PLT[0] reserved */
#define M_GOT_XDYNAMIC          0       /* got index for _DYNAMIC */
#define M_GOT_XLINKMAP          1       /* got index for link map */
#define M_GOT_XRTLD             2       /* got index for rtbinder */
#define M_GOT_XNumber           3       /* reserved no. of got entries */

#define M32_WORD_ALIGN          4
#define M32_PLT_ENTSIZE         16      /* plt entry size in bytes */
#define M32_PLT_ALIGN           M32_WORD_ALIGN  /* alignment of .plt section */
#define M32_GOT_ENTSIZE         4       /* got entry size in bytes */
#define M32_PLT_RESERVSZ        (M_PLT_XNumber * \
                                M32_PLT_ENTSIZE) /* first plt reserved */


/*
 * Make common alias for the 32/64 bit specific defines based on _ELF64
 */
#if !defined(_ELF64)
/* architecture common defines */
#define M_WORD_ALIGN            M32_WORD_ALIGN
#define M_PLT_ENTSIZE           M32_PLT_ENTSIZE
#define M_PLT_ALIGN             M32_PLT_ALIGN
#define M_PLT_RESERVSZ          M32_PLT_RESERVSZ
#define M_GOT_ENTSIZE           M32_GOT_ENTSIZE
#endif /* !_ELF64 */

#endif /* !_SYS_ELF_MACH_COMMON */

#ifdef  __cplusplus
}
#endif

#endif  /* _SYS_ELF_386_H */