aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/som.c11
-rw-r--r--bfd/syms.c4
3 files changed, 22 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3144a72..4bdee1c 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,13 @@
2021-04-29 Nick Clifton <nickc@redhat.com>
+ PR 27793
+ * som.c (som_slurp_symbol_table): Assign symbols without any scope
+ to the undefined section.
+ (som_decode_symclass): Check for a missing symbol section.
+ * syms.c (bfd_decode_symclass): Likewise.
+
+2021-04-29 Nick Clifton <nickc@redhat.com>
+
PR 27792
* som.c (som_slurp_string_table): Place a terminating NUL byte at
the end of the table.
diff --git a/bfd/som.c b/bfd/som.c
index 656ded9..42ecc76 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -4740,7 +4740,7 @@ som_slurp_symbol_table (bfd *abfd)
goto error_return;
}
sym->symbol.value = bfd_getb32 (bufp->symbol_value);
- sym->symbol.section = 0;
+ sym->symbol.section = NULL;
sym->symbol.flags = 0;
switch (symbol_type)
@@ -4800,6 +4800,10 @@ som_slurp_symbol_table (bfd *abfd)
sym->symbol.section = bfd_section_from_som_symbol (abfd, bufp);
sym->symbol.value -= sym->symbol.section->vma;
break;
+
+ default:
+ sym->symbol.section = bfd_und_section_ptr;
+ break;
}
/* Check for a weak symbol. */
@@ -5848,6 +5852,11 @@ som_decode_symclass (asymbol *symbol)
{
char c;
+ /* If the symbol did not have a scope specified,
+ then it will not have associated section. */
+ if (symbol == NULL || symbol->section == NULL)
+ return '?';
+
if (bfd_is_com_section (symbol->section))
return 'C';
if (bfd_is_und_section (symbol->section))
diff --git a/bfd/syms.c b/bfd/syms.c
index e0ab167..7daf741 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -654,6 +654,10 @@ bfd_decode_symclass (asymbol *symbol)
{
char c;
+ /* Paranoia... */
+ if (symbol == NULL || symbol->section == NULL)
+ return '?';
+
if (symbol->section && bfd_is_com_section (symbol->section))
{
if (symbol->section->flags & SEC_SMALL_DATA)