summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/elfcpp/powerpc.h
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2014-12-09 17:57:18 +0800
committerAndrew Hsieh <andrewhsieh@google.com>2014-12-09 19:50:14 +0800
commit5e8c1cf25beccac1d22d10dc866912394f42771b (patch)
treeee16b70f804484dc8e434e647e699ab50da2620f /binutils-2.25/elfcpp/powerpc.h
parent8eebd7953384e6662ca926b003f2cdda8ccd3ee5 (diff)
downloadtoolchain_binutils-5e8c1cf25beccac1d22d10dc866912394f42771b.tar.gz
toolchain_binutils-5e8c1cf25beccac1d22d10dc866912394f42771b.tar.bz2
toolchain_binutils-5e8c1cf25beccac1d22d10dc866912394f42771b.zip
[2.25] sync to a30720e3e633f275250e26f85ccae5dbdddfb6c6
local patches will be re-applied later commit a30720e3e633f275250e26f85ccae5dbdddfb6c6 Author: Alan Modra <amodra@gmail.com> Date: Wed Nov 19 10:30:16 2014 +1030 daily update Change-Id: Ieb2a3f4dd2ecb289ac5305ff08d428b2847494ab
Diffstat (limited to 'binutils-2.25/elfcpp/powerpc.h')
-rw-r--r--binutils-2.25/elfcpp/powerpc.h63
1 files changed, 62 insertions, 1 deletions
diff --git a/binutils-2.25/elfcpp/powerpc.h b/binutils-2.25/elfcpp/powerpc.h
index 2c803af9..2a221218 100644
--- a/binutils-2.25/elfcpp/powerpc.h
+++ b/binutils-2.25/elfcpp/powerpc.h
@@ -1,6 +1,6 @@
// powerpc.h -- ELF definitions specific to EM_PPC and EM_PPC64 -*- C++ -*-
-// Copyright 2008, 2010, 2012 Free Software Foundation, Inc.
+// Copyright (C) 2008-2014 Free Software Foundation, Inc.
// Written by David S. Miller <davem@davemloft.net>.
// This file is part of elfcpp.
@@ -164,12 +164,20 @@ enum
R_PPC_EMB_SDA21 = 109,
R_PPC64_TOCSAVE = 109,
R_PPC_EMB_MRKREF = 110,
+ R_PPC64_ADDR16_HIGH = 110,
R_PPC_EMB_RELSEC16 = 111,
+ R_PPC64_ADDR16_HIGHA = 111,
R_PPC_EMB_RELST_LO = 112,
+ R_PPC64_TPREL16_HIGH = 112,
R_PPC_EMB_RELST_HI = 113,
+ R_PPC64_TPREL16_HIGHA = 113,
R_PPC_EMB_RELST_HA = 114,
+ R_PPC64_DTPREL16_HIGH = 114,
R_PPC_EMB_BIT_FLD = 115,
+ R_PPC64_DTPREL16_HIGHA = 115,
R_PPC_EMB_RELSDA = 116,
+ R_PPC64_REL24_NOTOC = 116,
+ R_PPC64_ADDR64_LOCAL = 117,
R_PPC_VLE_REL8 = 216,
R_PPC_VLE_REL15 = 217,
@@ -208,6 +216,59 @@ enum
EF_PPC_RELOCATABLE_LIB = 0x00008000, // PowerPC -mrelocatable-lib flag. */
};
+// e_flags values defined for powerpc64
+enum
+{
+ // ABI version
+ // 1 for original function descriptor using ABI,
+ // 2 for revised ABI without function descriptors,
+ // 0 for unspecified or not using any features affected by the differences.
+ EF_PPC64_ABI = 3
+};
+
+enum
+{
+ // The ELFv2 ABI uses three bits in the symbol st_other field of a
+ // function definition to specify the number of instructions between a
+ // function's global entry point and local entry point.
+ // The global entry point is used when it is necessary to set up the
+ // toc pointer (r2) for the function. Callers must enter the global
+ // entry point with r12 set to the global entry point address. On
+ // return from the function, r2 may have a different value to that
+ // which it had on entry.
+ // The local entry point is used when r2 is known to already be valid
+ // for the function. There is no requirement on r12 when using the
+ // local entry point, and on return r2 will contain the same value as
+ // at entry.
+ // A value of zero in these bits means that the function has a single
+ // entry point with no requirement on r12 or r2, and that on return r2
+ // will contain the same value as at entry.
+ // Values of one and seven are reserved.
+
+ STO_PPC64_LOCAL_BIT = 5,
+ STO_PPC64_LOCAL_MASK = 0xE0
+};
+
+// 3 bit other field to bytes.
+static inline unsigned int
+ppc64_decode_local_entry(unsigned int other)
+{
+ return ((1 << other) >> 2) << 2;
+}
+
+// bytes to field value.
+static inline unsigned int
+ppc64_encode_local_entry(unsigned int val)
+{
+ return (val >= 4 * 4
+ ? (val >= 8 * 4
+ ? (val >= 16 * 4 ? 6 : 5)
+ : 4)
+ : (val >= 2 * 4
+ ? 3
+ : (val >= 1 * 4 ? 2 : 0)));
+}
+
} // End namespace elfcpp.
#endif // !defined(ELFCPP_POWERPC_H)