summaryrefslogtreecommitdiffstats
path: root/dwflpp.cxx
diff options
context:
space:
mode:
authorTim Moore <timoore@redhat.com>2009-10-27 19:50:06 +0100
committerTim Moore <timoore@redhat.com>2009-10-27 19:50:06 +0100
commitf70d5f6b702e8da5c6affb3f34836c466b01f1b9 (patch)
tree46954ea80adcd97d18e21ecd1357b075d97f7e50 /dwflpp.cxx
parent8447d5545aa58965a5f47d604e14e97e673d1cd9 (diff)
parent618a8a634b37da88b67a49beec7282634bff3efe (diff)
downloadsystemtap-steved-f70d5f6b702e8da5c6affb3f34836c466b01f1b9.tar.gz
systemtap-steved-f70d5f6b702e8da5c6affb3f34836c466b01f1b9.tar.xz
systemtap-steved-f70d5f6b702e8da5c6affb3f34836c466b01f1b9.zip
Merge branch 'master' of ssh://sourceware.org/git/systemtap
Diffstat (limited to 'dwflpp.cxx')
-rw-r--r--dwflpp.cxx7
1 files changed, 7 insertions, 0 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index b1d9a32b..0c45eb7d 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -2182,8 +2182,15 @@ dwflpp::express_as_string (string prelude,
fprintf(memstream, "{\n");
fprintf(memstream, "%s", prelude.c_str());
+
unsigned int stack_depth;
bool deref = c_emit_location (memstream, head, 1, &stack_depth);
+
+ // Ensure that DWARF keeps loc2c to a "reasonable" stack size
+ // 32 intptr_t leads to max 256 bytes on the stack
+ if (stack_depth > 32)
+ throw semantic_error("oversized DWARF stack");
+
fprintf(memstream, "%s", postlude.c_str());
fprintf(memstream, " goto out;\n");