Merge branch 'vendor/GDB'
authorJohn Marino <draco@marino.st>
Thu, 1 Sep 2011 17:50:06 +0000 (19:50 +0200)
committerJohn Marino <draco@marino.st>
Thu, 1 Sep 2011 17:50:06 +0000 (19:50 +0200)
Conflicts:
contrib/gdb-7/gdb/charset.c

16 files changed:
1  2 
contrib/gdb-7/bfd/config.bfd
contrib/gdb-7/gdb/amd64-tdep.h
contrib/gdb-7/gdb/charset.c
contrib/gdb-7/gdb/configure.host
contrib/gdb-7/gdb/configure.tgt
contrib/gdb-7/gdb/defs.h
contrib/gdb-7/gdb/i386-tdep.h
contrib/gdb-7/gdb/i386bsd-nat.c
contrib/gdb-7/gdb/i386fbsd-tdep.c
contrib/gdb-7/gdb/inferior.c
contrib/gdb-7/gdb/infrun.c
contrib/gdb-7/gdb/main.c
contrib/gdb-7/gdb/osabi.c
contrib/gdb-7/gdb/tui/tui-io.c
contrib/gdb-7/include/elf/common.h
contrib/gdb-7/include/libiberty.h

@@@ -632,14 -636,9 +641,14 @@@ case "${targ}" i
      targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec"
      want64=true
      ;;
 +  x86_64-*-dragonfly*)
 +    targ_defvec=bfd_elf64_x86_64_vec
 +    targ_selvecs="bfd_elf32_i386_vec bfd_elf64_x86_64_vec bfd_elf64_l1om_vec"
 +    want64=true
 +    ;;
    x86_64-*-linux-*)
      targ_defvec=bfd_elf64_x86_64_vec
-     targ_selvecs="bfd_elf32_i386_vec i386linux_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec"
+     targ_selvecs="bfd_elf32_i386_vec bfd_elf32_x86_64_vec i386linux_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec"
      want64=true
      ;;
    x86_64-*-mingw*)
Simple merge
@@@ -509,20 -484,10 +517,20 @@@ convert_between_encodings (const char *
        return;
      }
  
 -  desc = iconv_open (to, from);
 -  if (desc == (iconv_t) -1)
 -    perror_with_name (_("Converting character sets"));
 -  cleanups = make_cleanup (cleanup_iconv, &desc);
 +  if (!strcmp (from, "wchar_t"))
 +    {
 +      if (strcmp (to, host_charset ()))
-       perror_with_name ("Converting character sets");
++      perror_with_name (_("Converting character sets"));
 +      cleanups = NULL;        /* silence gcc complaints */
 +      use_wctomb = 1;
 +    }
 +  else
 +    {
 +      desc = iconv_open (to, from);
 +      if (desc == (iconv_t) -1)
-       perror_with_name ("Converting character sets");
++      perror_with_name (_("Converting character sets"));
 +      cleanups = make_cleanup (cleanup_iconv, &desc);
 +    }
  
    inleft = num_bytes;
    inp = (char *) bytes;
