Lines Matching refs:cp

62 static char *soudef(char *cp, stabtype_t type, tdesc_t **rtdp);
63 static void enumdef(char *cp, tdesc_t **rtdp);
66 static char *number(char *cp, int *n);
67 static char *name(char *cp, char **w);
68 static char *id(char *cp, int *h);
69 static char *whitesp(char *cp);
72 static char *tdefdecl(char *cp, int h, tdesc_t **rtdp);
73 static char *intrinsic(char *cp, tdesc_t **rtdp);
74 static char *arraydef(char *cp, tdesc_t **rtdp);
81 parse_debug(int level, char *cp, char *fmt, ...)
91 if (cp != NULL) {
93 if (cp[i] == '\0')
95 if (!iscntrl(cp[i]))
96 tmp[i] = cp[i];
99 (void) snprintf(buf, sizeof (buf), "%s [cp='%s']\n", fmt, tmp);
160 read_tid(char *cp, tdesc_t **tdpp)
165 cp = id(cp, &tid);
169 if (*cp == '=') {
170 if (!(cp = tdefdecl(cp + 1, tid, &tdp)))
184 return (cp);
188 parse_fun(char *cp, iidesc_t *ii)
201 switch (*cp++) {
215 expected("parse_nfun", "[PfF]", cp - 1);
218 if (!(cp = read_tid(cp, &tdp)))
221 if (*cp)
224 while (*cp && *++cp) {
225 if (*cp == '0') {
233 if (!(cp = read_tid(cp, &args[nargs - 1])))
247 parse_sym(char *cp, iidesc_t *ii)
256 switch (*cp++) {
267 cp--;
274 expected("parse_sym", "[GprSV(]", cp - 1);
277 if (!(cp = read_tid(cp, &tdp)))
287 parse_type(char *cp, iidesc_t *ii)
292 if (*cp++ != 't')
293 expected("parse_type", "t (type)", cp - 1);
295 cp = id(cp, &tid);
297 if (*cp++ != '=')
298 expected("parse_type", "= (definition)", cp - 1);
300 (void) tdefdecl(cp, tid, &tdp);
344 parse_sou(char *cp, iidesc_t *idp)
349 if (*cp++ != 'T')
350 expected("parse_sou", "T (sou)", cp - 1);
352 cp = id(cp, &tid);
353 if (*cp++ != '=')
354 expected("parse_sou", "= (definition)", cp - 1);
382 switch (*cp++) {
384 (void) soudef(cp, STRUCT, &rtdp);
387 (void) soudef(cp, UNION, &rtdp);
390 enumdef(cp, &rtdp);
393 expected("parse_sou", "<tag type s/u/e>", cp - 1);
403 parse_stab(stab_t *stab, char *cp, iidesc_t **iidescp)
415 cp = whitesp(cp);
417 cp = name(cp, &ii->ii_name);
425 if (*cp == 't')
427 else if (*cp == 'T')
442 parse_debug(1, cp, "Unknown stab type %#x", stab->n_type);
447 rc = parse(cp, ii);
478 whitesp(char *cp)
482 for (c = *cp++; isspace(c); c = *cp++)
484 --cp;
485 return (cp);
489 name(char *cp, char **w)
494 orig = cp;
495 c = *cp++;
499 for (c = *cp++; isalnum(c) || strchr(" _.$#", c); c = *cp++)
503 len = cp - orig;
505 while (orig < cp - 1)
512 return (cp);
516 number(char *cp, int *n)
520 *n = (int)strtol(cp, &next, 10);
521 if (next == cp)
522 expected("number", "<number>", cp);
527 id(char *cp, int *h)
531 if (*cp == '(') { /* SunPro style */
532 cp++;
533 cp = number(cp, &n1);
534 if (*cp++ != ',')
535 expected("id", ",", cp - 1);
536 cp = number(cp, &n2);
537 if (*cp++ != ')')
538 expected("id", ")", cp - 1);
540 } else if (isdigit(*cp)) { /* gcc style */
541 cp = number(cp, &n1);
544 expected("id", "(/0-9", cp);
546 return (cp);
570 tdefdecl(char *cp, int h, tdesc_t **rtdp)
577 parse_debug(3, cp, "tdefdecl h=%d", h);
580 switch (type = *cp) {
583 cp = intrinsic(cp, rtdp);
586 cp = id(cp, &h2);
589 if (ntdp != NULL && *cp == '=') {
590 if (ntdp->t_type == FORWARD && *(cp + 1) == 'x') {
600 char *c2 = cp + 2;
628 if (*cp != '=') {
637 cp++;
640 cp = tdefdecl(cp, h2, rtdp);
662 cp = tdefdecl(cp + 1, h, &ntdp);
664 expected("tdefdecl/*", "id", cp);
676 cp = tdefdecl(cp + 1, h, &ntdp);
694 cp++;
695 if (*cp++ != 'r')
696 expected("tdefdecl/[az]", "r", cp - 1);
700 cp = arraydef(cp, rtdp);
703 c = *++cp;
705 expected("tdefdecl/x", "[sue]", cp - 1);
706 cp = name(cp + 1, &w);
721 cp = tdefdecl(cp + 1, h, &ntdp);
734 cp = tdefdecl(cp + 1, h, &ntdp);
747 cp = tdefdecl(cp + 1, h, &ntdp);
761 cp++;
765 cp = soudef(cp, (type == 'u') ? UNION : STRUCT, rtdp);
768 expected("tdefdecl", "<type code>", cp);
770 return (cp);
774 intrinsic(char *cp, tdesc_t **rtdp)
780 switch (*cp++) {
783 if (*cp == 's')
785 else if (*cp != 'u')
786 expected("intrinsic/b", "[su]", cp);
787 cp++;
789 if (strchr("cbv", *cp))
790 intr->intr_iformat = *cp++;
792 cp = number(cp, &width);
793 if (*cp++ != ';')
794 expected("intrinsic/b", "; (post-width)", cp - 1);
796 cp = number(cp, &intr->intr_offset);
797 if (*cp++ != ';')
798 expected("intrinsic/b", "; (post-offset)", cp - 1);
800 cp = number(cp, &intr->intr_nbits);
805 for (fmt = 0, i = 0; isdigit(*(cp + i)); i++)
806 fmt = fmt * 10 + (*(cp + i) - '0');
809 expected("intrinsic/R", "number <= CTF_FP_MAX", cp);
812 cp += i;
814 if (*cp++ != ';')
815 expected("intrinsic/R", ";", cp - 1);
816 cp = number(cp, &width);
830 return (cp);
850 offsize(char *cp, mlist_t *mlp)
854 if (*cp == ',')
855 cp++;
856 cp = number(cp, &offset);
857 if (*cp++ != ',')
858 expected("offsize/2", ",", cp - 1);
859 cp = number(cp, &size);
860 if (*cp++ != ';')
861 expected("offsize/3", ";", cp - 1);
864 return (cp);
886 soudef(char *cp, stabtype_t type, tdesc_t **rtdp)
894 cp = number(cp, &size);
904 if (cp[0] == '@') {
905 cp += 3;
908 parse_debug(3, cp, "soudef: %s size=%d", tdesc_name(*rtdp),
913 while ((*cp != '\0') && (*cp != ';')) { /* signifies end of fields */
916 cp = name(cp, &w);
918 cp = id(cp, &h);
926 if (*cp++ != '=') {
932 cp = tdefdecl(cp, h, &tdp);
943 parse_debug(4, cp,
945 cp++;
952 cp = offsize(cp, mlp);
957 parse_debug(4, cp, "making %d bit intrinsic "
969 /* cp is now pointing to next field */
972 return (cp);
976 arraydef(char *cp, tdesc_t **rtdp)
980 cp = id(cp, &h);
981 if (*cp++ != ';')
982 expected("arraydef/1", ";", cp - 1);
987 cp = number(cp, &start); /* lower */
988 if (*cp++ != ';')
989 expected("arraydef/2", ";", cp - 1);
991 if (*cp == 'S') {
1003 cp++;
1004 if (*cp == '-')
1005 cp++;
1006 cp = number(cp, &end);
1014 cp = number(cp, &end); /* upper */
1017 if (*cp++ != ';')
1018 expected("arraydef/3", ";", cp - 1);
1020 cp = tdefdecl(cp, h, &((*rtdp)->t_ardef->ad_contents));
1022 parse_debug(3, cp, "defined array idx type %d %d-%d next ",
1025 return (cp);
1029 enumdef(char *cp, tdesc_t **rtdp)
1038 while (*cp != ';') {
1042 cp = name(cp, &w);
1044 cp = number(cp, &elp->el_number);
1048 if (*cp++ != ',')
1049 expected("enumdef", ",", cp - 1);