OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [include/] [elf/] [reloc-macros.h] - Diff between revs 107 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 107 Rev 1765
/* Generic relocation support for BFD.
/* Generic relocation support for BFD.
   Copyright (C) 1998 Free Software Foundation, Inc.
   Copyright (C) 1998 Free Software Foundation, Inc.
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
 
 
   This program is free software; you can redistribute it and/or modify
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   along with this program; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
/* These macros are used by the various *.h target specific header
/* These macros are used by the various *.h target specific header
   files to either generate an enum containing all the known relocations
   files to either generate an enum containing all the known relocations
   for that target, or if RELOC_MACROS_GEN_FUNC is defined, a recognition
   for that target, or if RELOC_MACROS_GEN_FUNC is defined, a recognition
   function is generated instead.  (This is used by binutils/readelf.c)
   function is generated instead.  (This is used by binutils/readelf.c)
 
 
   Given a header file like this:
   Given a header file like this:
 
 
        START_RELOC_NUMBERS (foo)
        START_RELOC_NUMBERS (foo)
            RELOC_NUMBER (R_foo_NONE,    0)
            RELOC_NUMBER (R_foo_NONE,    0)
            RELOC_NUMBER (R_foo_32,      1)
            RELOC_NUMBER (R_foo_32,      1)
            FAKE_RELOC   (R_foo_illegal, 2)
            FAKE_RELOC   (R_foo_illegal, 2)
            EMPTY_RELOC  (R_foo_max)
            EMPTY_RELOC  (R_foo_max)
        END_RELOC_NUMBERS
        END_RELOC_NUMBERS
 
 
   Then the following will be produced by default (ie if
   Then the following will be produced by default (ie if
   RELOC_MACROS_GEN_FUNC is *not* defined).
   RELOC_MACROS_GEN_FUNC is *not* defined).
 
 
        enum foo
        enum foo
        {
        {
          foo = -1,
          foo = -1,
          R_foo_NONE = 0,
          R_foo_NONE = 0,
          R_foo_32 = 1,
          R_foo_32 = 1,
          R_foo_illegal = 2,
          R_foo_illegal = 2,
          R_foo_max
          R_foo_max
        };
        };
 
 
   If RELOC_MACROS_GEN_FUNC *is* defined, then instead the
   If RELOC_MACROS_GEN_FUNC *is* defined, then instead the
   following function will be generated:
   following function will be generated:
 
 
        static const char * foo PARAMS ((unsigned long rtype));
        static const char * foo PARAMS ((unsigned long rtype));
        static const char *
        static const char *
        foo (rtype)
        foo (rtype)
            unsigned long rtype;
            unsigned long rtype;
        {
        {
           switch (rtype)
           switch (rtype)
           {
           {
           case 0: return "R_foo_NONE";
           case 0: return "R_foo_NONE";
           case 1: return "R_foo_32";
           case 1: return "R_foo_32";
           default: return NULL;
           default: return NULL;
           }
           }
        }
        }
   */
   */
 
 
#ifndef _RELOC_MACROS_H
#ifndef _RELOC_MACROS_H
#define _RELOC_MACROS_H
#define _RELOC_MACROS_H
 
 
#ifdef RELOC_MACROS_GEN_FUNC
#ifdef RELOC_MACROS_GEN_FUNC
 
 
/* This function takes the relocation number and returns the
/* This function takes the relocation number and returns the
   string version name of the name of that relocation.  If
   string version name of the name of that relocation.  If
   the relocation is not recognised, NULL is returned.  */
   the relocation is not recognised, NULL is returned.  */
 
 
#define START_RELOC_NUMBERS(name)                               \
#define START_RELOC_NUMBERS(name)                               \
static const char * name    PARAMS ((unsigned long rtype));     \
static const char * name    PARAMS ((unsigned long rtype));     \
static const char *                                             \
static const char *                                             \
name (rtype)                                                    \
name (rtype)                                                    \
        unsigned long rtype;                                    \
        unsigned long rtype;                                    \
{                                                               \
{                                                               \
  switch (rtype)                                                \
  switch (rtype)                                                \
  {
  {
 
 
#ifdef __STDC__                                   
#ifdef __STDC__                                   
#define RELOC_NUMBER(name, number)  case number : return #name ;
#define RELOC_NUMBER(name, number)  case number : return #name ;
#else
#else
#define RELOC_NUMBER(name, number)  case number : return "name" ;
#define RELOC_NUMBER(name, number)  case number : return "name" ;
#endif
#endif
 
 
#define FAKE_RELOC(name, number)    
#define FAKE_RELOC(name, number)    
#define EMPTY_RELOC(name)
#define EMPTY_RELOC(name)
 
 
#define END_RELOC_NUMBERS       \
#define END_RELOC_NUMBERS       \
    default: return NULL;       \
    default: return NULL;       \
  }                             \
  }                             \
}
}
 
 
 
 
#else /* Default to generating enum.  */
#else /* Default to generating enum.  */
 
 
/* Some compilers cannot cope with an enum that ends with a trailing
/* Some compilers cannot cope with an enum that ends with a trailing
   comma, so START_RELOC_NUMBERS creates a fake reloc entry, (initialised
   comma, so START_RELOC_NUMBERS creates a fake reloc entry, (initialised
   to -1 so that the first real entry will still default to 0).  Further
   to -1 so that the first real entry will still default to 0).  Further
   entries then prepend a comma to their definitions, creating a list
   entries then prepend a comma to their definitions, creating a list
   of enumerator entries that will satisfy these compilers.  */
   of enumerator entries that will satisfy these compilers.  */
#ifdef __STDC__
#ifdef __STDC__
#define START_RELOC_NUMBERS(name)   enum name { _##name = -1
#define START_RELOC_NUMBERS(name)   enum name { _##name = -1
#else
#else
#define START_RELOC_NUMBERS(name)   enum name { name = -1
#define START_RELOC_NUMBERS(name)   enum name { name = -1
#endif
#endif
 
 
#define RELOC_NUMBER(name, number)  , name = number
#define RELOC_NUMBER(name, number)  , name = number
#define FAKE_RELOC(name, number)    , name = number 
#define FAKE_RELOC(name, number)    , name = number 
#define EMPTY_RELOC(name)           , name 
#define EMPTY_RELOC(name)           , name 
#define END_RELOC_NUMBERS           };
#define END_RELOC_NUMBERS           };
 
 
#endif
#endif
 
 
#endif /* RELOC_MACROS_H */
#endif /* RELOC_MACROS_H */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.