dynindx = entry->d.h->dynindx;
else
{
- if (sec->output_section
+ if (sec
+ && sec->output_section
&& ! bfd_is_abs_section (sec->output_section)
&& ! bfd_is_und_section (sec->output_section))
dynindx = elf_section_data (sec->output_section)->dynindx;
of the section. For a non-local function, it's
disregarded. */
lowword = ad;
- if (entry->symndx == -1 && entry->d.h->dynindx != -1
- && entry->d.h->dynindx == idx)
+ if (sec == NULL
+ || (entry->symndx == -1 && entry->d.h->dynindx != -1
+ && entry->d.h->dynindx == idx))
highword = 0;
else
highword = _frvfdpic_osec_to_segment
check_segment[2];
int silence_segment_error = !(info->shared || info->pie);
unsigned long insn;
+ static bfd_boolean ef_frv_pic_flag_set = FALSE;
+ if (! ef_frv_pic_flag_set && IS_FDPIC (output_bfd))
+ {
+ elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC;
+ ef_frv_pic_flag_set = TRUE;
+ }
+
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
}
if (!silence_segment_error && (info->shared || info->pie))
return FALSE;
- elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC;
+ /* PR 6446: EF_FRV_PIC should be cleared if
+ there are any inter-segment relocations. */
+ elf_elfheader (output_bfd)->e_flags &= ~ EF_FRV_PIC;
}
switch (r_type)