summaryrefslogtreecommitdiff
path: root/libgomp/plugin
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2015-07-16 17:17:31 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2015-07-16 17:17:31 +0000
commitf9d1cd4ccf1189749a4231dda622a47d77b7725f (patch)
tree128ed56f500a026f899fa5ed513c1ce657b9cacf /libgomp/plugin
parent1f7d1dcc01fa8f7d23bf82cf5371e608b40b058a (diff)
downloadgcc-f9d1cd4ccf1189749a4231dda622a47d77b7725f.tar.gz
libgomp/
* plugin/plugin-nvptx.c (link_ptx): Constify string argument. Workaround driver library const error. (struct nvptx_tdata, nvptx_tdata_t): New. (GOMP_OFFLOAD_load_image): Use struct for target_data's real type. gcc/ * config/nvptx/mkoffload.c (process): Constify mapping variables. Define target data struct and initialize it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225897 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp/plugin')
-rw-r--r--libgomp/plugin/plugin-nvptx.c46
1 files changed, 26 insertions, 20 deletions
diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c
index b67d3015ca5..cfb143bc068 100644
--- a/libgomp/plugin/plugin-nvptx.c
+++ b/libgomp/plugin/plugin-nvptx.c
@@ -804,7 +804,7 @@ nvptx_get_num_devices (void)
static void
-link_ptx (CUmodule *module, char *ptx_code)
+link_ptx (CUmodule *module, const char *ptx_code)
{
CUjit_option opts[7];
void *optvals[7];
@@ -874,7 +874,8 @@ link_ptx (CUmodule *module, char *ptx_code)
cuda_error (r));
}
- r = cuLinkAddData (linkstate, CU_JIT_INPUT_PTX, ptx_code,
+ /* cuLinkAddData's 'data' argument erroneously omits the const qualifier. */
+ r = cuLinkAddData (linkstate, CU_JIT_INPUT_PTX, (char *)ptx_code,
strlen (ptx_code) + 1, 0, 0, 0, 0);
if (r != CUDA_SUCCESS)
{
@@ -1618,23 +1619,36 @@ GOMP_OFFLOAD_fini_device (int n)
pthread_mutex_unlock (&ptx_dev_lock);
}
+/* Data emitted by mkoffload. */
+
+typedef struct nvptx_tdata
+{
+ const char *ptx_src;
+
+ const char *const *var_names;
+ size_t var_num;
+
+ const char *const *fn_names;
+ size_t fn_num;
+} nvptx_tdata_t;
+
int
GOMP_OFFLOAD_load_image (int ord, void *target_data,
struct addr_pair **target_table)
{
CUmodule module;
- char **fn_names, **var_names;
+ const char *const *fn_names, *const *var_names;
unsigned int fn_entries, var_entries, i, j;
CUresult r;
struct targ_fn_descriptor *targ_fns;
- void **img_header = (void **) target_data;
+ nvptx_tdata_t const *img_header = (nvptx_tdata_t const *) target_data;
struct ptx_image_data *new_image;
GOMP_OFFLOAD_init_device (ord);
nvptx_attach_host_thread_to_device (ord);
- link_ptx (&module, img_header[0]);
+ link_ptx (&module, img_header->ptx_src);
pthread_mutex_lock (&ptx_image_lock);
new_image = GOMP_PLUGIN_malloc (sizeof (struct ptx_image_data));
@@ -1644,22 +1658,14 @@ GOMP_OFFLOAD_load_image (int ord, void *target_data,
ptx_images = new_image;
pthread_mutex_unlock (&ptx_image_lock);
- /* The mkoffload utility emits a table of pointers/integers at the start of
- each offload image:
-
- img_header[0] -> ptx code
- img_header[1] -> number of variables
- img_header[2] -> array of variable names (pointers to strings)
- img_header[3] -> number of kernels
- img_header[4] -> array of kernel names (pointers to strings)
-
- The array of kernel names and the functions addresses form a
- one-to-one correspondence. */
+ /* The mkoffload utility emits a struct of pointers/integers at the
+ start of each offload image. The array of kernel names and the
+ functions addresses form a one-to-one correspondence. */
- var_entries = (uintptr_t) img_header[1];
- var_names = (char **) img_header[2];
- fn_entries = (uintptr_t) img_header[3];
- fn_names = (char **) img_header[4];
+ var_entries = img_header->var_num;
+ var_names = img_header->var_names;
+ fn_entries = img_header->fn_num;
+ fn_names = img_header->fn_names;
*target_table = GOMP_PLUGIN_malloc (sizeof (struct addr_pair)
* (fn_entries + var_entries));