ldgen: rename emit to surround

pull/6718/head
Renz Bagaporo 2021-02-16 13:19:53 +08:00
rodzic c6f0d47758
commit dbdc17cced
7 zmienionych plików z 60 dodań i 60 usunięć

Wyświetl plik

@ -9,7 +9,7 @@ entries:
data -> dram0_data data -> dram0_data
# For the following fragments, order matters for # For the following fragments, order matters for
# 'align(4, post) emit(sym)', which generates: # 'align(4, post) surround(sym)', which generates:
# #
# _sym_start # _sym_start
# ... # ...
@ -20,8 +20,8 @@ entries:
archive: libbt.a archive: libbt.a
entries: entries:
* (bt_start_end); * (bt_start_end);
bss_common -> dram0_bss align(4, post) emit(bt_bss), bss_common -> dram0_bss align(4, post) surround(bt_bss),
data -> dram0_data align(4, post) emit(bt_data) data -> dram0_data align(4, post) surround(bt_data)
if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y: if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y:
* (extram_bss) * (extram_bss)
@ -29,12 +29,12 @@ entries:
archive: libbtdm_app.a archive: libbtdm_app.a
entries: entries:
* (bt_start_end); * (bt_start_end);
bss_common -> dram0_bss align(4, post) emit(btdm_bss), bss_common -> dram0_bss align(4, post) surround(btdm_bss),
data -> dram0_data align(4, post) emit(btdm_data) data -> dram0_data align(4, post) surround(btdm_data)
[mapping:nimble] [mapping:nimble]
archive: libnimble.a archive: libnimble.a
entries: entries:
* (bt_start_end); * (bt_start_end);
bss_common -> dram0_bss align(4, post) emit(nimble_bss), bss_common -> dram0_bss align(4, post) surround(nimble_bss),
data -> dram0_data align(4, post) emit(nimble_data) data -> dram0_data align(4, post) surround(nimble_data)

Wyświetl plik

@ -27,12 +27,12 @@ entries:
archive: * archive: *
entries: entries:
* (coredump_default); * (coredump_default);
rtc_fast_coredump -> rtc_force_fast emit(coredump_rtc_fast), rtc_fast_coredump -> rtc_force_fast surround(coredump_rtc_fast),
rtc_coredump -> rtc_data emit(coredump_rtc), rtc_coredump -> rtc_data surround(coredump_rtc),
dram_coredump -> dram0_data emit(coredump_dram) dram_coredump -> dram0_data surround(coredump_dram)
if IDF_TARGET_ESP32S2 = n: if IDF_TARGET_ESP32S2 = n:
* (coredump_default); * (coredump_default);
iram_coredump -> iram0_data emit(coredump_iram) iram_coredump -> iram0_data surround(coredump_iram)
[mapping:espcoredump] [mapping:espcoredump]
archive: libespcoredump.a archive: libespcoredump.a

Wyświetl plik

@ -274,7 +274,7 @@ class Mapping(Fragment):
PRE_POST = (Optional(Suppress(',') + Suppress('pre').setParseAction(lambda: True).setResultsName('pre')) + PRE_POST = (Optional(Suppress(',') + Suppress('pre').setParseAction(lambda: True).setResultsName('pre')) +
Optional(Suppress(',') + Suppress('post').setParseAction(lambda: True).setResultsName('post'))) Optional(Suppress(',') + Suppress('post').setParseAction(lambda: True).setResultsName('post')))
class Emit(Flag): class Surround(Flag):
def __init__(self, symbol, pre=True, post=True): def __init__(self, symbol, pre=True, post=True):
self.symbol = symbol self.symbol = symbol
@ -283,11 +283,11 @@ class Mapping(Fragment):
@staticmethod @staticmethod
def get_grammar(): def get_grammar():
# emit(symbol [, pre, post]) # surround(symbol [, pre, post])
# #
# __symbol_start, __symbol_end is generated before and after # __symbol_start, __symbol_end is generated before and after
# the corresponding input section description, respectively. # the corresponding input section description, respectively.
grammar = (Keyword('emit').suppress() + grammar = (Keyword('surround').suppress() +
Suppress('(') + Suppress('(') +
Fragment.IDENTIFIER.setResultsName('symbol') + Fragment.IDENTIFIER.setResultsName('symbol') +
Mapping.Flag.PRE_POST + Mapping.Flag.PRE_POST +
@ -295,20 +295,20 @@ class Mapping(Fragment):
def on_parse(tok): def on_parse(tok):
if tok.pre == '' and tok.post == '': if tok.pre == '' and tok.post == '':
res = Mapping.Emit(tok.symbol) res = Mapping.Surround(tok.symbol)
elif tok.pre != '' and tok.post == '': elif tok.pre != '' and tok.post == '':
res = Mapping.Emit(tok.symbol, tok.pre, False) res = Mapping.Surround(tok.symbol, tok.pre, False)
elif tok.pre == '' and tok.post != '': elif tok.pre == '' and tok.post != '':
res = Mapping.Emit(tok.symbol, False, tok.post) res = Mapping.Surround(tok.symbol, False, tok.post)
else: else:
res = Mapping.Emit(tok.symbol, tok.pre, tok.post) res = Mapping.Surround(tok.symbol, tok.pre, tok.post)
return res return res
grammar.setParseAction(on_parse) grammar.setParseAction(on_parse)
return grammar return grammar
def __eq__(self, other): def __eq__(self, other):
return (isinstance(other, Mapping.Emit) and return (isinstance(other, Mapping.Surround) and
self.symbol == other.symbol and self.symbol == other.symbol and
self.pre == other.pre and self.pre == other.pre and
self.post == other.post) self.post == other.post)
@ -442,7 +442,7 @@ class Mapping(Fragment):
# obj (scheme) # obj (scheme)
# * (scheme) # * (scheme)
# Flags can be specified for section->target in the scheme specified, ex: # Flags can be specified for section->target in the scheme specified, ex:
# obj (scheme); section->target emit(symbol), section2->target2 align(4) # obj (scheme); section->target surround(symbol), section2->target2 align(4)
obj = Fragment.ENTITY.setResultsName('object') obj = Fragment.ENTITY.setResultsName('object')
symbol = Suppress(':') + Fragment.IDENTIFIER.setResultsName('symbol') symbol = Suppress(':') + Fragment.IDENTIFIER.setResultsName('symbol')
scheme = Suppress('(') + Fragment.IDENTIFIER.setResultsName('scheme') + Suppress(')') scheme = Suppress('(') + Fragment.IDENTIFIER.setResultsName('scheme') + Suppress(')')
@ -450,7 +450,7 @@ class Mapping(Fragment):
# The flags are specified for section->target in the scheme specified # The flags are specified for section->target in the scheme specified
sections_target = Scheme.grammars['entries'].grammar sections_target = Scheme.grammars['entries'].grammar
flag = Or([f.get_grammar() for f in [Mapping.Keep, Mapping.Align, Mapping.Emit, Mapping.Sort]]) flag = Or([f.get_grammar() for f in [Mapping.Keep, Mapping.Align, Mapping.Surround, Mapping.Sort]])
section_target_flags = Group(sections_target + Group(OneOrMore(flag)).setResultsName('flags')) section_target_flags = Group(sections_target + Group(OneOrMore(flag)).setResultsName('flags'))

Wyświetl plik

@ -146,7 +146,7 @@ class EntityNode():
keep = False keep = False
sort = None sort = None
surround = [] surround_type = []
placement_flags = placement.flags if placement.flags is not None else [] placement_flags = placement.flags if placement.flags is not None else []
@ -155,12 +155,12 @@ class EntityNode():
keep = True keep = True
elif isinstance(flag, Mapping.Sort): elif isinstance(flag, Mapping.Sort):
sort = (flag.first, flag.second) sort = (flag.first, flag.second)
else: # emit or align else: # surround or align
surround.append(flag) surround_type.append(flag)
for flag in surround: for flag in surround_type:
if flag.pre: if flag.pre:
if isinstance(flag, Mapping.Emit): if isinstance(flag, Mapping.Surround):
commands[placement.target].append(SymbolAtAddress('_%s_start' % flag.symbol)) commands[placement.target].append(SymbolAtAddress('_%s_start' % flag.symbol))
else: # align else: # align
commands[placement.target].append(AlignAtAddress(flag.alignment)) commands[placement.target].append(AlignAtAddress(flag.alignment))
@ -181,9 +181,9 @@ class EntityNode():
[e.node.entity for e in subplacement.exclusions], keep, sort) [e.node.entity for e in subplacement.exclusions], keep, sort)
commands[placement.target].append(command) commands[placement.target].append(command)
for flag in surround: for flag in surround_type:
if flag.post: if flag.post:
if isinstance(flag, Mapping.Emit): if isinstance(flag, Mapping.Surround):
commands[placement.target].append(SymbolAtAddress('_%s_end' % flag.symbol)) commands[placement.target].append(SymbolAtAddress('_%s_end' % flag.symbol))
else: # align else: # align
commands[placement.target].append(AlignAtAddress(flag.alignment)) commands[placement.target].append(AlignAtAddress(flag.alignment))

Wyświetl plik

@ -913,21 +913,21 @@ entries:
archive: libmain.a archive: libmain.a
entries: entries:
obj1 (default); obj1 (default);
text->flash_text emit(sym1), text->flash_text surround(sym1),
rodata->flash_rodata emit(sym2, pre), rodata->flash_rodata surround(sym2, pre),
data->dram0_data emit(sym3, post), data->dram0_data surround(sym3, post),
bss->dram0_bss emit(sym4, pre, post), bss->dram0_bss surround(sym4, pre, post),
common->dram0_bss emit(sym5, pre, post) emit(sym6) common->dram0_bss surround(sym5, pre, post) surround(sym6)
""") """)
fragment_file = FragmentFile(test_fragment, self.sdkconfig) fragment_file = FragmentFile(test_fragment, self.sdkconfig)
fragment = fragment_file.fragments[0] fragment = fragment_file.fragments[0]
expected = [('text', 'flash_text', [Mapping.Emit('sym1', True, True)]), expected = [('text', 'flash_text', [Mapping.Surround('sym1', True, True)]),
('rodata', 'flash_rodata', [Mapping.Emit('sym2', True, False)]), ('rodata', 'flash_rodata', [Mapping.Surround('sym2', True, False)]),
('data', 'dram0_data', [Mapping.Emit('sym3', False, True)]), ('data', 'dram0_data', [Mapping.Surround('sym3', False, True)]),
('bss', 'dram0_bss', [Mapping.Emit('sym4', True, True)]), ('bss', 'dram0_bss', [Mapping.Surround('sym4', True, True)]),
('common', 'dram0_bss', [Mapping.Emit('sym5', True, True), Mapping.Emit('sym6', True, True)])] ('common', 'dram0_bss', [Mapping.Surround('sym5', True, True), Mapping.Surround('sym6', True, True)])]
actual = fragment.flags[('obj1', None, 'default')] actual = fragment.flags[('obj1', None, 'default')]
self.assertEqual(expected, actual) self.assertEqual(expected, actual)
@ -938,21 +938,21 @@ entries:
archive: libmain.a archive: libmain.a
entries: entries:
obj1 (default); obj1 (default);
text->flash_text align(4) keep emit(sym1) align(8) sort(name), text->flash_text align(4) keep surround(sym1) align(8) sort(name),
rodata->flash_rodata keep align(4) keep emit(sym1) align(8) align(4) sort(name) rodata->flash_rodata keep align(4) keep surround(sym1) align(8) align(4) sort(name)
""") """)
fragment_file = FragmentFile(test_fragment, self.sdkconfig) fragment_file = FragmentFile(test_fragment, self.sdkconfig)
fragment = fragment_file.fragments[0] fragment = fragment_file.fragments[0]
expected = [('text', 'flash_text', [Mapping.Align(4, True, False), expected = [('text', 'flash_text', [Mapping.Align(4, True, False),
Mapping.Keep(), Mapping.Keep(),
Mapping.Emit('sym1', True, True), Mapping.Surround('sym1', True, True),
Mapping.Align(8, True, False), Mapping.Align(8, True, False),
Mapping.Sort('name')]), Mapping.Sort('name')]),
('rodata', 'flash_rodata', [Mapping.Keep(), ('rodata', 'flash_rodata', [Mapping.Keep(),
Mapping.Align(4, True, False), Mapping.Align(4, True, False),
Mapping.Keep(), Mapping.Keep(),
Mapping.Emit('sym1', True, True), Mapping.Surround('sym1', True, True),
Mapping.Align(8, True, False), Mapping.Align(8, True, False),
Mapping.Align(4, True, False), Mapping.Align(4, True, False),
Mapping.Sort('name')])] Mapping.Sort('name')])]
@ -968,19 +968,19 @@ entries:
archive: libmain.a archive: libmain.a
entries: entries:
obj1 (default); obj1 (default);
text->flash_text align(4) keep emit(sym1) sort(name), text->flash_text align(4) keep surround(sym1) sort(name),
text->flash_text align(4) keep emit(sym1) sort(name) text->flash_text align(4) keep surround(sym1) sort(name)
""") """)
fragment_file = FragmentFile(test_fragment, self.sdkconfig) fragment_file = FragmentFile(test_fragment, self.sdkconfig)
fragment = fragment_file.fragments[0] fragment = fragment_file.fragments[0]
expected = [('text', 'flash_text', [Mapping.Align(4, True, False), expected = [('text', 'flash_text', [Mapping.Align(4, True, False),
Mapping.Keep(), Mapping.Keep(),
Mapping.Emit('sym1', True, True), Mapping.Surround('sym1', True, True),
Mapping.Sort('name')]), Mapping.Sort('name')]),
('text', 'flash_text', [Mapping.Align(4, True, False), ('text', 'flash_text', [Mapping.Align(4, True, False),
Mapping.Keep(), Mapping.Keep(),
Mapping.Emit('sym1', True, True), Mapping.Surround('sym1', True, True),
Mapping.Sort('name')])] Mapping.Sort('name')])]
actual = fragment.flags[('obj1', None, 'default')] actual = fragment.flags[('obj1', None, 'default')]
self.assertEqual(expected, actual) self.assertEqual(expected, actual)
@ -995,20 +995,20 @@ entries:
archive: libmain.a archive: libmain.a
entries: entries:
obj1 (default); obj1 (default);
text->flash_text align(4) keep emit(sym1) sort(name) text->flash_text align(4) keep surround(sym1) sort(name)
obj1 (default); obj1 (default);
text->flash_text align(4) keep emit(sym1) sort(name) text->flash_text align(4) keep surround(sym1) sort(name)
""") """)
fragment_file = FragmentFile(test_fragment, self.sdkconfig) fragment_file = FragmentFile(test_fragment, self.sdkconfig)
fragment = fragment_file.fragments[0] fragment = fragment_file.fragments[0]
expected = [('text', 'flash_text', [Mapping.Align(4, True, False), expected = [('text', 'flash_text', [Mapping.Align(4, True, False),
Mapping.Keep(), Mapping.Keep(),
Mapping.Emit('sym1', True, True), Mapping.Surround('sym1', True, True),
Mapping.Sort('name')]), Mapping.Sort('name')]),
('text', 'flash_text', [Mapping.Align(4, True, False), ('text', 'flash_text', [Mapping.Align(4, True, False),
Mapping.Keep(), Mapping.Keep(),
Mapping.Emit('sym1', True, True), Mapping.Surround('sym1', True, True),
Mapping.Sort('name')])] Mapping.Sort('name')])]
actual = fragment.flags[('obj1', None, 'default')] actual = fragment.flags[('obj1', None, 'default')]
self.assertEqual(expected, actual) self.assertEqual(expected, actual)

