- || (type == SHN_TIC6X_SCOMMON
- && filedata->file_header.e_machine == EM_TI_C6000))
- return "SCOM";
- else if (type == SHN_MIPS_SUNDEFINED
- && filedata->file_header.e_machine == EM_MIPS)
- return "SUND";
- else if (type >= SHN_LOPROC && type <= SHN_HIPROC)
- sprintf (buff, "PRC[0x%04x]", type & 0xffff);
- else if (type >= SHN_LOOS && type <= SHN_HIOS)
- sprintf (buff, "OS [0x%04x]", type & 0xffff);
- else if (type >= SHN_LORESERVE)
- sprintf (buff, "RSV[0x%04x]", type & 0xffff);
- else if (type >= filedata->file_header.e_shnum)
- sprintf (buff, _("bad section index[%3d]"), type);
- else
- sprintf (buff, "%3d", type);
- break;
- }
-
- return buff;
-}
-
-static bfd_vma *
-get_dynamic_data (Filedata * filedata, bfd_size_type number, unsigned int ent_size)
-{
- unsigned char * e_data;
- bfd_vma * i_data;
-
- /* If the size_t type is smaller than the bfd_size_type, eg because
- you are building a 32-bit tool on a 64-bit host, then make sure
- that when (number) is cast to (size_t) no information is lost. */
- if (sizeof (size_t) < sizeof (bfd_size_type)
- && (bfd_size_type) ((size_t) number) != number)
- {
- error (_("Size truncation prevents reading %s elements of size %u\n"),
- bfd_vmatoa ("u", number), ent_size);
- return NULL;
- }
-
- /* Be kind to memory chekers (eg valgrind, address sanitizer) by not
- attempting to allocate memory when the read is bound to fail. */
- if (ent_size * number > filedata->file_size)
- {
- error (_("Invalid number of dynamic entries: %s\n"),
- bfd_vmatoa ("u", number));
- return NULL;
- }
-
- e_data = (unsigned char *) cmalloc ((size_t) number, ent_size);
- if (e_data == NULL)
- {
- error (_("Out of memory reading %s dynamic entries\n"),
- bfd_vmatoa ("u", number));
- return NULL;
- }
-
- if (fread (e_data, ent_size, (size_t) number, filedata->handle) != number)
- {
- error (_("Unable to read in %s bytes of dynamic data\n"),
- bfd_vmatoa ("u", number * ent_size));
- free (e_data);
- return NULL;
- }
-
- i_data = (bfd_vma *) cmalloc ((size_t) number, sizeof (*i_data));
- if (i_data == NULL)
- {
- error (_("Out of memory allocating space for %s dynamic entries\n"),
- bfd_vmatoa ("u", number));
- free (e_data);
- return NULL;
- }
-
- while (number--)
- i_data[number] = byte_get (e_data + number * ent_size, ent_size);
-
- free (e_data);
-
- return i_data;
-}
-
-static void
-print_dynamic_symbol (Filedata * filedata, bfd_vma si, unsigned long hn)
-{
- Elf_Internal_Sym * psym;
- int n;
-
- n = print_vma (si, DEC_5);
- if (n < 5)
- fputs (&" "[n], stdout);
- printf (" %3lu: ", hn);
-
- if (dynamic_symbols == NULL || si >= num_dynamic_syms)
- {
- printf (_("<No info available for dynamic symbol number %lu>\n"),
- (unsigned long) si);
- return;
- }
-
- psym = dynamic_symbols + si;
- print_vma (psym->st_value, LONG_HEX);
- putchar (' ');
- print_vma (psym->st_size, DEC_5);
-
- printf (" %-7s", get_symbol_type (filedata, ELF_ST_TYPE (psym->st_info)));
- printf (" %-6s", get_symbol_binding (filedata, ELF_ST_BIND (psym->st_info)));
-
- if (filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_SOLARIS)
- printf (" %-7s", get_solaris_symbol_visibility (psym->st_other));
- else
- {
- unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
-
- printf (" %-7s", get_symbol_visibility (vis));
- /* Check to see if any other bits in the st_other field are set.
- Note - displaying this information disrupts the layout of the
- table being generated, but for the moment this case is very
- rare. */
- if (psym->st_other ^ vis)
- printf (" [%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
+ || (type == SHN_TIC6X_SCOMMON
+ && filedata->file_header.e_machine == EM_TI_C6000))
+ return "SCOM";
+ else if (type == SHN_MIPS_SUNDEFINED
+ && filedata->file_header.e_machine == EM_MIPS)
+ return "SUND";
+ else if (type >= SHN_LOPROC && type <= SHN_HIPROC)
+ sprintf (buff, "PRC[0x%04x]", type & 0xffff);
+ else if (type >= SHN_LOOS && type <= SHN_HIOS)
+ sprintf (buff, "OS [0x%04x]", type & 0xffff);
+ else if (type >= SHN_LORESERVE)
+ sprintf (buff, "RSV[0x%04x]", type & 0xffff);
+ else if (filedata->file_header.e_shnum != 0
+ && type >= filedata->file_header.e_shnum)
+ sprintf (buff, _("bad section index[%3d]"), type);
+ else
+ sprintf (buff, "%3d", type);
+ break;