gdb.mi/list-thread-groups-available.exp: read entries one by one instead of increasin...
[deliverable/binutils-gdb.git] / gdb / guile / scm-disasm.c
index 25cae5a6e652a9e3c2fd567b5661a4149374e330..6b34a229942d8a63f35142b48fbd9392b476db74 100644 (file)
@@ -1,6 +1,6 @@
 /* Scheme interface to architecture.
 
-   Copyright (C) 2014-2017 Free Software Foundation, Inc.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -146,7 +146,7 @@ gdbscm_disassembler::gdbscm_disassembler (struct gdbarch *gdbarch,
 static int
 gdbscm_print_insn_from_port (struct gdbarch *gdbarch,
                             SCM port, ULONGEST offset, CORE_ADDR memaddr,
-                            struct ui_file *stream, int *branch_delay_insns)
+                            string_file *stream, int *branch_delay_insns)
 {
   gdbscm_disassembler di (gdbarch, stream, port, offset);
 
@@ -245,33 +245,30 @@ gdbscm_arch_disassemble (SCM self, SCM start_scm, SCM rest)
   for (pc = start, i = 0; pc <= end && i < count; )
     {
       int insn_len = 0;
-      struct ui_file *memfile = mem_fileopen ();
-      struct cleanup *cleanups = make_cleanup_ui_file_delete (memfile);
+      string_file buf;
 
-      TRY
+      gdbscm_gdb_exception exc {};
+      try
        {
          if (using_port)
            {
              insn_len = gdbscm_print_insn_from_port (gdbarch, port, offset,
-                                                     pc, memfile, NULL);
+                                                     pc, &buf, NULL);
            }
          else
-           insn_len = gdb_print_insn (gdbarch, pc, memfile, NULL);
+           insn_len = gdb_print_insn (gdbarch, pc, &buf, NULL);
        }
-      CATCH (except, RETURN_MASK_ALL)
+      catch (const gdb_exception &except)
        {
-         GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
+         exc = unpack (except);
        }
-      END_CATCH
 
-      std::string as = ui_file_as_string (memfile);
-
-      result = scm_cons (dascm_make_insn (pc, as.c_str (), insn_len),
+      GDBSCM_HANDLE_GDB_EXCEPTION (exc);
+      result = scm_cons (dascm_make_insn (pc, buf.c_str (), insn_len),
                         result);
 
       pc += insn_len;
       i++;
-      do_cleanups (cleanups);
     }
 
   return scm_reverse_x (result, SCM_EOL);
This page took 0.024953 seconds and 4 git commands to generate.