* buildsym.h: Add processing_acc_compilation flag.
* buildsym.c (read_sun_builtin_type, read_sun_floating_type): New. (define_symbol): Skip arg types in function entries. Resolve overloaded 'P' which acc uses for prototypes of functions called by this file. (read_type: 'b', 'r'): Handle Solaris2 builtin types. * minsyms.c (prim_record_minimal_symbol_and_info): Hack to save size of ELF symbols. FIXME. * tm-sun4os5.h: Rename to tm-sun4sol2.h. Update defines for Sol2. * xm-sun4os5.h: Rename to xm-sun4sol2.h. Hack more defines. * config/sun4os5.m[ht]: Rename to config/sun4sol2.m[ht]; new xm, tm.
This commit is contained in:
parent
bf2e5f6b82
commit
93297ea028
@ -1,7 +1,19 @@
|
|||||||
Fri Jun 12 18:54:40 1992 John Gilmore (gnu at cygnus.com)
|
Fri Jun 12 18:54:40 1992 John Gilmore (gnu at cygnus.com)
|
||||||
|
|
||||||
|
* buildsym.h: Add processing_acc_compilation flag.
|
||||||
|
* buildsym.c (read_sun_builtin_type, read_sun_floating_type): New.
|
||||||
|
(define_symbol): Skip arg types in function entries. Resolve
|
||||||
|
overloaded 'P' which acc uses for prototypes of functions called
|
||||||
|
by this file.
|
||||||
|
(read_type: 'b', 'r'): Handle Solaris2 builtin types.
|
||||||
|
|
||||||
|
* minsyms.c (prim_record_minimal_symbol_and_info): Hack to
|
||||||
|
save size of ELF symbols. FIXME.
|
||||||
|
* tm-sun4os5.h: Rename to tm-sun4sol2.h. Update defines for Sol2.
|
||||||
|
* xm-sun4os5.h: Rename to xm-sun4sol2.h. Hack more defines.
|
||||||
|
|
||||||
* configure.in: Solaris config is sparc-sun-solaris2.
|
* configure.in: Solaris config is sparc-sun-solaris2.
|
||||||
* config/sun4os5.m[ht]: Rename to config/sun4sol2.m[ht].
|
* config/sun4os5.m[ht]: Rename to config/sun4sol2.m[ht]; new xm, tm.
|
||||||
|
|
||||||
Fri Jun 12 12:49:43 1992 Fred Fish (fnf@cygnus.com)
|
Fri Jun 12 12:49:43 1992 Fred Fish (fnf@cygnus.com)
|
||||||
|
|
||||||
|
145
gdb/buildsym.c
145
gdb/buildsym.c
@ -1,5 +1,6 @@
|
|||||||
/* Build symbol tables in GDB's internal format.
|
/* Build symbol tables in GDB's internal format.
|
||||||
Copyright 1986, 1987, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
|
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
|
|
||||||
@ -66,6 +67,12 @@ cleanup_undefined_types PARAMS ((void));
|
|||||||
static struct type *
|
static struct type *
|
||||||
read_range_type PARAMS ((char **, int [2], struct objfile *));
|
read_range_type PARAMS ((char **, int [2], struct objfile *));
|
||||||
|
|
||||||
|
static struct type *
|
||||||
|
read_sun_builtin_type PARAMS ((char **, int [2], struct objfile *));
|
||||||
|
|
||||||
|
static struct type *
|
||||||
|
read_sun_floating_type PARAMS ((char **, int [2], struct objfile *));
|
||||||
|
|
||||||
static struct type *
|
static struct type *
|
||||||
read_enum_type PARAMS ((char **, struct type *, struct objfile *));
|
read_enum_type PARAMS ((char **, struct type *, struct objfile *));
|
||||||
|
|
||||||
@ -1269,11 +1276,24 @@ define_symbol (valu, string, desc, type, objfile)
|
|||||||
|
|
||||||
type_read = read_type (&p, objfile);
|
type_read = read_type (&p, objfile);
|
||||||
|
|
||||||
|
if ((deftype == 'F' || deftype == 'f') && *p == ';') {
|
||||||
|
/* Sun acc puts declared types of aguments here. We don't care
|
||||||
|
about their actual types (FIXME -- we should remember the whole
|
||||||
|
function prototype), but the list
|
||||||
|
may define some new types that we have to remember, so we must
|
||||||
|
scan them now. */
|
||||||
|
while (*p == ';') {
|
||||||
|
p++;
|
||||||
|
read_type (&p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((deftype == 'F' || deftype == 'f')
|
if ((deftype == 'F' || deftype == 'f')
|
||||||
&& TYPE_CODE (type_read) != TYPE_CODE_FUNC)
|
&& TYPE_CODE (type_read) != TYPE_CODE_FUNC)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
/* This code doesn't work -- it needs to realloc and can't. */
|
/* This code doesn't work -- it needs to realloc and can't. */
|
||||||
|
/* Attempt to set up to record a function prototype... */
|
||||||
struct type *new = (struct type *)
|
struct type *new = (struct type *)
|
||||||
obstack_alloc (&objfile -> type_obstack,
|
obstack_alloc (&objfile -> type_obstack,
|
||||||
sizeof (struct type));
|
sizeof (struct type));
|
||||||
@ -1417,6 +1437,13 @@ define_symbol (valu, string, desc, type, objfile)
|
|||||||
|
|
||||||
case 'P':
|
case 'P':
|
||||||
/* Parameter which is in a register. */
|
/* Parameter which is in a register. */
|
||||||
|
|
||||||
|
/* acc seems to use P to delare the types of functions that
|
||||||
|
are called by this file. gdb is not prepared to deal
|
||||||
|
with this extra information. */
|
||||||
|
if (processing_acc_compilation)
|
||||||
|
break;
|
||||||
|
|
||||||
SYMBOL_CLASS (sym) = LOC_REGPARM;
|
SYMBOL_CLASS (sym) = LOC_REGPARM;
|
||||||
SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
|
SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
|
||||||
if (SYMBOL_VALUE (sym) >= NUM_REGS)
|
if (SYMBOL_VALUE (sym) >= NUM_REGS)
|
||||||
@ -1979,6 +2006,18 @@ read_type (pp, objfile)
|
|||||||
*dbx_lookup_type (typenums) = type;
|
*dbx_lookup_type (typenums) = type;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'b': /* Sun ACC builtin int type */
|
||||||
|
type = read_sun_builtin_type (pp, typenums, objfile);
|
||||||
|
if (typenums[0] != -1)
|
||||||
|
*dbx_lookup_type (typenums) = type;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'R': /* Sun ACC builtin float type */
|
||||||
|
type = read_sun_floating_type (pp, typenums, objfile);
|
||||||
|
if (typenums[0] != -1)
|
||||||
|
*dbx_lookup_type (typenums) = type;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'e': /* Enumeration type */
|
case 'e': /* Enumeration type */
|
||||||
type = dbx_alloc_type (typenums, objfile);
|
type = dbx_alloc_type (typenums, objfile);
|
||||||
type = read_enum_type (pp, type, objfile);
|
type = read_enum_type (pp, type, objfile);
|
||||||
@ -2929,6 +2968,110 @@ read_enum_type (pp, type, objfile)
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* this is for the initial typedefs in every file (for int, long, etc) */
|
||||||
|
static struct type *
|
||||||
|
read_sun_builtin_type (pp, typenums, objfile)
|
||||||
|
char **pp;
|
||||||
|
int typenums[2];
|
||||||
|
struct objfile *objfile;
|
||||||
|
{
|
||||||
|
int nbits;
|
||||||
|
int signed_type;
|
||||||
|
|
||||||
|
switch (**pp) {
|
||||||
|
case 's':
|
||||||
|
signed_type = 1;
|
||||||
|
break;
|
||||||
|
case 'u':
|
||||||
|
signed_type = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return error_type (pp);
|
||||||
|
}
|
||||||
|
(*pp)++;
|
||||||
|
|
||||||
|
/* The first number appears to be the number of bytes occupied
|
||||||
|
by this type, except that unsigned short is 4 instead of 2.
|
||||||
|
Since this information is redundant with the third number,
|
||||||
|
we will ignore it. */
|
||||||
|
read_number (pp, ';');
|
||||||
|
|
||||||
|
/* The second number is always 0, so ignore it too. */
|
||||||
|
read_number (pp, ';');
|
||||||
|
|
||||||
|
/* The third number is the number of bits for this type. */
|
||||||
|
nbits = read_number (pp, 0);
|
||||||
|
|
||||||
|
/* FIXME. Here we should just be able to make a type of the right
|
||||||
|
number of bits and signedness. FIXME. */
|
||||||
|
|
||||||
|
if (nbits == TARGET_LONG_LONG_BIT)
|
||||||
|
return (lookup_fundamental_type (objfile,
|
||||||
|
signed_type? FT_LONG_LONG: FT_UNSIGNED_LONG_LONG));
|
||||||
|
|
||||||
|
if (nbits == TARGET_INT_BIT) {
|
||||||
|
/* FIXME -- the only way to distinguish `int' from `long'
|
||||||
|
is to look at its name! */
|
||||||
|
if (signed_type) {
|
||||||
|
if (long_kludge_name && long_kludge_name[0] == 'l' /* long */)
|
||||||
|
return lookup_fundamental_type (objfile, FT_LONG);
|
||||||
|
else
|
||||||
|
return lookup_fundamental_type (objfile, FT_INTEGER);
|
||||||
|
} else {
|
||||||
|
if (long_kludge_name
|
||||||
|
&& ((long_kludge_name[0] == 'u' /* unsigned */ &&
|
||||||
|
long_kludge_name[9] == 'l' /* long */)
|
||||||
|
|| (long_kludge_name[0] == 'l' /* long unsigned */)))
|
||||||
|
return lookup_fundamental_type (objfile, FT_UNSIGNED_LONG);
|
||||||
|
else
|
||||||
|
return lookup_fundamental_type (objfile, FT_UNSIGNED_INTEGER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nbits == TARGET_SHORT_BIT)
|
||||||
|
return (lookup_fundamental_type (objfile,
|
||||||
|
signed_type? FT_SHORT: FT_UNSIGNED_SHORT));
|
||||||
|
|
||||||
|
if (nbits == TARGET_CHAR_BIT)
|
||||||
|
return (lookup_fundamental_type (objfile,
|
||||||
|
signed_type? FT_CHAR: FT_UNSIGNED_CHAR));
|
||||||
|
|
||||||
|
if (nbits == 0)
|
||||||
|
return lookup_fundamental_type (objfile, FT_VOID);
|
||||||
|
|
||||||
|
return error_type (pp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct type *
|
||||||
|
read_sun_floating_type (pp, typenums, objfile)
|
||||||
|
char **pp;
|
||||||
|
int typenums[2];
|
||||||
|
struct objfile *objfile;
|
||||||
|
{
|
||||||
|
int nbytes;
|
||||||
|
|
||||||
|
/* The first number has more details about the type, for example
|
||||||
|
FN_COMPLEX. See the sun stab.h. */
|
||||||
|
read_number (pp, ';');
|
||||||
|
|
||||||
|
/* The second number is the number of bytes occupied by this type */
|
||||||
|
nbytes = read_number (pp, ';');
|
||||||
|
|
||||||
|
if (**pp != 0)
|
||||||
|
return error_type (pp);
|
||||||
|
|
||||||
|
if (nbytes == TARGET_FLOAT_BIT / TARGET_CHAR_BIT)
|
||||||
|
return lookup_fundamental_type (objfile, FT_FLOAT);
|
||||||
|
|
||||||
|
if (nbytes == TARGET_DOUBLE_BIT / TARGET_CHAR_BIT)
|
||||||
|
return lookup_fundamental_type (objfile, FT_DBL_PREC_FLOAT);
|
||||||
|
|
||||||
|
if (nbytes == TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT)
|
||||||
|
return lookup_fundamental_type (objfile, FT_EXT_PREC_FLOAT);
|
||||||
|
|
||||||
|
return error_type (pp);
|
||||||
|
}
|
||||||
|
|
||||||
/* Read a number from the string pointed to by *PP.
|
/* Read a number from the string pointed to by *PP.
|
||||||
The value of *PP is advanced over the number.
|
The value of *PP is advanced over the number.
|
||||||
If END is nonzero, the character that ends the
|
If END is nonzero, the character that ends the
|
||||||
|
@ -74,6 +74,9 @@ EXTERN struct subfile *current_subfile;
|
|||||||
|
|
||||||
EXTERN unsigned char processing_gcc_compilation;
|
EXTERN unsigned char processing_gcc_compilation;
|
||||||
|
|
||||||
|
/* When set, we are processing a .o file compiled by sun acc */
|
||||||
|
EXTERN unsigned char processing_acc_compilation;
|
||||||
|
|
||||||
/* Count symbols as they are processed, for error messages. */
|
/* Count symbols as they are processed, for error messages. */
|
||||||
|
|
||||||
EXTERN unsigned int symnum;
|
EXTERN unsigned int symnum;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Host: Sun 4 or Sparcstation, running Solaris 2
|
# Host: Sun 4 or Sparcstation, running Solaris 2
|
||||||
XDEPFILES= procfs.o
|
XDEPFILES= procfs.o
|
||||||
XM_FILE= xm-sun4os5.h
|
XM_FILE= xm-sun4sol2.h
|
||||||
SYSV_DEFINE=-DSYSV
|
SYSV_DEFINE=-DSYSV
|
||||||
REGEX=regex.o
|
REGEX=regex.o
|
||||||
REGEX1=regex.o
|
REGEX1=regex.o
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# Target: Sun 4 or Sparcstation, running Solaris 2
|
# Target: Sun 4 or Sparcstation, running Solaris 2
|
||||||
TDEPFILES= exec.o sparc-tdep.o sparc-pinsn.o solib.o
|
TDEPFILES= exec.o sparc-tdep.o sparc-pinsn.o solib.o
|
||||||
TM_FILE= tm-sun4os5.h
|
TM_FILE= tm-sun4sol2.h
|
||||||
|
@ -263,6 +263,32 @@ prim_record_minimal_symbol (name, address, ms_type)
|
|||||||
msym_count++;
|
msym_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
prim_record_minimal_symbol_and_info (name, address, ms_type, info)
|
||||||
|
const char *name;
|
||||||
|
CORE_ADDR address;
|
||||||
|
enum minimal_symbol_type ms_type;
|
||||||
|
char *info;
|
||||||
|
{
|
||||||
|
register struct msym_bunch *new;
|
||||||
|
|
||||||
|
if (msym_bunch_index == BUNCH_SIZE)
|
||||||
|
{
|
||||||
|
new = (struct msym_bunch *) xmalloc (sizeof (struct msym_bunch));
|
||||||
|
msym_bunch_index = 0;
|
||||||
|
new -> next = msym_bunch;
|
||||||
|
msym_bunch = new;
|
||||||
|
}
|
||||||
|
msym_bunch -> contents[msym_bunch_index].name = (char *) name;
|
||||||
|
msym_bunch -> contents[msym_bunch_index].address = address;
|
||||||
|
msym_bunch -> contents[msym_bunch_index].info = NULL;
|
||||||
|
msym_bunch -> contents[msym_bunch_index].type = ms_type;
|
||||||
|
/* FIXME: This info, if it remains, needs its own field. */
|
||||||
|
msym_bunch -> contents[msym_bunch_index].info = info; /* FIXME! */
|
||||||
|
msym_bunch_index++;
|
||||||
|
msym_count++;
|
||||||
|
}
|
||||||
|
|
||||||
/* Compare two minimal symbols by address and return a signed result based
|
/* Compare two minimal symbols by address and return a signed result based
|
||||||
on unsigned comparisons, so that we sort into unsigned numeric order. */
|
on unsigned comparisons, so that we sort into unsigned numeric order. */
|
||||||
|
|
||||||
|
68
gdb/tm-sun4sol2.h
Normal file
68
gdb/tm-sun4sol2.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* Macro definitions for GDB for a Sun 4 running Solaris 2
|
||||||
|
Copyright (C) 1989, 1992 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
|
#include "tm-sparc.h"
|
||||||
|
|
||||||
|
#include "tm-sysv4.h"
|
||||||
|
|
||||||
|
#undef STACK_END_ADDRESS
|
||||||
|
#define STACK_END_ADDRESS 0xf8000000
|
||||||
|
|
||||||
|
/* The values of N_SLINE, N_LBRAC, N_RBRAC symbols in .stab sections are
|
||||||
|
relative to the current function, rather than being absolute or
|
||||||
|
relative to the current N_SO. */
|
||||||
|
|
||||||
|
#define BLOCK_ADDRESS_FUNCTION_RELATIVE
|
||||||
|
|
||||||
|
/* Variables in the debug stabs occur after the N_LBRAC, not before it. */
|
||||||
|
|
||||||
|
#define VARIABLES_INSIDE_BLOCK(desc, gcc_p) (!gcc_p)
|
||||||
|
|
||||||
|
/* May be needed, may be not? From Pace Willisson's port. FIXME. */
|
||||||
|
#define PROLOGUE_FIRSTLINE_OVERLAP
|
||||||
|
|
||||||
|
|
||||||
|
#if 0 /* Setjmp/longjmp are not as well doc'd in SunOS 5.x yet */
|
||||||
|
|
||||||
|
/* Offsets into jmp_buf. Not defined by Sun, but at least documented in a
|
||||||
|
comment in <machine/setjmp.h>! */
|
||||||
|
|
||||||
|
#define JB_ELEMENT_SIZE 4 /* Size of each element in jmp_buf */
|
||||||
|
|
||||||
|
#define JB_ONSSTACK 0
|
||||||
|
#define JB_SIGMASK 1
|
||||||
|
#define JB_SP 2
|
||||||
|
#define JB_PC 3
|
||||||
|
#define JB_NPC 4
|
||||||
|
#define JB_PSR 5
|
||||||
|
#define JB_G1 6
|
||||||
|
#define JB_O0 7
|
||||||
|
#define JB_WBCNT 8
|
||||||
|
|
||||||
|
/* Figure out where the longjmp will land. We expect that we have just entered
|
||||||
|
longjmp and haven't yet setup the stack frame, so the args are still in the
|
||||||
|
output regs. %o0 (O0_REGNUM) points at the jmp_buf structure from which we
|
||||||
|
extract the pc (JB_PC) that we will land at. The pc is copied into ADDR.
|
||||||
|
This routine returns true on success */
|
||||||
|
|
||||||
|
extern int
|
||||||
|
get_longjmp_target PARAMS ((CORE_ADDR *));
|
||||||
|
|
||||||
|
#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
|
||||||
|
#endif /* 0 */
|
64
gdb/xm-sun4sol2.h
Normal file
64
gdb/xm-sun4sol2.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* Macro definitions for running gdb on a Sun 4 running Solaris 2.
|
||||||
|
Copyright 1989, 1992 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
|
/* Most of what we know is generic to SPARC hosts. */
|
||||||
|
|
||||||
|
#include "xm-sparc.h"
|
||||||
|
|
||||||
|
/* Pick up more stuff from the generic SVR4 host include file. */
|
||||||
|
|
||||||
|
#include "xm-sysv4.h"
|
||||||
|
|
||||||
|
/* SVR4's can't seem to agree on what to call the type that contains the
|
||||||
|
general registers. Kludge around it with a #define. */
|
||||||
|
|
||||||
|
#define gregset_t prgreg_t
|
||||||
|
#define fpregset_t prfpregset_t
|
||||||
|
|
||||||
|
/* The native Sun compiler complains about using volatile
|
||||||
|
to indicate functions that never return. So shut it up by simply
|
||||||
|
defining away "NORETURN", which is normally defined to "volatile". */
|
||||||
|
|
||||||
|
#ifndef __GNUC__
|
||||||
|
# define NORETURN /**/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Large alloca's fail because the attempt to increase the stack limit in
|
||||||
|
main() fails because shared libraries are allocated just below the initial
|
||||||
|
stack limit. The SunOS kernel will not allow the stack to grow into
|
||||||
|
the area occupied by the shared libraries. Sun knows about this bug
|
||||||
|
but has no obvious fix for it. */
|
||||||
|
#define BROKEN_LARGE_ALLOCA
|
||||||
|
|
||||||
|
/* If you expect to use the mmalloc package to obtain mapped symbol files,
|
||||||
|
for now you have to specify some parameters that determine how gdb places
|
||||||
|
the mappings in it's address space. See the comments in map_to_address()
|
||||||
|
for details. This is expected to only be a short term solution. Yes it
|
||||||
|
is a kludge.
|
||||||
|
FIXME: Make this more automatic. */
|
||||||
|
|
||||||
|
#define MMAP_BASE_ADDRESS 0xE0000000 /* First mapping here */
|
||||||
|
#define MMAP_INCREMENT 0x01000000 /* Increment to next mapping */
|
||||||
|
|
||||||
|
/* These are not currently used in SVR4 (but should be, FIXME!). */
|
||||||
|
#undef DO_DEFERRED_STORES
|
||||||
|
#undef CLEAR_DEFERRED_STORES
|
||||||
|
|
||||||
|
/* May be needed, may be not? From Pace Willisson's port. FIXME. */
|
||||||
|
#define NEED_POSIX_SETPGID
|
Loading…
Reference in New Issue
Block a user