Lines Matching full:cp

66 static char *soudef(char *cp, stabtype_t type, tdesc_t **rtdp);
67 static void enumdef(char *cp, tdesc_t **rtdp);
70 static char *number(char *cp, int *n);
71 static char *name(char *cp, char **w);
72 static char *id(char *cp, int *h);
73 static char *whitesp(char *cp);
76 static char *tdefdecl(char *cp, int h, tdesc_t **rtdp);
77 static char *intrinsic(char *cp, tdesc_t **rtdp);
78 static char *arraydef(char *cp, tdesc_t **rtdp);
84 parse_debug(int level, char *cp, const char *fmt, ...) in parse_debug() argument
94 if (cp != NULL) { in parse_debug()
96 if (cp[i] == '\0') in parse_debug()
98 if (!iscntrl((unsigned char)cp[i])) in parse_debug()
99 tmp[i] = cp[i]; in parse_debug()
102 (void) snprintf(buf, sizeof (buf), "%s [cp='%s']\n", fmt, tmp); in parse_debug()
163 read_tid(char *cp, tdesc_t **tdpp) in read_tid() argument
168 cp = id(cp, &tid); in read_tid()
172 if (*cp == '=') { in read_tid()
173 if (!(cp = tdefdecl(cp + 1, tid, &tdp))) in read_tid()
187 return (cp); in read_tid()
191 parse_fun(char *cp, iidesc_t *ii) in parse_fun() argument
204 switch (*cp++) { in parse_fun()
218 expected("parse_nfun", "[PfF]", cp - 1); in parse_fun()
221 if (!(cp = read_tid(cp, &tdp))) in parse_fun()
224 if (*cp) in parse_fun()
227 while (*cp && *++cp) { in parse_fun()
228 if (*cp == '0') { in parse_fun()
236 if (!(cp = read_tid(cp, &args[nargs - 1]))) in parse_fun()
250 parse_sym(char *cp, iidesc_t *ii) in parse_sym() argument
259 switch (*cp++) { in parse_sym()
270 cp--; in parse_sym()
277 expected("parse_sym", "[GprSV(]", cp - 1); in parse_sym()
280 if (!(cp = read_tid(cp, &tdp))) in parse_sym()
290 parse_type(char *cp, iidesc_t *ii) in parse_type() argument
295 if (*cp++ != 't') in parse_type()
296 expected("parse_type", "t (type)", cp - 1); in parse_type()
298 cp = id(cp, &tid); in parse_type()
300 if (*cp++ != '=') in parse_type()
301 expected("parse_type", "= (definition)", cp - 1); in parse_type()
303 (void) tdefdecl(cp, tid, &tdp); in parse_type()
347 parse_sou(char *cp, iidesc_t *idp) in parse_sou() argument
352 if (*cp++ != 'T') in parse_sou()
353 expected("parse_sou", "T (sou)", cp - 1); in parse_sou()
355 cp = id(cp, &tid); in parse_sou()
356 if (*cp++ != '=') in parse_sou()
357 expected("parse_sou", "= (definition)", cp - 1); in parse_sou()
385 switch (*cp++) { in parse_sou()
387 (void) soudef(cp, STRUCT, &rtdp); in parse_sou()
390 (void) soudef(cp, UNION, &rtdp); in parse_sou()
393 enumdef(cp, &rtdp); in parse_sou()
396 expected("parse_sou", "<tag type s/u/e>", cp - 1); in parse_sou()
406 parse_stab(stab_t *stab, char * volatile cp, iidesc_t **iidescp) in parse_stab() argument
418 cp = whitesp(cp); in parse_stab()
420 cp = name(cp, &ii->ii_name); in parse_stab()
428 if (*cp == 't') in parse_stab()
430 else if (*cp == 'T') in parse_stab()
445 parse_debug(1, cp, "Unknown stab type %#x", stab->n_type); in parse_stab()
450 rc = parse(cp, ii); in parse_stab()
481 whitesp(char *cp) in whitesp() argument
485 for (c = *cp++; isspace((unsigned char)c); c = *cp++) in whitesp()
487 --cp; in whitesp()
488 return (cp); in whitesp()
492 name(char *cp, char **w) in name() argument
497 orig = cp; in name()
498 c = *cp++; in name()
502 for (c = *cp++; isalnum((unsigned char)c) || strchr(" _.$#", c); c = *cp++) in name()
506 len = cp - orig; in name()
508 while (orig < cp - 1) in name()
515 return (cp); in name()
519 number(char *cp, int *n) in number() argument
523 *n = (int)strtol(cp, &next, 10); in number()
524 if (next == cp) in number()
525 expected("number", "<number>", cp); in number()
530 id(char *cp, int *h) in id() argument
534 if (*cp == '(') { /* SunPro style */ in id()
535 cp++; in id()
536 cp = number(cp, &n1); in id()
537 if (*cp++ != ',') in id()
538 expected("id", ",", cp - 1); in id()
539 cp = number(cp, &n2); in id()
540 if (*cp++ != ')') in id()
541 expected("id", ")", cp - 1); in id()
543 } else if (isdigit((unsigned char)*cp)) { /* gcc style */ in id()
544 cp = number(cp, &n1); in id()
547 expected("id", "(/0-9", cp); in id()
549 return (cp); in id()
573 tdefdecl(char *cp, int h, tdesc_t **rtdp) in tdefdecl() argument
580 parse_debug(3, cp, "tdefdecl h=%d", h); in tdefdecl()
583 switch (type = *cp) { in tdefdecl()
586 cp = intrinsic(cp, rtdp); in tdefdecl()
589 cp = id(cp, &h2); in tdefdecl()
592 if (ntdp != NULL && *cp == '=') { in tdefdecl()
593 if (ntdp->t_type == FORWARD && *(cp + 1) == 'x') { in tdefdecl()
603 char *c2 = cp + 2; in tdefdecl()
631 if (*cp != '=') { in tdefdecl()
640 cp++; in tdefdecl()
643 cp = tdefdecl(cp, h2, rtdp); in tdefdecl()
665 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
667 expected("tdefdecl/*", "id", cp); in tdefdecl()
679 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
697 cp++; in tdefdecl()
698 if (*cp++ != 'r') in tdefdecl()
699 expected("tdefdecl/[az]", "r", cp - 1); in tdefdecl()
703 cp = arraydef(cp, rtdp); in tdefdecl()
706 c = *++cp; in tdefdecl()
708 expected("tdefdecl/x", "[sue]", cp - 1); in tdefdecl()
709 cp = name(cp + 1, &w); in tdefdecl()
724 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
737 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
750 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
764 cp++; in tdefdecl()
768 cp = soudef(cp, (type == 'u') ? UNION : STRUCT, rtdp); in tdefdecl()
771 expected("tdefdecl", "<type code>", cp); in tdefdecl()
773 return (cp); in tdefdecl()
777 intrinsic(char *cp, tdesc_t **rtdp) in intrinsic() argument
783 switch (*cp++) { in intrinsic()
786 if (*cp == 's') in intrinsic()
788 else if (*cp != 'u') in intrinsic()
789 expected("intrinsic/b", "[su]", cp); in intrinsic()
790 cp++; in intrinsic()
792 if (strchr("cbv", *cp)) in intrinsic()
793 intr->intr_iformat = *cp++; in intrinsic()
795 cp = number(cp, &width); in intrinsic()
796 if (*cp++ != ';') in intrinsic()
797 expected("intrinsic/b", "; (post-width)", cp - 1); in intrinsic()
799 cp = number(cp, &intr->intr_offset); in intrinsic()
800 if (*cp++ != ';') in intrinsic()
801 expected("intrinsic/b", "; (post-offset)", cp - 1); in intrinsic()
803 cp = number(cp, &intr->intr_nbits); in intrinsic()
808 for (fmt = 0, i = 0; isdigit((unsigned char)*(cp + i)); i++) in intrinsic()
809 fmt = fmt * 10 + (*(cp + i) - '0'); in intrinsic()
812 expected("intrinsic/R", "number <= CTF_FP_MAX", cp); in intrinsic()
815 cp += i; in intrinsic()
817 if (*cp++ != ';') in intrinsic()
818 expected("intrinsic/R", ";", cp - 1); in intrinsic()
819 cp = number(cp, &width); in intrinsic()
833 return (cp); in intrinsic()
853 offsize(char *cp, mlist_t *mlp) in offsize() argument
857 if (*cp == ',') in offsize()
858 cp++; in offsize()
859 cp = number(cp, &offset); in offsize()
860 if (*cp++ != ',') in offsize()
861 expected("offsize/2", ",", cp - 1); in offsize()
862 cp = number(cp, &size); in offsize()
863 if (*cp++ != ';') in offsize()
864 expected("offsize/3", ";", cp - 1); in offsize()
867 return (cp); in offsize()
889 soudef(char *cp, stabtype_t type, tdesc_t **rtdp) in soudef() argument
897 cp = number(cp, &size); in soudef()
907 if (cp[0] == '@') { in soudef()
908 cp += 3; in soudef()
911 parse_debug(3, cp, "soudef: %s size=%d", tdesc_name(*rtdp), in soudef()
916 while ((*cp != '\0') && (*cp != ';')) { /* signifies end of fields */ in soudef()
919 cp = name(cp, &w); in soudef()
921 cp = id(cp, &h); in soudef()
929 if (*cp++ != '=') { in soudef()
935 cp = tdefdecl(cp, h, &tdp); in soudef()
946 parse_debug(4, cp, in soudef()
948 cp++; in soudef()
955 cp = offsize(cp, mlp); in soudef()
960 parse_debug(4, cp, "making %d bit intrinsic " in soudef()
972 /* cp is now pointing to next field */ in soudef()
975 return (cp); in soudef()
979 arraydef(char *cp, tdesc_t **rtdp) in arraydef() argument
983 cp = id(cp, &h); in arraydef()
984 if (*cp++ != ';') in arraydef()
985 expected("arraydef/1", ";", cp - 1); in arraydef()
990 cp = number(cp, &start); /* lower */ in arraydef()
991 if (*cp++ != ';') in arraydef()
992 expected("arraydef/2", ";", cp - 1); in arraydef()
994 if (*cp == 'S') { in arraydef()
1006 cp++; in arraydef()
1007 if (*cp == '-') in arraydef()
1008 cp++; in arraydef()
1009 cp = number(cp, &end); in arraydef()
1017 cp = number(cp, &end); /* upper */ in arraydef()
1020 if (*cp++ != ';') in arraydef()
1021 expected("arraydef/3", ";", cp - 1); in arraydef()
1023 cp = tdefdecl(cp, h, &((*rtdp)->t_ardef->ad_contents)); in arraydef()
1025 parse_debug(3, cp, "defined array idx type %d %d-%d next ", in arraydef()
1028 return (cp); in arraydef()
1032 enumdef(char *cp, tdesc_t **rtdp) in enumdef() argument
1041 while (*cp != ';') { in enumdef()
1045 cp = name(cp, &w); in enumdef()
1047 cp = number(cp, &elp->el_number); in enumdef()
1051 if (*cp++ != ',') in enumdef()
1052 expected("enumdef", ",", cp - 1); in enumdef()