Lines Matching defs:argstate

145  *	argstate - Argument state block
150 * If a string table is found, argstate->str is updated to reference it.
153 * routine returns quietly without modifying argstate->str.
156 argstate_add_str(ARGSTATE *argstate, Boolean required)
159 if (argstate->str.sec != NULL)
166 if (argstate->cap.sec->sec_shdr->sh_info == 0) {
170 EC_WORD(argstate->cap.sec->sec_shndx),
171 argstate->cap.sec->sec_name);
175 argstate->str.sec = elfedit_sec_getstr(argstate->obj_state,
176 argstate->cap.sec->sec_shdr->sh_info, 0);
185 cap_group_extents(ARGSTATE *argstate, Word ndx, Word *ret_start_ndx,
194 while ((ndx > 0) && (argstate->cap.data[ndx].c_tag == CA_SUNW_NULL))
196 while ((ndx > 0) && (argstate->cap.data[ndx - 1].c_tag != CA_SUNW_NULL))
205 while (((ndx + 1) < argstate->cap.num) &&
206 (argstate->cap.data[ndx].c_tag != CA_SUNW_NULL))
208 while (((ndx + 1) < argstate->cap.num) &&
209 (argstate->cap.data[ndx + 1].c_tag == CA_SUNW_NULL))
220 cap_group_id(ARGSTATE *argstate)
222 Word ndx = argstate->cap.grp_start_ndx;
223 Cap *cap = argstate->cap.data + ndx;
225 for (; ndx <= argstate->cap.grp_end_ndx; ndx++, cap++) {
227 argstate_add_str(argstate, TRUE);
228 return (elfedit_offset_to_str(argstate->str.sec,
237 return ((argstate->cap.grp_start_ndx == 0) ?
243 * Given an index into the capabilities array, set the argstate cap.grp_*
251 argstate_cap_group(ARGSTATE *argstate, Word ndx)
253 if (argstate->cap.grp_set == TRUE)
256 cap_group_extents(argstate, ndx, &argstate->cap.grp_start_ndx,
257 &argstate->cap.grp_end_ndx);
259 argstate->cap.grp_set = TRUE;
261 EC_WORD(argstate->cap.sec->sec_shndx), argstate->cap.sec->sec_name,
262 EC_WORD(argstate->cap.grp_start_ndx),
263 EC_WORD(argstate->cap.grp_end_ndx), cap_group_id(argstate));
271 group_title(ARGSTATE *argstate, Word ndx)
275 loc_argstate = *argstate;
276 cap_group_extents(argstate, ndx, &loc_argstate.cap.grp_start_ndx,
288 * argstate - Address of ARGSTATE block to be initialized
291 * On success, *argstate is initialized. On error,
296 ARGSTATE *argstate)
302 bzero(argstate, sizeof (*argstate));
303 argstate->obj_state = obj_state;
309 argstate->optmask |= getopt_ret->gor_idmask;
320 argstate->argc = argc;
321 argstate->argv = argv;
324 argstate->cap.sec = elfedit_sec_getcap(obj_state, &argstate->cap.data,
325 &argstate->cap.num);
334 Cap *cap = argstate->cap.data;
340 argstate_add_str(argstate, TRUE);
342 for (i = 0; i < argstate->cap.num; i++, cap++)
345 argstate->str.sec, cap->c_un.c_val,
349 if (i == argstate->cap.num)
351 EC_WORD(argstate->cap.sec->sec_shndx),
352 argstate->cap.sec->sec_name, capid);
353 argstate_cap_group(argstate, i);
355 argstate->cap.grp_start_ndx = 0;
356 argstate->cap.grp_end_ndx = argstate->cap.num - 1;
370 * argstate - Argument state block
383 print_cap(CAP_CMD_T cmd, int autoprint, ARGSTATE *argstate,
405 if (arg >= argstate->cap.num)
410 ndx = argstate->cap.grp_start_ndx;
411 cnt = argstate->cap.grp_end_ndx - ndx + 1;
415 argstate_add_str(argstate, FALSE);
416 if (argstate->str.sec == NULL) {
420 str = (const char *)argstate->str.sec->sec_data->d_buf;
421 str_size = argstate->str.sec->sec_data->d_size;
424 cap = &argstate->cap.data[ndx];
444 if (argstate->str.sec == NULL)
445 argstate_add_str(argstate, TRUE);
461 group_title(argstate, ndx);
465 argstate->obj_state->os_ehdr->e_machine);
494 argstate->obj_state->os_ehdr->
505 argstate->obj_state->os_ehdr->
513 argstate->obj_state->os_ehdr->
521 argstate->obj_state->os_ehdr->
531 argstate->str.sec, cap->c_un.c_val,
553 EC_WORD(argstate->cap.sec->sec_shndx),
554 argstate->cap.sec->sec_name, argstate->cap.grp_start_ndx,
555 argstate->cap.grp_end_ndx, cap_group_id(argstate),
566 * argstate - Argument state block
589 arg_to_index(ARGSTATE *argstate, const char *arg, const char *argname,
603 if ((argstate->optmask & CAP_OPT_F_CAPNDX) != 0) {
605 argstate->cap.num - 1, NULL);
606 argstate_cap_group(argstate, ndx);
627 if (!argstate->cap.grp_set)
628 argstate_cap_group(argstate, 0);
634 for (ndx = argstate->cap.grp_start_ndx;
635 ndx <= argstate->cap.grp_end_ndx; ndx++) {
636 if (argstate->cap.data[ndx].c_tag == ca_value) {
639 EC_WORD(argstate->cap.sec->sec_shndx),
640 argstate->cap.sec->sec_name, EC_WORD(ndx), arg);
650 if (argstate->cap.data[ndx].c_tag == CA_SUNW_NULL) {
651 if (ndx < argstate->cap.grp_end_ndx) {
656 EC_WORD(argstate->cap.sec->sec_shndx),
657 argstate->cap.sec->sec_name, EC_WORD(ndx),
659 argstate->cap.data[ndx].c_tag = ca_value;
660 bzero(&argstate->cap.data[ndx].c_un,
661 sizeof (argstate->cap.data[ndx].c_un));
670 EC_WORD(argstate->cap.sec->sec_shndx),
671 argstate->cap.sec->sec_name, argstate->cap.grp_start_ndx,
672 argstate->cap.grp_end_ndx, cap_group_id(argstate), arg);
684 * argstate - Argument state block
690 flag_bitop(ARGSTATE *argstate, Word orig, const elfedit_atoui_sym_t *const_sym)
696 for (i = 0; i < argstate->argc; i++)
697 flags |= (Word) elfedit_atoui(argstate->argv[i], const_sym);
700 if (argstate->optmask & CAP_OPT_F_CMP)
704 if (argstate->optmask & CAP_OPT_F_AND)
706 else if (argstate->optmask & CAP_OPT_F_OR)
716 * argstate - Argument state block
725 cap_set(ARGSTATE *argstate, Cap *cap, Word ndx, Word cap_ndx,
729 Half mach = argstate->obj_state->os_ehdr->e_machine;
732 ncap = flag_bitop(argstate, cap[ndx].c_un.c_val,
768 ARGSTATE argstate;
779 process_args(obj_state, argc, argv, &argstate);
781 cap = argstate.cap.data;
782 cap_name = argstate.cap.sec->sec_name;
783 cap_ndx = argstate.cap.sec->sec_shndx;
789 if (argstate.argc > 1)
792 if (argstate.argc == 1)
793 ndx = arg_to_index(&argstate, argstate.argv[0],
799 print_only = (argstate.argc != 2);
800 if (argstate.argc > 0) {
801 if (argstate.argc > 2)
803 ndx = arg_to_index(&argstate, argstate.argv[0],
809 if ((argstate.argc < 1) || (argstate.argc > 2))
811 ndx = arg_to_index(&argstate, argstate.argv[0],
818 if ((argstate.argc < 2) || (argstate.argc > 3))
820 ndx = arg_to_index(&argstate, argstate.argv[0],
826 print_only = (argstate.argc == 0);
827 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
833 print_only = (argstate.argc == 0);
834 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
840 print_only = (argstate.argc == 0);
841 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
855 print_cap(cmd, 0, &argstate, print_type, ndx);
869 Word c_tag = (Word) elfedit_atoconst(argstate.argv[1],
893 if (argstate.optmask & CAP_OPT_F_STRVAL) {
894 argstate_add_str(&argstate, TRUE);
896 argstate.str.sec, NULL, argstate.argv[1]);
899 elfedit_atoui(argstate.argv[1], NULL);
905 argstate.cap.sec->sec_shndx,
906 argstate.cap.sec->sec_name,
911 argstate.cap.sec->sec_shndx,
912 argstate.cap.sec->sec_name,
923 Word cnt = (argstate.argc == 1) ? 1 :
924 (Word) elfedit_atoui_range(argstate.argv[1],
926 argstate.cap.grp_end_ndx - ndx + 1, NULL);
928 elfedit_sec_msgprefix(argstate.cap.sec);
945 if ((ndx + cnt - 1) > argstate.cap.grp_end_ndx)
948 argstate.cap.grp_start_ndx,
949 argstate.cap.grp_end_ndx,
950 cap_group_id(&argstate));
952 argstate.cap.grp_end_ndx + 1, ndx, cnt);
963 elfedit_sec_msgprefix(argstate.cap.sec);
966 elfedit_atoui_range(argstate.argv[1],
968 argstate.cap.grp_start_ndx,
969 argstate.cap.grp_end_ndx, NULL);
970 if (argstate.argc == 2) {
975 max = argstate.cap.grp_end_ndx -
978 argstate.argv[2], MSG_ORIG(MSG_STR_COUNT),
990 if ((ndx < argstate.cap.grp_start_ndx) ||
991 ((ndx + cnt) > argstate.cap.grp_end_ndx) ||
992 (dstndx < argstate.cap.grp_start_ndx) ||
993 ((dstndx + cnt) > argstate.cap.grp_end_ndx))
996 argstate.cap.grp_start_ndx,
997 argstate.cap.grp_end_ndx,
998 cap_group_id(&argstate));
1000 argstate.cap.grp_end_ndx + 1, ndx, dstndx,
1009 ret = cap_set(&argstate, cap, ndx, cap_ndx, cap_name,
1016 ret = cap_set(&argstate, cap, ndx, cap_ndx, cap_name,
1023 ret = cap_set(&argstate, cap, ndx, cap_ndx, cap_name,
1033 elfedit_modified_data(argstate.cap.sec);
1037 print_cap(cmd, 1, &argstate, print_type, ndx);