aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c')
-rw-r--r--cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c b/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c
index 53643204c1c6..1dca82a0d3b2 100644
--- a/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c
+++ b/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c
@@ -19,12 +19,9 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This file is a sewer.
*/
@@ -481,7 +478,8 @@ whitesp(char *cp)
{
char c;
- for (c = *cp++; isspace(c); c = *cp++);
+ for (c = *cp++; isspace(c); c = *cp++)
+ ;
--cp;
return (cp);
}
@@ -496,8 +494,8 @@ name(char *cp, char **w)
c = *cp++;
if (c == ':')
*w = NULL;
- else if (isalpha(c) || strchr("_.$", c)) {
- for (c = *cp++; isalnum(c) || strchr(" _.$", c); c = *cp++)
+ else if (isalpha(c) || strchr("_.$#", c)) {
+ for (c = *cp++; isalnum(c) || strchr(" _.$#", c); c = *cp++)
;
if (c != ':')
reset();
@@ -990,14 +988,28 @@ arraydef(char *cp, tdesc_t **rtdp)
expected("arraydef/2", ";", cp - 1);
if (*cp == 'S') {
- /* variable length array - treat as null dimensioned */
+ /*
+ * variable length array - treat as null dimensioned
+ *
+ * For VLA variables on sparc, SS12 generated stab entry
+ * looks as follows:
+ * .stabs "buf:(0,28)=zr(0,4);0;S-12;(0,1)", 0x80, 0, 0, -16
+ * Whereas SS12u1 generated stab entry looks like this:
+ * .stabs "buf:(0,28)=zr(0,4);0;S0;(0,1)", 0x80, 0, 0, 0
+ * On x86, both versions generate the first type of entry.
+ * We should be able to parse both.
+ */
cp++;
- if (*cp++ != '-')
- expected("arraydef/fpoff-sep", "-", cp - 1);
+ if (*cp == '-')
+ cp++;
cp = number(cp, &end);
end = start;
} else {
- /* normal fixed-dimension array */
+ /*
+ * normal fixed-dimension array
+ * Stab entry for this looks as follows :
+ * .stabs "x:(0,28)=ar(0,4);0;9;(0,3)", 0x80, 0, 40, 0
+ */
cp = number(cp, &end); /* upper */
}