* config/alpha/tm-fbsd.h: Update copyright.

(USE_STRUCT_CONVENTION): Define in terms of
alphabsd_use_struct_convention.
* config/alpha/fbsd.mt (TDEPFILES): Add alphafbsd-tdep.c.
* alphafbsd-tdep.c: New file.
This commit is contained in:
Mark Kettenis 2001-01-25 18:41:23 +00:00
parent 388e1ff2e5
commit efd59e3f32
4 changed files with 69 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2001-01-25 Mark Kettenis <kettenis@gnu.org>
* config/alpha/tm-fbsd.h: Update copyright.
(USE_STRUCT_CONVENTION): Define in terms of
alphabsd_use_struct_convention.
* config/alpha/fbsd.mt (TDEPFILES): Add alphafbsd-tdep.c.
* alphafbsd-tdep.c: New file.
2001-01-24 Fernando Nasser <fnasser@redhat.com> 2001-01-24 Fernando Nasser <fnasser@redhat.com>
* top.c (print_gdb_version): Update Copyright year. * top.c (print_gdb_version): Update Copyright year.

53
gdb/alphafbsd-tdep.c Normal file
View File

@ -0,0 +1,53 @@
/* Target-dependent code for FreeBSD/Alpha.
Copyright 2001 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "value.h"
int
alphafbsd_use_struct_convention (int gcc_p, struct type *type)
{
enum type_code code;
int i;
/* All aggregate types that won't fit in a register must be returned
in memory. */
if (TYPE_LENGTH (type) > REGISTER_SIZE)
return 1;
/* The only aggregate types that can be returned in a register are
structs and unions. Arrays must be returned in memory. */
code = TYPE_CODE (type);
if (code != TYPE_CODE_STRUCT && code != TYPE_CODE_UNION)
return 1;
/* We need to check if this struct/union is "integer" like. For
this to be true, the offset of each adressable subfield must be
zero. Note that bit fields are not addressable. */
for (i = 0; i < TYPE_NFIELDS (type); i++)
{
/* If the field bitsize is non-zero, it isn't adressable. */
if (TYPE_FIELD_BITPOS (type, i) != 0
&& TYPE_FIELD_BITSIZE (type, i) == 0)
return 1;
}
return 0;
}

View File

@ -1,3 +1,3 @@
# Target: FreeBSD/Alpha # Target: FreeBSD/Alpha
TDEPFILES= alpha-tdep.o TDEPFILES= alpha-tdep.o alphafbsd-tdep.o
TM_FILE= tm-fbsd.h TM_FILE= tm-fbsd.h

View File

@ -1,5 +1,5 @@
/* Target-dependent definitions for FreeBSD/Alpha. /* Target-dependent definitions for FreeBSD/Alpha.
Copyright (C) 2000 Free Software Foundation, Inc. Copyright 2000, 2001 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -23,6 +23,12 @@
#include "alpha/tm-alpha.h" #include "alpha/tm-alpha.h"
/* FreeBSD uses the old gcc convention for struct returns. */
#undef USE_STRUCT_CONVENTION
#define USE_STRUCT_CONVENTION(gcc_p, type) \
alphafbsd_use_struct_convention (gcc_p, type)
/* Number of traps that happen between exec'ing the shell to run an /* Number of traps that happen between exec'ing the shell to run an
inferior, and when we finally get to the inferior code. The inferior, and when we finally get to the inferior code. The
default is right for FreeBSD. */ default is right for FreeBSD. */