bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Replace bfd_elf_?rpintf_vma with function pointer


From: Nick Clifton
Subject: [PATCH] Replace bfd_elf_?rpintf_vma with function pointer
Date: 11 Aug 2001 17:45:43 +0100

Hi Guys,

  H.J.'s recent patch to introduce the bfd_elf_?printf_vma() functions
  has one small drawback - it cause non-ELF targeted builds to fail
  because bfd.c references these functions but elf.o is not included
  in the creation of libbfd.a.

  To fix this I have added two new fields the the elf_backend_data
  structure (elf_backend_sprintf_vma and elf_backend_fprintf_vma) and
  arranged for bfd_?printf_vma to invoke the appropriate elf function
  via the backend data structure, if the target is an ELF target.

  Here is the patch I have applied.

Cheers
        Nick

2001-08-11  Nick Clifton  <address@hidden>

        * elf-bfd.h (struct elf_backend_data): Add new fields
        'elf_backend_sprintf_vma' and 'elf_backend_fprintf_vma'.
        (bfd_elf_sprintf_vma): Rename function prototype to
        '_bfd_elf_sprintf_vma'.
        (bfd_elf_fprintf_vma): Rename function prototype to
        '_bfd_elf_fprintf_vma'.
        * bfd.c (bfd_sprintf_vma): Do not invoke bfd_elf_sprintf_vma
        directly, instead indirect via the elf_backend_data structure.
        (bfd_fprintf_vma): Do not invoke bfd_elf_fprintf_vma directly,
        instead indirect via the elf_backend_data structure.
        * elf.c (bfd_elf_sprintf_vma): Rename to _bfd_elf_sprintf_vma.
        (bfd_elf_fprintf_vma): Rename to _bfd_elf_fprintf_vma.
        * elfxx-target.h (elf_backend_sprintf_vma): Initialise if not
        already defined.
        (elf_backend_fprintf_vma): Initialise if not already defined.
        (struct elf_backend_data): Initialise the
        elf_backend_sprintf_vma and elf_backend_fprintf_vma fields.

Index: elf-bfd.h
===================================================================
RCS file: /cvs/src/src/bfd/elf-bfd.h,v
retrieving revision 1.39
diff -p -r1.39 elf-bfd.h
*** elf-bfd.h   2001/08/09 16:46:02     1.39
--- elf-bfd.h   2001/08/11 16:39:22
*************** struct elf_backend_data
*** 636,641 ****
--- 636,645 ----
       note is found in a core file. */
    boolean (*elf_backend_grok_psinfo) PARAMS ((bfd *, Elf_Internal_Note *));
  
+     /* Functions to print VMAs.  Special code to handle 64 bit ELF files.  */
+   void (* elf_backend_sprintf_vma) PARAMS ((bfd *, char *, bfd_vma));
+   void (* elf_backend_fprintf_vma) PARAMS ((bfd *, PTR, bfd_vma));
+ 
    /* The swapping table to use when dealing with ECOFF information.
       Used for the MIPS ELF .mdebug section.  */
    const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
*************** extern void bfd_elf_print_symbol PARAMS 
*** 999,1006 ****
  #define bfd_elf32_print_symbol        bfd_elf_print_symbol
  #define bfd_elf64_print_symbol        bfd_elf_print_symbol
  
! extern void bfd_elf_sprintf_vma PARAMS ((bfd *, char *, bfd_vma));
! extern void bfd_elf_fprintf_vma PARAMS ((bfd *, PTR, bfd_vma));
  
  extern unsigned long bfd_elf_hash PARAMS ((const char *));
  
--- 1003,1010 ----
  #define bfd_elf32_print_symbol        bfd_elf_print_symbol
  #define bfd_elf64_print_symbol        bfd_elf_print_symbol
  
! extern void _bfd_elf_sprintf_vma PARAMS ((bfd *, char *, bfd_vma));
! extern void _bfd_elf_fprintf_vma PARAMS ((bfd *, PTR, bfd_vma));
  
  extern unsigned long bfd_elf_hash PARAMS ((const char *));
  
