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.
This commit is contained in:
Andreas Schwab 2006-01-17 17:39:20 +00:00
parent 6dd55cb711
commit d99b646536
8 changed files with 36 additions and 24 deletions

View file

@ -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;