This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] BFD MinGW/Cygwin build error in bfd/peiXXgen.c


  Cygwin also fails to compile bfd/peigen.c, itself gebnerated
from source bfd/peXXigen.c.

  The patch below allows to compile both for mingw32 and cygwin hosts.
To fix the unknown wcsncasecmp function for mingw32 hosts,
I added this code:

+#ifdef __MINGW32__
+#define wcsncasecmp wcsnicmp
+#endif
  I think that using the Windows API function wcsnicmp
here is OK, but I don't know if the code should be somehow modified to
accept wcsncasecmp function if it is added later to mingw hosts...

Pierre Muller


bfd/ChangeLog entry:

2013-12-18  Pierre Muller  <muller@sourceware.org>

	peXXigen.c (u16_mbtouc): Avoid unused function warning by exculding if
	__CYGWIN__ or __MINGW32__ macro is defined.
	(rsrc_cmp): Fix short Windows OS version. Also use this code
	for mingw32 systems.
	[__MINGW32__]: Alias wcsncasecmp function to Windows API wcsnicmp function.

diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 5e2a876..05c7d8b 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -2930,7 +2930,7 @@ rsrc_write_directory (rsrc_write_data * data,
   BFD_ASSERT (nt == next_entry);
 }

-#ifdef HAVE_WCHAR_H
+#if defined HAVE_WCHAR_H && ! defined __CYGWIN__ && ! defined __MINGW32__
 /* Return the length (number of units) of the first character in S,
    putting its 'ucs4_t' representation in *PUC.  */

@@ -2979,9 +2979,16 @@ rsrc_cmp (bfd_boolean is_name, rsrc_entry * a, rsrc_entry * b)
   /* We have to perform a case insenstive, unicode string comparison...  */
   int res;

-#ifdef __CYGWIN__
+#if defined  __CYGWIN__ || defined __MINGW32__
+#ifdef __MINGW32__
+#define wcsncasecmp wcsnicmp
+#endif
   /* Under Cygwin unicode == UTF-16 == wchar_t.
      FIXME: The same is true for MingGW - we should test for that too.  */
+  bfd_byte *    astring = a->name_id.name.string;
+  unsigned int  alen    = a->name_id.name.len;
+  bfd_byte *    bstring = b->name_id.name.string;
+  unsigned int  blen    = b->name_id.name.len;
   res = wcsncasecmp ((const wchar_t *) astring + 2, (const wchar_t *) bstring + 2, min (alen, blen));
 #elif defined HAVE_WCHAR_H
   unsigned int  i;



