diff options
| author | Richard Lowe <richlowe@richlowe.net> | 2011-05-22 03:13:22 +0100 |
|---|---|---|
| committer | Richard Lowe <richlowe@richlowe.net> | 2011-05-22 03:13:22 +0100 |
| commit | 07dc1947c362e187fb955d283b692f8769dd5def (patch) | |
| tree | 5933d1a754972260a22d1bda9ea247bab7979dae /usr/src/tools/ctf/dwarf/common/pro_util.h | |
| parent | ba2b2c94236651f014e4f9255b7075e654a853dd (diff) | |
| download | illumos-joyent-07dc1947c362e187fb955d283b692f8769dd5def.tar.gz | |
2004 newer gcc, and sanity, would benefit from a newer libdwarf
Reviewed by: Jason King <jason.brian.king@gmail.com>
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Dan McDonald <danmcd@nexenta.com>
Reviewed by: Joshua M. Clulow <josh@sysmgr.org>
Approved by: Gordon Ross <gwr@nexenta.com>
Diffstat (limited to 'usr/src/tools/ctf/dwarf/common/pro_util.h')
| -rw-r--r-- | usr/src/tools/ctf/dwarf/common/pro_util.h | 89 |
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 */ + + |
