doreloc.c revision 051d39bbeea3e1b0fd8395dc97be34acb3241891
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * CDDL HEADER START
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * The contents of this file are subject to the terms of the
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * Common Development and Distribution License (the "License").
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * You may not use this file except in compliance with the License.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * or http://www.opensolaris.org/os/licensing.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * See the License for the specific language governing permissions
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * and limitations under the License.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * When distributing Covered Code, include this CDDL HEADER in each
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * If applicable, add the following below this CDDL HEADER, with the
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * fields enclosed by brackets "[]" replaced with your own identifying
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * information: Portions Copyright [yyyy] [name of copyright owner]
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * CDDL HEADER END
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
8fd04b8338ed5093ec2d1e668fa620b7de44c177Roger A. Faulkner
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/*
406fc5100dac8d225a315a6def6be8d628f34e24Toomas Soome * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
b49b27dcb66b2c7f4a23f7bc158e2dde5cd79030Theo Schlossnagle * Use is subject to license terms.
80e2ca8596e3435bc3b76f3c597833ea0a87f85e */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#pragma ident "%Z%%M% %I% %E% SMI"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#if defined(_KERNEL)
8b4cf83723ce3e17ebe029b21f549390e849b03fjv#include <sys/types.h>
8b4cf83723ce3e17ebe029b21f549390e849b03fjv#include "reloc.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#else
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include <stdio.h>
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include "sgs.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include "machdep.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include "libld.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include "reloc.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include "conv.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#include "msg.h"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#endif
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * This table represents the current relocations that do_reloc() is able to
bdf0047c9427cca40961a023475891c898579c37Roger A. Faulkner * process. The relocations below that are marked SPECIAL are relocations that
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * take special processing and shouldn't actually ever be passed to do_reloc().
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekconst Rel_entry reloc_table[R_SPARC_NUM] = {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_NONE */ {0x0, FLG_RE_NOTREL, 0, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_8 */ {0x0, FLG_RE_VERIFY, 1, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_16 */ {0x0, FLG_RE_VERIFY, 2, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_32 */ {0x0, FLG_RE_VERIFY, 4, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_DISP8 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 1, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_DISP16 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 2, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_DISP32 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 4, 0, 0},
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris/* R_SPARC_WDISP30 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris 4, 2, 30},
8b4cf83723ce3e17ebe029b21f549390e849b03fjv/* R_SPARC_WDISP22 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon 4, 2, 22},
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris#if defined(_ELF64)
f3f1e74c80144abbd168779e485ea0cb810b8256/* R_SPARC_HI22 */ {0x0, FLG_RE_VERIFY, 4, 10, 22},
b49b27dcb66b2c7f4a23f7bc158e2dde5cd79030Theo Schlossnagle#else
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_HI22 */ {0x0, FLG_RE_NOTREL, 4, 10, 22},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#endif
80e2ca8596e3435bc3b76f3c597833ea0a87f85e/* R_SPARC_22 */ {0x0, FLG_RE_VERIFY, 4, 0, 22},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_13 */ {0x0, FLG_RE_VERIFY | FLG_RE_SIGN, 4, 0, 13},
bdf0047c9427cca40961a023475891c898579c37Roger A. Faulkner/* R_SPARC_LO10 */ {0x3ff, FLG_RE_SIGN, 4, 0, 13},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOT10 */ {0x3ff, FLG_RE_GOTADD | FLG_RE_SIGN, 4, 0, 13},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOT13 */ {0x0, FLG_RE_GOTADD | FLG_RE_VERIFY | FLG_RE_SIGN,
80e2ca8596e3435bc3b76f3c597833ea0a87f85e 4, 0, 13},
80e2ca8596e3435bc3b76f3c597833ea0a87f85e/* R_SPARC_GOT22 */ {0x0, FLG_RE_GOTADD, 4, 10, 22},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_PC10 */ {0x3ff, FLG_RE_PCREL | FLG_RE_SIGN | FLG_RE_LOCLBND,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 4, 0, 13},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_PC22 */ {0x0, FLG_RE_PCREL | FLG_RE_SIGN | FLG_RE_VERIFY |
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek FLG_RE_LOCLBND, 4, 10, 22},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_WPLT30 */ {0x0, FLG_RE_PCREL | FLG_RE_PLTREL |
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek FLG_RE_VERIFY | FLG_RE_SIGN,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 4, 2, 30},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_COPY */ {0x0, 0, 0, 0, 0}, /* SPECIAL */
ad601a0502a167436cd68b185fff0eb78c34777bjv#if defined(_ELF64)
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_GLOB_DAT */ {0x0, FLG_RE_NOTREL, 8, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv#else
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_GLOB_DAT */ {0x0, FLG_RE_NOTREL, 4, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv#endif
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_JMP_SLOT */ {0x0, 0, 0, 0, 0}, /* SPECIAL */
ad601a0502a167436cd68b185fff0eb78c34777bjv#if defined(_ELF64)
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_RELATIVE */ {0x0, FLG_RE_NOTREL, 8, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv#else
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_RELATIVE */ {0x0, FLG_RE_NOTREL, 4, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv#endif
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_UA32 */ {0x0, FLG_RE_UNALIGN, 4, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PLT32 */ {0x0, FLG_RE_PLTREL | FLG_RE_VERIFY |
ad601a0502a167436cd68b185fff0eb78c34777bjv FLG_RE_ADDRELATIVE, 4, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_HIPLT22 */ {0x0, FLG_RE_PLTREL, 4, 10, 22},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_LOPLT10 */ {0x3ff, FLG_RE_PLTREL, 4, 0, 13},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PCPLT32 */ {0x0, FLG_RE_PLTREL | FLG_RE_PCREL | FLG_RE_VERIFY,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 0, 0},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PCPLT22 */ {0x0, FLG_RE_PLTREL | FLG_RE_PCREL | FLG_RE_VERIFY,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 10, 22},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PCPLT10 */ {0x3ff, FLG_RE_PLTREL | FLG_RE_PCREL | FLG_RE_VERIFY,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 0, 13},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_10 */ {0x0, FLG_RE_VERIFY | FLG_RE_SIGN, 4, 0, 10},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_11 */ {0x0, FLG_RE_VERIFY | FLG_RE_SIGN, 4, 0, 11},
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_64 */ {0x0, FLG_RE_VERIFY, 8, 0, 0}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_OLO10 */ {0x3ff, FLG_RE_EXTOFFSET | FLG_RE_SIGN,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 0, 13}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_HH22 */ {0x0, FLG_RE_VERIFY, 4, 42, 22}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_HM10 */ {0x3ff, FLG_RE_SIGN, 4, 32, 13}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_LM22 */ {0x0, FLG_RE_NOTREL, 4, 10, 22}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PC_HH22 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 42, 22}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PC_HM10 */ {0x3ff, FLG_RE_PCREL | FLG_RE_SIGN,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 32, 13}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_PC_LM22 */ {0x0, FLG_RE_PCREL,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 10, 22}, /* V9 */
ad601a0502a167436cd68b185fff0eb78c34777bjv/* R_SPARC_WDISP16 */ {0x0, FLG_RE_PCREL | FLG_RE_WDISP16 |
ad601a0502a167436cd68b185fff0eb78c34777bjv FLG_RE_VERIFY | FLG_RE_SIGN,
ad601a0502a167436cd68b185fff0eb78c34777bjv 4, 2, 16},
80e2ca8596e3435bc3b76f3c597833ea0a87f85e/* R_SPARC_WDISP19 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 4, 2, 19},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GLOB_JMP */ {0x0, 0, 0, 0, 0}, /* V9 - not implemented */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* removed from v9 ABI */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_7 */ {0x0, FLG_RE_NOTREL, 4, 0, 7},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_5 */ {0x0, FLG_RE_NOTREL, 4, 0, 5},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_6 */ {0x0, FLG_RE_NOTREL, 4, 0, 6},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_DISP64 */ {0x0, FLG_RE_PCREL | FLG_RE_VERIFY | FLG_RE_SIGN,
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon 8, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_PLT64 */ {0x0, FLG_RE_PLTREL | FLG_RE_VERIFY |
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon FLG_RE_ADDRELATIVE, 8, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_HIX22 */ {(Xword)(-1LL), FLG_RE_VERIFY,
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon 4, 10, 22}, /* V9 - HaL */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_LOX10 */ {0x3ff, FLG_RE_SIGN, 4, 0, 13}, /* V9 - HaL */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_H44 */ {0x0, FLG_RE_VERIFY, 4, 22, 22}, /* V9 */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_M44 */ {0x3ff, FLG_RE_NOTREL, 4, 12, 10}, /* V9 */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_L44 */ {0xfff, FLG_RE_NOTREL, 4, 0, 13}, /* V9 */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_REGISTER */ {0x0, FLG_RE_REGISTER, 0, 0, 0}, /* SPECIAL */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_UA64 */ {0x0, FLG_RE_VERIFY | FLG_RE_UNALIGN,
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon 8, 0, 0}, /* V9 */
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_UA16 */ {0x0, FLG_RE_VERIFY | FLG_RE_UNALIGN,
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon 2, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_GD_HI22 */ {0x0, FLG_RE_GOTADD | FLG_RE_TLSGD, 4, 10, 22},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_GD_LO10 */ {0x3ff, FLG_RE_GOTADD | FLG_RE_TLSGD |
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon FLG_RE_SIGN, 4, 0, 13},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_GD_ADD */ {0x0, FLG_RE_TLSGD, 0, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_GD_CALL */ {0x0, FLG_RE_TLSGD, 0, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDM_HI22 */ {0x0, FLG_RE_GOTADD | FLG_RE_TLSLD, 4, 10, 22},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDM_LO10 */ {0x3ff, FLG_RE_GOTADD | FLG_RE_TLSLD |
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon FLG_RE_SIGN, 4, 0, 13},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDM_ADD */ {0x0, FLG_RE_TLSLD, 0, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDM_CALL */ {0x0, FLG_RE_TLSLD, 0, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDO_HIX22 */ {0x0, FLG_RE_VERIFY | FLG_RE_TLSLD, 4, 10, 22},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDO_LOX10 */ {0x3ff, FLG_RE_SIGN | FLG_RE_TLSLD, 4, 0, 13},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_LDO_ADD */ {0x0, FLG_RE_TLSLD, 0, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_IE_HI22 */ {0x0, FLG_RE_GOTADD | FLG_RE_TLSIE, 4, 10, 22},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_IE_LO10 */ {0x3ff, FLG_RE_GOTADD | FLG_RE_TLSIE |
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon FLG_RE_SIGN, 4, 0, 13},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_IE_LD */ {0x0, FLG_RE_TLSIE, 0, 0, 0},
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon/* R_SPARC_TLS_IE_LDX */ {0x0, FLG_RE_TLSIE, 0, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_IE_ADD */ {0x0, FLG_RE_TLSIE, 0, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_LE_HIX22 */ {(Xword)(-1LL),
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek FLG_RE_VERIFY | FLG_RE_TLSLE, 4, 10, 22},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_LE_LOX10 */ {0x3ff, FLG_RE_SIGN | FLG_RE_TLSLE, 4, 0, 13},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_DTPMOD32 */ {0x0, FLG_RE_NOTREL, 4, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_DTPMOD64 */ {0x0, FLG_RE_NOTREL, 8, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_DTPOFF32 */ {0x0, FLG_RE_NOTREL, 4, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_DTPOFF64 */ {0x0, FLG_RE_NOTREL, 8, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_TPOFF32 */ {0x0, FLG_RE_NOTREL, 4, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_TLS_TPOFF64 */ {0x0, FLG_RE_NOTREL, 8, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOTDATA_HIX22 */ {0, FLG_RE_SIGN | FLG_RE_GOTREL |
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek FLG_RE_VERIFY, 4, 10, 22},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOTDATA_LOX10 */ { 0x3ff, FLG_RE_GOTREL | FLG_RE_SIGN, 4, 0, 13},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOTDATA_OP_HIX22 */ { 0x0, FLG_RE_GOTOPINS | FLG_RE_GOTADD,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek 4, 10, 22},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOTDATA_OP_LOX10 */ { 0x3ff, FLG_RE_SIGN | FLG_RE_GOTOPINS |
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek FLG_RE_GOTADD, 4, 0, 13},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_GOTDATA_OP */ { 0x0, FLG_RE_GOTOPINS, 0, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_H34 */ {0x0, FLG_RE_VERIFY, 4, 12, 22}, /* V9 */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_SIZE32 */ {0x0, FLG_RE_SIZE | FLG_RE_VERIFY, 4, 0, 0},
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/* R_SPARC_SIZE64 */ {0x0, FLG_RE_SIZE | FLG_RE_VERIFY, 8, 0, 0},
80e2ca8596e3435bc3b76f3c597833ea0a87f85e};
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * Write a single relocated value to its reference location.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * We assume we wish to add the relocation amount, value, to the
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * value of the address already present in the instruction.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * NAME VALUE FIELD CALCULATION
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * R_SPARC_NONE 0 none none
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * R_SPARC_8 1 V-byte8 S + A
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * R_SPARC_16 2 V-half16 S + A
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * R_SPARC_32 3 V-word32 S + A
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * R_SPARC_DISP8 4 V-byte8 S + A - P
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * R_SPARC_DISP16 5 V-half16 S + A - P
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_DISP32 6 V-word32 S + A - P
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_WDISP30 7 V-disp30 (S + A - P) >> 2
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_WDISP22 8 V-disp22 (S + A - P) >> 2
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_HI22 9 T-imm22 (S + A) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_22 10 V-imm22 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_13 11 V-simm13 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_LO10 12 T-simm13 (S + A) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOT10 13 T-simm13 G & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOT13 14 V-simm13 G
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOT22 15 T-imm22 G >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PC10 16 T-simm13 (S + A - P) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PC22 17 V-disp22 (S + A - P) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_WPLT30 18 V-disp30 (L + A - P) >> 2
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_COPY 19 none none
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GLOB_DAT 20 V-word32 S + A
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * R_SPARC_JMP_SLOT 21 V-plt22 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_RELATIVE 22 V-word32 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_UA32 23 V-word32 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PLT32 24 V-word32 L + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_HIPLT22 25 T-imm22 (L + A) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_LOPLT10 26 T-simm13 (L + A) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PCPLT32 27 V-word32 L + A - P
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PCPLT22 28 V-disp22 (L + A - P) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PCPLT10 29 V-simm13 (L + A - P) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_10 30 V-simm10 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_11 31 V-simm11 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_64 32 V-xword64 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_OLO10 33 V-simm13 ((S + A) & 0x3ff) + O
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_HH22 34 V-imm22 (S + A) >> 42
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_HM10 35 T-simm13 ((S + A) >> 32) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_LM22 36 T-imm22 (S + A) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PC_HH22 37 V-imm22 (S + A - P) >> 42
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PC_HM10 38 T-simm13 ((S + A - P) >> 32) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PC_LM22 39 T-imm22 (S + A - P) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_WDISP16 40 V-d2/disp14 (S + A - P) >> 2
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_WDISP19 41 V-disp19 (S + A - P) >> 2
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GLOB_JMP 42 V-xword64 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_7 43 V-imm7 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_5 44 V-imm5 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_6 45 V-imm6 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_DISP64 46 V-xword64 S + A - P
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_PLT64 47 V-xword64 L + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_HIX22 48 V-imm22 ((S + A) ^
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * 0xffffffffffffffff) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_LOX10 49 T-simm13 ((S + A) & 0x3ff) | 0x1c00
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_H44 50 V-imm22 (S + A) >> 22
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_M44 51 T-imm10 ((S + A) >> 12) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_L44 52 T-imm13 (S + A) & 0xfff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_REGISTER 53 V-xword64 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_UA64 54 V-xword64 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_UA16 55 V-half16 S + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_GD_HI22 56 T-simm22 @dtlndx(S + A) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_GD_LO10 57 T-simm13 @dtlndx(S + A) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_GD_ADD 58 none SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_GD_CALL 59 V-disp30 SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDM_HI22 60 T-simm22 @tmndx(S + A) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDM_LO10 61 T-simm13 @tmndx(S + A) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDM_ADD 62 none SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDM_CALL 63 V-disp30 SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDO_HIX22 64 V-simm22 @dtpoff(S + A) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDO_LOX10 65 T-simm13 @dtpoff(S + A) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LDO_ADD 66 none SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_IE_HI22 67 T-simm22 @got(@tpoff(S + A)) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_IE_LO10 68 T-simm13 @got(@tpoff(S + A)) & 0x3ff
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_IE_LD 69 none SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_IE_LDX 70 none SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_IE_ADD 71 none SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LE_HIX22 72 V-simm22 (@tpoff(S + A) ^
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * 0xffffffff) >> 10
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_LE_LOX10 73 T-simm13 (@tpoff(S + A) & 0x3ff) | 0x1c00
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_DTPMOD32 74 V-word32 @dtmod(S + A)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_DTPMOD64 75 V-word64 @dtmod(S + A)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_TLS_DTPOFF32 76 V-word32 @dtpoff(S + A)
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * R_SPARC_TLS_DTPOFF64 77 V-word64 @dtpoff(S + A)
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * R_SPARC_TLS_TPOFF32 78 V-word32 @tpoff(S + A)
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * R_SPARC_TLS_TPOFF64 79 V-word64 @tpoff(S + A)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOTDATA_HIX22 80 V-imm22 ((S + A - GOT) >> 10) ^
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * ((S + A - GOT) >> 31)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOTDATA_LOX10 81 T-simm13 ((S + A - GOT) & 0x3ff) |
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * (((S + A - GOT) >> 31) &
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * 0x1c00)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOTDATA_OP_HIX22 82 T-imm22 (G >> 10) & (G >> 31)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOTDATA_OP_LOX10 83 T-simm13 (G & 0x3ff) |
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * ((G >> 31) & 0x1c00)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_GOTDATA_OP 84 Word32 SPECIAL
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_H34 85 V-imm22 (S + A) >> 12
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_SIZE32 86 V-word32 Z + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * R_SPARC_SIZE64 87 V-xword64 Z + A
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * This is Figure 4-20: Relocation Types from the Draft Copy of
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * the ABI, Printed on 11/29/88.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * NOTE1: relocations 24->45 are newly registered relocations to support
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * C++ ABI & SPARC V8+ and SPARC V9 architectures (1/9/94), and
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * 64-bit relocations 46-55 were added for SPARC V9.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * NOTE2: relocations 56->79 are added to support Thread-Local storage
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * as recorded in PSARC/2001/509
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris *
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * NOTE3: The value to be passed for relocations R_SPARC_HIX22 and
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * R_SPARC_TLS_HIX22 are negative values. So the upper 10 or 40 bits
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * are 1. (So when the exclusive OR is applied, the upper bits
c5aee8047f101b999b8f96ced79e802071372a52Robert Harris * will be 0.)
8fd04b8338ed5093ec2d1e668fa620b7de44c177Roger A. Faulkner *
8fd04b8338ed5093ec2d1e668fa620b7de44c177Roger A. Faulkner * Relocation calculations:
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * The FIELD names indicate whether the relocation type checks for overflow.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * A calculated relocation value may be larger than the intended field, and
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * the relocation type may verify (V) that the value fits, or truncate (T)
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * the result.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * CALCULATION uses the following notation:
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * A the addend used
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * B the base address of the shared object in memory
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * G the offset into the global offset table
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * L the procedure linkage entry
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * P the place of the storage unit being relocated
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * S the value of the symbol
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * O secondary addend (extra offset) in v9 r_info field
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * Z the size of the symbol whose index resides in the relocation
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * entry
80e2ca8596e3435bc3b76f3c597833ea0a87f85e *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * @dtlndx(x): Allocate two contiguous entries in the GOT table to hold
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * a Tls_index structure (for passing to __tls_get_addr()). The
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * instructions referencing this entry will be bound to the first
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * of the two GOT entries.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * @tmndx(x): Allocate two contiguous entries in the GOT table to hold
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * a Tls_index structure (for passing to __tls_get_addr()). The
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * ti_offset field of the Tls_index will be set to 0 (zero) and the
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * ti_module will be filled in at run-time. The call to
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * __tls_get_addr() will return the starting offset of the dynamic
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * TLS block.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * @dtpoff(x): calculate the tlsoffset relative to the TLS block.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * @tpoff(x): calculate the negative tlsoffset relative to the static
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * TLS block. This value can be added to the thread-pointer to
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * calculate the tls address.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * @dtpmod(x): calculate the module id of the object containing symbol x.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * The calculations in the CALCULATION column are assumed to have been performed
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * before calling this function except for the addition of the addresses in the
80e2ca8596e3435bc3b76f3c597833ea0a87f85e * instructions.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris *
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * Upon successful completion of do_reloc() *value will be set to the
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris * 'bit-shifted' value that will be or'ed into memory.
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris */
835ee2195df075073d2670eb95a6eab413d6c789Robert Harris/* ARGSUSED5 */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekint
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekdo_reloc(uchar_t rtype, uchar_t *off, Xword *value, const char *sym,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek const char *file, void *lml)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek{
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek Xword uvalue = 0;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek Xword basevalue, sigbit_mask, sigfit_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek Xword corevalue = *value;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uchar_t bshift;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek int field_size, re_flags;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek const Rel_entry * rep;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek rep = &reloc_table[rtype];
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek bshift = rep->re_bshift;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek field_size = rep->re_fsize;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek re_flags = rep->re_flags;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek sigbit_mask = S_MASK(rep->re_sigbits);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if ((re_flags & FLG_RE_SIGN) && sigbit_mask) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * sigfit_mask takes into account that a value
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * might be signed and discards the signbit for
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * comparison.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek sigfit_mask = S_MASK(rep->re_sigbits - 1);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek } else
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek sigfit_mask = sigbit_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (field_size == 0) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek REL_ERR_UNIMPL(lml, file, sym, rtype);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (0);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (re_flags & FLG_RE_UNALIGN) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek int i;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uchar_t *dest = (uchar_t *)&basevalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * Adjust the offset.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek i = (int)(sizeof (Xword) - field_size);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (i > 0)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek dest += i;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue = 0;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek for (i = field_size - 1; i >= 0; i--)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek dest[i] = off[i];
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek } else {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (((field_size == 2) && ((uintptr_t)off & 0x1)) ||
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ((field_size == 4) && ((uintptr_t)off & 0x3)) ||
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ((field_size == 8) && ((uintptr_t)off & 0x7))) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek REL_ERR_NONALIGN(lml, file, sym, rtype, (uintptr_t)off);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (0);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek switch (field_size) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek case 1:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue = (Xword)*((uchar_t *)off);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek case 2:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue = (Xword)*((Half *)off);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek case 4:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue = (Xword)*((Word *)off);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek case 8:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue = (Xword)*((Xword *)off);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek default:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek REL_ERR_UNNOBITS(lml, file, sym, rtype,
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (rep->re_fsize * 8));
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (0);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (sigbit_mask) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * The WDISP16 relocation is an unusual one in that it's bits
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu * are not all contiguous. We have to selectivly pull them out.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (re_flags & FLG_RE_WDISP16) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue = ((basevalue & 0x300000) >> 6) |
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (basevalue & 0x3fff);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue &= ~0x303fff;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek } else {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue = sigbit_mask & basevalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek basevalue &= ~sigbit_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * If value is signed make sure that we signextend the uvalue.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (re_flags & FLG_RE_SIGN) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (uvalue & (~sigbit_mask & sigfit_mask))
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue |= ~sigbit_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek } else
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue = basevalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (bshift)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue <<= bshift;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue += *value;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (rep->re_mask &&
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ((rtype == R_SPARC_HIX22) || (rtype == R_SPARC_TLS_LE_HIX22)))
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue ^= rep->re_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon if (bshift) {
0fbb751d81ab0a7c7ddfd8d4e447e075a9f7024fJohn Levon /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * This is to check that we are not attempting to
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * jump to a non-4 byte aligned address.
80e2ca8596e3435bc3b76f3c597833ea0a87f85e */
80e2ca8596e3435bc3b76f3c597833ea0a87f85e if ((bshift == 2) && (uvalue & 0x3)) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek REL_ERR_LOSEBITS(lml, file, sym, rtype, uvalue, 2, off);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (0);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (re_flags & FLG_RE_SIGN) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue = (Sxword)uvalue >> bshift;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek } else {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue >>= bshift;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek corevalue >>= bshift;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if ((rtype == R_SPARC_GOTDATA_HIX22) ||
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (rtype == R_SPARC_GOTDATA_OP_HIX22)) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue ^= ((Sxword)(*value) >> 31);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek corevalue ^= ((Sxword)(*value) >> 31);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (rep->re_mask &&
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (rtype != R_SPARC_HIX22) && (rtype != R_SPARC_TLS_LE_HIX22) &&
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (rtype != R_SPARC_GOTDATA_HIX22))
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue &= rep->re_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if ((rtype == R_SPARC_LOX10) || (rtype == R_SPARC_TLS_LE_LOX10)) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue |= 0x1c00;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek corevalue |= 0x1c00;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if ((rtype == R_SPARC_GOTDATA_LOX10) ||
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (rtype == R_SPARC_GOTDATA_OP_LOX10)) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue |= ((Sxword)(*value) >> 31) & 0x1c00;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek corevalue |= ((Sxword)(*value) >> 31) & 0x1c00;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if ((re_flags & FLG_RE_VERIFY) && sigbit_mask) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (((re_flags & FLG_RE_SIGN) &&
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (S_INRANGE((Sxword)uvalue, rep->re_sigbits - 1) == 0)) ||
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (!(re_flags & FLG_RE_SIGN) &&
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ((sigbit_mask & uvalue) != uvalue))) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek REL_ERR_NOFIT(lml, file, sym, rtype, uvalue);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (0);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (sigbit_mask) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * Again the R_SPARC_WDISP16 relocation takes special
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * processing because of its non-continguous bits.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (re_flags & FLG_RE_WDISP16)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue = ((uvalue & 0xc000) << 6) |
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (uvalue & 0x3fff);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek else
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue &= sigbit_mask;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * Combine value back with original word
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uvalue |= basevalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *value = corevalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (re_flags & FLG_RE_UNALIGN) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek int i;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek uchar_t *src = (uchar_t *)&uvalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * Adjust the offset.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek i = (int)(sizeof (Xword) - field_size);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if (i > 0)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek src += i;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek for (i = field_size - 1; i >= 0; i--)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek off[i] = src[i];
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek } else {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek switch (rep->re_fsize) {
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek case 1:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *((uchar_t *)off) = (uchar_t)uvalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case 2:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *((Half *)off) = (Half)uvalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
80e2ca8596e3435bc3b76f3c597833ea0a87f85e case 4:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *((Word *)off) = uvalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek case 8:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /* LINTED */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek *((Xword *)off) = uvalue;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek break;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek default:
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /*
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * To keep chkmsg() happy: MSG_INTL(MSG_REL_UNSUPSZ)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek */
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek REL_ERR_UNSUPSZ(lml, file, sym, rtype, rep->re_fsize);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (0);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek }
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek return (1);
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek}
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek