+2004-10-30 Mark Kettenis <kettenis@gnu.org>
+
+ * mipsread.c: Cleanup coding style.
+ (mipscoff_new_init, mipscoff_symfile_init, mipscoff_symfile_read)
+ (mipscoff_symfile_finish): Remove prototypes.
+
+2004-10-29 Mark Kettenis <kettenis@gnu.org>
+
+ * mips-tdep.c (mips_fetch_instruction, mips16_fetch_instruction)
+ (mips_mdebug_frame_cache, mips16_scan_prologue)
+ (mips32_scan_prologue, mips_stub_frame_cache)
+ (heuristic_proc_start, heuristic_proc_desc)
+ (mips_eabi_push_dummy_call, mips_n32n64_push_dummy_call)
+ (mips_n32n64_return_value, mips_o32_push_dummy_call)
+ (mips_o32_return_value, mips_o64_push_dummy_call)
+ (mips_step_skips_delay, mips_skip_trampoline_code)
+ (mips_gdbarch_init): Use MIPS_A0_REGNUM instead of A0_REGNUM,
+ MIPS_RA_REGNUM instead of RA_REGNUM, MIPS_T9_REGNUM instead of
+ T9_REGNUM, MIPS_V0_REGNUM instead of V0_REGNUM, MIPS_ZERO_REGNUM
+ instead of ZERO_REGNUM, MIPS32_SIZE_INSN instead of MIPS_INSTLEN
+ and MIPS16_INSN_SIZE instead of MIPS16_INSTLEN.
+ (mips_dump_tdep): Don't print A0_REGNUM, RA_REGNUM,
+ T9_REGNUM, V0_REGNUM, ZERO_REGNUM, MIPS_INSTLEN and
+ MIPS16_INSTLEN. Use MIPS_A0_REGNUM instead of A0_REGNUM.
+ * mips-linux-tdep.c (mips_linux_o32_sigframe_init)
+ (mips_linux_n32n64_sigframe_init): Use MIPS_ZERO_REGNUM instead of
+ ZERO_REGNUM.
+ * mipsnbsd-tdep.c (mipsnbsd_cannot_fetch_register)
+ (mipsnbsd_cannot_store_register): Use MIPS_ZERO_REGNUM instead of
+ ZERO_REGNUM.
+ (mipsnbsd_get_longjmp_target): Use MIPS_A0_REGNUM instead of
+ A0_REGNUM.
+ * mipsnbsd-nat.c: Include "mips-tdep.h".
+ (getregs_supplies): Use MIPS_ZERO_REGNUM instead of ZERO_REGNUM.
+ * Makefile.in (mipsnbsd-nat.o): Update dependencies.
+
2004-10-29 Andrew Cagney <cagney@gnu.org>
* stack.c (parse_frame_specification_1): New function based on
/* Read a symbol table in MIPS' format (Third-Eye).
+
Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2003, 2004
Free Software Foundation, Inc.
+
Contributed by Alessandro Forin (af@cs.cmu.edu) at CMU. Major work
by Per Bothner, John Gilmore and Ian Lance Taylor at Cygnus Support.
#include "elf/common.h"
#include "elf/mips.h"
-extern void _initialize_mipsread (void);
-
-static void mipscoff_new_init (struct objfile *);
-
-static void mipscoff_symfile_init (struct objfile *);
-
-static void mipscoff_symfile_read (struct objfile *, int);
-
-static void mipscoff_symfile_finish (struct objfile *);
-
static void
read_alphacoff_dynamic_symtab (struct section_offsets *,
struct objfile *objfile);
}
/* Alpha OSF/1 encapsulates the dynamic symbols in ELF format in a
- standard coff section. The ELF format for the symbols differs from
- the format defined in elf/external.h. It seems that a normal ELF 32 bit
- format is used, and the representation only changes because longs are
- 64 bit on the alpha. In addition, the handling of text/data section
- indices for symbols is different from the ELF ABI.
- As the BFD linker currently does not support dynamic linking on the alpha,
- there seems to be no reason to pollute BFD with another mixture of object
- file formats for now. */
+ standard COFF section. The ELF format for the symbols differs from
+ the format defined in elf/external.h. It seems that a normal ELF
+ 32-bit format is used, and the representation only changes because
+ longs are 64-bit on the alpha. In addition, the handling of
+ text/data section indices for symbols is different from the ELF
+ ABI. As the BFD linker currently does not support dynamic linking
+ on the alpha, there seems to be no reason to pollute BFD with
+ another mixture of object file formats for now. */
/* Format of an alpha external ELF symbol. */
typedef struct
{
- unsigned char st_name[4]; /* Symbol name, index in string tbl */
- unsigned char st_pad[4]; /* Pad to long word boundary */
- unsigned char st_value[8]; /* Value of the symbol */
- unsigned char st_size[4]; /* Associated symbol size */
- unsigned char st_info[1]; /* Type and binding attributes */
- unsigned char st_other[1]; /* No defined meaning, 0 */
- unsigned char st_shndx[2]; /* Associated section index */
-}
-Elfalpha_External_Sym;
+ unsigned char st_name[4]; /* Symbol name, index in string table. */
+ unsigned char st_pad[4]; /* Pad to long word boundary. */
+ unsigned char st_value[8]; /* Value of the symbol. */
+ unsigned char st_size[4]; /* Associated symbol size. */
+ unsigned char st_info[1]; /* Type and binding attributes. */
+ unsigned char st_other[1]; /* No defined meaning, 0. */
+ unsigned char st_shndx[2]; /* Associated section index. */
+} Elfalpha_External_Sym;
/* Format of an alpha external ELF dynamic info structure. */
typedef struct
+{
+ unsigned char d_tag[4]; /* Tag. */
+ unsigned char d_pad[4]; /* Pad to long word boundary. */
+ union
{
- unsigned char d_tag[4]; /* Tag */
- unsigned char d_pad[4]; /* Pad to long word boundary */
- union
- {
- unsigned char d_ptr[8]; /* Pointer value */
- unsigned char d_val[4]; /* Integer value */
- }
- d_un;
+ unsigned char d_ptr[8]; /* Pointer value. */
+ unsigned char d_val[4]; /* Integer value. */
}
-Elfalpha_External_Dyn;
+ d_un;
+} Elfalpha_External_Dyn;
/* Struct to obtain the section pointers for alpha dynamic symbol info. */
struct alphacoff_dynsecinfo
- {
- asection *sym_sect; /* Section pointer for .dynsym section */
- asection *str_sect; /* Section pointer for .dynstr section */
- asection *dyninfo_sect; /* Section pointer for .dynamic section */
- asection *got_sect; /* Section pointer for .got section */
- };
+{
+ asection *sym_sect; /* Section pointer for .dynsym section. */
+ asection *str_sect; /* Section pointer for .dynstr section. */
+ asection *dyninfo_sect; /* Section pointer for .dynamic section. */
+ asection *got_sect; /* Section pointer for .got section. */
+};
/* We are called once per section from read_alphacoff_dynamic_symtab.
- We need to examine each section we are passed, check to see
- if it is something we are interested in processing, and
- if so, stash away some access information for the section. */
+ We need to examine each section we are passed, check to see if it
+ is something we are interested in processing, and if so, stash away
+ some access information for the section. */
static void
alphacoff_locate_sections (bfd *ignore_abfd, asection *sectp, void *sip)
si = (struct alphacoff_dynsecinfo *) sip;
- if (DEPRECATED_STREQ (sectp->name, ".dynsym"))
- {
- si->sym_sect = sectp;
- }
- else if (DEPRECATED_STREQ (sectp->name, ".dynstr"))
- {
- si->str_sect = sectp;
- }
- else if (DEPRECATED_STREQ (sectp->name, ".dynamic"))
- {
- si->dyninfo_sect = sectp;
- }
- else if (DEPRECATED_STREQ (sectp->name, ".got"))
- {
+ if (strcmp (sectp->name, ".dynsym") == 0)
+ si->sym_sect = sectp;
+ else if (strcmp (sectp->name, ".dynstr") == 0)
+ si->str_sect = sectp;
+ else if (strcmp (sectp->name, ".dynamic") == 0)
+ si->dyninfo_sect = sectp;
+ else if (strcmp (sectp->name, ".got") == 0)
si->got_sect = sectp;
- }
}
-/* Scan an alpha dynamic symbol table for symbols of interest and
- add them to the minimal symbol table. */
+/* Scan an alpha dynamic symbol table for symbols of interest and add
+ them to the minimal symbol table. */
static void
read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets,
int dt_mips_gotsym = -1;
struct cleanup *cleanups;
-
/* We currently only know how to handle alpha dynamic symbols. */
if (bfd_get_arch (abfd) != bfd_arch_alpha)
return;
/* Locate the dynamic symbols sections and read them in. */
memset ((char *) &si, 0, sizeof (si));
bfd_map_over_sections (abfd, alphacoff_locate_sections, (void *) & si);
- if (si.sym_sect == NULL
- || si.str_sect == NULL
- || si.dyninfo_sect == NULL
- || si.got_sect == NULL)
+ if (si.sym_sect == NULL || si.str_sect == NULL
+ || si.dyninfo_sect == NULL || si.got_sect == NULL)
return;
sym_secsize = bfd_get_section_size (si.sym_sect);
(file_ptr) 0, got_secsize))
return;
- /* Find the number of local GOT entries and the index for the
- the first dynamic symbol in the GOT. */
+ /* Find the number of local GOT entries and the index for the the
+ first dynamic symbol in the GOT. */
for (dyninfo_p = dyninfo_secptr, dyninfo_end = dyninfo_p + dyninfo_secsize;
dyninfo_p < dyninfo_end;
dyninfo_p += sizeof (Elfalpha_External_Dyn))
if (dt_mips_local_gotno < 0 || dt_mips_gotsym < 0)
return;
- /* Scan all dynamic symbols and enter them into the minimal symbol table
- if appropriate. */
+ /* Scan all dynamic symbols and enter them into the minimal symbol
+ table if appropriate. */
sym_count = sym_secsize / sizeof (Elfalpha_External_Sym);
stripped = (bfd_get_symcount (abfd) == 0);
If sym_value is zero, then we have to get the GOT entry
for the symbol.
- If the GOT entry is nonzero, it represents the quickstart
- address of the function and we use that as the symbol value.
- If the GOT entry is zero, the function address has to be resolved
- by the runtime loader before the executable is started.
- We are unable to find any meaningful address for these
- functions in the executable file, so we skip them. */
+ If the GOT entry is nonzero, it represents the quickstart
+ address of the function and we use that as the symbol
+ value.
+
+ If the GOT entry is zero, the function address has to be
+ resolved by the runtime loader before the executable is
+ started. We are unable to find any meaningful address
+ for these functions in the executable file, so we skip
+ them. */
if (sym_value == 0)
{
int got_entry_offset =
- (i - dt_mips_gotsym + dt_mips_local_gotno) * got_entry_size;
+ (i - dt_mips_gotsym + dt_mips_local_gotno) * got_entry_size;
if (got_entry_offset < 0 || got_entry_offset >= got_secsize)
continue;
}
else
{
- /* Symbols defined in the executable itself. We only care about
- them if this is a stripped executable, otherwise they have
- been retrieved from the normal symbol table already. */
+ /* Symbols defined in the executable itself. We only care
+ about them if this is a stripped executable, otherwise
+ they have been retrieved from the normal symbol table
+ already. */
if (!stripped)
continue;
do_cleanups (cleanups);
}
-/* Initialization */
+/* Initialization. */
static struct sym_fns ecoff_sym_fns =
{
NULL /* next: pointer to next struct sym_fns */
};
+/* Provide a prototype to silence -Wmissing-prototypes. */
+void _initialize_mipsread (void);
+
void
_initialize_mipsread (void)
{