> -----Message d'origine-----
> De : binutils-owner@sourceware.org [mailto:binutils-
> owner@sourceware.org] De la part de Pedro Alves
> Envoyà : mercredi 18 dÃcembre 2013 11:06
> Ã : asmwarrior
> Cc : GDB Development; Binutils Development
> Objet : Re: BFD MinGW build error: implicit declaration of function
> 'wcsncasecmp'
> 
> Hi there,
> 
> Adding the binutils folks.  (bfd is maintained by binutils.)
> 
> Looks like fallout from the .rsrc merge support.
> 
> On 12/18/2013 09:53 AM, asmwarrior wrote:
> > I see the build error when I build GDB(git head) under MSYS+MinGW,
> here the is build log
> >
> > mv -f .deps/pe-i386.Tpo .deps/pe-i386.Plo
> > rm -f peigen.c
> > sed -e s/XX/pe/g < ../../binutils-gdb/bfd/peXXigen.c > peigen.new
> > mv -f peigen.new peigen.c
> > /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -
> I../../binutils-gdb/bfd -D__USE_MINGW_FSEEK    -I. -I../../binutils-
> gdb/bfd -I../../binutils-gdb/bfd/../include  -DHAVE_i386pe_vec -
> DHAVE_i386pei_vec -DHAVE_bfd_elf32_i386_vec -
> DHAVE_bfd_elf32_little_generic_vec -DHAVE_bfd_elf32_big_generic_vec  -
> DBINDIR='"/mingw/bin"'  -W -Wall -Wstrict-prototypes -Wmissing-
> prototypes -Wshadow -Wno-format -Werror -O0 -g -D__USE_MINGW_ACCESS -MT
> peigen.lo -MD -MP -MF .deps/peigen.Tpo -c -o peigen.lo peigen.c
> > libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../binutils-gdb/bfd -
> D__USE_MINGW_FSEEK -I. -I../../binutils-gdb/bfd -I../../binutils-
> gdb/bfd/../include -DHAVE_i386pe_vec -DHAVE_i386pei_vec -
> DHAVE_bfd_elf32_i386_vec -DHAVE_bfd_elf32_little_generic_vec -
> DHAVE_bfd_elf32_big_generic_vec -DBINDIR=\"/mingw/bin\" -W -Wall -
> Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wno-format -Werror -
> O0 -g -D__USE_MINGW_ACCESS -MT peigen.lo -MD -MP -MF .deps/peigen.Tpo -
> c peigen.c -o peigen.o
> > peigen.c: In function 'rsrc_cmp':
> > peigen.c:3006:7: error: implicit declaration of function
> 'wcsncasecmp' [-Werror=implicit-function-declaration]
> >        res = wcsncasecmp (& awc, & bwc, 1);
> >        ^
> > cc1.exe: all warnings being treated as errors
> > make[4]: *** [peigen.lo] Error 1
> > make[4]: Leaving directory `/f/build_gdb/mybuild/bfd'
> > make[3]: *** [all-recursive] Error 1
> > make[3]: Leaving directory `/f/build_gdb/mybuild/bfd'
> > make[2]: *** [all] Error 2
> >
> > I just see this is related to the change of this commit:
> >
> > Revision: 5879bb8fc592e4aea85bdc2a84381d89850e5770
> > Author: Nick Clifton <nickc@redhat.com>
> > Date: 2013-12-17 23:39:13
> > Message:
> > * peXXigen.c: Include wchar.h if available.
> >
> > Include safe-ctype.h.
> >     (HighBitSet, SetHighBit, WithoutHighBit): New macros.
> >     (pe_print_resource_entries): Rename to
> >     rsrc_print_resource_entries.  Handle names that are not RVAs.
> >     (pe_print_resource_directory): Rename to
> >     rsrc_print_resource_directory.
> >     (pe_print_rsrc): Rename to rsrc_print_section.  Corrupt
> >     computation of RVA bias.
> >     (rsrc_count_entries): New function.
> >     (rsrc_count_directory): New function.
> >     (rsrc_parse_entry): New function.
> >     (rsrc_parse_entries): New function.
> >     (rsrc_parse_directory): New function.
> >     (rsrc_write_string): New function.
> >     (rsrc_compute_rva): New function.
> >     (rsrc_write_leaf): New function.
> >     (rsrc_write_entry): New function.
> >     (rsrc_write_directory): New function.
> >     (u16_mbtouc): New function.
> >     (rsrc_cmp): New function.
> >     (rsrc_print_name): New function.
> >     (rsrc_resource_name): New function.
> >     (rsrc_merge_string_entries): New function.
> >     (rsrc_sort_entries): New function.
> >     (rsrc_attach_chain): New function.
> >     (rsrc_merge): New function.
> >     (rsrc_process_section): New function - merges the contents of a
> >     .rsrc section.
> >     (_bfd_XXi_final_link_postscript): Call rsrc_process_section.
> >     * configure.in (AC_CHECK_HEADERS): Add wchar.h
> >     * config.in: Regenerate.
> >     * configure: Regenerate.
> > ----
> > Modified: bfd/ChangeLog
> > Modified: bfd/config.in
> > Modified: bfd/configure
> > Modified: bfd/configure.in
> > Modified: bfd/peXXigen.c
> >
> > In my ststem, wchar.h exists, but I see there is no
> functionwcsncasecmp() here.
> >
> > Thanks
> >
> > Yuanhui Zhang
> >
> 
> 
> --
> Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]