17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
55aefb655Srie  * Common Development and Distribution License (the "License").
65aefb655Srie  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
21552ff457Srie 
227c478bd9Sstevel@tonic-gate /*
23de777a60Sab  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
247c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate /*
287c478bd9Sstevel@tonic-gate  * String conversion routine for relocation types.
297c478bd9Sstevel@tonic-gate  */
307c478bd9Sstevel@tonic-gate #include	<stdio.h>
317c478bd9Sstevel@tonic-gate #include	<sys/elf_amd64.h>
327c478bd9Sstevel@tonic-gate #include	"relocate_amd64_msg.h"
33c13de8f6Sab #include	"_conv.h"
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate /*
36552ff457Srie  * AMD64 specific relocations.
377c478bd9Sstevel@tonic-gate  */
38552ff457Srie static const Msg rels[R_AMD64_NUM] = {
39*a530dbfeSRichard Lowe 	[R_AMD64_NONE]		= MSG_R_AMD64_NONE,
40*a530dbfeSRichard Lowe 	[R_AMD64_64]		= MSG_R_AMD64_64,
41*a530dbfeSRichard Lowe 	[R_AMD64_PC32]		= MSG_R_AMD64_PC32,
42*a530dbfeSRichard Lowe 	[R_AMD64_GOT32]		= MSG_R_AMD64_GOT32,
43*a530dbfeSRichard Lowe 	[R_AMD64_PLT32]		= MSG_R_AMD64_PLT32,
44*a530dbfeSRichard Lowe 	[R_AMD64_COPY]		= MSG_R_AMD64_COPY,
45*a530dbfeSRichard Lowe 	[R_AMD64_GLOB_DAT]	= MSG_R_AMD64_GLOB_DAT,
46*a530dbfeSRichard Lowe 	[R_AMD64_JUMP_SLOT]	= MSG_R_AMD64_JUMP_SLOT,
47*a530dbfeSRichard Lowe 	[R_AMD64_RELATIVE]	= MSG_R_AMD64_RELATIVE,
48*a530dbfeSRichard Lowe 	[R_AMD64_GOTPCREL]	= MSG_R_AMD64_GOTPCREL,
49*a530dbfeSRichard Lowe 	[R_AMD64_32]		= MSG_R_AMD64_32,
50*a530dbfeSRichard Lowe 	[R_AMD64_32S]		= MSG_R_AMD64_32S,
51*a530dbfeSRichard Lowe 	[R_AMD64_16]		= MSG_R_AMD64_16,
52*a530dbfeSRichard Lowe 	[R_AMD64_PC16]		= MSG_R_AMD64_PC16,
53*a530dbfeSRichard Lowe 	[R_AMD64_8]		= MSG_R_AMD64_8,
54*a530dbfeSRichard Lowe 	[R_AMD64_PC8]		= MSG_R_AMD64_PC8,
55*a530dbfeSRichard Lowe 	[R_AMD64_DTPMOD64]	= MSG_R_AMD64_DTPMOD64,
56*a530dbfeSRichard Lowe 	[R_AMD64_DTPOFF64]	= MSG_R_AMD64_DTPOFF64,
57*a530dbfeSRichard Lowe 	[R_AMD64_TPOFF64]	= MSG_R_AMD64_TPOFF64,
58*a530dbfeSRichard Lowe 	[R_AMD64_TLSGD]		= MSG_R_AMD64_TLSGD,
59*a530dbfeSRichard Lowe 	[R_AMD64_TLSLD]		= MSG_R_AMD64_TLSLD,
60*a530dbfeSRichard Lowe 	[R_AMD64_DTPOFF32]	= MSG_R_AMD64_DTPOFF32,
61*a530dbfeSRichard Lowe 	[R_AMD64_GOTTPOFF]	= MSG_R_AMD64_GOTTPOFF,
62*a530dbfeSRichard Lowe 	[R_AMD64_TPOFF32]	= MSG_R_AMD64_TPOFF32,
63*a530dbfeSRichard Lowe 	[R_AMD64_PC64]		= MSG_R_AMD64_PC64,
64*a530dbfeSRichard Lowe 	[R_AMD64_GOTOFF64]	= MSG_R_AMD64_GOTOFF64,
65*a530dbfeSRichard Lowe 	[R_AMD64_GOTPC32]	= MSG_R_AMD64_GOTPC32,
66*a530dbfeSRichard Lowe 	[R_AMD64_GOT64]		= MSG_R_AMD64_GOT64,
67*a530dbfeSRichard Lowe 	[R_AMD64_GOTPCREL64]	= MSG_R_AMD64_GOTPCREL64,
68*a530dbfeSRichard Lowe 	[R_AMD64_GOTPC64]	= MSG_R_AMD64_GOTPC64,
69*a530dbfeSRichard Lowe 	[R_AMD64_GOTPLT64]	= MSG_R_AMD64_GOTPLT64,
70*a530dbfeSRichard Lowe 	[R_AMD64_PLTOFF64]	= MSG_R_AMD64_PLTOFF64,
71*a530dbfeSRichard Lowe 	[R_AMD64_SIZE32]	= MSG_R_AMD64_SIZE32,
72*a530dbfeSRichard Lowe 	[R_AMD64_SIZE64]	= MSG_R_AMD64_SIZE64,
73*a530dbfeSRichard Lowe 	[R_AMD64_GOTPC32_TLSDESC] = MSG_R_AMD64_GOTPC32_TLSDESC,
74*a530dbfeSRichard Lowe 	[R_AMD64_TLSDESC_CALL]	= MSG_R_AMD64_TLSDESC_CALL,
75*a530dbfeSRichard Lowe 	[R_AMD64_TLSDESC]	= MSG_R_AMD64_TLSDESC,
76*a530dbfeSRichard Lowe 	[R_AMD64_IRELATIVE]	= MSG_R_AMD64_IRELATIVE,
77*a530dbfeSRichard Lowe 	[R_AMD64_RELATIVE64]	= MSG_R_AMD64_RELATIVE64,
78*a530dbfeSRichard Lowe 	[R_AMD64_UNKNOWN39]	= MSG_R_AMD64_UNKNOWN39,
79*a530dbfeSRichard Lowe 	[R_AMD64_UNKNOWN40]	= MSG_R_AMD64_UNKNOWN40,
80*a530dbfeSRichard Lowe 	[R_AMD64_GOTPCRELX]	= MSG_R_AMD64_GOTPCRELX,
81*a530dbfeSRichard Lowe 	[R_AMD64_REX_GOTPCRELX] = MSG_R_AMD64_REX_GOTPCRELX
827c478bd9Sstevel@tonic-gate };
837c478bd9Sstevel@tonic-gate 
84*a530dbfeSRichard Lowe #if	(R_AMD64_NUM != (R_AMD64_REX_GOTPCRELX + 1))
85552ff457Srie #error	"R_AMD64_NUM has grown"
86552ff457Srie #endif
87552ff457Srie 
887c478bd9Sstevel@tonic-gate const char *
conv_reloc_amd64_type(Word type,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)89d29b2c44Sab conv_reloc_amd64_type(Word type, Conv_fmt_flags_t fmt_flags,
90d29b2c44Sab     Conv_inv_buf_t *inv_buf)
917c478bd9Sstevel@tonic-gate {
92552ff457Srie 	if (type >= R_AMD64_NUM)
93de777a60Sab 		return (conv_invalid_val(inv_buf, type, fmt_flags));
94552ff457Srie 	return (MSG_ORIG(rels[type]));
957c478bd9Sstevel@tonic-gate }
96