X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=gcc%2Funwind-dw2-fde.h;h=6d7a8dee2cf84660cb24a225ec398de0601f6b5d;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=b06ff41133f8047c6f52e446d98429bf658f2a2f;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/unwind-dw2-fde.h b/gcc/unwind-dw2-fde.h index b06ff411..6d7a8dee 100644 --- a/gcc/unwind-dw2-fde.h +++ b/gcc/unwind-dw2-fde.h @@ -1,5 +1,5 @@ /* Subroutines needed for unwinding stack frames for exception handling. */ -/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2009 Free Software Foundation, Inc. Contributed by Jason Merrill . @@ -7,34 +7,35 @@ This file is part of GCC. GCC 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, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. -In addition to the permissions in the GNU General Public License, the -Free Software Foundation gives you unlimited permission to link the -compiled version of this file into combinations with other programs, -and to distribute those combinations without any restriction coming -from the use of this file. (The General Public License restrictions -do apply in other respects; for example, they cover modification of -the file, and distribution when not linked into a combine -executable.) - GCC 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#ifndef GCC_UNWIND_DW2_FDE_H +#define GCC_UNWIND_DW2_FDE_H +#ifndef HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif struct fde_vector { - void *orig_data; + const void *orig_data; size_t count; - struct dwarf_fde *array[]; + const struct dwarf_fde *array[]; }; struct object @@ -43,7 +44,7 @@ struct object void *tbase; void *dbase; union { - struct dwarf_fde *single; + const struct dwarf_fde *single; struct dwarf_fde **array; struct fde_vector *sort; } u; @@ -61,6 +62,10 @@ struct object size_t i; } s; +#ifdef DWARF2_OBJECT_END_PTR_EXTENSION + char *fde_end; +#endif + struct object *next; }; @@ -86,16 +91,16 @@ struct dwarf_eh_bases }; -extern void __register_frame_info_bases (void *, struct object *, +extern void __register_frame_info_bases (const void *, struct object *, void *, void *); -extern void __register_frame_info (void *, struct object *); +extern void __register_frame_info (const void *, struct object *); extern void __register_frame (void *); extern void __register_frame_info_table_bases (void *, struct object *, void *, void *); extern void __register_frame_info_table (void *, struct object *); extern void __register_frame_table (void *); -extern void *__deregister_frame_info (void *); -extern void *__deregister_frame_info_bases (void *); +extern void *__deregister_frame_info (const void *); +extern void *__deregister_frame_info_bases (const void *); extern void __deregister_frame (void *); @@ -122,7 +127,7 @@ typedef unsigned char ubyte; a) in a linear search, find the shared image (i.e. DLL) containing the PC b) using the FDE table for that shared object, locate the FDE using - binary search (which requires the sorting). */ + binary search (which requires the sorting). */ /* The first few fields of a CIE. The CIE_id field is 0 for a CIE, to distinguish it from a valid FDE. FDEs are aligned to an addressing @@ -147,16 +152,32 @@ typedef struct dwarf_fde fde; /* Locate the CIE for a given FDE. */ -static inline struct dwarf_cie * -get_cie (struct dwarf_fde *f) +static inline const struct dwarf_cie * +get_cie (const struct dwarf_fde *f) { - return (void *)&f->CIE_delta - f->CIE_delta; + return (const void *)&f->CIE_delta - f->CIE_delta; } -static inline fde * -next_fde (fde *f) +static inline const fde * +next_fde (const fde *f) { - return (fde *) ((char *) f + f->length + sizeof (f->length)); + return (const fde *) ((const char *) f + f->length + sizeof (f->length)); } -extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); +extern const fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); + +static inline int +last_fde (struct object *obj __attribute__ ((__unused__)), const fde *f) +{ +#ifdef DWARF2_OBJECT_END_PTR_EXTENSION + return (char *)f == obj->fde_end || f->length == 0; +#else + return f->length == 0; +#endif +} + +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#endif /* unwind-dw2-fde.h */