@@@ -633,9 -591,9 +642,9 @@@ make_wchar_iterator (const gdb_byte *in
    struct wchar_iterator *result;
    iconv_t desc;
  
 -  desc = iconv_open (INTERMEDIATE_ENCODING, charset);
 +  desc = iconv_open (host_charset (), charset);
    if (desc == (iconv_t) -1)
-     perror_with_name ("Converting character sets");
+     perror_with_name (_("Converting character sets"));
  
    result = XNEW (struct wchar_iterator);
    result->desc = desc;
@@@ -682,89 -637,75 +691,91 @@@ wchar_iterate (struct wchar_iterator *i
       necessarily update its outgoing arguments when it encounters an
       invalid input sequence -- but we want to reliably report this to
       our caller so it can emit an escape sequence.  */
 -  out_request = 1;
 -  while (iter->bytes > 0)
 +  while (iter->inter_len == 0 && iter->bytes > 0)
      {
 -      char *outptr = (char *) &iter->out[0];
 -      char *orig_inptr = iter->input;
 -      size_t orig_in = iter->bytes;
 -      size_t out_avail = out_request * sizeof (gdb_wchar_t);
 -      size_t num;
 -      size_t r = iconv (iter->desc,
 -                      (ICONV_CONST char **) &iter->input, 
 -                      &iter->bytes, &outptr, &out_avail);
 -
 -      if (r == (size_t) -1)
 +      out_request = 1;
 +      while (iter->bytes > 0)
        {
 -        switch (errno)
 -          {
 -          case EILSEQ:
 -            /* Invalid input sequence.  We still might have
 -               converted a character; if so, return it.  */
 -            if (out_avail < out_request * sizeof (gdb_wchar_t))
 -              break;
 -            
 -            /* Otherwise skip the first invalid character, and let
 -               the caller know about it.  */
 -            *out_result = wchar_iterate_invalid;
 -            *ptr = iter->input;
 -            *len = iter->width;
 -            iter->input += iter->width;
 -            iter->bytes -= iter->width;
 -            return 0;
 +        char *outptr = (char *) &iter->inter[iter->inter_len];
 +        size_t out_avail = out_request;
  
 -          case E2BIG:
 -            /* We ran out of space.  We still might have converted a
 -               character; if so, return it.  Otherwise, grow the
 -               buffer and try again.  */
 -            if (out_avail < out_request * sizeof (gdb_wchar_t))
 -              break;
 -
 -            ++out_request;
 -            if (out_request > iter->out_size)
 +        size_t r = iconv (iter->desc,
 +                          (ICONV_CONST char **) &iter->input, &iter->bytes,
 +                          &outptr, &out_avail);
 +        if (r == (size_t) -1)
 +          {
 +            switch (errno)
                {
 -                iter->out_size = out_request;
 -                iter->out = xrealloc (iter->out,
 -                                      out_request * sizeof (gdb_wchar_t));
 +              case EILSEQ:
 +                /* Invalid input sequence.  Skip it, and let the caller
 +                   know about it.  */
 +                *out_result = wchar_iterate_invalid;
 +                *ptr = iter->input;
 +                *len = iter->width;
 +                iter->input += iter->width;
 +                iter->bytes -= iter->width;
 +                return 0;
 +
 +              case E2BIG:
 +                /* We ran out of space.  We still might have converted a
 +                   character; if so, return it.  Otherwise, grow the
 +                   buffer and try again.  */
 +                if (out_avail < out_request)
 +                  break;
 +
 +                ++out_request;
 +                if (out_request > iter->inter_size)
 +                  {
 +                    iter->inter_size = out_request;
 +                    iter->inter = xrealloc (iter->inter, out_request);
 +                  }
 +                continue;
 +
 +              case EINVAL:
 +                /* Incomplete input sequence.  Let the caller know, and
 +                   arrange for future calls to see EOF.  */
 +                *out_result = wchar_iterate_incomplete;
 +                *ptr = iter->input;
 +                *len = iter->bytes;
 +                iter->bytes = 0;
 +                return 0;
 +
 +              default:
-                 perror_with_name ("Internal error while converting character sets");
++                perror_with_name (_("Internal error while "
++                                    "converting character sets"));
                }
 -            continue;
 -
 -          case EINVAL:
 -            /* Incomplete input sequence.  Let the caller know, and
 -               arrange for future calls to see EOF.  */
 -            *out_result = wchar_iterate_incomplete;
 -            *ptr = iter->input;
 -            *len = iter->bytes;
 -            iter->bytes = 0;
 -            return 0;
 -
 -          default:
 -            perror_with_name (_("Internal error while "
 -                                "converting character sets"));
            }
 +
 +        /* We converted something.  */
 +        iter->inter_len += out_request - out_avail;
 +        break;
        }
-       perror_with_name ("Internal error while converting character sets");
 +    }
 +
 +  if (iter->inter_len > 0)
 +    {
 +      int r;
 +
 +      /* Now convert from our charset to wchar_t */
 +      r = mbtowc(&iter->out, &iter->inter[0], iter->inter_len);
 +
 +      /* This must never happen: we just converted to a valid charset! */
 +      if (r < 0)
++      perror_with_name (_("Internal error while "
++                          "converting character sets"));
 +
 +      /* NUL bytes are alright */
 +      if (r == 0)
 +        r = 1;
 +
 +      iter->inter_len -= r;
 +      memmove(&iter->inter[0], &iter->inter[r], iter->inter_len);
  
 -      /* We converted something.  */
 -      num = out_request - out_avail / sizeof (gdb_wchar_t);
        *out_result = wchar_iterate_ok;
 -      *out_chars = iter->out;
 +      *out_chars = &iter->out;
        *ptr = orig_inptr;
        *len = orig_in - iter->bytes;
 -      return num;
 +      return 1;
      }
  
    /* Really done.  */
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1028,19 -1070,12 +1070,19 @@@ initialize_inferiors (void
       can only allocate an inferior when all those modules have done
       that.  Do this after initialize_progspace, due to the
       current_program_space reference.  */
 -  current_inferior_ = add_inferior (0);
 -  current_inferior_->pspace = current_program_space;
 -  current_inferior_->aspace = current_program_space->aspace;
 +     
 +  /* However, when invoked by DragonFly kgdb which always has many inferiors,
 +     the default inferior will not be defined.  The swapper process always has
 +     pid 0, which conflicts with the default. */
 +
 +  if (!kernel_debugger) {
 +    current_inferior_ = add_inferior (0);
 +    current_inferior_->pspace = current_program_space;
 +    current_inferior_->aspace = current_program_space->aspace;
 +  }
  
-   add_info ("inferiors", info_inferiors_command,
-           _("IDs of currently known inferiors."));
+   add_info ("inferiors", info_inferiors_command, 
+           _("IDs of specified inferiors (all inferiors if no argument)."));
  
    add_com ("add-inferior", no_class, add_inferior_command, _("\
  Add a new inferior.\n\
Simple merge
@@@ -91,13 -92,10 +92,13 @@@ extern int write_files
  /* GDB as it has been invoked from the command line (i.e. argv[0]).  */
  static char *gdb_program_name;
  
 +/* DragonFly kgdb support */
 +int kernel_debugger;
 +
  static void print_gdb_help (struct ui_file *);
  
- /* These two are used to set the external editor commands when gdb is farming
-    out files to be edited by another program. */
+ /* These two are used to set the external editor commands when gdb is
+    farming out files to be edited by another program.  */
  
  extern char *external_editor_command;
  
Simple merge
Simple merge
Simple merge
Simple merge