Wyświetl plik

@ -1398,7 +1398,7 @@ class FlagTest(GenerationTest):
def test_flags_basics(self): def test_flags_basics(self):
# Test that input section commands additions are done (keep, sort). # Test that input section commands additions are done (keep, sort).
# Test that order dependent commands are properly generated (align, emit) # Test that order dependent commands are properly generated (align, surround)
# Normally, if an entry has the same mapping as parent, commands. # Normally, if an entry has the same mapping as parent, commands.
# are not emitted for them. However, if there are flags, they should be - # are not emitted for them. However, if there are flags, they should be -
# only for the scheme entries that have flags, though. # only for the scheme entries that have flags, though.
@ -1428,11 +1428,11 @@ class FlagTest(GenerationTest):
archive: libfreertos.a archive: libfreertos.a
entries: entries:
croutine (noflash_text); croutine (noflash_text);
text->iram0_text align(4, pre, post) emit(sym1, pre, post) #1 text->iram0_text align(4, pre, post) surround(sym1, pre, post) #1
timers (default); timers (default);
text->flash_text keep sort(name) #2 text->flash_text keep sort(name) #2
timers (default); timers (default);
rodata->flash_rodata emit(sym2, pre, post) align(4, pre, post) #3 rodata->flash_rodata surround(sym2, pre, post) align(4, pre, post) #3
""" """
self.add_fragments(mapping) self.add_fragments(mapping)
@ -1489,7 +1489,7 @@ archive: *
entries: entries:
# 1 # 1
* (default); * (default);
text->flash_text emit(sym1) keep #2 text->flash_text surround(sym1) keep #2
[mapping:test] [mapping:test]
archive: libfreertos.a archive: libfreertos.a
@ -1551,7 +1551,7 @@ archive: libfreertos.a
entries: entries:
# 1 # 1
* (default); * (default);
text->flash_text emit(sym1) keep #2 text->flash_text surround(sym1) keep #2
croutine:prvCheckPendingReadyList (noflash_text) #3 croutine:prvCheckPendingReadyList (noflash_text) #3
""" """
@ -1607,7 +1607,7 @@ archive: libfreertos.a
entries: entries:
# 1 # 1
croutine (default); croutine (default);
text->flash_text emit(sym1) keep #2 text->flash_text surround(sym1) keep #2
croutine:prvCheckPendingReadyList (noflash_text) #3 croutine:prvCheckPendingReadyList (noflash_text) #3
""" """
@ -1658,7 +1658,7 @@ archive: *
entries: entries:
# 1 # 1
* (default); * (default);
text->flash_text emit(sym1) keep #2 text->flash_text surround(sym1) keep #2
[mapping:test] [mapping:test]
archive: libfreertos.a archive: libfreertos.a
@ -1720,7 +1720,7 @@ archive: libfreertos.a
entries: entries:
# 1 # 1
* (default); * (default);
text->flash_text emit(sym1) keep text->flash_text surround(sym1) keep
croutine (default) #2 croutine (default) #2
croutine:prvCheckPendingReadyList (noflash_text) #3 croutine:prvCheckPendingReadyList (noflash_text) #3
""" """
@ -1820,7 +1820,7 @@ entries:
archive: * archive: *
entries: entries:
* (default); * (default);
text->flash_text emit(sym1) text->flash_text surround(sym1)
""" """
self.add_fragments(mapping) self.add_fragments(mapping)

Wyświetl plik

@ -4,5 +4,5 @@ entries:
* (noflash) * (noflash)
src1 (default) src1 (default)
src1:func1 (noflash); src1:func1 (noflash);
text->iram0_text keep align(9) align(12, post) emit(sym1) text->iram0_text keep align(9) align(12, post) surround(sym1)
src1:func2 (rtc) src1:func2 (rtc)