(Mostly from Gavin Koch)

In dwarf2read.c, if the ABI is 32 bit and 64 bit addresses are encountered
discard the most significant 32 bits.
Use CORE_ADDR for address variables instead of long.
Add more explicit tx49 configur target.
Check/use sigaction/SA_RESTART in remote-sim.c
This commit is contained in:
Andrew Cagney 1997-12-15 12:38:05 +00:00
parent 9c8ec16d78
commit e7ab2a476e
8 changed files with 109 additions and 11 deletions

View File

@ -1,3 +1,34 @@
Mon Dec 15 15:13:57 1997 Andrew Cagney <cagney@b1.cygnus.com>
* configure.in (configdirs): Check for sigaction.
* configure: Re-generate.
start-sanitize-tx49
From Gavin Koch <gavin@cygnus.com>:
* config/mips/tx49el.mt : New file.
* config/mips/tm-tx49.h : New file.
* config/mips/tm-tx49el.h : New file.
* configure.tgt: Changed to use the new files for
mips64*tx49*-*-elf* and mips64*tx49*el-*-elf*
end-sanitize-tx49
Mon Dec 15 11:38:52 1997 Andrew Cagney <cagney@b1.cygnus.com>
* dwarf2read.c: From change proposed by Gavin Koch.
(address_significant_size): New static variable.
(dwarf2_build_psymtabs_hard): Check consistency between
`address_size' and `address_significant_size'.
(read_address): MASK out all but the significant bits, as
determined by `address_significant_size', of any addresses.
(elf-bfd.h): Include.
(dwarf2_build_psymtabs_hard): Set `address_significant_size'
according to the arch_size of the elf object file.
Thu Dec 11 13:40:46 1997 Andrew Cagney <cagney@b1.cygnus.com>
* dwarf2read.c (dwarf_decode_lines): Change type of address to
CORE_ADDR.
Thu Dec 11 22:39:02 1997 Mark Alexander <marka@cygnus.com>
From change made to branch by Bob Manson <manson@cygnus.com>:

View File

@ -59,6 +59,9 @@
/* Define if the "%Lg" format works to print long doubles. */
#undef PRINTF_HAS_LONG_DOUBLE
/* Define if the "%Lg" format works to scan long doubles. */
#undef SCANF_HAS_LONG_DOUBLE
/* Define if using Solaris thread debugging. */
#undef HAVE_THREAD_DB_LIB
@ -84,6 +87,9 @@
/* Define if you have the setpgid function. */
#undef HAVE_SETPGID
/* Define if you have the sigaction function. */
#undef HAVE_SIGACTION
/* Define if you have the <endian.h> header file. */
#undef HAVE_ENDIAN_H

View File

@ -29,6 +29,20 @@ else
fi
fi
tx49_files="tm-tx49.h tm-tx49l.h tx49.mt tx49l.mt"
if ( echo $* | grep keep\-tx49 > /dev/null ) ; then
keep_these_too="${tx49_files} ${keep_these_too}"
if [ -n "${verbose}" ] ; then
echo Keeping ${tx49_files}
fi
else
lose_these_too="${tx49_files} ${lose_these_too}"
if [ -n "${verbose}" ] ; then
echo Deleting ${tx49_files}
fi
fi
if ( echo $* | grep keep\-r5900 > /dev/null ) ; then
keep_these_too="tm-r5900.h r5900.mt ${keep_these_too}"
else

2
gdb/configure vendored
View File

@ -1555,7 +1555,7 @@ EOF
fi
for ac_func in setpgid sbrk select poll
for ac_func in setpgid sbrk select poll sigaction
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1562: checking for $ac_func" >&5

View File

@ -67,7 +67,7 @@ AC_HEADER_STAT
AC_C_CONST
AC_CHECK_FUNCS(setpgid sbrk select poll)
AC_CHECK_FUNCS(setpgid sbrk select poll sigaction)
# If we are configured native on Linux, work around problems with sys/procfs.h
if test "${target}" = "${host}"; then

View File

@ -171,10 +171,6 @@ mips64*vr5400*el-*-elf*) gdb_target=vr5000el ;;
mips64*vr5400*-*-elf*) gdb_target=vr5000
configdirs="${configdirs} gdbserver" ;;
# end-sanitize-vr5400
# start-sanitize-tx49
mips64*tx49*el-*-elf*) gdb_target=vr4300el ;;
mips64*tx49*-*-elf*) gdb_target=vr4300 ;;
# end-sanitize-tx49
# start-sanitize-r5900
mips64*r5900*-*-elf*) gdb_target=r5900 ;;
# end-sanitize-r5900
@ -186,6 +182,10 @@ mips-tx19*-* | mips*tx19*-*-*)
# end-sanitize-tx19
mips*tx39*el*-elf*) gdb_target=tx39el ;;
mips*tx39*-elf*) gdb_target=tx39 ;;
# start-sanitize-tx49
mips64*tx49*el-*-elf*) gdb_target=tx49el ;;
mips64*tx49*-*-elf*) gdb_target=tx49 ;;
# end-sanitize-tx49
mips64*el-*-elf*) gdb_target=embedl64 ;;
mips64*-*-elf*) gdb_target=embed64 ;;
mips*el-*-ecoff*) gdb_target=embedl ;;

