* mips.h: New file. MIPS ABI specific information.
authorIan Lance Taylor <ian@airs.com>
Tue, 12 Oct 1993 14:29:51 +0000 (14:29 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 12 Oct 1993 14:29:51 +0000 (14:29 +0000)
include/elf/.Sanitize
include/elf/mips.h [new file with mode: 0644]

index d71f6344fda381c501044f4f6167d9d78d2ac29d..8df32462442bc49fbbaa8e91d53b97eb36ed6fc7 100644 (file)
@@ -25,12 +25,12 @@ Do-first:
 
 Things-to-keep:
 
-
 ChangeLog
 common.h
 dwarf.h
 external.h
 internal.h
+mips.h
 
 Things-to-lose:
 
diff --git a/include/elf/mips.h b/include/elf/mips.h
new file mode 100644 (file)
index 0000000..dd5954b
--- /dev/null
@@ -0,0 +1,152 @@
+/* MIPS ELF support for BFD.
+   Copyright (C) 1993 Free Software Foundation, Inc.
+
+   By Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>, from
+   information in the System V Application Binary Interface, MIPS
+   Processor Supplement.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* This file holds definitions specific to the MIPS ELF ABI.  Note
+   that most of this is not actually implemented by BFD.  */
+
+/* Processor specific flags for the ELF header e_flags field.  */
+
+/* At least one .noreorder directive appears in the source.  */
+#define EF_MIPS_NOREORDER      0x00000001
+
+/* File contains position independent code.  */
+#define EF_MIPS_PIC            0x00000002
+
+/* Code in file uses the standard calling sequence for calling
+   position independent code.  */
+#define EF_MIPS_CPIC           0x00000004
+
+/* Four bit MIPS architecture field.  */
+#define EF_MIPS_ARCH           0xf0000000
+\f
+/* Processor specific section indices.  These sections do not actually
+   exist.  Symbols with a st_shndx field corresponding to one of these
+   values have a special meaning.  */
+
+/* Defined and allocated common symbol.  Value is virtual address.  If
+   relocated, alignment must be preserved.  */
+#define SHN_MIPS_ACOMMON       0xff00
+
+/* Small common symbol.  */
+#define SHN_MIPS_SCOMMON       0xff03
+
+/* Small undefined symbol.  */
+#define SHN_MIPS_SUNDEFINED    0xff04
+\f
+/* Processor specific section types.  */
+
+/* Section contains the set of dynamic shared objects used when
+   statically linking.  */
+#define SHT_MIPS_LIBLIST       0x70000000
+
+/* Section contains list of symbols whose definitions conflict with
+   symbols defined in shared objects.  */
+#define SHT_MIPS_CONFLICT      0x70000002
+
+/* Section contains the global pointer table.  */
+#define SHT_MIPS_GPTAB         0x70000003
+
+/* Section contains microcode information.  The exact format is
+   unspecified.  */
+#define SHT_MIPS_UCODE         0x70000004
+
+/* Section contains some sort of debugging information.  The exact
+   format is unspecified.  It's probably ECOFF symbols.  */
+#define SHT_MIPS_DEBUG         0x70000005
+
+/* Section contains register usage information.  */
+#define SHT_MIPS_REGINFO       0x70000006
+
+/* A section of type SHT_MIPS_LIBLIST contains an array of the
+   following structure.  The sh_link field is the section index of the
+   string table.  The sh_info field is the number of entries in the
+   section.  */
+typedef struct
+{
+  /* String table index for name of shared object.  */
+  Elf32_Word l_name;
+  /* Time stamp.  */
+  Elf32_Word l_time_stamp;
+  /* Checksum of symbol names and common sizes.  */
+  Elf32_Word l_checksum;
+  /* String table index for version.  */
+  Elf32_Word l_version;
+  /* Flags.  */
+  Elf32_Word l_flags;
+} Elf32_Lib;
+
+/* The l_flags field of an Elf32_Lib structure may contain the
+   following flags.  */
+
+/* Require an exact match at runtime.  */
+#define LL_EXACT_MATCH         0x00000001
+
+/* Ignore version incompatibilities at runtime.  */
+#define LL_IGNORE_INT_VER      0x00000002
+
+/* A section of type SHT_MIPS_CONFLICT is an array of indices into the
+   .dynsym section.  Each element has the following type.  */
+typedef Elf32_Addr Elf32_Conflict;
+
+/* A section of type SHT_MIPS_GPTAB contains information about how
+   much GP space would be required for different -G arguments.  This
+   information is only used so that the linker can provide informative
+   suggestions as to the best -G value to use.  The sh_info field is
+   the index of the section for which this information applies.  The
+   contents of the section are an array of the following union.  The
+   first element uses the gt_header field.  The remaining elements use
+   the gt_entry field.  */
+typedef union
+{
+  struct
+    {
+      /* -G value actually used for this object file.  */
+      Elf32_Word gt_current_g_value;
+      /* Unused.  */
+      Elf32_Word gt_unused;
+    } gt_header;
+  struct
+    {
+      /* If this -G argument has been used...  */
+      Elf32_Word gt_g_value;
+      /* ...this many GP section bytes would be required.  */
+      Elf32_Word gt_bytes;
+    } gt_entry;
+} Elf32_gptab;
+
+/* A section of type SHT_MIPS_REGINFO contains the following
+   structure.  */
+typedef struct
+{
+  /* Mask of general purpose registers used.  */
+  Elf32_Word ri_gprmask;
+  /* Mask of co-processor registers used.  */
+  Elf32_Word ri_cprmask[4];
+  /* GP register value for this object file.  */
+  Elf32_SWord ri_gp_value;
+} Elf_RegInfo;
+\f
+/* Processor specific section flags.  */
+
+/* This section must be in the global data area.  */
+define SHF_MIPS_GPREL          0x10000000