diff options
author | nobody <> | 2009-01-03 17:43:47 +0000 |
---|---|---|
committer | nobody <> | 2009-01-03 17:43:47 +0000 |
commit | 98efba94c8d14ffea399e9a1859a6ced1e4869dc (patch) | |
tree | 03a93ec394427860fa23e131b4c834b417c614bf /binutils/readelf.c | |
parent | e7c73f57df961ee3db9b81f5dec5b3c5d9c3d288 (diff) | |
download | fsf-binutils-gdb-arc-20081103-branch.zip fsf-binutils-gdb-arc-20081103-branch.tar.gz fsf-binutils-gdb-arc-20081103-branch.tar.bz2 |
This commit was manufactured by cvs2svn to create branchbinutils-arc-20081103-branchpointarc-20081103-branchpointarc-20081103-branch
'arc-20081103-branch'.
Sprout from binutils-2_19-branch 2008-09-08 08:56:58 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-'
Cherrypick from binutils-2_19-branch 2009-01-03 17:43:46 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
gas/testsuite/gas/ppc/common.d
gas/testsuite/gas/ppc/common.s
ld/testsuite/ld-powerpc/attr-gnu-12-1.s
ld/testsuite/ld-powerpc/attr-gnu-12-11.d
ld/testsuite/ld-powerpc/attr-gnu-12-2.s
ld/testsuite/ld-powerpc/attr-gnu-12-21.d
Cherrypick from binutils-2_19-branch 2008-09-11 09:06:56 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
gprof/po/ro.po
Cherrypick from binutils-2_19-branch 2008-09-26 07:02:45 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
gas/config/te-solaris.h
Cherrypick from master 2008-11-02 23:59:45 UTC Alan Modra <amodra@gmail.com> 'daily update':
ChangeLog
Makefile.def
Makefile.in
Makefile.tpl
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/aclocal.m4
bfd/bfd-in2.h
bfd/cache.c
bfd/coff64-rs6000.c
bfd/coffgen.c
bfd/cofflink.c
bfd/config.in
bfd/configure
bfd/configure.in
bfd/doc/Makefile.in
bfd/dwarf2.c
bfd/elf-bfd.h
bfd/elf-eh-frame.c
bfd/elf.c
bfd/elf32-cris.c
bfd/elf32-ppc.c
bfd/elf32-sh-symbian.c
bfd/elf32-spu.c
bfd/elf32-xtensa.c
bfd/elf64-ppc.c
bfd/elflink.c
bfd/elfxx-mips.c
bfd/libbfd.h
bfd/linker.c
bfd/po/id.po
bfd/po/vi.po
bfd/reloc.c
bfd/version.h
binutils/BRANCHES
binutils/ChangeLog
binutils/Makefile.in
binutils/aclocal.m4
binutils/config.in
binutils/configure
binutils/configure.in
binutils/dlltool.c
binutils/doc/Makefile.in
binutils/dwarf.c
binutils/embedspu.sh
binutils/objcopy.c
binutils/po/id.po
binutils/po/sv.po
binutils/readelf.c
binutils/stabs.c
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/group-2.s
binutils/testsuite/binutils-all/group-3.s
binutils/testsuite/binutils-all/group-4.s
binutils/testsuite/binutils-all/group.s
binutils/testsuite/binutils-all/objcopy.exp
binutils/testsuite/binutils-all/objdump.W
binutils/testsuite/binutils-all/strip-4.d
binutils/testsuite/binutils-all/strip-5.d
binutils/testsuite/binutils-all/strip-6.d
binutils/testsuite/binutils-all/strip-7.d
binutils/testsuite/binutils-all/strip-8.d
binutils/testsuite/binutils-all/strip-9.d
binutils/windmc.c
binutils/windres.c
configure
configure.ac
gas/ChangeLog
gas/Makefile.am
gas/Makefile.in
gas/NEWS
gas/aclocal.m4
gas/app.c
gas/config.in
gas/config/bfin-parse.y
gas/config/tc-bfin.c
gas/config/tc-cris.c
gas/config/tc-frv.c
gas/config/tc-frv.h
gas/config/tc-hppa.c
gas/config/tc-hppa.h
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/config/tc-m68k.c
gas/config/tc-mips.c
gas/config/tc-mmix.c
gas/config/tc-mmix.h
gas/config/tc-mn10300.h
gas/config/tc-ns32k.c
gas/config/tc-ppc.c
gas/config/tc-sh.h
gas/config/tc-sh64.h
gas/config/tc-tic4x.c
gas/config/tc-xtensa.c
gas/config/tc-xtensa.h
gas/config/tc-z80.c
gas/configure
gas/configure.in
gas/configure.tgt
gas/doc/Makefile.in
gas/doc/as.texinfo
gas/doc/internals.texi
gas/dw2gencfi.c
gas/frags.c
gas/hash.c
gas/listing.c
gas/po/id.po
gas/read.c
gas/symbols.c
gas/testsuite/ChangeLog
gas/testsuite/gas/all/gas.exp
gas/testsuite/gas/cfi/cfi-alpha-1.d
gas/testsuite/gas/cfi/cfi-alpha-3.d
gas/testsuite/gas/cfi/cfi-arm-1.d
gas/testsuite/gas/cfi/cfi-common-1.d
gas/testsuite/gas/cfi/cfi-common-2.d
gas/testsuite/gas/cfi/cfi-common-3.d
gas/testsuite/gas/cfi/cfi-common-4.d
gas/testsuite/gas/cfi/cfi-common-5.d
gas/testsuite/gas/cfi/cfi-common-6.d
gas/testsuite/gas/cfi/cfi-hppa-1.d
gas/testsuite/gas/cfi/cfi-i386-2.d
gas/testsuite/gas/cfi/cfi-i386.d
gas/testsuite/gas/cfi/cfi-m68k.d
gas/testsuite/gas/cfi/cfi-mips-1.d
gas/testsuite/gas/cfi/cfi-ppc-1.d
gas/testsuite/gas/cfi/cfi-s390-1.d
gas/testsuite/gas/cfi/cfi-s390x-1.d
gas/testsuite/gas/cfi/cfi-sh-1.d
gas/testsuite/gas/cfi/cfi-sparc-1.d
gas/testsuite/gas/cfi/cfi-sparc64-1.d
gas/testsuite/gas/cfi/cfi-x86_64.d
gas/testsuite/gas/cris/rd-tls-1.d
gas/testsuite/gas/cris/rd-tls-1.s
gas/testsuite/gas/cris/rd-tls-2.d
gas/testsuite/gas/cris/rd-tls-2.s
gas/testsuite/gas/cris/tls-err-1.s
gas/testsuite/gas/cris/tls-err-2.s
gas/testsuite/gas/cris/tls-err-3.s
gas/testsuite/gas/elf/elf.exp
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/nops-5-i686.d
gas/testsuite/gas/i386/nops-5.d
gas/testsuite/gas/i386/nops-5.s
gas/testsuite/gas/i386/sse2avx.d
gas/testsuite/gas/i386/sse2avx.s
gas/testsuite/gas/i386/x86-64-nops-5-k8.d
gas/testsuite/gas/i386/x86-64-nops-5.d
gas/testsuite/gas/i386/x86-64-sse2avx.d
gas/testsuite/gas/i386/x86-64-sse2avx.s
gas/testsuite/gas/ppc/power4_32.d
gas/testsuite/gas/ppc/power4_32.s
gas/testsuite/gas/ppc/power6.d
gas/testsuite/gas/ppc/power6.s
gas/testsuite/gas/ppc/ppc.exp
gas/testsuite/gas/s390/esa-g5.d
gas/testsuite/gas/s390/esa-g5.s
gas/testsuite/gas/s390/esa-z990.d
gas/testsuite/gas/s390/esa-z990.s
gas/testsuite/gas/s390/zarch-z900.d
gas/testsuite/gas/s390/zarch-z900.s
gas/testsuite/gas/s390/zarch-z990.d
gas/testsuite/gas/s390/zarch-z990.s
gas/testsuite/gas/z80/arith.d
gas/testsuite/gas/z80/arith.s
gas/testsuite/gas/z80/bit.d
gas/testsuite/gas/z80/bit.s
gas/testsuite/gas/z80/block.d
gas/testsuite/gas/z80/block.s
gas/testsuite/gas/z80/branch.d
gas/testsuite/gas/z80/branch.s
gas/testsuite/gas/z80/inout.d
gas/testsuite/gas/z80/inout.s
gas/testsuite/gas/z80/ld-group.d
gas/testsuite/gas/z80/ld-group.s
gas/testsuite/gas/z80/misc.d
gas/testsuite/gas/z80/misc.s
gas/testsuite/gas/z80/rotate.d
gas/testsuite/gas/z80/rotate.s
gas/testsuite/gas/z80/z80.exp
gas/write.c
gold/ChangeLog
gold/Makefile.am
gold/Makefile.in
gold/archive.cc
gold/archive.h
gold/config.in
gold/configure
gold/configure.ac
gold/descriptors.cc
gold/descriptors.h
gold/fileread.cc
gold/fileread.h
gold/gold.cc
gold/i386.cc
gold/layout.cc
gold/main.cc
gold/mapfile.cc
gold/object.cc
gold/object.h
gold/options.cc
gold/options.h
gold/output.cc
gold/output.h
gold/plugin.cc
gold/plugin.h
gold/powerpc.cc
gold/readsyms.cc
gold/reloc.cc
gold/resolve.cc
gold/sparc.cc
gold/symtab.cc
gold/symtab.h
gold/target-reloc.h
gold/target.h
gold/testsuite/Makefile.am
gold/testsuite/Makefile.in
gold/testsuite/plugin_test.c
gold/testsuite/plugin_test_1.sh
gold/testsuite/plugin_test_2.sh
gold/testsuite/thin_archive_main.cc
gold/testsuite/thin_archive_test_1.cc
gold/testsuite/thin_archive_test_2.cc
gold/testsuite/thin_archive_test_3.cc
gold/testsuite/thin_archive_test_4.cc
gold/x86_64.cc
gprof/ChangeLog
gprof/Makefile.in
gprof/aclocal.m4
gprof/configure
gprof/configure.in
gprof/gconfig.in
gprof/po/vi.po
include/ChangeLog
include/demangle.h
include/elf/ChangeLog
include/elf/cris.h
include/elf/dwarf2.h
include/elf/ppc.h
include/obstack.h
include/plugin-api.h
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/aclocal.m4
ld/config.in
ld/configure
ld/configure.in
ld/emulparams/arcelf.sh
ld/emulparams/criself.sh
ld/emulparams/crislinux.sh
ld/emulparams/elf32_i860.sh
ld/emulparams/elf32_i960.sh
ld/emulparams/elf32_sparc.sh
ld/emulparams/elf32_spu.sh
ld/emulparams/elf32am33lin.sh
ld/emulparams/elf32fr30.sh
ld/emulparams/elf32ip2k.sh
ld/emulparams/elf32mcore.sh
ld/emulparams/elf32openrisc.sh
ld/emulparams/elf32ppccommon.sh
ld/emulparams/elf32ppcwindiss.sh
ld/emulparams/elf32vax.sh
ld/emulparams/elf64_s390.sh
ld/emulparams/elf64_sparc.sh
ld/emulparams/elf64alpha.sh
ld/emulparams/elf64mmix.sh
ld/emulparams/elf64ppc.sh
ld/emulparams/elf_i386.sh
ld/emulparams/elf_i386_be.sh
ld/emulparams/elf_i386_ldso.sh
ld/emulparams/elf_i386_vxworks.sh
ld/emulparams/elf_s390.sh
ld/emulparams/elf_x86_64.sh
ld/emulparams/h8300elf.sh
ld/emulparams/hppa64linux.sh
ld/emulparams/hppalinux.sh
ld/emulparams/i386lynx.sh
ld/emulparams/i386moss.sh
ld/emulparams/i386nto.sh
ld/emulparams/m68kelf.sh
ld/emulparams/mn10200.sh
ld/emulparams/or32elf.sh
ld/emulparams/pjelf.sh
ld/emulparams/ppclynx.sh
ld/emulparams/scoreelf.sh
ld/emulparams/shelf.sh
ld/emulparams/shelf32.sh
ld/emulparams/shelf_nto.sh
ld/emulparams/shelf_vxworks.sh
ld/emulparams/shlelf32_linux.sh
ld/emulparams/shlelf_linux.sh
ld/emulparams/shlelf_nto.sh
ld/emultempl/armelf.em
ld/emultempl/beos.em
ld/emultempl/elf32.em
ld/emultempl/genelf.em
ld/emultempl/mmo.em
ld/emultempl/pe.em
ld/emultempl/pep.em
ld/emultempl/spuelf.em
ld/emultempl/sunos.em
ld/ldemul.c
ld/ldemul.h
ld/ldexp.c
ld/ldlang.c
ld/ldlang.h
ld/pe-dll.c
ld/po/id.po
ld/po/vi.po
ld/scripttempl/avr.sc
ld/scripttempl/elf.sc
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/comm1.c
ld/testsuite/ld-elf/eh-frame-hdr.d
ld/testsuite/ld-elf/eh-group.exp
ld/testsuite/ld-elf/eh-group1.s
ld/testsuite/ld-elf/eh-group2.s
ld/testsuite/ld-elf/eh1.d
ld/testsuite/ld-elf/eh2.d
ld/testsuite/ld-elf/eh3.d
ld/testsuite/ld-elf/eh4.d
ld/testsuite/ld-elf/eh5.d
ld/testsuite/ld-elf/eh5b.s
ld/testsuite/ld-elf/eh6.d
ld/testsuite/ld-elf/extract-symbol-1sec.d
ld/testsuite/ld-elf/func1.c
ld/testsuite/ld-elf/group4.d
ld/testsuite/ld-elf/group5.d
ld/testsuite/ld-elf/group6.d
ld/testsuite/ld-elf/group7.d
ld/testsuite/ld-elf/shared.exp
ld/testsuite/ld-elf/stab.d
ld/testsuite/ld-elfcomm/common1b.c
ld/testsuite/ld-gc/gc.c
ld/testsuite/ld-ia64/tlsbin.rd
ld/testsuite/ld-ia64/tlspic.rd
ld/testsuite/ld-mips-elf/eh-frame1-n32.d
ld/testsuite/ld-mips-elf/eh-frame1-n64.d
ld/testsuite/ld-mips-elf/eh-frame2-n32.d
ld/testsuite/ld-mips-elf/eh-frame2-n64.d
ld/testsuite/ld-mips-elf/eh-frame3.d
ld/testsuite/ld-mips-elf/eh-frame4.d
ld/testsuite/ld-mips-elf/reloc-estimate-1.d
ld/testsuite/ld-powerpc/powerpc.exp
ld/testsuite/ld-powerpc/vxworks1-lib.rd
ld/testsuite/ld-shared/main.c
ld/testsuite/lib/ld-lib.exp
libiberty/ChangeLog
libiberty/Makefile.in
libiberty/config.in
libiberty/configure
libiberty/configure.ac
libiberty/cp-demangle.c
libiberty/cp-demangle.h
libiberty/testsuite/demangle-expected
libiberty/xstrdup.c
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
opcodes/ChangeLog
opcodes/Makefile.am
opcodes/Makefile.in
opcodes/aclocal.m4
opcodes/configure
opcodes/configure.in
opcodes/i386-gen.c
opcodes/i386-opc.tbl
opcodes/i386-tbl.h
opcodes/po/fr.po
opcodes/po/vi.po
opcodes/s390-opc.c
opcodes/s390-opc.txt
opcodes/z80-dis.c
Diffstat (limited to 'binutils/readelf.c')
-rw-r--r-- | binutils/readelf.c | 109 |
1 files changed, 85 insertions, 24 deletions
diff --git a/binutils/readelf.c b/binutils/readelf.c index 9f1008c..ecc54bf 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -50,13 +50,13 @@ #include <zlib.h> #endif -/* for PATH_MAX */ +/* For PATH_MAX. */ #ifdef HAVE_LIMITS_H #include <limits.h> #endif #ifndef PATH_MAX -/* for MAXPATHLEN */ +/* For MAXPATHLEN. */ # ifdef HAVE_SYS_PARAM_H # include <sys/param.h> # endif @@ -373,6 +373,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) { @@ -462,7 +463,7 @@ print_symbol (int width, const char *symbol) { if (len > width) len = width; - + printf (format_string, len, symbol); width -= len; @@ -486,7 +487,7 @@ print_symbol (int width, const char *symbol) { if (width < 6) break; - + printf ("<0x%.2x>", *c); width -= 6; @@ -1272,7 +1273,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"; @@ -1823,7 +1824,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), _("<unknown>: 0x%x"), e_machine); @@ -4279,8 +4280,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 +4294,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 +4376,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 +8029,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: @@ -8284,8 +8286,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) @@ -8297,9 +8331,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; @@ -8307,8 +8341,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; @@ -8324,23 +8359,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; @@ -8419,6 +8454,9 @@ 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; @@ -8466,7 +8504,7 @@ debug_apply_relocations (void *file, } addend = is_rela ? rp->r_addend : byte_get (loc, reloc_size); - + if (is_32bit_pcrel_reloc (reloc_type) || is_64bit_pcrel_reloc (reloc_type)) { @@ -9012,6 +9050,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 @@ -10630,7 +10691,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); @@ -10664,7 +10725,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 { @@ -10786,7 +10847,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; |