projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow stubs without associated input section in ARM backend
[binutils-gdb.git]
/
bfd
/
elf32-arm.c
diff --git
a/bfd/elf32-arm.c
b/bfd/elf32-arm.c
index 9adc43e69cf1ff0c04839e494d8945110de406e2..e1ee67315f84f59ea11d62015e8ffa0e0530ebcf 100644
(file)
--- a/
bfd/elf32-arm.c
+++ b/
bfd/elf32-arm.c
@@
-3163,7
+3163,8
@@
struct elf32_arm_link_hash_table
bfd *stub_bfd;
/* Linker call-backs. */
bfd *stub_bfd;
/* Linker call-backs. */
- asection * (*add_stub_section) (const char *, asection *, unsigned int);
+ asection * (*add_stub_section) (const char *, asection *, asection *,
+ unsigned int);
void (*layout_sections_again) (void);
/* Array to keep track of which stub sections have been created, and
void (*layout_sections_again) (void);
/* Array to keep track of which stub sections have been created, and
@@
-4144,6
+4145,7
@@
elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
{
asection *link_sec;
asection *stub_sec;
{
asection *link_sec;
asection *stub_sec;
+ asection *out_sec;
link_sec = htab->stub_group[section->id].link_sec;
BFD_ASSERT (link_sec != NULL);
link_sec = htab->stub_group[section->id].link_sec;
BFD_ASSERT (link_sec != NULL);
@@
-4166,7
+4168,8
@@
elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
memcpy (s_name, link_sec->name, namelen);
memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
memcpy (s_name, link_sec->name, namelen);
memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
- stub_sec = (*htab->add_stub_section) (s_name, link_sec,
+ out_sec = link_sec->output_section;
+ stub_sec = (*htab->add_stub_section) (s_name, out_sec, link_sec,
htab->nacl_p ? 4 : 3);
if (stub_sec == NULL)
return NULL;
htab->nacl_p ? 4 : 3);
if (stub_sec == NULL)
return NULL;
@@
-4202,6
+4205,8
@@
elf32_arm_add_stub (const char *stub_name,
TRUE, FALSE);
if (stub_entry == NULL)
{
TRUE, FALSE);
if (stub_entry == NULL)
{
+ if (section == NULL)
+ section = stub_sec;
(*_bfd_error_handler) (_("%s: cannot create stub entry %s"),
section->owner,
stub_name);
(*_bfd_error_handler) (_("%s: cannot create stub entry %s"),
section->owner,
stub_name);
@@
-5216,6
+5221,7
@@
elf32_arm_size_stubs (bfd *output_bfd,
struct bfd_link_info *info,
bfd_signed_vma group_size,
asection * (*add_stub_section) (const char *, asection *,
struct bfd_link_info *info,
bfd_signed_vma group_size,
asection * (*add_stub_section) (const char *, asection *,
+ asection *,
unsigned int),
void (*layout_sections_again) (void))
{
unsigned int),
void (*layout_sections_again) (void))
{