--- elfutils-0.155.org/src/ld.h	2012-10-03 23:22:25.403785882 +0300
+++ elfutils-0.155_backup/src/ld.h	2012-12-04 18:56:18.872566578 +0200
@@ -291,7 +291,7 @@
   const char **(*lib_extensions) (struct ld_state *)
        __attribute__ ((__const__));
 #define LIB_EXTENSION(state) \
-  DL_CALL_FCT ((state)->callbacks.lib_extensions, (state))
+  (state)->callbacks.lib_extensions(state)
 
   /* Process the given file.  If the file is not yet open, open it.
      The first parameter is a file descriptor for the file which can
@@ -302,12 +302,12 @@
   int (*file_process) (int fd, struct usedfiles *, struct ld_state *,
 		       struct usedfiles **);
 #define FILE_PROCESS(fd, file, state, nextp) \
-  DL_CALL_FCT ((state)->callbacks.file_process, (fd, file, state, nextp))
+  (state)->callbacks.file_process(fd, file, state, nextp)
 
   /* Close the given file.  */
   int (*file_close) (struct usedfiles *, struct ld_state *);
 #define FILE_CLOSE(file, state) \
-  DL_CALL_FCT ((state)->callbacks.file_close, (file, state))
+  (state)->callbacks.file_close(file, state)
 
   /* Create the output sections now.  This requires knowledge about
      all the sections we will need.  It may be necessary to sort the
@@ -319,99 +319,97 @@
      output routines.  */
   void (*create_sections) (struct ld_state *);
 #define CREATE_SECTIONS(state) \
-  DL_CALL_FCT ((state)->callbacks.create_sections, (state))
+  (state)->callbacks.create_sections(state)
 
   /* Determine whether we have any non-weak unresolved references left.  */
   int (*flag_unresolved) (struct ld_state *);
 #define FLAG_UNRESOLVED(state) \
-  DL_CALL_FCT ((state)->callbacks.flag_unresolved, (state))
+  (state)->callbacks.flag_unresolved(state)
 
   /* Create the sections which are generated by the linker and are not
      present in the input file.  */
   void (*generate_sections) (struct ld_state *);
 #define GENERATE_SECTIONS(state) \
-  DL_CALL_FCT ((state)->callbacks.generate_sections, (state))
+  (state)->callbacks.generate_sections(state)
 
   /* Open the output file.  The file name is given or "a.out".  We
      create as much of the ELF structure as possible.  */
   int (*open_outfile) (struct ld_state *, int, int, int);
 #define OPEN_OUTFILE(state, machine, class, data) \
-  DL_CALL_FCT ((state)->callbacks.open_outfile, (state, machine, class, data))
+  (state)->callbacks.open_outfile(state, machine, class, data)
 
   /* Create the data for the output file.  */
   int (*create_outfile) (struct ld_state *);
 #define CREATE_OUTFILE(state) \
-  DL_CALL_FCT ((state)->callbacks.create_outfile, (state))
+  (state)->callbacks.create_outfile(state)
 
   /* Process a relocation section.  */
   void (*relocate_section) (struct ld_state *, Elf_Scn *, struct scninfo *,
 			    const Elf32_Word *);
 #define RELOCATE_SECTION(state, outscn, first, dblindirect) \
-  DL_CALL_FCT ((state)->callbacks.relocate_section, (state, outscn, first,    \
-						     dblindirect))
+  (state)->callbacks.relocate_section(state, outscn, first, dblindirect)
 
   /* Allocate a data buffer for the relocations of the given output
      section.  */
   void (*count_relocations) (struct ld_state *, struct scninfo *);
 #define COUNT_RELOCATIONS(state, scninfo) \
-  DL_CALL_FCT ((state)->callbacks.count_relocations, (state, scninfo))
+  (state)->callbacks.count_relocations(state, scninfo)
 
   /* Create relocations for executable or DSO.  */
   void (*create_relocations) (struct ld_state *, const Elf32_Word *);
 #define CREATE_RELOCATIONS(state, dlbindirect) \
-  DL_CALL_FCT ((state)->callbacks.create_relocations, (state, dblindirect))
+  (state)->callbacks.create_relocations(state, dblindirect)
 
   /* Finalize the output file.  */
   int (*finalize) (struct ld_state *);
 #define FINALIZE(state) \
-  DL_CALL_FCT ((state)->callbacks.finalize, (state))
+  (state)->callbacks.finalize(state)
 
   /* Check whether special section number is known.  */
   bool (*special_section_number_p) (struct ld_state *, size_t);
 #define SPECIAL_SECTION_NUMBER_P(state, number) \
-  DL_CALL_FCT ((state)->callbacks.special_section_number_p, (state, number))
+  (state)->callbacks.special_section_number_p(state, number)
 
   /* Check whether section type is known.  */
   bool (*section_type_p) (struct ld_state *, XElf_Word);
 #define SECTION_TYPE_P(state, type) \
-  DL_CALL_FCT ((state)->callbacks.section_type_p, (state, type))
+  (state)->callbacks.section_type_p(state, type)
 
   /* Return section flags for .dynamic section.  */
   XElf_Xword (*dynamic_section_flags) (struct ld_state *);
 #define DYNAMIC_SECTION_FLAGS(state) \
-  DL_CALL_FCT ((state)->callbacks.dynamic_section_flags, (state))
+  (state)->callbacks.dynamic_section_flags(state)
 
   /* Create the data structures for the .plt section and initialize it.  */
   void (*initialize_plt) (struct ld_state *, Elf_Scn *scn);
 #define INITIALIZE_PLT(state, scn) \
-  DL_CALL_FCT ((state)->callbacks.initialize_plt, (state, scn))
+  (state)->callbacks.initialize_plt(state, scn)
 
   /* Create the data structures for the .rel.plt section and initialize it.  */
   void (*initialize_pltrel) (struct ld_state *, Elf_Scn *scn);
 #define INITIALIZE_PLTREL(state, scn) \
-  DL_CALL_FCT ((state)->callbacks.initialize_pltrel, (state, scn))
+  (state)->callbacks.initialize_pltrel(state, scn)
 
   /* Finalize the .plt section the what belongs to them.  */
   void (*finalize_plt) (struct ld_state *, size_t, size_t, struct symbol **);
 #define FINALIZE_PLT(state, nsym, nsym_dyn, ndxtosym) \
-  DL_CALL_FCT ((state)->callbacks.finalize_plt, (state, nsym, nsym_dyn, \
-						 ndxtosym))
+  (state)->callbacks.finalize_plt(state, nsym, nsym_dyn,  ndxtosym)
 
   /* Create the data structures for the .got section and initialize it.  */
   void (*initialize_got) (struct ld_state *, Elf_Scn *scn);
 #define INITIALIZE_GOT(state, scn) \
-  DL_CALL_FCT ((state)->callbacks.initialize_got, (state, scn))
+  (state)->callbacks.initialize_got(state, scn)
 
   /* Create the data structures for the .got.plt section and initialize it.  */
   void (*initialize_gotplt) (struct ld_state *, Elf_Scn *scn);
 #define INITIALIZE_GOTPLT(state, scn) \
-  DL_CALL_FCT ((state)->callbacks.initialize_gotplt, (state, scn))
+  (state)->callbacks.initialize_gotplt(state, scn)
 
   /* Return the tag corresponding to the native relocation type for
      the platform.  */
   int (*rel_type) (struct ld_state *);
 #define REL_TYPE(state) \
-  DL_CALL_FCT ((state)->callbacks.rel_type, (state))
+  (state)->callbacks.rel_type(state)
 };
 
 
