Fix migrator to correctly migrate dynamic linking mode linker_flags

This would have not introduced the osx crosstool bug in https://github.com/bazelbuild/bazel/commit/2d0e27e8bc7452758e8f50b51fd470efb8111e1f which was then fixed in unknown commit.

RELNOTES: None.
PiperOrigin-RevId: 238699176
diff --git a/tools/migration/legacy_fields_migration_lib.py b/tools/migration/legacy_fields_migration_lib.py
index 46d5869..7e7c642 100644
--- a/tools/migration/legacy_fields_migration_lib.py
+++ b/tools/migration/legacy_fields_migration_lib.py
@@ -44,6 +44,8 @@
 
 NODEPS_DYNAMIC_LIBRARY_LINK_ACTIONS = ["c++-link-nodeps-dynamic-library"]
 
+TRANSITIVE_DYNAMIC_LIBRARY_LINK_ACTIONS = ["c++-link-dynamic-library"]
+
 TRANSITIVE_LINK_ACTIONS = ["c++-link-executable", "c++-link-dynamic-library"]
 
 CC_LINK_EXECUTABLE = ["c++-link-executable"]
@@ -329,9 +331,14 @@
     actions = flag_set[1]
     flags = flag_set[2]
     expand_if_all_available = flag_set[3]
+    not_feature = None
+    if len(flag_set) >= 5:
+      not_feature = flag_set[4]
     flag_set = feature.flag_set.add()
     if with_feature is not None:
       flag_set.with_feature.add().feature[:] = [with_feature]
+    if not_feature is not None:
+      flag_set.with_feature.add().not_feature[:] = [not_feature]
     flag_set.action[:] = actions
     flag_group = flag_set.flag_group.add()
     flag_group.expand_if_all_available[:] = expand_if_all_available
@@ -414,6 +421,13 @@
         result.append(
             [None, NODEPS_DYNAMIC_LIBRARY_LINK_ACTIONS, lmf.linker_flag, []])
         result.append([
+            None,
+            TRANSITIVE_DYNAMIC_LIBRARY_LINK_ACTIONS,
+            lmf.linker_flag,
+            [],
+            "static_link_cpp_runtimes",
+        ])
+        result.append([
             feature_name,
             transitive_link_actions(toolchain), lmf.linker_flag, []
         ])
diff --git a/tools/migration/legacy_fields_migration_lib_test.py b/tools/migration/legacy_fields_migration_lib_test.py
index 3049502..a47ad52 100644
--- a/tools/migration/legacy_fields_migration_lib_test.py
+++ b/tools/migration/legacy_fields_migration_lib_test.py
@@ -9,6 +9,7 @@
 from tools.migration.legacy_fields_migration_lib import DYNAMIC_LIBRARY_LINK_ACTIONS
 from tools.migration.legacy_fields_migration_lib import NODEPS_DYNAMIC_LIBRARY_LINK_ACTIONS
 from tools.migration.legacy_fields_migration_lib import TRANSITIVE_LINK_ACTIONS
+from tools.migration.legacy_fields_migration_lib import TRANSITIVE_DYNAMIC_LIBRARY_LINK_ACTIONS
 from tools.migration.legacy_fields_migration_lib import CC_LINK_EXECUTABLE
 from tools.migration.legacy_fields_migration_lib import migrate_legacy_fields
 
@@ -510,23 +511,31 @@
     self.assertEqual(output.feature[0].flag_set[3].action,
                      NODEPS_DYNAMIC_LIBRARY_LINK_ACTIONS)
 
-    self.assertEqual(output.feature[0].flag_set[4].with_feature[0].feature[0],
-                     "dynamic_linking_mode")
+    self.assertEqual(
+        output.feature[0].flag_set[4].with_feature[0].not_feature[0],
+        "static_link_cpp_runtimes")
     self.assertEqual(output.feature[0].flag_set[4].flag_group[0].flag,
                      ["lmf-dynamic-flag-4"])
     self.assertEqual(output.feature[0].flag_set[4].action,
+                     TRANSITIVE_DYNAMIC_LIBRARY_LINK_ACTIONS)
+
+    self.assertEqual(output.feature[0].flag_set[5].with_feature[0].feature[0],
+                     "dynamic_linking_mode")
+    self.assertEqual(output.feature[0].flag_set[5].flag_group[0].flag,
+                     ["lmf-dynamic-flag-4"])
+    self.assertEqual(output.feature[0].flag_set[5].action,
                      TRANSITIVE_LINK_ACTIONS)
 
-    self.assertEqual(output.feature[0].flag_set[5].flag_group[0].flag,
+    self.assertEqual(output.feature[0].flag_set[6].flag_group[0].flag,
                      ["dl-flag-5"])
-    self.assertEqual(output.feature[0].flag_set[5].action,
+    self.assertEqual(output.feature[0].flag_set[6].action,
                      DYNAMIC_LIBRARY_LINK_ACTIONS)
 
-    self.assertEqual(output.feature[0].flag_set[6].flag_group[0].flag,
+    self.assertEqual(output.feature[0].flag_set[7].flag_group[0].flag,
                      ["to-flag-6"])
-    self.assertEqual(output.feature[0].flag_set[6].action, ALL_CC_LINK_ACTIONS)
+    self.assertEqual(output.feature[0].flag_set[7].action, ALL_CC_LINK_ACTIONS)
     self.assertEqual(
-        output.feature[0].flag_set[6].flag_group[0].expand_if_all_available,
+        output.feature[0].flag_set[7].flag_group[0].expand_if_all_available,
         ["is_cc_test"])
 
   def test_all_linker_flag_objc_actions(self):