summaryrefslogtreecommitdiff
path: root/usr/src/tools/ctf/dwarf/common/pro_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/tools/ctf/dwarf/common/pro_util.h')
-rw-r--r--usr/src/tools/ctf/dwarf/common/pro_util.h89
1 files changed, 65 insertions, 24 deletions
diff --git a/usr/src/tools/ctf/dwarf/common/pro_util.h b/usr/src/tools/ctf/dwarf/common/pro_util.h
index d01caae5b1..56bde8bda6 100644
--- a/usr/src/tools/ctf/dwarf/common/pro_util.h
+++ b/usr/src/tools/ctf/dwarf/common/pro_util.h
@@ -1,6 +1,7 @@
/*
- Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright 2002-2010 Sun Microsystems, Inc. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of version 2.1 of the GNU Lesser General Public License
@@ -17,12 +18,12 @@
any, provided herein do not apply to combinations of this program with
other software, or any other product whatsoever.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
+ You should have received a copy of the GNU Lesser General Public
+ License along with this program; if not, write the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
USA.
- Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky,
+ Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
Mountain View, CA 94043, or:
http://www.sgi.com
@@ -36,13 +37,13 @@
-#define IS_64BIT(dbg) ((dbg)->de_flags & DW_DLC_SIZE_64 ? 1 : 0)
-#define ISA_IA64(dbg) ((dbg)->de_flags & DW_DLC_ISA_IA64 ? 1 : 0)
+#define IS_64BIT(dbg) ((dbg)->de_flags & DW_DLC_SIZE_64 ? 1 : 0)
+#define ISA_IA64(dbg) ((dbg)->de_flags & DW_DLC_ISA_IA64 ? 1 : 0)
/* definition of sizes of types, given target machine */
-#define sizeof_sbyte(dbg) sizeof(Dwarf_Sbyte)
-#define sizeof_ubyte(dbg) sizeof(Dwarf_Ubyte)
-#define sizeof_uhalf(dbg) sizeof(Dwarf_Half)
+#define sizeof_sbyte(dbg) sizeof(Dwarf_Sbyte)
+#define sizeof_ubyte(dbg) sizeof(Dwarf_Ubyte)
+#define sizeof_uhalf(dbg) sizeof(Dwarf_Half)
/* certain sizes not defined here, but set in dbg record.
See pro_init.c
*/
@@ -63,7 +64,7 @@
/* R_MIPS* are #define so #ifndef works */
/* R_IA_64* are not necessarily #define (might be enum) so #ifndef
is useless, we use the configure script generating
- HAVE_R_IA_64_DIR32LSB.
+ HAVE_R_IA_64_DIR32LSB and HAVE_R_IA64_DIR32LSB.
*/
#ifndef R_MIPS_64
#define R_MIPS_64 0
@@ -75,33 +76,73 @@
#define R_MIPS_SCN_DISP 0
#endif
-#ifndef HAVE_R_IA_64_DIR32LSB
-#define R_IA_64_DIR32LSB 0
-#define R_IA_64_DIR64LSB 0
-#define R_IA_64_SEGREL64LSB 0
-#define R_IA_64_SEGREL32LSB 0
+/* R_IA_64_DIR32LSB came before the now-standard R_IA64_DIR32LSB
+ (etc) was defined. This now deals with either form,
+ preferring the new form if available. */
+#ifdef HAVE_R_IA64_DIR32LSB
+#define DWARF_PRO_R_IA64_DIR32LSB R_IA64_DIR32LSB
+#define DWARF_PRO_R_IA64_DIR64LSB R_IA64_DIR64LSB
+#define DWARF_PRO_R_IA64_SEGREL64LSB R_IA64_SEGREL64LSB
+#define DWARF_PRO_R_IA64_SEGREL32LSB R_IA64_SEGREL32LSB
+#endif
+#if defined(HAVE_R_IA_64_DIR32LSB) && !defined(HAVE_R_IA64_DIR32LSB)
+#define DWARF_PRO_R_IA64_DIR32LSB R_IA_64_DIR32LSB
+#define DWARF_PRO_R_IA64_DIR64LSB R_IA_64_DIR64LSB
+#define DWARF_PRO_R_IA64_SEGREL64LSB R_IA_64_SEGREL64LSB
+#define DWARF_PRO_R_IA64_SEGREL32LSB R_IA_64_SEGREL32LSB
+#endif
+#if !defined(HAVE_R_IA_64_DIR32LSB) && !defined(HAVE_R_IA64_DIR32LSB)
+#define DWARF_PRO_R_IA64_DIR32LSB 0
+#define DWARF_PRO_R_IA64_DIR64LSB 0
+#define DWARF_PRO_R_IA64_SEGREL64LSB 0
+#define DWARF_PRO_R_IA64_SEGREL32LSB 0
#endif
+/*
+ * The default "I don't know" value can't be zero.
+ * Because that's the sentinel value that means "no relocation".
+ * In order to use this library in 'symbolic relocation mode we
+ * don't care if this value is the right relocation value,
+ * only that it's non-NULL. So at the end, we define it
+ * to something sensible.
+ */
+
+
+
+#if defined(sun)
+#if defined(sparc)
+#define Get_REL64_isa(dbg) (R_SPARC_UA64)
+#define Get_REL32_isa(dbg) (R_SPARC_UA32)
+#define Get_REL_SEGREL_isa(dbg) (R_SPARC_NONE) /* I don't know! */
+#else /* i386 */
+#define Get_REL64_isa(dbg) (R_386_32) /* Any non-zero value is ok */
+#define Get_REL32_isa(dbg) (R_386_32)
+#define Get_REL_SEGREL_isa(dbg) (R_386_NONE) /* I don't know! */
+#endif /* sparc || i386 */
+#else /* !sun */
#ifdef HAVE_SYS_IA64_ELF_H
#define Get_REL64_isa(dbg) (ISA_IA64(dbg) ? \
- R_IA_64_DIR64LSB : R_MIPS_64)
+ DWARF_PRO_R_IA64_DIR64LSB : R_MIPS_64)
#define Get_REL32_isa(dbg) (ISA_IA64(dbg) ? \
- R_IA_64_DIR32LSB : R_MIPS_32)
+ DWARF_PRO_R_IA64_DIR32LSB : R_MIPS_32)
/* ia64 uses 32bit dwarf offsets for sections */
#define Get_REL_SEGREL_isa(dbg) (ISA_IA64(dbg) ? \
- R_IA_64_SEGREL32LSB : R_MIPS_SCN_DISP)
-#else
+ DWARF_PRO_R_IA64_SEGREL32LSB : R_MIPS_SCN_DISP)
+#else /* HAVE_SYS_IA64_ELF_H */
#if !defined(linux) && !defined(__BEOS__)
#define Get_REL64_isa(dbg) (R_MIPS_64)
#define Get_REL32_isa(dbg) (R_MIPS_32)
#define Get_REL_SEGREL_isa(dbg) (R_MIPS_SCN_DISP)
#else
-#define Get_REL64_isa(dbg) (R_IA_64_DIR64LSB)
-#define Get_REL32_isa(dbg) (R_IA_64_DIR32LSB)
-#define Get_REL_SEGREL_isa(dbg) (R_IA_64_SEGREL64LSB)
+#define Get_REL64_isa(dbg) (1)
+#define Get_REL32_isa(dbg) (1) /* these are used on linux */
+#define Get_REL_SEGREL_isa(dbg) (1) /* non zero values, see comments above */
#endif
-#endif
+#endif /* HAVE_SYS_IA64_ELF_H */
+#endif /* !sun */
+
+