diff --git a/tools/ldgen/fragments.py b/tools/ldgen/fragments.py index 3f65939c68..0305c07c18 100644 --- a/tools/ldgen/fragments.py +++ b/tools/ldgen/fragments.py @@ -276,42 +276,28 @@ class Mapping(Fragment): class Surround(Flag): - def __init__(self, symbol, pre=True, post=True): + def __init__(self, symbol): self.symbol = symbol - self.pre = pre - self.post = post + self.pre = True + self.post = True @staticmethod def get_grammar(): - # surround(symbol [, pre, post]) + # surround(symbol) # # __symbol_start, __symbol_end is generated before and after # the corresponding input section description, respectively. grammar = (Keyword('surround').suppress() + Suppress('(') + Fragment.IDENTIFIER.setResultsName('symbol') + - Mapping.Flag.PRE_POST + Suppress(')')) - def on_parse(tok): - if tok.pre == '' and tok.post == '': - res = Mapping.Surround(tok.symbol) - elif tok.pre != '' and tok.post == '': - res = Mapping.Surround(tok.symbol, tok.pre, False) - elif tok.pre == '' and tok.post != '': - res = Mapping.Surround(tok.symbol, False, tok.post) - else: - res = Mapping.Surround(tok.symbol, tok.pre, tok.post) - return res - - grammar.setParseAction(on_parse) + grammar.setParseAction(lambda tok: Mapping.Surround(tok.symbol)) return grammar def __eq__(self, other): return (isinstance(other, Mapping.Surround) and - self.symbol == other.symbol and - self.pre == other.pre and - self.post == other.post) + self.symbol == other.symbol) class Align(Flag): diff --git a/tools/ldgen/test/test_fragments.py b/tools/ldgen/test/test_fragments.py index 8e1bbf9186..bdd685e2d0 100755 --- a/tools/ldgen/test/test_fragments.py +++ b/tools/ldgen/test/test_fragments.py @@ -906,28 +906,20 @@ entries: text->iram0_text sort(name) sort(alignment) """) - def test_emit_flag(self): + def test_surround_flag(self): # Test parsing combinations and orders of flags test_fragment = self.create_fragment_file(u""" [mapping:map] archive: libmain.a entries: obj1 (default); - text->flash_text surround(sym1), - rodata->flash_rodata surround(sym2, pre), - data->dram0_data surround(sym3, post), - bss->dram0_bss surround(sym4, pre, post), - common->dram0_bss surround(sym5, pre, post) surround(sym6) + text->flash_text surround(sym1) """) fragment_file = FragmentFile(test_fragment, self.sdkconfig) fragment = fragment_file.fragments[0] - expected = [('text', 'flash_text', [Mapping.Surround('sym1', True, True)]), - ('rodata', 'flash_rodata', [Mapping.Surround('sym2', True, False)]), - ('data', 'dram0_data', [Mapping.Surround('sym3', False, True)]), - ('bss', 'dram0_bss', [Mapping.Surround('sym4', True, True)]), - ('common', 'dram0_bss', [Mapping.Surround('sym5', True, True), Mapping.Surround('sym6', True, True)])] + expected = [('text', 'flash_text', [Mapping.Surround('sym1')])] actual = fragment.flags[('obj1', None, 'default')] self.assertEqual(expected, actual) @@ -946,13 +938,13 @@ entries: expected = [('text', 'flash_text', [Mapping.Align(4, True, False), Mapping.Keep(), - Mapping.Surround('sym1', True, True), + Mapping.Surround('sym1'), Mapping.Align(8, True, False), Mapping.Sort('name')]), ('rodata', 'flash_rodata', [Mapping.Keep(), Mapping.Align(4, True, False), Mapping.Keep(), - Mapping.Surround('sym1', True, True), + Mapping.Surround('sym1'), Mapping.Align(8, True, False), Mapping.Align(4, True, False), Mapping.Sort('name')])] @@ -976,11 +968,11 @@ entries: expected = [('text', 'flash_text', [Mapping.Align(4, True, False), Mapping.Keep(), - Mapping.Surround('sym1', True, True), + Mapping.Surround('sym1'), Mapping.Sort('name')]), ('text', 'flash_text', [Mapping.Align(4, True, False), Mapping.Keep(), - Mapping.Surround('sym1', True, True), + Mapping.Surround('sym1'), Mapping.Sort('name')])] actual = fragment.flags[('obj1', None, 'default')] self.assertEqual(expected, actual) @@ -1004,11 +996,11 @@ entries: expected = [('text', 'flash_text', [Mapping.Align(4, True, False), Mapping.Keep(), - Mapping.Surround('sym1', True, True), + Mapping.Surround('sym1'), Mapping.Sort('name')]), ('text', 'flash_text', [Mapping.Align(4, True, False), Mapping.Keep(), - Mapping.Surround('sym1', True, True), + Mapping.Surround('sym1'), Mapping.Sort('name')])] actual = fragment.flags[('obj1', None, 'default')] self.assertEqual(expected, actual) diff --git a/tools/ldgen/test/test_generation.py b/tools/ldgen/test/test_generation.py index 83eb8194b8..a05c1b3a95 100755 --- a/tools/ldgen/test/test_generation.py +++ b/tools/ldgen/test/test_generation.py @@ -1410,29 +1410,29 @@ class FlagTest(GenerationTest): # # flash_rodata # *((EXCLUDE_FILE(libfreertos:timers) .rodata ...) C - # _sym2_start D.1 + # _sym2_start D.1 # . = ALIGN(4) E.1 # KEEP(* (EXCLUDE_FILE(libfreertos:timers) .rodata ...) F - # _sym2_end D.2 + # _sym2_end D.2 # . = ALIGN(4) E.2 # # iram0_text # *(.iram .iram.*) # . = ALIGN(4) G.1 - # _sym1_start H.1 + # _sym1_start H.1 # libfreertos.a:croutine(.text .literal ...) I # . = ALIGN(4) G.2 - # _sym1_end H.2 + # _sym1_end H.2 mapping = u""" [mapping:test] archive: libfreertos.a entries: croutine (noflash_text); - text->iram0_text align(4, pre, post) surround(sym1, pre, post) #1 + text->iram0_text align(4, pre, post) surround(sym1) #1 timers (default); text->flash_text keep sort(name) #2 timers (default); - rodata->flash_rodata surround(sym2, pre, post) align(4, pre, post) #3 + rodata->flash_rodata surround(sym2) align(4, pre, post) #3 """ self.add_fragments(mapping) @@ -1475,10 +1475,10 @@ entries: # are included in the flags. # # flash_text - # _sym1_start A.1 + # _sym1_start A.1 # KEEP(* (EXCLUDE_FILE(libfreertos:croutine).text ...) B # KEEP(libfreertos.a:croutine(...))) C - # _sym1_end A.2 + # _sym1_end A.2 # # iram0_text # *(.iram .iram.*) @@ -1494,7 +1494,7 @@ entries: [mapping:test] archive: libfreertos.a entries: - croutine:prvCheckPendingReadyList (noflash_text) #3 + croutine:prvCheckPendingReadyList (noflash_text) #3 """ self.generation.mappings = {} @@ -1537,10 +1537,10 @@ entries: # # flash_text # *(EXCLUDE_FILE(libfreertos.a).text ...) - # _sym1_start A.1 + # _sym1_start A.1 # KEEP(libfreertos.a(EXCLUDE_FILE(libfreertos:croutine).text.* ...)) B # KEEP(libfreertos.a:croutine(...))) C - # _sym1_end A.2 + # _sym1_end A.2 # # iram0_text # *(.iram .iram.*) @@ -1552,7 +1552,7 @@ entries: # 1 * (default); text->flash_text surround(sym1) keep #2 - croutine:prvCheckPendingReadyList (noflash_text) #3 + croutine:prvCheckPendingReadyList (noflash_text) #3 """ self.add_fragments(mapping) @@ -1594,9 +1594,9 @@ entries: # # flash_text # *(EXCLUDE_FILE(libfreertos.a).text ...) - # _sym1_start A.1 + # _sym1_start A.1 # KEEP(libfreertos.a:croutine(...))) B - # _sym1_end A.2 + # _sym1_end A.2 # # iram0_text # *(.iram .iram.*) @@ -1608,7 +1608,7 @@ entries: # 1 croutine (default); text->flash_text surround(sym1) keep #2 - croutine:prvCheckPendingReadyList (noflash_text) #3 + croutine:prvCheckPendingReadyList (noflash_text) #3 """ self.add_fragments(mapping) @@ -1644,9 +1644,9 @@ entries: # Explicit commands are separated from the parent's flags. # # flash_text - # _sym1_start A.1 + # _sym1_start A.1 # KEEP(* (EXCLUDE_FILE(libfreertos:croutine).text ...) B - # _sym1_end A.2 + # _sym1_end A.2 # KEEP(libfreertos.a:croutine(...))) C # # iram0_text @@ -1663,8 +1663,8 @@ entries: [mapping:test] archive: libfreertos.a entries: - croutine (default) #3 - croutine:prvCheckPendingReadyList (noflash_text) #4 + croutine (default) #3 + croutine:prvCheckPendingReadyList (noflash_text) #4 """ self.generation.mappings = {} @@ -1706,9 +1706,9 @@ entries: # # flash_text # *(EXCLUDE_FILE(libfreertos.a).text ...) - # _sym1_start A.1 + # _sym1_start A.1 # KEEP(libfreertos.a(EXCLUDE_FILE(libfreertos:croutine).text.* ...)) B - # _sym1_end A.2 + # _sym1_end A.2 # KEEP(libfreertos.a:croutine(...))) C # # iram0_text