2. If APROP is NULL, remove x86 feature.
3. Otherwise, do nothing.
*/
+ const struct elf_backend_data *bed
+ = get_elf_backend_data (info->output_bfd);
+ struct elf_x86_link_hash_table *htab
+ = elf_x86_hash_table (info, bed->target_id);
+ if (!htab)
+ abort ();
if (aprop != NULL && bprop != NULL)
{
features = 0;
- if (info->ibt)
+ if (htab->params->ibt)
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
- if (info->shstk)
+ if (htab->params->shstk)
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
number = aprop->u.number;
/* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
have them. Set IBT and SHSTK properties for -z ibt and -z
shstk if needed. */
features = 0;
- if (info->ibt)
+ if (htab->params->ibt)
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
- if (info->shstk)
+ if (htab->params->shstk)
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
if (features)
{
unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
unsigned int got_align;
- features = 0;
- if (info->ibt)
- features = GNU_PROPERTY_X86_FEATURE_1_IBT;
- if (info->shstk)
- features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
-
/* Find a normal input file with GNU property note. */
for (pbfd = info->input_bfds;
pbfd != NULL;
if (htab == NULL)
return pbfd;
+ features = 0;
+ if (htab->params->ibt)
+ features = GNU_PROPERTY_X86_FEATURE_1_IBT;
+ if (htab->params->shstk)
+ features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
+
if (ebfd != NULL)
{
prop = NULL;
htab->plt0_pad_byte = init_table->plt0_pad_byte;
- use_ibt_plt = info->ibtplt || info->ibt;
+ use_ibt_plt = htab->params->ibtplt || htab->params->ibt;
if (!use_ibt_plt && pbfd != NULL)
{
/* Check if GNU_PROPERTY_X86_FEATURE_1_IBT is on. */
plt_alignment))
goto error_alignment;
}
- else if (info->bndplt && ABI_64_P (dynobj))
+ else if (htab->params->bndplt && ABI_64_P (dynobj))
{
/* Create the second PLT for Intel MPX support. MPX
PLT is supported only for non-NaCl target in 64-bit
}
}
}
+
+void
+_bfd_elf_linker_x86_set_options (struct bfd_link_info * info,
+ struct elf_linker_x86_params *params)
+{
+ const struct elf_backend_data *bed
+ = get_elf_backend_data (info->output_bfd);
+ struct elf_x86_link_hash_table *htab
+ = elf_x86_hash_table (info, bed->target_id);
+ if (htab != NULL)
+ htab->params = params;
+}