* elf32-frv.c (elf32_frvfdpic_modify_segment_map): Return
immediately if there's no link info. (elf32_frvfdpic_copy_private_bfd_data): New. (bfd_elf32_bfd_copy_private_bfd_data): Use it for frvfdpic.
This commit is contained in:
parent
daeea9904e
commit
7e9f3bd695
@ -1,3 +1,10 @@
|
||||
2004-05-07 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* elf32-frv.c (elf32_frvfdpic_modify_segment_map): Return
|
||||
immediately if there's no link info.
|
||||
(elf32_frvfdpic_copy_private_bfd_data): New.
|
||||
(bfd_elf32_bfd_copy_private_bfd_data): Use it for frvfdpic.
|
||||
|
||||
2004-05-06 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* dwarf2.c (add_line_info): Also set info->filename to NULL if
|
||||
|
@ -3686,6 +3686,11 @@ elf32_frvfdpic_modify_segment_map (bfd *output_bfd,
|
||||
{
|
||||
struct elf_segment_map *m;
|
||||
|
||||
/* objcopy and strip preserve what's already there using
|
||||
elf32_frvfdpic_copy_private_bfd_data (). */
|
||||
if (! info)
|
||||
return TRUE;
|
||||
|
||||
for (m = elf_tdata (output_bfd)->segment_map; m != NULL; m = m->next)
|
||||
if (m->p_type == PT_GNU_STACK)
|
||||
break;
|
||||
@ -4311,6 +4316,50 @@ frv_elf_arch_extension_p (flagword base, flagword extension)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
elf32_frvfdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
return TRUE;
|
||||
|
||||
if (! frv_elf_copy_private_bfd_data (ibfd, obfd))
|
||||
return FALSE;
|
||||
|
||||
if (! elf_tdata (ibfd) || ! elf_tdata (ibfd)->phdr
|
||||
|| ! elf_tdata (obfd) || ! elf_tdata (obfd)->phdr)
|
||||
return TRUE;
|
||||
|
||||
/* Copy the stack size. */
|
||||
for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++)
|
||||
if (elf_tdata (ibfd)->phdr[i].p_type == PT_GNU_STACK)
|
||||
{
|
||||
Elf_Internal_Phdr *iphdr = &elf_tdata (ibfd)->phdr[i];
|
||||
|
||||
for (i = 0; i < elf_elfheader (obfd)->e_phnum; i++)
|
||||
if (elf_tdata (obfd)->phdr[i].p_type == PT_GNU_STACK)
|
||||
{
|
||||
memcpy (&elf_tdata (obfd)->phdr[i], iphdr, sizeof (*iphdr));
|
||||
|
||||
/* Rewrite the phdrs, since we're only called after they
|
||||
were first written. */
|
||||
if (bfd_seek (obfd, (bfd_signed_vma) get_elf_backend_data (obfd)
|
||||
->s->sizeof_ehdr, SEEK_SET) != 0
|
||||
|| get_elf_backend_data (obfd)->s
|
||||
->write_out_phdrs (obfd, elf_tdata (obfd)->phdr,
|
||||
elf_elfheader (obfd)->e_phnum) != 0)
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Merge backend specific data from an object file to the output
|
||||
object file when linking. */
|
||||
|
||||
@ -4726,6 +4775,9 @@ frv_elf_print_private_bfd_data (abfd, ptr)
|
||||
#undef elf_backend_modify_segment_map
|
||||
#define elf_backend_modify_segment_map \
|
||||
elf32_frvfdpic_modify_segment_map
|
||||
#undef bfd_elf32_bfd_copy_private_bfd_data
|
||||
#define bfd_elf32_bfd_copy_private_bfd_data \
|
||||
elf32_frvfdpic_copy_private_bfd_data
|
||||
|
||||
#undef elf_backend_create_dynamic_sections
|
||||
#define elf_backend_create_dynamic_sections \
|
||||
|
Loading…
x
Reference in New Issue
Block a user