This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: iconv returning byte order marks for Solaris 2.9
- From: Andrew <ke at alum dot bu dot edu>
- To: gdb-patches at sourceware dot org
- Date: Tue, 21 Jul 2009 11:55:35 -0700 (PDT)
- Subject: Re: iconv returning byte order marks for Solaris 2.9
- Reply-to: ke at alum dot bu dot edu
Thanks for the patch. I'm actually generating solaris binaries
using a cross compiler (from a Linux box) and in my current
configuration it doesn't work. __STDC_ISO_10646__ is not defined.
I will try installing gcc locally and see how that works.
Andrew
--- On Fri, 7/17/09, Tom Tromey <tromey@redhat.com> wrote:
> From: Tom Tromey <tromey@redhat.com>
> Subject: Re: iconv returning byte order marks for Solaris 2.9
> To: ke@alum.bu.edu
> Cc: gdb-patches@sourceware.org
> Date: Friday, July 17, 2009, 3:02 PM
> >>>>> "Andrew" ==
> Andrew? <ke@alum.bu.edu>
> writes:
>
> Andrew> In the system I'm working iconv_open doesn't
> accept "wchar_t" as
> Andrew> encoding name. It failed when
> INTERMEDIATE_ENCODING was set to
> Andrew> that.
>
> Ah, thanks.
>
> Andrew> But setting INTERMEDIATE_ENCODING to "UCS-4BE"
> eliminated the
> Andrew> BOM in the beginning.
>
> Great.? Could you try the appended patch?
> I'm testing it on Linux.
>
> Tom
>
> diff --git a/gdb/gdb_wchar.h b/gdb/gdb_wchar.h
> index 07a6c87..241e051 100644
> --- a/gdb/gdb_wchar.h
> +++ b/gdb/gdb_wchar.h
> @@ -35,8 +35,6 @@
> ? ? wrappers for the wchar_t functionality we
> use.? */
>
>
> -#define INTERMEDIATE_ENCODING "wchar_t"
> -
> #if defined (HAVE_ICONV)
> #include <iconv.h>
> #else
> @@ -63,6 +61,20 @@ typedef wint_t gdb_wint_t;
>
> #define LCST(X) L ## X
>
> +#ifdef __STDC_ISO_10646__
> +/* On Solaris 9, iconv_open does not accept
> "wchar_t".? So, on this
> +???platform, and other platforms where
> wchar_t is known to use
> +???ISO-10646, choose an appropriate
> explicit charset name.? Also,
> +???UCS-4 on Solaris will emit a BOM, which
> we don't want.? So, we
> +???choose an explicit little- or big-endian
> variant, depending on the
> +???host.? */
> +#if WORDS_BIGENDIAN
> +#define INTERMEDIATE_ENCODING "UCS-4BE"
> +#else
> +#define INTERMEDIATE_ENCODING "UCS-4LE"
> +#endif
> +#endif
> +
> #else
>
> typedef char gdb_wchar_t;
> @@ -87,4 +99,8 @@ typedef int gdb_wint_t;
>
> #endif
>
> +#ifndef INTERMEDIATE_ENCODING
> +#define INTERMEDIATE_ENCODING "wchar_t"
> +#endif
> +
> #endif /* GDB_WCHAR_H */
>