X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Freadelf.c;h=f1c2eb1631930faaabd51a9d4f13c6fb77a4bb37;hb=52b6b6b972d426d44aa9ada61cf7f052d350a3cc;hp=609edc6f88bc1faabc4f536c89c3598a465b1496;hpb=861fb55ab50ac986e273334639c4c44bb3353efb;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/readelf.c b/binutils/readelf.c index 609edc6f88..f1c2eb1631 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -50,25 +50,6 @@ #include #endif -/* for PATH_MAX */ -#ifdef HAVE_LIMITS_H -#include -#endif - -#ifndef PATH_MAX -/* for MAXPATHLEN */ -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# ifndef PATH_MAX -# ifdef MAXPATHLEN -# define PATH_MAX MAXPATHLEN -# else -# define PATH_MAX 1024 -# endif -# endif -#endif - #if __GNUC__ >= 2 /* Define BFD64 here, even if our default architecture is 32 bit ELF as this will allow us to read in and parse 64bit and 32bit ELF files. @@ -130,6 +111,7 @@ #include "elf/i960.h" #include "elf/ia64.h" #include "elf/ip2k.h" +#include "elf/lm32.h" #include "elf/iq2000.h" #include "elf/m32c.h" #include "elf/m32r.h" @@ -373,6 +355,7 @@ byte_put_little_endian (unsigned char *field, bfd_vma value, int size) } /* Print a VMA value. */ + static int print_vma (bfd_vma vma, print_mode mode) { @@ -413,35 +396,31 @@ print_vma (bfd_vma vma, print_mode mode) return 0; } -/* Display a symbol on stdout. Handles the display of - non-printing characters. - If DO_WIDE is not true then format the symbol to be - at most WIDTH characters, truncating as necessary. - If WIDTH is negative then format the string to be - exactly - WIDTH characters, truncating or padding - as necessary. */ +/* Display a symbol on stdout. Handles the display of non-printing characters. -static void + If DO_WIDE is not true then format the symbol to be at most WIDTH characters, + truncating as necessary. If WIDTH is negative then format the string to be + exactly - WIDTH characters, truncating or padding as necessary. + + Returns the number of emitted characters. */ + +static unsigned int print_symbol (int width, const char *symbol) { - const char * format_string; const char * c; + bfd_boolean extra_padding = FALSE; + unsigned int num_printed = 0; if (do_wide) { - format_string = "%.*s"; /* Set the width to a very large value. This simplifies the code below. */ width = INT_MAX; } else if (width < 0) { - format_string = "%-*.*2s"; /* Keep the width positive. This also helps. */ width = - width; - } - else - { - format_string = "%-.*s"; + extra_padding = TRUE; } while (width) @@ -462,10 +441,11 @@ print_symbol (int width, const char *symbol) { if (len > width) len = width; - - printf (format_string, len, symbol); + + printf ("%.*s", len, symbol); width -= len; + num_printed += len; } if (* c == 0 || width == 0) @@ -481,19 +461,30 @@ print_symbol (int width, const char *symbol) printf ("^%c", *c + 0x40); width -= 2; + num_printed += 2; } else { if (width < 6) break; - + printf ("<0x%.2x>", *c); width -= 6; + num_printed += 6; } symbol = c + 1; } + + if (extra_padding && width > 0) + { + /* Fill in the remaining spaces. */ + printf ("%-*s", width, " "); + num_printed += 2; + } + + return num_printed; } static void @@ -589,6 +580,7 @@ guess_is_rela (unsigned int e_machine) case EM_IP2K: case EM_IP2K_OLD: case EM_IQ2000: + case EM_LATTICEMICO32: case EM_M32C_OLD: case EM_M32C: case EM_M32R: @@ -1177,6 +1169,10 @@ dump_relocations (FILE *file, rtype = elf_xtensa_reloc_type (type); break; + case EM_LATTICEMICO32: + rtype = elf_lm32_reloc_type (type); + break; + case EM_M32C_OLD: case EM_M32C: rtype = elf_m32c_reloc_type (type); @@ -1241,7 +1237,9 @@ dump_relocations (FILE *file, psym = symtab + symtab_index; printf (" "); + print_vma (psym->st_value, LONG_HEX); + printf (is_32bit_elf ? " " : " "); if (psym->st_name == 0) @@ -1272,7 +1270,7 @@ dump_relocations (FILE *file, && psym->st_shndx == SHN_IA_64_ANSI_COMMON) sec_name = "ANSI_COM"; else if (elf_header.e_machine == EM_IA_64 - && (elf_header.e_ident[EI_OSABI] + && (elf_header.e_ident[EI_OSABI] == ELFOSABI_OPENVMS) && psym->st_shndx == SHN_IA_64_VMS_SYMVEC) sec_name = "VMS_SYMVEC"; @@ -1293,7 +1291,14 @@ dump_relocations (FILE *file, print_symbol (22, strtab + psym->st_name); if (is_rela) - printf (" + %lx", (unsigned long) rels[i].r_addend); + { + long offset = (long) (bfd_signed_vma) rels[i].r_addend; + + if (offset < 0) + printf (" - %lx", - offset); + else + printf (" + %lx", offset); + } } } else if (is_rela) @@ -1815,6 +1820,7 @@ get_machine_name (unsigned e_machine) case EM_IQ2000: return "Vitesse IQ2000"; case EM_XTENSA_OLD: case EM_XTENSA: return "Tensilica Xtensa Processor"; + case EM_LATTICEMICO32: return "Lattice Mico32"; case EM_M32C_OLD: case EM_M32C: return "Renesas M32c"; case EM_MT: return "Morpho Techologies MT processor"; @@ -1823,7 +1829,7 @@ get_machine_name (unsigned e_machine) case EM_ALTERA_NIOS2: return "Altera Nios II"; case EM_XC16X: return "Infineon Technologies xc16x"; case EM_CYGNUS_MEP: return "Toshiba MeP Media Engine"; - case EM_CR16: + case EM_CR16: case EM_CR16_OLD: return "National Semiconductor's CR16"; default: snprintf (buff, sizeof (buff), _(": 0x%x"), e_machine); @@ -2207,6 +2213,7 @@ get_machine_flags (unsigned e_flags, unsigned e_machine) case E_MIPS_MACH_LS2E: strcat (buf, ", loongson-2e"); break; case E_MIPS_MACH_LS2F: strcat (buf, ", loongson-2f"); break; case E_MIPS_MACH_OCTEON: strcat (buf, ", octeon"); break; + case E_MIPS_MACH_XLR: strcat (buf, ", xlr"); break; case 0: /* We simply ignore the field in this case to avoid confusion: MIPS ELF does not specify EF_MIPS_MACH, it is a GNU @@ -4279,8 +4286,8 @@ process_section_headers (FILE *file) else if (section->sh_type == SHT_RELA) CHECK_ENTSIZE (section, i, Rela); else if ((do_debugging || do_debug_info || do_debug_abbrevs - || do_debug_lines || do_debug_lines_decoded || do_debug_pubnames - || do_debug_aranges || do_debug_frames || do_debug_macinfo + || do_debug_lines || do_debug_lines_decoded || do_debug_pubnames + || do_debug_aranges || do_debug_frames || do_debug_macinfo || do_debug_str || do_debug_loc || do_debug_ranges) && (const_strneq (name, ".debug_") || const_strneq (name, ".zdebug_"))) @@ -4293,7 +4300,7 @@ process_section_headers (FILE *file) if (do_debugging || (do_debug_info && streq (name, "info")) || (do_debug_abbrevs && streq (name, "abbrev")) - || ((do_debug_lines || do_debug_lines_decoded) + || ((do_debug_lines || do_debug_lines_decoded) && streq (name, "line")) || (do_debug_pubnames && streq (name, "pubnames")) || (do_debug_aranges && streq (name, "aranges")) @@ -4375,7 +4382,8 @@ process_section_headers (FILE *file) get_section_type_name (section->sh_type)); } else - printf (" [%2u] %-17.17s %-15.15s ", + printf ((do_wide ? " [%2u] %-17s %-15s " + : " [%2u] %-17.17s %-15.15s "), i, SECTION_NAME (section), get_section_type_name (section->sh_type)); @@ -8027,7 +8035,7 @@ is_32bit_abs_reloc (unsigned int reloc_type) return reloc_type == 1; /* R_ARC_32. */ case EM_ARM: return reloc_type == 2; /* R_ARM_ABS32 */ - case EM_AVR_OLD: + case EM_AVR_OLD: case EM_AVR: return reloc_type == 1; case EM_BLACKFIN: @@ -8063,6 +8071,8 @@ is_32bit_abs_reloc (unsigned int reloc_type) return reloc_type == 2; /* R_IP2K_32. */ case EM_IQ2000: return reloc_type == 2; /* R_IQ2000_32. */ + case EM_LATTICEMICO32: + return reloc_type == 3; /* R_LM32_32. */ case EM_M32C_OLD: case EM_M32C: return reloc_type == 3; /* R_M32C_32. */ @@ -8156,7 +8166,7 @@ is_32bit_pcrel_reloc (unsigned int reloc_type) case EM_ARM: return reloc_type == 3; /* R_ARM_REL32 */ case EM_PARISC: - return reloc_type == 0; /* R_PARISC_NONE. *//* FIXME: This reloc is generated, but it may be a bug. */ + return reloc_type == 9; /* R_PARISC_PCREL32. */ case EM_PPC: return reloc_type == 26; /* R_PPC_REL32. */ case EM_PPC64: @@ -8219,6 +8229,36 @@ is_64bit_abs_reloc (unsigned int reloc_type) } } +/* Like is_32bit_pcrel_reloc except that it returns TRUE iff RELOC_TYPE is + a 64-bit pc-relative RELA relocation used in DWARF debug sections. */ + +static bfd_boolean +is_64bit_pcrel_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_ALPHA: + return reloc_type == 11; /* R_ALPHA_SREL64 */ + case EM_IA_64: + return reloc_type == 0x4f; /* R_IA64_PCREL64LSB */ + case EM_PARISC: + return reloc_type == 72; /* R_PARISC_PCREL64 */ + case EM_PPC64: + return reloc_type == 44; /* R_PPC64_REL64 */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + return reloc_type == 46; /* R_SPARC_DISP64 */ + case EM_X86_64: + return reloc_type == 24; /* R_X86_64_PC64 */ + case EM_S390_OLD: + case EM_S390: + return reloc_type == 23; /* R_S390_PC64 */ + default: + return FALSE; + } +} + /* Like is_32bit_abs_reloc except that it returns TRUE iff RELOC_TYPE is a 16-bit absolute RELA relocation used in DWARF debug sections. */ @@ -8254,8 +8294,40 @@ is_16bit_abs_reloc (unsigned int reloc_type) } } +/* Returns TRUE iff RELOC_TYPE is a NONE relocation used for discarded + relocation entries (possibly formerly used for SHT_GROUP sections). */ + +static bfd_boolean +is_none_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_68K: /* R_68K_NONE. */ + case EM_386: /* R_386_NONE. */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: /* R_SPARC_NONE. */ + case EM_MIPS: /* R_MIPS_NONE. */ + case EM_PARISC: /* R_PARISC_NONE. */ + case EM_ALPHA: /* R_ALPHA_NONE. */ + case EM_PPC: /* R_PPC_NONE. */ + case EM_PPC64: /* R_PPC64_NONE. */ + case EM_ARM: /* R_ARM_NONE. */ + case EM_IA_64: /* R_IA64_NONE. */ + case EM_SH: /* R_SH_NONE. */ + case EM_S390_OLD: + case EM_S390: /* R_390_NONE. */ + case EM_CRIS: /* R_CRIS_NONE. */ + case EM_X86_64: /* R_X86_64_NONE. */ + case EM_MN10300: /* R_MN10300_NONE. */ + case EM_M32R: /* R_M32R_NONE. */ + return reloc_type == 0; + } + return FALSE; +} + /* Uncompresses a section that was compressed using zlib, in place. - * This is a copy of bfd_uncompress_section_contents, in bfd/compress.c */ + This is a copy of bfd_uncompress_section_contents, in bfd/compress.c */ static int uncompress_section_contents (unsigned char **buffer, dwarf_size_type *size) @@ -8267,9 +8339,9 @@ uncompress_section_contents (unsigned char **buffer, dwarf_size_type *size) return FALSE; #else dwarf_size_type compressed_size = *size; - unsigned char* compressed_buffer = *buffer; + unsigned char * compressed_buffer = *buffer; dwarf_size_type uncompressed_size; - unsigned char* uncompressed_buffer; + unsigned char * uncompressed_buffer; z_stream strm; int rc; dwarf_size_type header_size = 12; @@ -8277,8 +8349,9 @@ uncompress_section_contents (unsigned char **buffer, dwarf_size_type *size) /* Read the zlib header. In this case, it should be "ZLIB" followed by the uncompressed section size, 8 bytes in big-endian order. */ if (compressed_size < header_size - || ! streq ((char*) compressed_buffer, "ZLIB")) + || ! streq ((char *) compressed_buffer, "ZLIB")) return 0; + uncompressed_size = compressed_buffer[4]; uncompressed_size <<= 8; uncompressed_size += compressed_buffer[5]; uncompressed_size <<= 8; uncompressed_size += compressed_buffer[6]; uncompressed_size <<= 8; @@ -8294,23 +8367,23 @@ uncompress_section_contents (unsigned char **buffer, dwarf_size_type *size) strm.zfree = NULL; strm.opaque = NULL; strm.avail_in = compressed_size - header_size; - strm.next_in = (Bytef*) compressed_buffer + header_size; + strm.next_in = (Bytef *) compressed_buffer + header_size; strm.avail_out = uncompressed_size; uncompressed_buffer = xmalloc (uncompressed_size); - rc = inflateInit (&strm); + rc = inflateInit (& strm); while (strm.avail_in > 0) { if (rc != Z_OK) goto fail; - strm.next_out = ((Bytef*) uncompressed_buffer + strm.next_out = ((Bytef *) uncompressed_buffer + (uncompressed_size - strm.avail_out)); rc = inflate (&strm, Z_FINISH); if (rc != Z_STREAM_END) goto fail; - rc = inflateReset (&strm); + rc = inflateReset (& strm); } - rc = inflateEnd (&strm); + rc = inflateEnd (& strm); if (rc != Z_OK || strm.avail_out != 0) goto fail; @@ -8389,10 +8462,14 @@ debug_apply_relocations (void *file, reloc_type = get_reloc_type (rp->r_info); + if (is_none_reloc (reloc_type)) + continue; + if (is_32bit_abs_reloc (reloc_type) || is_32bit_pcrel_reloc (reloc_type)) reloc_size = 4; - else if (is_64bit_abs_reloc (reloc_type)) + else if (is_64bit_abs_reloc (reloc_type) + || is_64bit_pcrel_reloc (reloc_type)) reloc_size = 8; else if (is_16bit_abs_reloc (reloc_type)) reloc_size = 2; @@ -8435,10 +8512,16 @@ debug_apply_relocations (void *file, } addend = is_rela ? rp->r_addend : byte_get (loc, reloc_size); - - if (is_32bit_pcrel_reloc (reloc_type)) - byte_put (loc, (addend + sym->st_value) - rp->r_offset, - reloc_size); + + if (is_32bit_pcrel_reloc (reloc_type) + || is_64bit_pcrel_reloc (reloc_type)) + { + /* On HPPA, all pc-relative relocations are biased by 8. */ + if (elf_header.e_machine == EM_PARISC) + addend -= 8; + byte_put (loc, (addend + sym->st_value) - rp->r_offset, + reloc_size); + } else byte_put (loc, addend + sym->st_value, reloc_size); } @@ -8449,11 +8532,11 @@ debug_apply_relocations (void *file, } } -int -load_debug_section (enum dwarf_section_display_enum debug, void *file) +static int +load_specific_debug_section (enum dwarf_section_display_enum debug, + Elf_Internal_Shdr *sec, void *file) { struct dwarf_section *section = &debug_displays [debug].section; - Elf_Internal_Shdr *sec; char buf [64]; int section_is_compressed; @@ -8461,18 +8544,6 @@ load_debug_section (enum dwarf_section_display_enum debug, void *file) if (section->start != NULL) return 1; - /* Locate the debug section. */ - sec = find_section (section->uncompressed_name); - if (sec != NULL) - section->name = section->uncompressed_name; - else - { - sec = find_section (section->compressed_name); - if (sec != NULL) - section->name = section->compressed_name; - } - if (sec == NULL) - return 0; section_is_compressed = section->name == section->compressed_name; snprintf (buf, sizeof (buf), _("%s section data"), section->name); @@ -8493,6 +8564,28 @@ load_debug_section (enum dwarf_section_display_enum debug, void *file) return 1; } +int +load_debug_section (enum dwarf_section_display_enum debug, void *file) +{ + struct dwarf_section *section = &debug_displays [debug].section; + Elf_Internal_Shdr *sec; + + /* Locate the debug section. */ + sec = find_section (section->uncompressed_name); + if (sec != NULL) + section->name = section->uncompressed_name; + else + { + sec = find_section (section->compressed_name); + if (sec != NULL) + section->name = section->compressed_name; + } + if (sec == NULL) + return 0; + + return load_specific_debug_section (debug, sec, file); +} + void free_debug_section (enum dwarf_section_display_enum debug) { @@ -8531,12 +8624,20 @@ display_debug_section (Elf_Internal_Shdr *section, FILE *file) || streq (debug_displays[i].section.compressed_name, name)) { struct dwarf_section *sec = &debug_displays [i].section; + int secondary = (section != find_section (name)); - if (load_debug_section (i, file)) + if (secondary) + free_debug_section (i); + + if (streq (debug_displays[i].section.uncompressed_name, name)) + sec->name = sec->uncompressed_name; + else + sec->name = sec->compressed_name; + if (load_specific_debug_section (i, section, file)) { result &= debug_displays[i].display (sec, file); - if (i != info && i != abbrev) + if (secondary || (i != info && i != abbrev)) free_debug_section (i); } @@ -8647,29 +8748,30 @@ typedef struct static const char *arm_attr_tag_CPU_arch[] = {"Pre-v4", "v4", "v4T", "v5T", "v5TE", "v5TEJ", "v6", "v6KZ", "v6T2", - "v6K", "v7"}; + "v6K", "v7", "v6-M", "v6S-M"}; static const char *arm_attr_tag_ARM_ISA_use[] = {"No", "Yes"}; static const char *arm_attr_tag_THUMB_ISA_use[] = {"No", "Thumb-1", "Thumb-2"}; static const char *arm_attr_tag_VFP_arch[] = {"No", "VFPv1", "VFPv2", "VFPv3", "VFPv3-D16"}; -static const char *arm_attr_tag_WMMX_arch[] = {"No", "WMMXv1"}; -static const char *arm_attr_tag_NEON_arch[] = {"No", "NEONv1"}; -static const char *arm_attr_tag_ABI_PCS_config[] = +static const char *arm_attr_tag_WMMX_arch[] = {"No", "WMMXv1", "WMMXv2"}; +static const char *arm_attr_tag_Advanced_SIMD_arch[] = {"No", "NEONv1"}; +static const char *arm_attr_tag_PCS_config[] = {"None", "Bare platform", "Linux application", "Linux DSO", "PalmOS 2004", "PalmOS (reserved)", "SymbianOS 2004", "SymbianOS (reserved)"}; static const char *arm_attr_tag_ABI_PCS_R9_use[] = {"V6", "SB", "TLS", "Unused"}; static const char *arm_attr_tag_ABI_PCS_RW_data[] = {"Absolute", "PC-relative", "SB-relative", "None"}; -static const char *arm_attr_tag_ABI_PCS_RO_DATA[] = +static const char *arm_attr_tag_ABI_PCS_RO_data[] = {"Absolute", "PC-relative", "None"}; static const char *arm_attr_tag_ABI_PCS_GOT_use[] = {"None", "direct", "GOT-indirect"}; static const char *arm_attr_tag_ABI_PCS_wchar_t[] = {"None", "??? 1", "2", "??? 3", "4"}; static const char *arm_attr_tag_ABI_FP_rounding[] = {"Unused", "Needed"}; -static const char *arm_attr_tag_ABI_FP_denormal[] = {"Unused", "Needed"}; +static const char *arm_attr_tag_ABI_FP_denormal[] = + {"Unused", "Needed", "Sign only"}; static const char *arm_attr_tag_ABI_FP_exceptions[] = {"Unused", "Needed"}; static const char *arm_attr_tag_ABI_FP_user_exceptions[] = {"Unused", "Needed"}; static const char *arm_attr_tag_ABI_FP_number_model[] = @@ -8691,6 +8793,15 @@ static const char *arm_attr_tag_ABI_optimization_goals[] = static const char *arm_attr_tag_ABI_FP_optimization_goals[] = {"None", "Prefer Speed", "Aggressive Speed", "Prefer Size", "Aggressive Size", "Prefer Accuracy", "Aggressive Accuracy"}; +static const char *arm_attr_tag_CPU_unaligned_access[] = {"None", "v6"}; +static const char *arm_attr_tag_VFP_HP_extension[] = + {"Not Allowed", "Allowed"}; +static const char *arm_attr_tag_ABI_FP_16bit_format[] = + {"None", "IEEE 754", "Alternative Format"}; +static const char *arm_attr_tag_T2EE_use[] = {"Not Allowed", "Allowed"}; +static const char *arm_attr_tag_Virtualization_use[] = + {"Not Allowed", "Allowed"}; +static const char *arm_attr_tag_MPextension_use[] = {"Not Allowed", "Allowed"}; #define LOOKUP(id, name) \ {id, #name, 0x80 | ARRAY_SIZE(arm_attr_tag_##name), arm_attr_tag_##name} @@ -8704,11 +8815,11 @@ static arm_attr_public_tag arm_attr_public_tags[] = LOOKUP(9, THUMB_ISA_use), LOOKUP(10, VFP_arch), LOOKUP(11, WMMX_arch), - LOOKUP(12, NEON_arch), - LOOKUP(13, ABI_PCS_config), + LOOKUP(12, Advanced_SIMD_arch), + LOOKUP(13, PCS_config), LOOKUP(14, ABI_PCS_R9_use), LOOKUP(15, ABI_PCS_RW_data), - LOOKUP(16, ABI_PCS_RO_DATA), + LOOKUP(16, ABI_PCS_RO_data), LOOKUP(17, ABI_PCS_GOT_use), LOOKUP(18, ABI_PCS_wchar_t), LOOKUP(19, ABI_FP_rounding), @@ -8724,7 +8835,16 @@ static arm_attr_public_tag arm_attr_public_tags[] = LOOKUP(29, ABI_WMMX_args), LOOKUP(30, ABI_optimization_goals), LOOKUP(31, ABI_FP_optimization_goals), - {32, "compatibility", 0, NULL} + {32, "compatibility", 0, NULL}, + LOOKUP(34, CPU_unaligned_access), + LOOKUP(36, VFP_HP_extension), + LOOKUP(38, ABI_FP_16bit_format), + {64, "nodefaults", 0, NULL}, + {65, "also_compatible_with", 0, NULL}, + LOOKUP(66, T2EE_use), + {67, "conformance", 1, NULL}, + LOOKUP(68, Virtualization_use), + LOOKUP(70, MPextension_use) }; #undef LOOKUP @@ -8804,6 +8924,28 @@ display_arm_attribute (unsigned char *p) p += strlen((char *)p) + 1; break; + case 64: /* Tag_nodefaults. */ + p++; + printf ("True\n"); + break; + + case 65: /* Tag_also_compatible_with. */ + val = read_uleb128 (p, &len); + p += len; + if (val == 6 /* Tag_CPU_arch. */) + { + val = read_uleb128 (p, &len); + p += len; + if ((unsigned int)val >= ARRAY_SIZE(arm_attr_tag_CPU_arch)) + printf ("??? (%d)\n", val); + else + printf ("%s\n", arm_attr_tag_CPU_arch[val]); + } + else + printf ("???\n"); + while (*(p++) != '\0' /* NUL terminator. */); + break; + default: abort(); } @@ -8957,6 +9099,29 @@ display_power_gnu_attribute (unsigned char *p, int tag) return p; } + if (tag == Tag_GNU_Power_ABI_Struct_Return) + { + val = read_uleb128 (p, &len); + p += len; + printf (" Tag_GNU_Power_ABI_Struct_Return: "); + switch (val) + { + case 0: + printf ("Any\n"); + break; + case 1: + printf ("r3/r4\n"); + break; + case 2: + printf ("Memory\n"); + break; + default: + printf ("??? (%d)\n", val); + break; + } + return p; + } + if (tag & 1) type = 1; /* String. */ else @@ -10575,7 +10740,7 @@ process_archive (char *file_name, FILE *file) size -= index_num * SIZEOF_AR_INDEX_NUMBERS; /* Convert the index numbers into the host's numeric format. */ - index_array = malloc (index_num * sizeof (* index_array)); + index_array = malloc (index_num * sizeof (* index_array)); if (index_array == NULL) { free (index_buffer); @@ -10609,7 +10774,7 @@ process_archive (char *file_name, FILE *file) error (_("%s: failed to read archive index symbol table\n"), file_name); ret = 1; goto out; - } + } } else { @@ -10731,7 +10896,7 @@ process_archive (char *file_name, FILE *file) { error (_("%s: end of the symbol table reached before the end of the index\n"), file_name); - break; + break; } printf ("\t%s\n", sym_table + l); l += strlen (sym_table + l) + 1;