/* Work with executable files, for GDB.
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation,
- Inc.
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+ 1998, 1999, 2000, 2001, 2002, 2003, 2007 Free Software Foundation, Inc.
This file is part of GDB.
struct section_table **table_pp = (struct section_table **) table_pp_char;
flagword aflag;
+ /* Check the section flags, but do not discard zero-length sections, since
+ some symbols may still be attached to this section. For instance, we
+ encountered on sparc-solaris 2.10 a shared library with an empty .bss
+ section to which a symbol named "_end" was attached. The address
+ of this symbol still needs to be relocated. */
aflag = bfd_get_section_flags (abfd, asect);
if (!(aflag & SEC_ALLOC))
return;
- if (0 == bfd_section_size (abfd, asect))
- return;
+
(*table_pp)->bfd = abfd;
(*table_pp)->the_bfd_section = asect;
(*table_pp)->addr = bfd_section_vma (abfd, asect);
print_section_info (struct target_ops *t, bfd *abfd)
{
struct section_table *p;
- /* FIXME: 16 is not wide enough when TARGET_ADDR_BIT > 64. */
- int wid = TARGET_ADDR_BIT <= 32 ? 8 : 16;
+ /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
+ int wid = gdbarch_addr_bit (current_gdbarch) <= 32 ? 8 : 16;
printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
wrap_here (" ");