diff options
Diffstat (limited to 'gas/write.c')
-rw-r--r-- | gas/write.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gas/write.c b/gas/write.c index 054f279..36fc404 100644 --- a/gas/write.c +++ b/gas/write.c @@ -771,6 +771,22 @@ resolve_reloc_expr_symbols (void) } } +static bfd_boolean +is_dwo_section (asection *sec) +{ + const char *name; + int len; + + if (sec == NULL || (name = bfd_section_name (sec)) == NULL) + return FALSE; + + len = strlen (name); + if (len < 5) + return FALSE; + + return strncmp (name + len - 4, ".dwo", 4) == 0; +} + /* This pass over fixups decides whether symbols can be replaced with section symbols. */ @@ -899,6 +915,14 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED, #endif } + /* PR 26841: DWO sections are not supposed to have relocations. */ + if (is_dwo_section (sec) && seginfo->fix_root != NULL) + { + as_bad (_("DWO section '%s' contains unresolved expressions - this is not allowed"), + bfd_section_name (sec)); + seginfo->fix_root = NULL; /* FIXME: Memory leak ? */ + } + dump_section_relocs (abfd, sec, stderr); } |