This is the mail archive of the gcc-patches@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]

constify target offload data


Jakub, Ilya,
this patch against trunk constifies the offload target data. I'm having difficulty building an intelmic toolchain, so the changes there aren't tested. Ilya, if you could check them, that'd be great.

nathan
2015-07-16  Nathan Sidwell  <nathan@codesourcery.com>

	gcc/
	* config/nvptx/mkoffload.c (process): Constify target data.
	* config/i386/intelmic-mkoffload.c (generate_target_descr_file):
	Constify target data.
	(generate_target_offloadend_file): Likewise.

	libgomp/
	* target.c (struct offload_image_descr): Constify target_data.
	(gomp_offload_image_to_device): Likewise.
	(GOMP_offload_register): Likewise.
	(GOMP_offload_unrefister): Likewise.

Index: libgomp/target.c
===================================================================
--- libgomp/target.c	(revision 225897)
+++ libgomp/target.c	(working copy)
@@ -58,7 +58,7 @@ static gomp_mutex_t register_lock;
 struct offload_image_descr {
   enum offload_target_type type;
   void *host_table;
-  void *target_data;
+  const void *target_data;
 };
 
 /* Array of descriptors of offload images.  */
@@ -642,7 +642,7 @@ gomp_update (struct gomp_device_descr *d
 
 static void
 gomp_offload_image_to_device (struct gomp_device_descr *devicep,
-			      void *host_table, void *target_data,
+			      void *host_table, const void *target_data,
 			      bool is_register_lock)
 {
   void **host_func_table = ((void ***) host_table)[0];
@@ -731,7 +731,7 @@ gomp_offload_image_to_device (struct gom
 
 void
 GOMP_offload_register (void *host_table, enum offload_target_type target_type,
-		       void *target_data)
+		       const void *target_data)
 {
   int i;
   gomp_mutex_lock (&register_lock);
@@ -765,7 +765,7 @@ GOMP_offload_register (void *host_table,
 
 void
 GOMP_offload_unregister (void *host_table, enum offload_target_type target_type,
-			 void *target_data)
+			 const void *target_data)
 {
   void **host_func_table = ((void ***) host_table)[0];
   void **host_funcs_end  = ((void ***) host_table)[1];
Index: libgomp/plugin/plugin-nvptx.c
===================================================================
--- libgomp/plugin/plugin-nvptx.c	(revision 225897)
+++ libgomp/plugin/plugin-nvptx.c	(working copy)
@@ -334,7 +334,7 @@ struct ptx_event
 
 struct ptx_image_data
 {
-  void *target_data;
+  const void *target_data;
   CUmodule module;
   struct ptx_image_data *next;
 };
@@ -1633,7 +1633,7 @@ typedef struct nvptx_tdata
 } nvptx_tdata_t;
 
 int
-GOMP_OFFLOAD_load_image (int ord, void *target_data,
+GOMP_OFFLOAD_load_image (int ord, const void *target_data,
 			 struct addr_pair **target_table)
 {
   CUmodule module;
@@ -1641,7 +1641,7 @@ GOMP_OFFLOAD_load_image (int ord, void *
   unsigned int fn_entries, var_entries, i, j;
   CUresult r;
   struct targ_fn_descriptor *targ_fns;
-  nvptx_tdata_t const *img_header = (nvptx_tdata_t const *) target_data;
+  const nvptx_tdata_t *img_header = (const nvptx_tdata_t *) target_data;
   struct ptx_image_data *new_image;
 
   GOMP_OFFLOAD_init_device (ord);
@@ -1704,9 +1704,10 @@ GOMP_OFFLOAD_load_image (int ord, void *
 }
 
 void
-GOMP_OFFLOAD_unload_image (int tid __attribute__((unused)), void *target_data)
+GOMP_OFFLOAD_unload_image (int tid __attribute__((unused)),
+			   const void *target_data)
 {
-  void **img_header = (void **) target_data;
+  const void *const *img_header = (const void *const *) target_data;
   struct targ_fn_descriptor *targ_fns
     = (struct targ_fn_descriptor *) img_header[0];
   struct ptx_image_data *image, *prev = NULL, *newhd = NULL;
Index: libgomp/plugin/plugin-host.c
===================================================================
--- libgomp/plugin/plugin-host.c	(revision 225897)
+++ libgomp/plugin/plugin-host.c	(working copy)
@@ -111,7 +111,7 @@ GOMP_OFFLOAD_fini_device (int n __attrib
 
 STATIC int
 GOMP_OFFLOAD_load_image (int n __attribute__ ((unused)),
-			 void *i __attribute__ ((unused)),
+			 const void *t __attribute__ ((unused)),
 			 struct addr_pair **r __attribute__ ((unused)))
 {
   return 0;
@@ -119,7 +119,7 @@ GOMP_OFFLOAD_load_image (int n __attribu
 
 STATIC void
 GOMP_OFFLOAD_unload_image (int n __attribute__ ((unused)),
-			   void *i __attribute__ ((unused)))
+			   const void *t __attribute__ ((unused)))
 {
 }
 
Index: libgomp/libgomp.h
===================================================================
--- libgomp/libgomp.h	(revision 225897)
+++ libgomp/libgomp.h	(working copy)
@@ -748,8 +748,8 @@ struct gomp_device_descr
   int (*get_num_devices_func) (void);
   void (*init_device_func) (int);
   void (*fini_device_func) (int);
-  int (*load_image_func) (int, void *, struct addr_pair **);
-  void (*unload_image_func) (int, void *);
+  int (*load_image_func) (int, const void *, struct addr_pair **);
+  void (*unload_image_func) (int, const void *);
   void *(*alloc_func) (int, size_t);
   void (*free_func) (int, void *);
   void *(*dev2host_func) (int, void *, const void *, size_t);
Index: liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
===================================================================
--- liboffloadmic/plugin/libgomp-plugin-intelmic.cpp	(revision 225897)
+++ liboffloadmic/plugin/libgomp-plugin-intelmic.cpp	(working copy)
@@ -255,7 +255,7 @@ get_target_table (int device, int &num_f
    corresponding target addresses.  */
 
 static void
-offload_image (void *target_image)
+offload_image (const void *target_image)
 {
   struct TargetImage {
     int64_t size;
@@ -328,7 +328,8 @@ offload_image (void *target_image)
 }
 
 extern "C" int
-GOMP_OFFLOAD_load_image (int device, void *target_image, addr_pair **result)
+GOMP_OFFLOAD_load_image (int device, const void *target_image,
+			 addr_pair **result)
 {
   TRACE ("(device = %d, target_image = %p)", device, target_image);
 
@@ -352,7 +353,7 @@ GOMP_OFFLOAD_load_image (int device, voi
 }
 
 extern "C" void
-GOMP_OFFLOAD_unload_image (int device, void *target_image)
+GOMP_OFFLOAD_unload_image (int device, const void *target_image)
 {
   TRACE ("(device = %d, target_image = %p)", device, target_image);
 
Index: gcc/config/nvptx/mkoffload.c
===================================================================
--- gcc/config/nvptx/mkoffload.c	(revision 225897)
+++ gcc/config/nvptx/mkoffload.c	(working copy)
@@ -863,7 +863,7 @@ process (FILE *in, FILE *out)
   fprintf (out, "};\n\n");
 
   fprintf (out,
-	   "static struct nvptx_tdata {\n"
+	   "static const struct nvptx_tdata {\n"
 	   "  const char *ptx_src;\n"
 	   "  const char *const *var_names;\n"
 	   "  __SIZE_TYPE__ var_num;\n"
@@ -880,7 +880,8 @@ process (FILE *in, FILE *out)
   fprintf (out, "#ifdef __cplusplus\n"
 	   "extern \"C\" {\n"
 	   "#endif\n");
-  fprintf (out, "extern void GOMP_offload_register (void *, int, void *);\n");
+  fprintf (out, "extern void GOMP_offload_register"
+	   " (void *, int, const void *);\n");
   fprintf (out, "#ifdef __cplusplus\n"
 	   "}\n"
 	   "#endif\n");
Index: gcc/config/i386/intelmic-mkoffload.c
===================================================================
--- gcc/config/i386/intelmic-mkoffload.c	(revision 225897)
+++ gcc/config/i386/intelmic-mkoffload.c	(working copy)
@@ -241,18 +241,18 @@ generate_target_descr_file (const char *
     fatal_error (input_location, "cannot open '%s'", src_filename);
 
   fprintf (src_file,
-	   "extern void *__offload_funcs_end[];\n"
-	   "extern void *__offload_vars_end[];\n\n"
+	   "extern const void *const __offload_funcs_end[];\n"
+	   "extern const void *const __offload_vars_end[];\n\n"
 
-	   "void *__offload_func_table[0]\n"
+	   "const void *const __offload_func_table[0]\n"
 	   "__attribute__ ((__used__, visibility (\"hidden\"),\n"
 	   "section (\".gnu.offload_funcs\"))) = { };\n\n"
 
-	   "void *__offload_var_table[0]\n"
+	   "const void *const __offload_var_table[0]\n"
 	   "__attribute__ ((__used__, visibility (\"hidden\"),\n"
 	   "section (\".gnu.offload_vars\"))) = { };\n\n"
 
-	   "void *__OFFLOAD_TARGET_TABLE__[]\n"
+	   "const void *const __OFFLOAD_TARGET_TABLE__[]\n"
 	   "__attribute__ ((__used__, visibility (\"hidden\"))) = {\n"
 	   "  &__offload_func_table, &__offload_funcs_end,\n"
 	   "  &__offload_var_table, &__offload_vars_end\n"
@@ -301,11 +301,11 @@ generate_target_offloadend_file (const c
     fatal_error (input_location, "cannot open '%s'", src_filename);
 
   fprintf (src_file,
-	   "void *__offload_funcs_end[0]\n"
+	   "const void *const __offload_funcs_end[0]\n"
 	   "__attribute__ ((__used__, visibility (\"hidden\"),\n"
 	   "section (\".gnu.offload_funcs\"))) = { };\n\n"
 
-	   "void *__offload_vars_end[0]\n"
+	   "const void *const __offload_vars_end[0]\n"
 	   "__attribute__ ((__used__, visibility (\"hidden\"),\n"
 	   "section (\".gnu.offload_vars\"))) = { };\n");
   fclose (src_file);
@@ -339,10 +339,10 @@ generate_host_descr_file (const char *ho
 
   fprintf (src_file,
 	   "extern void *__OFFLOAD_TABLE__;\n"
-	   "extern void *__offload_image_intelmic_start;\n"
-	   "extern void *__offload_image_intelmic_end;\n\n"
+	   "extern const void *const __offload_image_intelmic_start;\n"
+	   "extern const void *const __offload_image_intelmic_end;\n\n"
 
-	   "static const void *__offload_target_data[] = {\n"
+	   "static const void *const __offload_target_data[] = {\n"
 	   "  &__offload_image_intelmic_start, &__offload_image_intelmic_end\n"
 	   "};\n\n");
 
@@ -350,11 +350,11 @@ generate_host_descr_file (const char *ho
 	   "#ifdef __cplusplus\n"
 	   "extern \"C\"\n"
 	   "#endif\n"
-	   "void GOMP_offload_register (void *, int, void *);\n"
+	   "void GOMP_offload_register (void *, int, const void *);\n"
 	   "#ifdef __cplusplus\n"
 	   "extern \"C\"\n"
 	   "#endif\n"
-	   "void GOMP_offload_unregister (void *, int, void *);\n\n"
+	   "void GOMP_offload_unregister (void *, int, const void *);\n\n"
 
 	   "__attribute__((constructor))\n"
 	   "static void\n"

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]