This is the mail archive of the gdb-patches@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]

Re: [commit] mn10300: Register a dwarf2_reg_to_regnum function


On Sat, 3 Sep 2005 03:26:02 +0200 (CEST)
Mark Kettenis <mark.kettenis@xs4all.nl> wrote:

> > +  if (dwarf2 < 0
> > +      || dwarf2 >= (sizeof (dwarf2_to_gdb) / sizeof (dwarf2_to_gdb[0]))
> > +      || dwarf2_to_gdb[dwarf2] == -1)
> > +    internal_error (__FILE__, __LINE__,
> > +                    "bogus register number in debug info: %d", dwarf2);
> > +
> > +  return dwarf2_to_gdb[dwarf2];
> > +}
> 
> Could you use ARRAY_SIZE here?

Sure.  (I should've spotted that myself...)

> And that string should be i18n'd.  or
> perhaps it's better to use gdb_assert(); saves the translators some
> work ;-).
> 
> Hmm, isn't an internal error actually inappropriate here?  The
> condition could be triggered by bogus debug info, couldn't it?  That
> should be handled more graceful.

I agree.  It seems to me that a warning is more appropriate.  But what
should we do about the return value?  There is no good choice since the
value is bogus.  I ended up just returning 0.  (It should be safe...)

For the time being, I've committed the patch below.  I'm willing to
change it again if we end up deciding that an internal error or assert
is really more appropriate.

	* mn10300-tdep.c (mn10300_dwarf2_reg_to_regnum): Use ARRAY_SIZE.
	Change internal error to warning.  Add i18n markup to warning
	string.

Index: mn10300-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mn10300-tdep.c,v
retrieving revision 1.129
retrieving revision 1.131
diff -u -p -r1.129 -r1.131
--- mn10300-tdep.c	3 Sep 2005 01:12:21 -0000	1.129
+++ mn10300-tdep.c	3 Sep 2005 01:55:26 -0000	1.131
@@ -961,10 +961,12 @@ mn10300_dwarf2_reg_to_regnum (int dwarf2
   };
 
   if (dwarf2 < 0
-      || dwarf2 >= (sizeof (dwarf2_to_gdb) / sizeof (dwarf2_to_gdb[0]))
+      || dwarf2 >= ARRAY_SIZE (dwarf2_to_gdb)
       || dwarf2_to_gdb[dwarf2] == -1)
-    internal_error (__FILE__, __LINE__,
-                    "bogus register number in debug info: %d", dwarf2);
+    {
+      warning (_("Bogus register number in debug info: %d"), dwarf2);
+      return 0;
+    }
 
   return dwarf2_to_gdb[dwarf2];
 }


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