projects
/
platform
/
upstream
/
binutils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use alternatives for gold
[platform/upstream/binutils.git]
/
bfd
/
elf32-sh.c
diff --git
a/bfd/elf32-sh.c
b/bfd/elf32-sh.c
index
8adc9a4
..
44a3aa7
100644
(file)
--- a/
bfd/elf32-sh.c
+++ b/
bfd/elf32-sh.c
@@
-88,11
+88,11
@@
static bfd_boolean
vxworks_object_p (bfd *abfd ATTRIBUTE_UNUSED)
{
#if !defined INCLUDE_SHMEDIA && !defined SH_TARGET_ALREADY_DEFINED
vxworks_object_p (bfd *abfd ATTRIBUTE_UNUSED)
{
#if !defined INCLUDE_SHMEDIA && !defined SH_TARGET_ALREADY_DEFINED
- extern const bfd_target
bfd_elf32_shlvxworks
_vec;
- extern const bfd_target
bfd_elf32_sh
vxworks_vec;
+ extern const bfd_target
sh_elf32_vxworks_le
_vec;
+ extern const bfd_target
sh_elf32_
vxworks_vec;
- return (abfd->xvec == &
bfd_elf32_shlvxworks
_vec
- || abfd->xvec == &
bfd_elf32_sh
vxworks_vec);
+ return (abfd->xvec == &
sh_elf32_vxworks_le
_vec
+ || abfd->xvec == &
sh_elf32_
vxworks_vec);
#else
return FALSE;
#endif
#else
return FALSE;
#endif
@@
-104,11
+104,11
@@
static bfd_boolean
fdpic_object_p (bfd *abfd ATTRIBUTE_UNUSED)
{
#if !defined INCLUDE_SHMEDIA && !defined SH_TARGET_ALREADY_DEFINED
fdpic_object_p (bfd *abfd ATTRIBUTE_UNUSED)
{
#if !defined INCLUDE_SHMEDIA && !defined SH_TARGET_ALREADY_DEFINED
- extern const bfd_target
bfd_elf32_shfd
_vec;
- extern const bfd_target
bfd_elf32_shbfd
_vec;
+ extern const bfd_target
sh_elf32_fdpic_le
_vec;
+ extern const bfd_target
sh_elf32_fdpic_be
_vec;
- return (abfd->xvec == &
bfd_elf32_shfd
_vec
- || abfd->xvec == &
bfd_elf32_shbfd
_vec);
+ return (abfd->xvec == &
sh_elf32_fdpic_le
_vec
+ || abfd->xvec == &
sh_elf32_fdpic_be
_vec);
#else
return FALSE;
#endif
#else
return FALSE;
#endif
@@
-702,10
+702,10
@@
sh_elf_relax_section (bfd *abfd, asection *sec,
elf_section_data (sec)->this_hdr.contents = contents;
symtab_hdr->contents = (unsigned char *) isymbuf;
elf_section_data (sec)->this_hdr.contents = contents;
symtab_hdr->contents = (unsigned char *) isymbuf;
- /* Replace the j
sr with a
bsr. */
+ /* Replace the j
mp/jsr with a bra/
bsr. */
/* Change the R_SH_USES reloc into an R_SH_IND12W reloc, and
/* Change the R_SH_USES reloc into an R_SH_IND12W reloc, and
- replace the j
sr with a
bsr. */
+ replace the j
mp/jsr with a bra/
bsr. */
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irelfn->r_info), R_SH_IND12W);
/* We used to test (ELF32_R_SYM (irelfn->r_info) < symtab_hdr->sh_info)
here, but that only checks if the symbol is an external symbol,
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irelfn->r_info), R_SH_IND12W);
/* We used to test (ELF32_R_SYM (irelfn->r_info) < symtab_hdr->sh_info)
here, but that only checks if the symbol is an external symbol,
@@
-716,7
+716,10
@@
sh_elf_relax_section (bfd *abfd, asection *sec,
/* We can't fully resolve this yet, because the external
symbol value may be changed by future relaxing. We let
the final link phase handle it. */
/* We can't fully resolve this yet, because the external
symbol value may be changed by future relaxing. We let
the final link phase handle it. */
- bfd_put_16 (abfd, (bfd_vma) 0xb000, contents + irel->r_offset);
+ if (bfd_get_16 (abfd, contents + irel->r_offset) & 0x0020)
+ bfd_put_16 (abfd, (bfd_vma) 0xa000, contents + irel->r_offset);
+ else
+ bfd_put_16 (abfd, (bfd_vma) 0xb000, contents + irel->r_offset);
irel->r_addend = -4;
irel->r_addend = -4;
@@
-3341,7
+3344,7
@@
sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Set up .got offsets for local syms, and space for local dynamic
relocs. */
/* Set up .got offsets for local syms, and space for local dynamic
relocs. */
- for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link
_
next)
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link
.
next)
{
bfd_signed_vma *local_got;
bfd_signed_vma *end_local_got;
{
bfd_signed_vma *local_got;
bfd_signed_vma *end_local_got;
@@
-3676,7
+3679,9
@@
sh_elf_osec_to_segment (bfd *output_bfd, asection *osec)
{
Elf_Internal_Phdr *p = NULL;
{
Elf_Internal_Phdr *p = NULL;
- if (output_bfd->xvec->flavour == bfd_target_elf_flavour)
+ if (output_bfd->xvec->flavour == bfd_target_elf_flavour
+ /* PR ld/17110: Do not look for output segments in an input bfd. */
+ && output_bfd->direction != read_direction)
p = _bfd_elf_find_segment_containing_section (output_bfd, osec);
/* FIXME: Nothing ever says what this index is relative to. The kernel
p = _bfd_elf_find_segment_containing_section (output_bfd, osec);
/* FIXME: Nothing ever says what this index is relative to. The kernel
@@
-7403,9
+7408,9
@@
sh_elf_encode_eh_address (bfd *abfd,
}
#if !defined SH_TARGET_ALREADY_DEFINED
}
#if !defined SH_TARGET_ALREADY_DEFINED
-#define TARGET_BIG_SYM
bfd_elf32_sh
_vec
+#define TARGET_BIG_SYM
sh_elf32
_vec
#define TARGET_BIG_NAME "elf32-sh"
#define TARGET_BIG_NAME "elf32-sh"
-#define TARGET_LITTLE_SYM
bfd_elf32_shl
_vec
+#define TARGET_LITTLE_SYM
sh_elf32_le
_vec
#define TARGET_LITTLE_NAME "elf32-shl"
#endif
#define TARGET_LITTLE_NAME "elf32-shl"
#endif
@@
-7478,11
+7483,11
@@
sh_elf_encode_eh_address (bfd *abfd,
/* NetBSD support. */
#undef TARGET_BIG_SYM
/* NetBSD support. */
#undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM
bfd_elf32_sh
nbsd_vec
+#define TARGET_BIG_SYM
sh_elf32_
nbsd_vec
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-sh-nbsd"
#undef TARGET_LITTLE_SYM
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-sh-nbsd"
#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM
bfd_elf32_shlnbsd
_vec
+#define TARGET_LITTLE_SYM
sh_elf32_nbsd_le
_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-shl-nbsd"
#undef ELF_MAXPAGESIZE
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-shl-nbsd"
#undef ELF_MAXPAGESIZE
@@
-7498,11
+7503,11
@@
sh_elf_encode_eh_address (bfd *abfd,
/* Linux support. */
#undef TARGET_BIG_SYM
/* Linux support. */
#undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM
bfd_elf32_shblin
_vec
+#define TARGET_BIG_SYM
sh_elf32_linux_be
_vec
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-shbig-linux"
#undef TARGET_LITTLE_SYM
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-shbig-linux"
#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM
bfd_elf32_shlin
_vec
+#define TARGET_LITTLE_SYM
sh_elf32_linux
_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-sh-linux"
#undef ELF_COMMONPAGESIZE
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-sh-linux"
#undef ELF_COMMONPAGESIZE
@@
-7520,11
+7525,11
@@
sh_elf_encode_eh_address (bfd *abfd,
/* FDPIC support. */
#undef TARGET_BIG_SYM
/* FDPIC support. */
#undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM
bfd_elf32_shbfd
_vec
+#define TARGET_BIG_SYM
sh_elf32_fdpic_be
_vec
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-shbig-fdpic"
#undef TARGET_LITTLE_SYM
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-shbig-fdpic"
#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM
bfd_elf32_shfd
_vec
+#define TARGET_LITTLE_SYM
sh_elf32_fdpic_le
_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-sh-fdpic"
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-sh-fdpic"
@@
-7537,11
+7542,11
@@
sh_elf_encode_eh_address (bfd *abfd,
/* VxWorks support. */
#undef TARGET_BIG_SYM
/* VxWorks support. */
#undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM
bfd_elf32_sh
vxworks_vec
+#define TARGET_BIG_SYM
sh_elf32_
vxworks_vec
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-sh-vxworks"
#undef TARGET_LITTLE_SYM
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf32-sh-vxworks"
#undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM
bfd_elf32_shlvxworks
_vec
+#define TARGET_LITTLE_SYM
sh_elf32_vxworks_le
_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-shl-vxworks"
#undef elf32_bed
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-shl-vxworks"
#undef elf32_bed