View File

@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "bfd.h"
#include "elf-bfd.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "symfile.h"
@ -522,6 +523,15 @@ static struct complaint dwarf2_unsupported_const_value_attr =
whatever scope is currently getting read. */
static int address_size;
/* Some elf32 object file formats while linked for a 32 bit address
space contain debug information that has assumed 64 bit
addresses. Eg 64 bit MIPS target produced by GCC/GAS/LD where the
symbol table contains 32bit address values while its .debug_info
section contains 64 bit address values.
ADDRESS_SIGNIFICANT_SIZE specifies the number significant bits in
the ADDRESS_SIZE bytes read from the file */
static int address_significant_size;
/* Externals references. */
extern int info_verbose; /* From main.c; nonzero => verbose */
@ -907,6 +917,9 @@ dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
int comp_unit_has_pc_info;
CORE_ADDR lowpc, highpc;
/* Number of bytes of any addresses that are signficant */
address_significant_size = get_elf_backend_data (abfd)->s->arch_size / 8;
info_ptr = dwarf_info_buffer;
abbrev_ptr = dwarf_abbrev_buffer;
@ -934,7 +947,7 @@ dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
}
if (cu_header.abbrev_offset >= dwarf_abbrev_size)
{
error ("Dwarf Error: bad offset (0x%lx) in compilation unit header (at 0x%lx + 6).",
error ("Dwarf Error: bad offset (0x%lx) in compilation unit header (offset 0x%lx + 6).",
(long) cu_header.abbrev_offset,
(long) (beg_of_comp_unit - dwarf_info_buffer));
return;
@ -942,11 +955,17 @@ dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
if (beg_of_comp_unit + cu_header.length + 4
> dwarf_info_buffer + dwarf_info_size)
{
error ("Dwarf Error: bad length (0x%lx) in compilation unit header (0x%lx + 0).",
error ("Dwarf Error: bad length (0x%lx) in compilation unit header (offset 0x%lx + 0).",
(long) cu_header.length,
(long) (beg_of_comp_unit - dwarf_info_buffer));
return;
}
if (address_size < address_significant_size)
{
error ("Dwarf Error: bad address size (%ld) in compilation unit header (offset 0x%lx + 11).",
(long) cu_header.addr_size,
(long) (beg_of_comp_unit - dwarf_info_buffer));
}
/* Read the abbrevs for this compilation unit into a table */
dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
@ -3509,11 +3528,27 @@ read_address (abfd, buf)
{
CORE_ADDR retval = 0;
if (address_size == 4)
switch (address_size)
{
case 4:
retval = bfd_get_32 (abfd, (bfd_byte *) buf);
} else { /* *THE* alternative is 8, right? */
break;
case 8:
retval = bfd_get_64 (abfd, (bfd_byte *) buf);
break;
default:
/* *THE* alternative is 8, right? */
abort ();
}
/* If the address being read is larger than the address that is
applicable for the object file format then mask it down to the
correct size. Take care to avoid unnecessary shift or shift
overflow */
if (address_size > address_significant_size
&& address_significant_size < sizeof (CORE_ADDR))
{
CORE_ADDR mask = ((CORE_ADDR) 0) - 1;
retval &= ~(mask << (address_significant_size * 8));
}
return retval;
}
@ -3844,7 +3879,7 @@ dwarf_decode_lines (offset, comp_dir, abfd)
while (line_ptr < line_end)
{
/* state machine registers */
unsigned int address = 0;
CORE_ADDR address = 0;
unsigned int file = 1;
unsigned int line = 1;
unsigned int column = 0;

View File

@ -690,6 +690,18 @@ gdbsim_wait (pid, status)
if (sr_get_debug ())
printf_filtered ("gdbsim_wait\n");
#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
{
struct sigaction sa, osa;
sa.sa_handler = gdbsim_cntrl_c;
sigemptyset (&sa.sa_mask);
sa.sa_flags = 0;
sigaction (SIGINT, &sa, &osa);
prev_sigint = osa.sa_handler;
}
#else
prev_sigint = signal (SIGINT, cntrl_c);
#endif
prev_sigint = signal (SIGINT, gdbsim_cntrl_c);
sim_resume (gdbsim_desc, resume_step,
target_signal_to_host (resume_siggnal));