Lines Matching defs:argstate

147  * Set argstate null_ndx field for current dynamic area
150 set_null_ndx(ARGSTATE *argstate)
154 num = argstate->dyn.num;
155 argstate->dyn.num_null_ndx = 0;
157 if (argstate->dyn.data[null_ndx].d_tag == DT_NULL) {
158 argstate->dyn.num_null_ndx++;
161 argstate->dyn.null_ndx = null_ndx;
165 if (argstate->dyn.data[null_ndx].d_tag == DT_NULL)
166 argstate->dyn.num_null_ndx++;
175 * argstate - Argument state block
180 * issued, the slot is converted to its new use, and the argstate
187 convert_dt_null(ARGSTATE *argstate, Xword d_tag, Xword d_val)
195 if (argstate->dyn.num_null_ndx <= 1)
197 EC_WORD(argstate->dyn.sec->sec_shndx),
198 argstate->dyn.sec->sec_name);
200 ehdr = argstate->obj_state->os_ehdr;
202 EC_WORD(argstate->dyn.sec->sec_shndx), argstate->dyn.sec->sec_name,
203 EC_WORD(argstate->dyn.null_ndx), conv_dyn_tag(d_tag,
206 ndx = argstate->dyn.null_ndx;
207 dyn = &argstate->dyn.data[ndx];
212 set_null_ndx(argstate);
223 * argstate - Address of ARGSTATE block to be initialized
226 * On success, *argstate is initialized. On error,
231 ARGSTATE *argstate)
236 bzero(argstate, sizeof (*argstate));
237 argstate->obj_state = obj_state;
243 argstate->optmask |= getopt_ret->gor_idmask;
247 argstate->dyn_elt_str = getopt_ret->gor_value;
257 argstate->argc = argc;
258 argstate->argv = argv;
261 argstate->dyn.sec = elfedit_sec_getdyn(obj_state, &argstate->dyn.data,
262 &argstate->dyn.num);
263 argstate->strsec = elfedit_sec_getstr(obj_state,
264 argstate->dyn.sec->sec_shdr->sh_link, 0);
267 set_null_ndx(argstate);
278 * argstate - Argument state block
293 print_dyn(DYN_CMD_T cmd, int autoprint, ARGSTATE *argstate,
309 elfedit_test_osabi(argstate->obj_state, ELFOSABI_SOLARIS, 0);
327 if (arg >= argstate->dyn.num)
342 dyn = &argstate->dyn.data[ndx];
353 for (; (ndx < argstate->dyn.num) &&
401 while ((end_ndx < (argstate->dyn.num - 1)) &&
431 name = elfedit_offset_to_str(argstate->strsec,
437 name = elfedit_offset_to_str(argstate->strsec,
459 ((argstate->optmask & DYN_OPT_F_NEEDED) != 0) &&
460 ((ndx + 1) < argstate->dyn.num)) {
461 Dyn *dyn1 = &argstate->dyn.data[ndx + 1];
465 name = elfedit_offset_to_str(argstate->strsec,
467 if (strncmp(name, argstate->dyn_elt_str,
468 strlen(argstate->dyn_elt_str)) != 0)
504 ehdr = argstate->obj_state->os_ehdr;
570 Ehdr *ehdr = argstate->obj_state->os_ehdr;
574 EC_WORD(argstate->dyn.sec->sec_shndx),
575 argstate->dyn.sec->sec_name, conv_dyn_tag(arg,
583 EC_WORD(argstate->dyn.sec->sec_shndx),
584 argstate->dyn.sec->sec_name);
594 * argstate - Argument state block
623 arg_to_index(ARGSTATE *argstate, const char *arg,
642 if ((argstate->optmask & DYN_OPT_F_DYNNDX_ELT) != 0)
644 0, argstate->dyn.num - 1, NULL));
652 * value that follows the option, and was saved in argstate by
657 if ((argstate->optmask & DYN_OPT_F_DYNNDX_VAL) != 0) {
658 ndx = ((Word) elfedit_atoui_range(argstate->dyn_elt_str,
659 MSG_ORIG(MSG_STR_INDEX), 0, argstate->dyn.num - 1, NULL));
660 if (argstate->dyn.data[ndx].d_tag != dt_value) {
661 Ehdr *ehdr = argstate->obj_state->os_ehdr;
667 EC_WORD(argstate->dyn.sec->sec_shndx),
668 argstate->dyn.sec->sec_name, ndx,
670 conv_dyn_tag(argstate->dyn.data[ndx].d_tag,
688 * element with the string given by argstate->dyn_elt_str.
690 if ((argstate->optmask & DYN_OPT_F_NEEDED) != 0) {
691 Word retndx = argstate->dyn.num; /* Out of range value */
695 len = strlen(argstate->dyn_elt_str);
696 for (ndx = 0, dyn = argstate->dyn.data;
697 ndx < argstate->dyn.num; dyn++, ndx++) {
706 name = elfedit_offset_to_str(argstate->strsec,
710 argstate->dyn_elt_str, len) == 0)
727 EC_WORD(argstate->dyn.sec->sec_shndx),
728 argstate->dyn.sec->sec_name, argstate->dyn_elt_str);
732 for (ndx = 0; ndx < argstate->dyn.num; ndx++) {
733 if (argstate->dyn.data[ndx].d_tag == dt_value) {
736 EC_WORD(argstate->dyn.sec->sec_shndx),
737 argstate->dyn.sec->sec_name, EC_WORD(ndx), arg);
743 if (argstate->dyn.num_null_ndx > 1)
744 return (convert_dt_null(argstate, dt_value, 0));
748 EC_WORD(argstate->dyn.sec->sec_shndx),
749 argstate->dyn.sec->sec_name, arg);
764 cmd_body_value(ARGSTATE *argstate, Word *ret_ndx)
766 elfedit_section_t *dynsec = argstate->dyn.sec;
767 elfedit_section_t *strsec = argstate->strsec;
770 Dyn *dyn = argstate->dyn.data;
771 Word numdyn = argstate->dyn.num;
777 minus_add = ((argstate->optmask & DYN_OPT_F_ADD) != 0);
778 minus_s = ((argstate->optmask & DYN_OPT_F_STRVAL) != 0);
779 minus_dynndx = ((argstate->optmask & DYN_OPT_F_DYNNDX_ELT) != 0);
788 elfedit_atoui_range(argstate->argv[0], MSG_ORIG(MSG_STR_ELT),
790 elfedit_atoconst(argstate->argv[0], ELFEDIT_CONST_DT);
807 (void) elfedit_dynstr_getpad(argstate->obj_state,
808 argstate->dyn.sec, &strpad_elt);
827 strpad_elt.dn_dyn.d_un.d_val, argstate->argv[1],
835 &strpad_elt, argstate->argv[1]);
838 arg2 = elfedit_atoui(argstate->argv[1], NULL);
876 &strpad_elt, argstate->argv[1]);
907 if (argstate->dyn.num_null_ndx <= 1)
919 &strpad_elt, argstate->argv[1]);
922 *ret_ndx = convert_dt_null(argstate, arg1, arg2);
963 cmd_body_runpath(ARGSTATE *argstate)
965 elfedit_section_t *dynsec = argstate->dyn.sec;
966 elfedit_section_t *strsec = argstate->strsec;
971 Dyn *dyn = argstate->dyn.data;
972 Word numdyn = argstate->dyn.num;
989 if (elfedit_test_osabi(argstate->obj_state,
1007 argstate->argv[0]) == 0)) &&
1010 argstate->argv[0]) == 0))) {
1028 } else if (argstate->dyn.num_null_ndx <= 1) {
1041 argstate->argv[0]);
1070 (void) convert_dt_null(argstate, DT_RUNPATH,
1085 * argstate - Argument state block
1090 flag_bitop(ARGSTATE *argstate, Word orig, elfedit_const_t const_type)
1096 for (i = 0; i < argstate->argc; i++)
1097 flags |= (Word) elfedit_atoconst(argstate->argv[i], const_type);
1100 if (argstate->optmask & DYN_OPT_F_CMP)
1104 if (argstate->optmask & DYN_OPT_F_AND)
1106 else if (argstate->optmask & DYN_OPT_F_OR)
1129 ARGSTATE argstate;
1140 process_args(obj_state, argc, argv, &argstate);
1142 dyn = argstate.dyn.data;
1143 dyn_num = argstate.dyn.num;
1144 dyn_name = argstate.dyn.sec->sec_name;
1145 dyn_ndx = argstate.dyn.sec->sec_shndx;
1151 if (argstate.argc > 1)
1154 if (argstate.argc == 1)
1155 ndx = arg_to_index(&argstate, argstate.argv[0],
1160 print_only = (argstate.argc != 2);
1161 if (argstate.argc > 0) {
1162 if (argstate.argc > 2)
1164 ndx = arg_to_index(&argstate, argstate.argv[0],
1170 print_only = (argstate.argc != 2);
1171 if (argstate.argc > 2)
1173 if (argstate.argc > 0) {
1175 ndx = arg_to_index(&argstate, argstate.argv[0],
1184 if ((argstate.argc < 1) || (argstate.argc > 2))
1186 ndx = arg_to_index(&argstate, argstate.argv[0],
1192 if ((argstate.argc < 2) || (argstate.argc > 3))
1194 ndx = arg_to_index(&argstate, argstate.argv[0],
1200 if (argstate.argc > 1)
1208 print_only = (argstate.argc == 0);
1212 print_only = (argstate.argc == 0);
1213 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
1219 print_only = (argstate.argc == 0);
1220 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
1226 print_only = (argstate.argc == 0);
1227 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
1233 print_only = (argstate.argc == 0);
1234 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
1240 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
1246 if (argstate.argc > 1)
1249 (void) elfedit_test_osabi(argstate.obj_state,
1251 print_only = (argstate.argc == 0);
1252 ndx = arg_to_index(&argstate, elfedit_atoconst_value_to_str(
1266 print_dyn(cmd, 0, &argstate, print_type, ndx);
1279 Ehdr *ehdr = argstate.obj_state->os_ehdr;
1283 Xword d_tag = (Xword) elfedit_atoconst(argstate.argv[1],
1302 null_ndx = argstate.dyn.null_ndx;
1303 set_null_ndx(&argstate);
1304 if ((argstate.dyn.null_ndx >=
1305 argstate.dyn.num) &&
1306 (null_ndx != argstate.dyn.null_ndx))
1330 if ((ndx + 1) > argstate.dyn.null_ndx)
1352 ret = cmd_body_value(&argstate, &ndx);
1357 Word cnt = (argstate.argc == 1) ? 1 :
1358 (Word) elfedit_atoui_range(argstate.argv[1],
1361 elfedit_sec_msgprefix(argstate.dyn.sec);
1363 elfedit_array_elts_delete(msg_prefix, argstate.dyn.data,
1375 elfedit_sec_msgprefix(argstate.dyn.sec);
1378 elfedit_atoui_range(argstate.argv[1],
1381 if (argstate.argc == 2) {
1385 argstate.argv[2], MSG_ORIG(MSG_STR_COUNT),
1388 elfedit_array_elts_move(msg_prefix, argstate.dyn.data,
1396 ret = cmd_body_runpath(&argstate);
1404 flags = flag_bitop(&argstate, dyn[ndx].d_un.d_val,
1432 flags = flag_bitop(&argstate, dyn[ndx].d_un.d_val,
1460 flags1 = flag_bitop(&argstate, dyn[ndx].d_un.d_val,
1488 flags = flag_bitop(&argstate, dyn[ndx].d_un.d_val,
1538 ldmach = (Half) elfedit_atoconst(argstate.argv[0],
1567 elfedit_modified_data(argstate.dyn.sec);
1571 print_dyn(cmd, 1, &argstate, print_type, ndx);