@@ -6391,6 +6391,27 @@ get_types_for_source_file (gpointer key, gpointer value, gpointer user_data)
63916391 }
63926392}
63936393
6394+ static gboolean
6395+ module_apply_changes (MonoImage * image , MonoArray * dmeta , MonoArray * dil , MonoArray * dpdb , MonoError * error )
6396+ {
6397+ #ifdef ENABLE_METADATA_UPDATE
6398+ MonoDomain * domain = mono_domain_get ();
6399+ /* TODO: use dpdb */
6400+ gpointer dmeta_bytes = (gpointer )mono_array_addr_internal (dmeta , char , 0 );
6401+ int32_t dmeta_len = mono_array_length_internal (dmeta );
6402+ gpointer dil_bytes = (gpointer )mono_array_addr_internal (dil , char , 0 );
6403+ int32_t dil_len = mono_array_length_internal (dil );
6404+ gpointer dpdb_bytes = !dpdb ? NULL : (gpointer )mono_array_addr_internal (dpdb , char , 0 );
6405+ int32_t dpdb_len = !dpdb ? 0 : mono_array_length_internal (dpdb );
6406+ mono_image_load_enc_delta (domain , image , dmeta_bytes , dmeta_len , dil_bytes , dil_len , error );
6407+ return is_ok (error );
6408+ #else
6409+ mono_error_set_not_supported (error , "" );
6410+ return FALSE;
6411+ #endif
6412+ }
6413+
6414+
63946415static void
63956416buffer_add_cattr_arg (Buffer * buf , MonoType * t , MonoDomain * domain , MonoObject * val )
63966417{
@@ -7481,6 +7502,27 @@ module_commands (int command, guint8 *p, guint8 *end, Buffer *buf)
74817502 g_free (sourcelink );
74827503 break ;
74837504 }
7505+ case MDBGPROT_CMD_MODULE_APPLY_CHANGES : {
7506+ MonoImage * image = decode_moduleid (p , & p , end , & domain , & err );
7507+ if (err != ERR_NONE )
7508+ return err ;
7509+ int dmeta_id = decode_objid (p , & p , end );
7510+ int dil_id = decode_objid (p , & p , end );
7511+ int dpdb_id = decode_objid (p , & p , end );
7512+ MonoObject * dmeta , * dil , * dpdb ;
7513+ if ((err = get_object (dmeta_id , & dmeta )) != ERR_NONE )
7514+ return err ;
7515+ if ((err = get_object (dil_id , & dil )) != ERR_NONE )
7516+ return err ;
7517+ if ((err = get_object_allow_null (dpdb_id , & dpdb )) != ERR_NONE )
7518+ return err ;
7519+ ERROR_DECL (error );
7520+ if (!module_apply_changes (image , (MonoArray * )dmeta , (MonoArray * )dil , (MonoArray * )dpdb , error )) {
7521+ mono_error_cleanup (error );
7522+ return ERR_LOADER_ERROR ;
7523+ }
7524+ return ERR_NONE ;
7525+ }
74847526 default :
74857527 return ERR_NOT_IMPLEMENTED ;
74867528 }
@@ -9459,6 +9501,7 @@ static const char* assembly_cmds_str[] = {
94599501
94609502static const char * module_cmds_str [] = {
94619503 "GET_INFO" ,
9504+ "APPLY_CHANGES" ,
94629505};
94639506
94649507static const char * field_cmds_str [] = {
0 commit comments