* Prepare gcc for 64-bit obstacks
@ 2014-08-04 11:04 Alan Modra
2014-08-04 16:12 ` Tom Tromey
2014-09-25 19:41 ` Jeff Law
0 siblings, 2 replies; 3+ messages in thread
From: Alan Modra @ 2014-08-04 11:04 UTC (permalink / raw)
To: gcc-patches
Two small changes to gcc code to support newer obstacks:
1) gcc currently calls _obstack_begin, which requires some ugly casts
on alloc and free functions, and the casts will change when/if 64-bit
obstacks are available. It's cleaner to use the convenience functions
provided in obstack.h.
2) Current upstream obstack.h makes obstack_base() return a void*,
with the result that a few places in gcc need a (char *) cast.
Bootstrapped and regression tested x86_64-linux and powerpc-linux,
with both the new obstack.{h,c} and the old versions. OK to apply?
gcc/
* gengtype.h (obstack_chunk_alloc, obstack_chunk_free): Remove cast.
* coretypes.h (obstack_chunk_alloc, obstack_chunk_free): Likewise.
(gcc_obstack_init): Use obstack_specify_allocation in place of
_obstack_begin.
* genautomata.c (next_sep_el): Cast result of obstack_base to (char *).
(regexp_representation): Likewise.
* godump.c (go_output_type): Likewise.
gcc/java/
* mangle.c (finish_mangling): Cast result of obstack_base to (char *).
* typeck.c (build_java_argument_signature): Likewise.
(build_java_signature): Likewise.
gcc/objc/
* objc-encoding.c (encode_array): Cast result of obstack_base.
(encode_type): Likewise.
libcpp/
* symtab.c (ht_create): Use obstack_specify_allocation in place of
_obstack_begin.
* files.c (_cpp_init_files): Likewise.
* init.c (cpp_create_reader): Likewise.
* identifiers.c (_cpp_init_hashtable): Likewise.
Index: gcc/gengtype.h
===================================================================
--- gcc/gengtype.h (revision 212477)
+++ gcc/gengtype.h (working copy)
@@ -20,8 +20,8 @@
#ifndef GCC_GENGTYPE_H
#define GCC_GENGTYPE_H
-#define obstack_chunk_alloc ((void *(*) (long)) xmalloc)
-#define obstack_chunk_free ((void (*) (void *)) free)
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
#define OBSTACK_CHUNK_SIZE 0
/* Sets of accepted source languages like C, C++, Ada... are
Index: gcc/coretypes.h
===================================================================
--- gcc/coretypes.h (revision 212477)
+++ gcc/coretypes.h (working copy)
@@ -158,13 +158,13 @@ struct basic_block_def;
typedef struct basic_block_def *basic_block;
typedef const struct basic_block_def *const_basic_block;
-#define obstack_chunk_alloc ((void *(*) (long)) xmalloc)
-#define obstack_chunk_free ((void (*) (void *)) free)
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
#define OBSTACK_CHUNK_SIZE 0
-#define gcc_obstack_init(OBSTACK) \
- _obstack_begin ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \
- obstack_chunk_alloc, \
- obstack_chunk_free)
+#define gcc_obstack_init(OBSTACK) \
+ obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \
+ obstack_chunk_alloc, \
+ obstack_chunk_free)
/* enum reg_class is target specific, so it should not appear in
target-independent code or interfaces, like the target hook declarations
Index: gcc/genautomata.c
===================================================================
--- gcc/genautomata.c (revision 212477)
+++ gcc/genautomata.c (working copy)
@@ -1178,7 +1178,7 @@ next_sep_el (const char **pstr, int sep, int par_f
}
}
obstack_1grow (&irp, '\0');
- out_str = obstack_base (&irp);
+ out_str = (char *) obstack_base (&irp);
obstack_finish (&irp);
*pstr = p;
@@ -6873,7 +6873,7 @@ regexp_representation (regexp_t regexp)
{
form_regexp (regexp);
obstack_1grow (&irp, '\0');
- return obstack_base (&irp);
+ return (char *) obstack_base (&irp);
}
/* The function frees memory allocated for last formed string
@@ -9289,7 +9289,7 @@ initiate_automaton_gen (char **argv)
obstack_grow (&irp, STANDARD_OUTPUT_DESCRIPTION_FILE_SUFFIX,
strlen (STANDARD_OUTPUT_DESCRIPTION_FILE_SUFFIX) + 1);
obstack_1grow (&irp, '\0');
- output_description_file_name = obstack_base (&irp);
+ output_description_file_name = (char *) obstack_base (&irp);
obstack_finish (&irp);
}
Index: gcc/godump.c
===================================================================
--- gcc/godump.c (revision 212477)
+++ gcc/godump.c (working copy)
@@ -921,7 +921,7 @@ go_output_type (struct godump_container *container
ob = &container->type_obstack;
obstack_1grow (ob, '\0');
- fputs (obstack_base (ob), go_dump_file);
+ fputs ((char *) obstack_base (ob), go_dump_file);
obstack_free (ob, obstack_base (ob));
}
Index: gcc/java/mangle.c
===================================================================
--- gcc/java/mangle.c (revision 212477)
+++ gcc/java/mangle.c (working copy)
@@ -711,7 +711,7 @@ finish_mangling (void)
compression_table = NULL_TREE;
compression_next = 0;
obstack_1grow (mangle_obstack, '\0');
- result = get_identifier (obstack_base (mangle_obstack));
+ result = get_identifier ((char *) obstack_base (mangle_obstack));
obstack_free (mangle_obstack, obstack_base (mangle_obstack));
return result;
Index: gcc/java/typeck.c
===================================================================
--- gcc/java/typeck.c (revision 212477)
+++ gcc/java/typeck.c (working copy)
@@ -477,7 +477,7 @@ build_java_argument_signature (tree type)
}
obstack_1grow (&temporary_obstack, '\0');
- sig = get_identifier (obstack_base (&temporary_obstack));
+ sig = get_identifier ((char *) obstack_base (&temporary_obstack));
TYPE_ARGUMENT_SIGNATURE (type) = sig;
obstack_free (&temporary_obstack, obstack_base (&temporary_obstack));
}
@@ -554,7 +554,7 @@ build_java_signature (tree type)
obstack_grow0 (&temporary_obstack,
IDENTIFIER_POINTER (t), IDENTIFIER_LENGTH (t));
- sig = get_identifier (obstack_base (&temporary_obstack));
+ sig = get_identifier ((char *) obstack_base (&temporary_obstack));
obstack_free (&temporary_obstack,
obstack_base (&temporary_obstack));
}
Index: gcc/objc/objc-encoding.c
===================================================================
--- gcc/objc/objc-encoding.c (revision 212477)
+++ gcc/objc/objc-encoding.c (working copy)
@@ -380,7 +380,7 @@ encode_array (tree type, int curtype, int format)
identifier.
*/
{
- char *enc = obstack_base (&util_obstack) + curtype;
+ char *enc = (char *) obstack_base (&util_obstack) + curtype;
if (memchr (enc, '=',
obstack_object_size (&util_obstack) - curtype) == NULL)
{
@@ -729,7 +729,7 @@ encode_type (tree type, int curtype, int format)
to be rearranged for compatibility with gcc-3.3. */
if (code == POINTER_TYPE && obstack_object_size (&util_obstack) >= 3)
{
- char *enc = obstack_base (&util_obstack) + curtype;
+ char *enc = (char *) obstack_base (&util_obstack) + curtype;
/* Rewrite "in const" from "nr" to "rn". */
if (curtype >= 1 && !strncmp (enc - 1, "nr", 2))
Index: libcpp/symtab.c
===================================================================
--- libcpp/symtab.c (revision 212477)
+++ libcpp/symtab.c (working copy)
@@ -61,9 +61,7 @@ ht_create (unsigned int order)
table = XCNEW (cpp_hash_table);
/* Strings need no alignment. */
- _obstack_begin (&table->stack, 0, 0,
- (void *(*) (long)) xmalloc,
- (void (*) (void *)) free);
+ obstack_specify_allocation (&table->stack, 0, 0, xmalloc, free);
obstack_alignment_mask (&table->stack) = 0;
Index: libcpp/files.c
===================================================================
--- libcpp/files.c (revision 212477)
+++ libcpp/files.c (working copy)
@@ -1267,9 +1267,8 @@ _cpp_init_files (cpp_reader *pfile)
pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
nonexistent_file_hash_eq,
NULL, xcalloc, free);
- _obstack_begin (&pfile->nonexistent_file_ob, 0, 0,
- (void *(*) (long)) xmalloc,
- (void (*) (void *)) free);
+ obstack_specify_allocation (&pfile->nonexistent_file_ob, 0, 0,
+ xmalloc, free);
}
/* Finalize everything in this source file. */
Index: libcpp/init.c
===================================================================
--- libcpp/init.c (revision 212477)
+++ libcpp/init.c (working copy)
@@ -260,9 +260,7 @@ cpp_create_reader (enum c_lang lang, cpp_hash_tabl
_cpp_expand_op_stack (pfile);
/* Initialize the buffer obstack. */
- _obstack_begin (&pfile->buffer_ob, 0, 0,
- (void *(*) (long)) xmalloc,
- (void (*) (void *)) free);
+ obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
_cpp_init_files (pfile);
Index: libcpp/identifiers.c
===================================================================
--- libcpp/identifiers.c (revision 212477)
+++ libcpp/identifiers.c (working copy)
@@ -54,9 +54,7 @@ _cpp_init_hashtable (cpp_reader *pfile, cpp_hash_t
table = ht_create (13); /* 8K (=2^13) entries. */
table->alloc_node = alloc_node;
- _obstack_begin (&pfile->hash_ob, 0, 0,
- (void *(*) (long)) xmalloc,
- (void (*) (void *)) free);
+ obstack_specify_allocation (&pfile->hash_ob, 0, 0, xmalloc, free);
}
table->pfile = pfile;
--
Alan Modra
Australia Development Lab, IBM
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Prepare gcc for 64-bit obstacks
2014-08-04 11:04 Prepare gcc for 64-bit obstacks Alan Modra
@ 2014-08-04 16:12 ` Tom Tromey
2014-09-25 19:41 ` Jeff Law
1 sibling, 0 replies; 3+ messages in thread
From: Tom Tromey @ 2014-08-04 16:12 UTC (permalink / raw)
To: gcc-patches
>>>>> "Alan" == Alan Modra <amodra@gmail.com> writes:
Alan> Bootstrapped and regression tested x86_64-linux and powerpc-linux,
Alan> with both the new obstack.{h,c} and the old versions. OK to apply?
Alan> gcc/java/
Alan> * mangle.c (finish_mangling): Cast result of obstack_base to (char *).
Alan> * typeck.c (build_java_argument_signature): Likewise.
Alan> (build_java_signature): Likewise.
Alan> libcpp/
Alan> * symtab.c (ht_create): Use obstack_specify_allocation in place of
Alan> _obstack_begin.
Alan> * files.c (_cpp_init_files): Likewise.
Alan> * init.c (cpp_create_reader): Likewise.
Alan> * identifiers.c (_cpp_init_hashtable): Likewise.
Thanks Alan.
The java and libcpp bits are ok.
Tom
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Prepare gcc for 64-bit obstacks
2014-08-04 11:04 Prepare gcc for 64-bit obstacks Alan Modra
2014-08-04 16:12 ` Tom Tromey
@ 2014-09-25 19:41 ` Jeff Law
1 sibling, 0 replies; 3+ messages in thread
From: Jeff Law @ 2014-09-25 19:41 UTC (permalink / raw)
To: gcc-patches
On 08/04/14 05:04, Alan Modra wrote:
> Two small changes to gcc code to support newer obstacks:
>
> 1) gcc currently calls _obstack_begin, which requires some ugly casts
> on alloc and free functions, and the casts will change when/if 64-bit
> obstacks are available. It's cleaner to use the convenience functions
> provided in obstack.h.
>
> 2) Current upstream obstack.h makes obstack_base() return a void*,
> with the result that a few places in gcc need a (char *) cast.
>
> Bootstrapped and regression tested x86_64-linux and powerpc-linux,
> with both the new obstack.{h,c} and the old versions. OK to apply?
>
> gcc/
> * gengtype.h (obstack_chunk_alloc, obstack_chunk_free): Remove cast.
> * coretypes.h (obstack_chunk_alloc, obstack_chunk_free): Likewise.
> (gcc_obstack_init): Use obstack_specify_allocation in place of
> _obstack_begin.
> * genautomata.c (next_sep_el): Cast result of obstack_base to (char *).
> (regexp_representation): Likewise.
> * godump.c (go_output_type): Likewise.
> gcc/java/
> * mangle.c (finish_mangling): Cast result of obstack_base to (char *).
> * typeck.c (build_java_argument_signature): Likewise.
> (build_java_signature): Likewise.
> gcc/objc/
> * objc-encoding.c (encode_array): Cast result of obstack_base.
> (encode_type): Likewise.
> libcpp/
> * symtab.c (ht_create): Use obstack_specify_allocation in place of
> _obstack_begin.
> * files.c (_cpp_init_files): Likewise.
> * init.c (cpp_create_reader): Likewise.
> * identifiers.c (_cpp_init_hashtable): Likewise.
OK for the trunk. Sorry for the delay in getting to this.
Thanks,
Jeff
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-09-25 19:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-04 11:04 Prepare gcc for 64-bit obstacks Alan Modra
2014-08-04 16:12 ` Tom Tromey
2014-09-25 19:41 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).