This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Andreas Jaeger <aj@suse.de> writes: > "Zack Weinberg" <zack@codesourcery.com> writes: > >> Andreas Jaeger <aj@suse.de> writes: >> >>> /cvs/gcc/gcc/crtstuff.c: In function `__do_global_dtors_aux': >>> >>> /cvs/gcc/gcc/crtstuff.c:282: warning: passing arg 1 of `__deregister_frame_info' discards qualifiers from pointer target type >>> /cvs/gcc/gcc/crtstuff.c: In function `frame_dummy': >>> >>> /cvs/gcc/gcc/crtstuff.c:310: warning: passing arg 1 of `__register_frame_info' discards qualifiers from pointer target type >>> make[2]: *** [crtbeginT.o] Error 1 >>> >>> Is the following the right fix? >>> >>> I'm bootstrapping/regtesting on x86_64-linux-gnu now, >>> >>> Andreas >>> >>> 2003-10-26 Andreas Jaeger <aj@suse.de> >>> >>> * crtstuff.c (frame_dummy): Cast __EH_FRAME_BEGIN__ properly. >>> (__do_global_dtors_aux): Likewise. >> >> __EH_FRAME_BEGIN__ points into a read-only section, so better to >> change the prototypes of __deregister_frame_info{,_bases}, >> __register_frame_info{,_bases}, if at all possible. > > It should be possible - but is a major surgery of unwind-dw2-fde.* > since that variable is passed around again... > > So, let's ask the experts first whether there's any objection for > changing it before I try it... Nobody answered - so I tried it... Below is just the first part of the diff. It shows that major surgery is needed if the const is put through everything and no cast is done. I finally failed with: static inline void fde_insert (struct fde_accumulator *accu, fde *this_fde) { if (accu->linear) accu->linear->array[accu->linear->count++] = this_fde; } I had to change the second parameter to const and then the assignment didn't work anymore :-( So, we should go with my previous patch that casts crtstuff.c IMO. What do others think? Andreas ============================================================ Index: gcc/crtstuff.c --- gcc/crtstuff.c 28 Oct 2003 03:47:36 -0000 1.63 +++ gcc/crtstuff.c 29 Oct 2003 20:40:39 -0000 @@ -120,14 +120,14 @@ call_ ## FUNC (void) \ /* References to __register_frame_info and __deregister_frame_info should be weak in this file if at all possible. */ -extern void __register_frame_info (void *, struct object *) +extern void __register_frame_info (const void *, struct object *) TARGET_ATTRIBUTE_WEAK; -extern void __register_frame_info_bases (void *, struct object *, +extern void __register_frame_info_bases (const void *, struct object *, void *, void *) TARGET_ATTRIBUTE_WEAK; -extern void *__deregister_frame_info (void *) +extern void *__deregister_frame_info (const void *) TARGET_ATTRIBUTE_WEAK; -extern void *__deregister_frame_info_bases (void *) +extern void *__deregister_frame_info_bases (const void *) TARGET_ATTRIBUTE_WEAK; extern void __do_global_ctors_1 (void); ============================================================ Index: gcc/unwind-dw2-fde.c --- gcc/unwind-dw2-fde.c 19 Jul 2003 14:47:14 -0000 1.25 +++ gcc/unwind-dw2-fde.c 29 Oct 2003 20:40:39 -0000 @@ -1,5 +1,5 @@ /* Subroutines needed for unwinding stack frames for exception handling. */ -/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Jason Merrill <jason@cygnus.com>. This file is part of GCC. @@ -74,7 +74,7 @@ init_object_mutex_once (void) /* Called from crtbegin.o to register the unwind info for an object. */ void -__register_frame_info_bases (void *begin, struct object *ob, +__register_frame_info_bases (const void *begin, struct object *ob, void *tbase, void *dbase) { /* If .eh_frame is empty, don't register at all. */ @@ -101,7 +101,7 @@ __register_frame_info_bases (void *begin } void -__register_frame_info (void *begin, struct object *ob) +__register_frame_info (const void *begin, struct object *ob) { __register_frame_info_bases (begin, ob, 0, 0); } @@ -170,7 +170,7 @@ __register_frame_table (void *begin) implements __register_frame_info_bases. */ void * -__deregister_frame_info_bases (void *begin) +__deregister_frame_info_bases (const void *begin) { struct object **p; struct object *ob = 0; @@ -220,7 +220,7 @@ __deregister_frame_info_bases (void *beg } void * -__deregister_frame_info (void *begin) +__deregister_frame_info (const void *begin) { return __deregister_frame_info_bases (begin); } @@ -407,7 +407,7 @@ start_fde_sort (struct fde_accumulator * } static inline void -fde_insert (struct fde_accumulator *accu, fde *this_fde) +fde_insert (struct fde_accumulator *accu, const fde *this_fde) { if (accu->linear) accu->linear->array[accu->linear->count++] = this_fde; @@ -595,7 +595,7 @@ end_fde_sort (struct object *ob, struct encountered along the way. */ static size_t -classify_object_over_fdes (struct object *ob, fde *this_fde) +classify_object_over_fdes (struct object *ob, const fde *this_fde) { struct dwarf_cie *last_cie = 0; size_t count = 0; @@ -650,7 +650,7 @@ classify_object_over_fdes (struct object } static void -add_fdes (struct object *ob, struct fde_accumulator *accu, fde *this_fde) +add_fdes (struct object *ob, struct fde_accumulator *accu, const fde *this_fde) { struct dwarf_cie *last_cie = 0; int encoding = ob->s.b.encoding; ============================================================ Index: gcc/unwind-dw2-fde.h --- gcc/unwind-dw2-fde.h 24 Jan 2003 01:46:50 -0000 1.11 +++ gcc/unwind-dw2-fde.h 29 Oct 2003 20:40:39 -0000 @@ -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, 2003 Free Software Foundation, Inc. Contributed by Jason Merrill <jason@cygnus.com>. @@ -43,7 +43,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; @@ -90,16 +90,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 *); @@ -152,13 +152,13 @@ typedef struct dwarf_fde fde; /* Locate the CIE for a given FDE. */ static inline struct dwarf_cie * -get_cie (struct dwarf_fde *f) +get_cie (const struct dwarf_fde *f) { return (void *)&f->CIE_delta - f->CIE_delta; } static inline fde * -next_fde (fde *f) +next_fde (const fde *f) { return (fde *) ((char *) f + f->length + sizeof (f->length)); } @@ -166,7 +166,7 @@ next_fde (fde *f) extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); static inline int -last_fde (struct object *obj __attribute__ ((__unused__)), fde *f) +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; -- Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj SuSE Linux AG, Deutschherrnstr. 15-19, 90429 Nürnberg, Germany GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
Attachment:
pgp00000.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |