PR binutils/15818

* objdump.c (disassemble_section): Return early if nothing from
this section needs to be disassembled.
This commit is contained in:
Andreas Schwab
2013-08-12 07:55:55 +00:00
parent 959b6a66c5
commit 643902a49a
2 changed files with 29 additions and 21 deletions

View File

@@ -1,3 +1,9 @@
2013-08-12 Andreas Schwab <schwab@suse.de>
PR binutils/15818
* objdump.c (disassemble_section): Return early if nothing from
this section needs to be disassembled.
2013-08-09 Nick Clifton <nickc@redhat.com>
* readelf.c (get_machine_flags): Handle RL78 G10 flag.

View File

@@ -1,7 +1,7 @@
/* 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, 2006, 2007, 2008, 2009, 2010, 2011,
2012 Free Software Foundation, Inc.
2012, 2013 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -1915,6 +1915,27 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
if (datasize == 0)
return;
if (start_address == (bfd_vma) -1
|| start_address < section->vma)
addr_offset = 0;
else
addr_offset = start_address - section->vma;
if (stop_address == (bfd_vma) -1)
stop_offset = datasize / opb;
else
{
if (stop_address < section->vma)
stop_offset = 0;
else
stop_offset = stop_address - section->vma;
if (stop_offset > datasize / opb)
stop_offset = datasize / opb;
}
if (addr_offset >= stop_offset)
return;
/* Decide which set of relocs to use. Load them if necessary. */
paux = (struct objdump_disasm_info *) pinfo->application_data;
if (paux->dynrelbuf)
@@ -1965,32 +1986,13 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
pinfo->buffer_length = datasize;
pinfo->section = section;
if (start_address == (bfd_vma) -1
|| start_address < pinfo->buffer_vma)
addr_offset = 0;
else
addr_offset = start_address - pinfo->buffer_vma;
if (stop_address == (bfd_vma) -1)
stop_offset = datasize / opb;
else
{
if (stop_address < pinfo->buffer_vma)
stop_offset = 0;
else
stop_offset = stop_address - pinfo->buffer_vma;
if (stop_offset > pinfo->buffer_length / opb)
stop_offset = pinfo->buffer_length / opb;
}
/* Skip over the relocs belonging to addresses below the
start address. */
while (rel_pp < rel_ppend
&& (*rel_pp)->address < rel_offset + addr_offset)
++rel_pp;
if (addr_offset < stop_offset)
printf (_("\nDisassembly of section %s:\n"), section->name);
printf (_("\nDisassembly of section %s:\n"), section->name);
/* Find the nearest symbol forwards from our current position. */
paux->require_sec = TRUE;