On Thu, Nov 19, 2015 at 06:47:28PM +0300, Ilya Verbin wrote:
> I will add this:
> 
> diff --git a/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp 
> b/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
> index 6ee585e..f8c1725 100644
> --- a/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
> +++ b/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
> @@ -71,7 +71,7 @@ struct TargetImageDesc {
>    /* 10 characters is enough for max int value.  */
>    char name[sizeof ("lib0000000000.so")];
>    char data[];
> -} __attribute__ ((packed));
> +};
>  
>  /* Image descriptors, indexed by a pointer obtained from libgomp.  */
>  typedef std::map<const void *, TargetImageDesc *> ImgDescMap;
> @@ -313,9 +313,8 @@ offload_image (const void *target_image)
>        target_image, image_start, image_end);
>  
>    int64_t image_size = (uintptr_t) image_end - (uintptr_t) image_start;
> -  TargetImageDesc *image
> -    = (TargetImageDesc *) malloc (sizeof (int64_t) + sizeof 
> ("lib0000000000.so")
> -                               + image_size);
> +  TargetImageDesc *image = (TargetImageDesc *) malloc (offsetof 
> (TargetImageDesc, data)
> +                                                    + image_size);
>    if (!image)
>      {
>        fprintf (stderr, "%s: Can't allocate memory\n", __FILE__);

LGTM.
> > What is the point of this hunk?  Is there any point in unregistering the
> > main target image?  I mean at that point the process is exiting anyway.
> > The importance of unregistering target images registered from shared
> > libraries is that they should be unregistered when they are dlclosed.
> 
> liboffloadmic performs correct finalization of the target process in
> __offload_fini_library, which is called only during unregistration of the main
> target image.
> Without this finalization the target process will be destroyed after unloading
> libcoi_host.so.  And then some DSO may call GOMP_offload_unregister_ver from 
> its
> destructor, which will try to unload target image from the already destroyed
> process.  This issue is reproducible only using real COI.

Ok then.

        Jakub

Reply via email to