/* Definitions for symbol file management in GDB.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of GDB.
};
-/* Sections in an objfile.
-
- It is strange that we have both this notion of "sections"
- and the one used by section_offsets. Section as used
- here, (currently at least) means a BFD section, and the sections
- are set up from the BFD sections in allocate_objfile.
-
- The sections in section_offsets have their meaning determined by
- the symbol format, and they are set up by the sym_offsets function
- for that symbol file format.
-
- I'm not sure this could or should be changed, however. */
+/* Sections in an objfile. The section offsets are stored in the
+ OBJFILE. */
struct obj_section
{
- CORE_ADDR addr; /* lowest address in section */
- CORE_ADDR endaddr; /* 1+highest address in section */
-
- /* This field is being used for nefarious purposes by syms_from_objfile.
- It is said to be redundant with section_offsets; it's not really being
- used that way, however, it's some sort of hack I don't understand
- and am not going to try to eliminate (yet, anyway). FIXME.
-
- It was documented as "offset between (end)addr and actual memory
- addresses", but that's not true; addr & endaddr are actual memory
- addresses. */
- CORE_ADDR offset;
-
struct bfd_section *the_bfd_section; /* BFD section pointer */
/* Objfile this section is part of. */
int ovly_mapped;
};
+/* Relocation offset applied to S. */
+#define obj_section_offset(s) \
+ (((s)->objfile->section_offsets)->offsets[(s)->the_bfd_section->index])
+
+/* The memory address of section S (vma + offset). */
+#define obj_section_addr(s) \
+ (bfd_get_section_vma ((s)->objfile->abfd, s->the_bfd_section) \
+ + obj_section_offset (s))
+
+/* The one-passed-the-end memory address of section S
+ (vma + size + offset). */
+#define obj_section_endaddr(s) \
+ (bfd_get_section_vma ((s)->objfile->abfd, s->the_bfd_section) \
+ + bfd_get_section_size ((s)->the_bfd_section) \
+ + obj_section_offset (s))
/* The "objstats" structure provides a place for gdb to record some
interesting information about its internal state at runtime, on a
/* Defines for the objfile flag word. */
-/* When using mapped/remapped predigested gdb symbol information, we need
- a flag that indicates that we have previously done an initial symbol
- table read from this particular objfile. We can't just look for the
- absence of any of the three symbol tables (msymbols, psymtab, symtab)
- because if the file has no symbols for example, none of these will
- exist. */
-
-#define OBJF_SYMS (1 << 1) /* Have tried to read symbols */
-
/* When an object file has its functions reordered (currently Irix-5.2
shared libraries exhibit this behaviour), we will need an expensive
algorithm to locate a partial symtab or symtab via an address.
To avoid this penalty for normal object files, we use this flag,
whose setting is determined upon symbol table read in. */
-#define OBJF_REORDERED (1 << 2) /* Functions are reordered */
+#define OBJF_REORDERED (1 << 0) /* Functions are reordered */
/* Distinguish between an objfile for a shared library and a "vanilla"
objfile. (If not set, the objfile may still actually be a solib.
implementation of the solib interface is responsible for setting
this flag when noticing solibs used by an inferior.) */
-#define OBJF_SHARED (1 << 3) /* From a shared library */
+#define OBJF_SHARED (1 << 1) /* From a shared library */
/* User requested that this objfile be read in it's entirety. */
-#define OBJF_READNOW (1 << 4) /* Immediate full read */
+#define OBJF_READNOW (1 << 2) /* Immediate full read */
/* This objfile was created because the user explicitly caused it
(e.g., used the add-symbol-file command). This bit offers a way
ones that the user explicitly loaded via the add-symbol-file
command. */
-#define OBJF_USERLOADED (1 << 5) /* User loaded */
+#define OBJF_USERLOADED (1 << 3) /* User loaded */
+
+/* The bfd of this objfile is used outside of the objfile (e.g. by solib).
+ Do not try to free it. */
+
+#define OBJF_KEEPBFD (1 << 4) /* Do not delete bfd */
+
/* The object file that the main symbol table was loaded from (e.g. the
argument to the "symbol-file" or "file" command). */
extern struct obj_section *find_pc_section (CORE_ADDR pc);
-extern struct obj_section *find_pc_sect_section (CORE_ADDR pc,
- asection * section);
-
extern int in_plt_section (CORE_ADDR, char *);
/* Keep a registry of per-objfile data-pointers required by other GDB
/* Traverse all minimal symbols in one objfile. */
#define ALL_OBJFILE_MSYMBOLS(objfile, m) \
- for ((m) = (objfile) -> msymbols; DEPRECATED_SYMBOL_NAME(m) != NULL; (m)++)
+ for ((m) = (objfile) -> msymbols; SYMBOL_LINKAGE_NAME(m) != NULL; (m)++)
/* Traverse all symtabs in all objfiles. */
uninitialized section index. */
#define SECT_OFF_BSS(objfile) (objfile)->sect_index_bss
+/* Answer whether there is more than one object file loaded. */
+
+#define MULTI_OBJFILE_P() (object_files && object_files->next)
+
#endif /* !defined (OBJFILES_H) */