]> granicus.if.org Git - esp-idf/commitdiff
ldgen: do not generate rules when no condition is true
authorRenz Christian Bagaporo <renz@espressif.com>
Sun, 14 Apr 2019 11:34:27 +0000 (19:34 +0800)
committerRenz Christian Bagaporo <renz@espressif.com>
Wed, 24 Apr 2019 10:25:24 +0000 (18:25 +0800)
Closes https://github.com/espressif/esp-idf/issues/3295

tools/ldgen/fragments.py
tools/ldgen/test/test_fragments.py
tools/ldgen/test/test_generation.py

index dec049ec09e1308bceff0648876a378b230bcc21..dd8295f8692abfe8e39a0394193daa38604859bd 100644 (file)
@@ -276,12 +276,14 @@ class Mapping(Fragment):
 
     MAPPING_ALL_OBJECTS = "*"
 
+    def __init__(self):
+        Fragment.__init__(self)
+        self.entries = set()
+
     def set_key_value(self, key, parse_results):
         if key == "archive":
             self.archive = parse_results[0]["archive"]
         elif key == "entries":
-            self.entries = set()
-
             for result in parse_results:
                 obj = None
                 symbol = None
@@ -321,7 +323,7 @@ class Mapping(Fragment):
 
         grammars = {
             "archive": KeyGrammar(Fragment.ENTITY.setResultsName("archive"), 1, 1, True),
-            "entries": KeyGrammar(entry, 1, None, True)
+            "entries": KeyGrammar(entry, 0, None, True)
         }
 
         return grammars
index e2c4790185db674ce64301363525052f05bff4f1..22daa574aeae8d9427f33cbe0719957dec95dfc9 100755 (executable)
@@ -617,8 +617,10 @@ entries:
         * (noflash) # if condition is false, then no 'entries' key value
 """)
 
-        with self.assertRaises(ParseFatalException):
-            FragmentFile(test_fragment, self.sdkconfig)
+        expected = set()
+
+        fragment_file = FragmentFile(test_fragment, self.sdkconfig)
+        self.assertEqual(expected, fragment_file.fragments[0].entries)
 
         test_fragment = self.create_fragment_file(u"""
 [mapping:test]
index c62fa8fcd90d7ad9bcd43da69143dc9c6fc9df96..48f7742f75de7f26068e13dbe043ffff9ce1df3d 100755 (executable)
@@ -1108,6 +1108,20 @@ entries:
 
             self.compare_rules(expected, actual)
 
+    def test_rule_generation_empty_entries(self):
+        normal = u"""
+[mapping:test]
+archive: lib.a
+entries:
+    if PERFORMANCE_LEVEL >= 1: # is false, generate no special rules
+        obj.a (noflash)
+"""
+
+        self.add_fragments(normal)
+        actual = self.model.generate_rules(self.sections_info)
+        expected = self.generate_default_rules()  # only default rules
+        self.compare_rules(expected, actual)
+
     def test_conditional_sections_1(self):
         generation_with_condition = u"""
 [sections:cond_text_data]