patches/gdb/6.8/100-dwarf-stack-overflow.patch
author Remy Bohmer <linux@bohmer.net>
Sun Jul 11 22:23:34 2010 +0200 (2010-07-11)
changeset 2021 3e52a1510f87
parent 570 301eb285ae7d
permissions -rw-r--r--
debug/gdb: Fix compilation for Mingw hosts

GDB requires PDcurses instead of ncurses while running on Windows.
So, do not always compile ncurses in case GDB needs to build.

PDcurses is provided by an earlier build step and is not described in
this file.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
[yann.morin.1998@anciense.nib.fr: we already have a way to detect ncurses usage]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@570
     1
Original patch from gentoo: gentoo/src/patchsets/gdb/6.8/80_all_gdb-6.5-dwarf-stack-overflow.patch
yann@570
     2
-= BEGIN original header =-
yann@570
     3
http://bugs.gentoo.org/144833
yann@570
     4
yann@570
     5
for gdb/ChangeLog:
yann@570
     6
2006-08-22  Will Drewry <wad@google.com>
yann@570
     7
	    Tavis Ormandy <taviso@google.com>
yann@570
     8
yann@570
     9
	* dwarf2read.c (decode_locdesc): Enforce location description stack
yann@570
    10
	boundaries.
yann@570
    11
	* dwarfread.c (locval): Likewise.
yann@570
    12
yann@570
    13
-= END original header =-
yann@570
    14
diff -durN gdb-6.8.orig/gdb/dwarf2read.c gdb-6.8/gdb/dwarf2read.c
yann@570
    15
--- gdb-6.8.orig/gdb/dwarf2read.c	2008-03-10 15:18:10.000000000 +0100
yann@570
    16
+++ gdb-6.8/gdb/dwarf2read.c	2008-06-17 16:07:31.000000000 +0200
yann@570
    17
@@ -9124,8 +9124,7 @@
yann@570
    18
    callers will only want a very basic result and this can become a
yann@570
    19
    complaint.
yann@570
    20
 
yann@570
    21
-   Note that stack[0] is unused except as a default error return.
yann@570
    22
-   Note that stack overflow is not yet handled.  */
yann@570
    23
+   Note that stack[0] is unused except as a default error return. */
yann@570
    24
 
yann@570
    25
 static CORE_ADDR
yann@570
    26
 decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
yann@570
    27
@@ -9142,7 +9141,7 @@
yann@570
    28
 
yann@570
    29
   i = 0;
yann@570
    30
   stacki = 0;
yann@570
    31
-  stack[stacki] = 0;
yann@570
    32
+  stack[++stacki] = 0;
yann@570
    33
 
yann@570
    34
   while (i < size)
yann@570
    35
     {
yann@570
    36
@@ -9324,6 +9323,16 @@
yann@570
    37
 		     dwarf_stack_op_name (op));
yann@570
    38
 	  return (stack[stacki]);
yann@570
    39
 	}
yann@570
    40
+      /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
yann@570
    41
+         outside of the allocated space. Also enforce minimum > 0.
yann@570
    42
+         -- wad@google.com 14 Aug 2006 */
yann@570
    43
+      if (stacki >= sizeof (stack) / sizeof (*stack) - 1)
yann@570
    44
+	internal_error (__FILE__, __LINE__,
yann@570
    45
+	                _("location description stack too deep: %d"),
yann@570
    46
+	                stacki);
yann@570
    47
+      if (stacki <= 0)
yann@570
    48
+	internal_error (__FILE__, __LINE__,
yann@570
    49
+	                _("location description stack too shallow"));
yann@570
    50
     }
yann@570
    51
   return (stack[stacki]);
yann@570
    52
 }