Get relocation numbers from header files, rather than using built in

functions.
This commit is contained in:
Nick Clifton 1998-07-22 23:32:58 +00:00
parent 6ff4269b8a
commit f97d05dc1b
2 changed files with 56 additions and 144 deletions

View File

@ -1,3 +1,10 @@
Wed Jul 22 16:29:12 1998 Nick Clifton <nickc@cygnus.com>
* readelf.c (dump_relocations): Add dumps of HPPA and ARC
relocations.
(process_relocs): Do not abort if no string table can be found.
1998-07-22 14:58 Ulrich Drepper <drepper@cygnus.com>
* readelf.c: Remove definition of functions to return relocation

View File

@ -28,12 +28,36 @@
#include <time.h>
#include "bfd.h"
#include "elf/common.h"
#include "elf/i386.h"
#include "elf/v850.h"
#include "elf/external.h"
#include "elf/internal.h"
/* The following headers use the elf/reloc-macros.h file to
automatically generate relocation recognition functions
such as elf_mips_reloc_type() */
#define RELOC_MACROS_GEN_FUNC
#include "elf/i386.h"
#include "elf/v850.h"
#include "elf/ppc.h"
#include "elf/mips.h"
#include "elf/alpha.h"
#include "elf/arm.h"
#include "elf/m68k.h"
#include "elf/sparc.h"
#include "elf/m32r.h"
#include "elf/d10v.h"
/* start-sanitize-d30v */
#include "elf/d30v.h"
/* end-sanitize-d30v */
#include "elf/sh.h"
#include "elf/mn10200.h"
#include "elf/mn10300.h"
#include "elf/hppa.h"
#include "elf/arc.h"
#include "bucomm.h"
#include "getopt.h"
@ -80,22 +104,6 @@ char dump_sects [NUM_DUMP_SECTS];
/* Forward declarations for dumb compilers. */
static const char * get_mips_dynamic_type PARAMS ((unsigned long type));
static const char * get_dynamic_type PARAMS ((unsigned long type));
static const char * elf_i386_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_m68k_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_sparc_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_m32r_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_v850_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_d10v_reloc_type PARAMS ((unsigned long rtype));
/* start-sanitize-d30v */
static const char * elf_d30v_reloc_type PARAMS ((unsigned long rtype));
/* end-sanitize-d30v */
static const char * elf_sh_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_mn10300_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_mn10200_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_ppc_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_mips_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_alpha_reloc_type PARAMS ((unsigned long rtype));
static const char * elf_arm_reloc_type PARAMS ((unsigned long rtype));
static int dump_relocations
PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Sym *, char *));
static char * get_file_type PARAMS ((unsigned e_type));
@ -282,121 +290,6 @@ byte_get_big_endian (field, size)
}
/* Define the macros we need to define the relocation recognition functions. */
#define START_RELOC_NUMBERS(name) static const char * \
name (rtype) \
unsigned long rtype; \
{ \
switch (rtype) {
#ifdef __STDC__
# define RELOC_NUMBER(name, number) case number: return #name;
#else
# define RELOC_NUMBER(name, number) case number: return "name";
#endif
#define END_RELOC_NUMBERS default: return NULL; \
} \
}
/* Define the i386 relocations. */
static const char *
elf_i386_reloc_type (rtype)
unsigned long rtype;
{
switch (rtype)
{
case R_386_NONE: return "R_386_NONE";
case R_386_32: return "R_386_32";
case R_386_PC32: return "R_386_PC32";
case R_386_GOT32: return "R_386_GOT32";
case R_386_PLT32: return "R_386_PLT32";
case R_386_COPY: return "R_386_COPY";
case R_386_GLOB_DAT: return "R_386_GLOB_DAT";
case R_386_JMP_SLOT: return "R_386_JMP_SLOT";
case R_386_RELATIVE: return "R_386_RELATIVE";
case R_386_GOTOFF: return "R_386_GOTOFF";
case R_386_GOTPC: return "R_386_GOTPC";
case R_386_16: return "R_386_16";
case R_386_PC16: return "R_386_PC16";
case R_386_PC8: return "R_386_PC8";
default: return NULL;
}
}
/* Define the m68k relocations. */
#include "elf/m68k.h"
/* Define the SPARC relocations. */
#include "elf/sparc.h"
/* Define the m32r relocations. */
#include "elf/m32r.h"
static const char *
elf_v850_reloc_type (rtype)
unsigned long rtype;
{
switch (rtype)
{
case R_V850_NONE: return "R_V850_NONE";
case R_V850_9_PCREL: return "R_V850_9_PCREL";
case R_V850_22_PCREL: return "R_V850_22_PCREL";
case R_V850_HI16_S: return "R_V850_HI16_S";
case R_V850_HI16: return "R_V850_HI16";
case R_V850_LO16: return "R_V850_LO16";
case R_V850_32: return "R_V850_32";
case R_V850_16: return "R_V850_16";
case R_V850_8: return "R_V850_8";
case R_V850_SDA_16_16_OFFSET: return "R_V850_SDA_16_16_OFFSET";
case R_V850_SDA_15_16_OFFSET: return "R_V850_SDA_15_16_OFFSET";
case R_V850_ZDA_16_16_OFFSET: return "R_V850_ZDA_16_16_OFFSET";
case R_V850_ZDA_15_16_OFFSET: return "R_V850_ZDA_15_16_OFFSET";
case R_V850_TDA_6_8_OFFSET: return "R_V850_TDA_6_8_OFFSET";
case R_V850_TDA_7_8_OFFSET: return "R_V850_TDA_7_8_OFFSET";
case R_V850_TDA_7_7_OFFSET: return "R_V850_TDA_7_7_OFFSET";
case R_V850_TDA_16_16_OFFSET: return "R_V850_TDA_16_16_OFFSET";
/* start-sanitize-v850e */
case R_V850_TDA_4_5_OFFSET: return "R_V850_TDA_4_5_OFFSET";
case R_V850_TDA_4_4_OFFSET: return "R_V850_TDA_4_4_OFFSET";
case R_V850_SDA_16_16_SPLIT_OFFSET: return "R_V850_SDA_16_16_SPLIT_OFFSET";
case R_V850_ZDA_16_16_SPLIT_OFFSET: return "R_V850_ZDA_16_16_SPLIT_OFFSET";
case R_V850_CALLT_6_7_OFFSET: return "R_V850_CALLT_6_7_OFFSET";
case R_V850_CALLT_16_16_OFFSET: return "R_V850_CALLT_16_16_OFFSET";
/* end-sanitize-v850e */
default: return NULL;
}
}
/* Define the function to get ARM relocations. */
#include "elf/d10v.h"
/* start-sanitize-d30v */
/* Define the function to get ARM relocations. */
#include "elf/d30v.h"
/* end-sanitize-d30v */
/* Define the function to get SH relocations. */
#include "elf/sh.h"
/* Define the function to get MN10300 relocations. */
#include "elf/mn10300.h"
/* Define the function to get MN10200 relocations. */
#include "elf/mn10200.h"
/* Define the function to get PPC relocations. */
#include "elf/ppc.h"
/* Define the function to get MIPS relocations. */
#include "elf/mips.h"
/* Define the function to get MIPS relocations. */
#include "elf/alpha.h"
/* Define the function to get ARM relocations. */
#include "elf/arm.h"
/* Display the contents of the relocation data
found at the specified offset. */
static int
@ -539,7 +432,7 @@ dump_relocations (file, rel_offset, rel_size, symtab, strtab)
break;
case EM_CYGNUS_V850:
rtype = elf_v850_reloc_type (ELF32_R_TYPE (info));
rtype = v850_reloc_type (ELF32_R_TYPE (info));
break;
case EM_CYGNUS_D10V:
@ -565,7 +458,7 @@ dump_relocations (file, rel_offset, rel_size, symtab, strtab)
break;
case EM_PPC:
rtype = elf_ppc_reloc_type (ELF32_R_TYPE (info));
rtype = ppc_reloc_type (ELF32_R_TYPE (info));
break;
case EM_MIPS:
@ -580,6 +473,14 @@ dump_relocations (file, rel_offset, rel_size, symtab, strtab)
case EM_ARM:
rtype = elf_arm_reloc_type (ELF32_R_TYPE (info));
break;
case EM_CYGNUS_ARC:
rtype = elf_arc_reloc_type (ELF32_R_TYPE (info));
break;
case EM_PARISC:
rtype = elf32_hppa_reloc_type (ELF32_R_TYPE (info));
break;
}
if (rtype == NULL)
@ -797,6 +698,7 @@ get_machine_name (e_machine)
/* start-sanitize-d30v */
case EM_CYGNUS_D30V: return "d30v";
/* end-sanitize-d30v */
case EM_CYGNUS_ARC: return "Arc";
case EM_CYGNUS_M32R: return "M32r";
case EM_CYGNUS_V850: return "v850";
case EM_CYGNUS_MN10300: return "mn10300";
@ -1730,11 +1632,9 @@ process_relocs (file)
}
else
{
Elf32_Internal_Shdr * section;
unsigned long i;
int found = 0;
assert (string_table != NULL);
Elf32_Internal_Shdr * section;
unsigned long i;
int found = 0;
for (i = 0, section = section_headers;
i < elf_header.e_shnum;
@ -1754,10 +1654,15 @@ process_relocs (file)
Elf_Internal_Sym * symtab;
char * strtab;
printf
(_("\nRelocation section '%s' at offset 0x%x contains %d entries:\n"),
SECTION_NAME (section), rel_offset,
rel_size / section->sh_entsize);
printf (_("\nRelocation section "));
if (string_table == NULL)
printf ("%d", section->sh_name);
else
printf ("'%s'", SECTION_NAME (section));
printf (_(" at offset 0x%x contains %d entries:\n"),
rel_offset, rel_size / section->sh_entsize);
symsec = section_headers + section->sh_link;