Index: bfd.c
===================================================================
RCS file: /cvs/src/src/bfd/bfd.c,v
retrieving revision 1.17
diff -p -r1.17 bfd.c
*** bfd.c       2001/08/10 18:43:44     1.17
--- bfd.c       2001/08/11 16:39:19
*************** bfd_sprintf_vma (abfd, buf, value)
*** 1270,1276 ****
       bfd_vma value;
  {
    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
!     bfd_elf_sprintf_vma (abfd, buf, value);
    else
      sprintf_vma (buf, value);
  }
--- 1270,1276 ----
       bfd_vma value;
  {
    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
!     get_elf_backend_data (abfd)->elf_backend_sprintf_vma (abfd, buf, value);
    else
      sprintf_vma (buf, value);
  }
*************** bfd_fprintf_vma (abfd, stream, value)
*** 1282,1288 ****
       bfd_vma value;
  {
    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
!     bfd_elf_fprintf_vma (abfd, stream, value);
    else
      fprintf_vma ((FILE *) stream, value);
  }
--- 1282,1288 ----
       bfd_vma value;
  {
    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
!     get_elf_backend_data (abfd)->elf_backend_fprintf_vma (abfd, stream, 
value);
    else
      fprintf_vma ((FILE *) stream, value);
  }

Index: elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.79
diff -p -r1.79 elf.c
*** elf.c       2001/08/10 08:06:23     1.79
--- elf.c       2001/08/11 16:39:27
*************** bfd_get_elf_phdrs (abfd, phdrs)
*** 5996,6002 ****
  }
  
  void
! bfd_elf_sprintf_vma (abfd, buf, value)
       bfd *abfd ATTRIBUTE_UNUSED;
       char *buf;
       bfd_vma value;
--- 5996,6002 ----
  }
  
  void
! _bfd_elf_sprintf_vma (abfd, buf, value)
       bfd *abfd ATTRIBUTE_UNUSED;
       char *buf;
       bfd_vma value;
*************** bfd_elf_sprintf_vma (abfd, buf, value)
*** 6027,6033 ****
  }
  
  void
! bfd_elf_fprintf_vma (abfd, stream, value)
       bfd *abfd ATTRIBUTE_UNUSED;
       PTR stream;
       bfd_vma value;
--- 6027,6033 ----
  }
  
  void
! _bfd_elf_fprintf_vma (abfd, stream, value)
       bfd *abfd ATTRIBUTE_UNUSED;
       PTR stream;
       bfd_vma value;

Index: elfxx-target.h
===================================================================
RCS file: /cvs/src/src/bfd/elfxx-target.h,v
retrieving revision 1.24
diff -p -r1.24 elfxx-target.h
*** elfxx-target.h      2001/08/08 13:09:33     1.24
--- elfxx-target.h      2001/08/11 16:39:28
*************** Foundation, Inc., 59 Temple Place - Suit
*** 338,343 ****
--- 338,349 ----
  #ifndef elf_backend_grok_psinfo
  #define elf_backend_grok_psinfo                       NULL
  #endif
+ #ifndef elf_backend_sprintf_vma
+ #define elf_backend_sprintf_vma                       _bfd_elf_sprintf_vma
+ #endif
+ #ifndef elf_backend_fprintf_vma
+ #define elf_backend_fprintf_vma                       _bfd_elf_fprintf_vma
+ #endif
  
  /* Previously, backends could only use SHT_REL or SHT_RELA relocation
     sections, but not both.  They defined USE_REL to indicate SHT_REL
*************** static CONST struct elf_backend_data elf
*** 423,428 ****
--- 429,436 ----
    elf_backend_count_relocs,
    elf_backend_grok_prstatus,
    elf_backend_grok_psinfo,
+   elf_backend_sprintf_vma,
+   elf_backend_fprintf_vma,
    elf_backend_ecoff_debug_swap,
    ELF_MACHINE_ALT1,
    ELF_MACHINE_ALT2,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]