From d99b646536a8d905046ac3aabe8624fd86d56ccc Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 17 Jan 2006 17:39:20 +0000 Subject: [PATCH] PR binutils/1486 binutils/: * configure.in: Don't define DISASSEMBLER_NEEDS_RELOCS. * configure: Regenerate. * objdump.c (struct objdump_disasm_info): Don't check for DISASSEMBLER_NEEDS_RELOCS. (objdump_print_addr): Likewise. (disassemble_bytes): Check disassembler_needs_relocs from disassemble_info at run-time instead of DISASSEMBLER_NEEDS_RELOCS at compile-time. (disassemble_section): Likewise. (disassemble_data): Initialize it. include/: * dis-asm.h (struct disassemble_info): Add disassembler_needs_relocs. objdump/: * disassemble.c (disassemble_init_for_target): Set disassembler_needs_relocs for bfd_arch_arm. --- binutils/ChangeLog | 14 ++++++++++++++ binutils/configure | 3 --- binutils/configure.in | 3 --- binutils/objdump.c | 24 ++++++------------------ include/ChangeLog | 6 ++++++ include/dis-asm.h | 3 +++ opcodes/ChangeLog | 6 ++++++ opcodes/disassemble.c | 1 + 8 files changed, 36 insertions(+), 24 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index a5b7c15cb42..b73144f8abb 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,17 @@ +2006-01-17 Andreas Schwab + + PR binutils/1486 + * configure.in: Don't define DISASSEMBLER_NEEDS_RELOCS. + * configure: Regenerate. + * objdump.c (struct objdump_disasm_info): Don't check for + DISASSEMBLER_NEEDS_RELOCS. + (objdump_print_addr): Likewise. + (disassemble_bytes): Check disassembler_needs_relocs from + disassemble_info at run-time instead of DISASSEMBLER_NEEDS_RELOCS + at compile-time. + (disassemble_section): Likewise. + (disassemble_data): Initialize it. + 2006-01-11 Alan Modra * objcopy.c (copy_object): Fix thinko. diff --git a/binutils/configure b/binutils/configure index bf1ad10e09c..2c4d463ce84 100755 --- a/binutils/configure +++ b/binutils/configure @@ -10474,9 +10474,6 @@ do DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM" BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' ;; - arm*-* | xscale-* | strongarm-* | d10v-*) - OBJDUMP_DEFS="-DDISASSEMBLER_NEEDS_RELOCS" - ;; i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*) BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" diff --git a/binutils/configure.in b/binutils/configure.in index 60db5ba98fe..990b0605c9b 100644 --- a/binutils/configure.in +++ b/binutils/configure.in @@ -250,9 +250,6 @@ changequote([,])dnl DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM" BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' ;; - arm*-* | xscale-* | strongarm-* | d10v-*) - OBJDUMP_DEFS="-DDISASSEMBLER_NEEDS_RELOCS" - ;; changequote(,)dnl i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*) changequote([,])dnl diff --git a/binutils/objdump.c b/binutils/objdump.c index f2b5eea0128..fc9600c26ea 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -1,6 +1,6 @@ /* objdump.c -- dump information about an object file. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005 + 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -130,9 +130,7 @@ struct objdump_disasm_info arelent ** dynrelbuf; long dynrelcount; disassembler_ftype disassemble_fn; -#ifdef DISASSEMBLER_NEEDS_RELOCS arelent * reloc; -#endif }; /* Architecture to disassemble for, or default if NULL. */ @@ -866,9 +864,7 @@ objdump_print_addr (bfd_vma vma, { struct objdump_disasm_info *aux; asymbol *sym = NULL; /* Initialize to avoid compiler warning. */ -#ifdef DISASSEMBLER_NEEDS_RELOCS bfd_boolean skip_find = FALSE; -#endif if (sorted_symcount < 1) { @@ -879,7 +875,6 @@ objdump_print_addr (bfd_vma vma, aux = (struct objdump_disasm_info *) info->application_data; -#ifdef DISASSEMBLER_NEEDS_RELOCS if (aux->reloc != NULL && aux->reloc->sym_ptr_ptr != NULL && * aux->reloc->sym_ptr_ptr != NULL) @@ -894,7 +889,6 @@ objdump_print_addr (bfd_vma vma, } if (!skip_find) -#endif sym = find_symbol_for_address (vma, info, NULL); objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, info, @@ -1319,12 +1313,10 @@ disassemble_bytes (struct disassemble_info * info, { bfd_vma z; bfd_boolean need_nl = FALSE; -#ifdef DISASSEMBLER_NEEDS_RELOCS int previous_octets; /* Remember the length of the previous instruction. */ previous_octets = octets; -#endif octets = 0; /* If we see more than SKIP_ZEROES octets of zeroes, we just @@ -1389,8 +1381,8 @@ disassemble_bytes (struct disassemble_info * info, info->bytes_per_chunk = 0; info->flags = 0; -#ifdef DISASSEMBLER_NEEDS_RELOCS - if (*relppp < relppend) + if (info->disassembler_needs_relocs + && *relppp < relppend) { bfd_signed_vma distance_to_rel; @@ -1420,7 +1412,7 @@ disassemble_bytes (struct disassemble_info * info, else aux->reloc = NULL; } -#endif + octets = (*disassemble_fn) (section->vma + addr_offset, info); info->fprintf_func = (fprintf_ftype) fprintf; info->stream = stdout; @@ -1672,10 +1664,7 @@ disassemble_section (bfd *abfd, asection *section, void *info) rel_offset = 0; if ((section->flags & SEC_RELOC) != 0 -#ifndef DISASSEMBLER_NEEDS_RELOCS - && dump_reloc_info -#endif - ) + && (dump_reloc_info || pinfo->disassembler_needs_relocs)) { long relsize; @@ -1882,9 +1871,7 @@ disassemble_data (bfd *abfd) aux.require_sec = FALSE; aux.dynrelbuf = NULL; aux.dynrelcount = 0; -#ifdef DISASSEMBLER_NEEDS_RELOCS aux.reloc = NULL; -#endif disasm_info.print_address_func = objdump_print_address; disasm_info.symbol_at_address_func = objdump_symbol_at_address; @@ -1926,6 +1913,7 @@ disassemble_data (bfd *abfd) disasm_info.octets_per_byte = bfd_octets_per_byte (abfd); disasm_info.skip_zeroes = DEFAULT_SKIP_ZEROES; disasm_info.skip_zeroes_at_end = DEFAULT_SKIP_ZEROES_AT_END; + disasm_info.disassembler_needs_relocs = FALSE; if (bfd_big_endian (abfd)) disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_BIG; diff --git a/include/ChangeLog b/include/ChangeLog index fe5e1c16df8..66589fc949b 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2006-01-17 Andreas Schwab + + PR binutils/1486 + * dis-asm.h (struct disassemble_info): Add + disassembler_needs_relocs. + 2006-01-09 Bob Wilson * xtensa-config.h (XCHAL_HAVE_MUL32_HIGH): Define. diff --git a/include/dis-asm.h b/include/dis-asm.h index ddb3426a590..61b34c36151 100644 --- a/include/dis-asm.h +++ b/include/dis-asm.h @@ -172,6 +172,9 @@ typedef struct disassemble_info { alignment. */ unsigned int skip_zeroes_at_end; + /* Whether the disassembler always needs the relocations. */ + bfd_boolean disassembler_needs_relocs; + /* Results from instruction decoders. Not all decoders yet support this information. This info is set each time an instruction is decoded, and is only valid for the last such instruction. diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 9083afa8b90..fe28508a15e 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2006-01-17 Andreas Schwab + + PR binutils/1486 + * disassemble.c (disassemble_init_for_target): Set + disassembler_needs_relocs for bfd_arch_arm. + 2006-01-16 Paul Brook * m68k-opc.c (m68k_opcodes): Fix opcodes for ColdFire f?abss, diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c index db5b90b56c2..5cef9028666 100644 --- a/opcodes/disassemble.c +++ b/opcodes/disassemble.c @@ -442,6 +442,7 @@ disassemble_init_for_target (struct disassemble_info * info) #ifdef ARCH_arm case bfd_arch_arm: info->symbol_is_valid = arm_symbol_is_valid; + info->disassembler_needs_relocs = TRUE; break; #endif #ifdef ARCH_ia64 -- 2.30.2