feat: ldgen generate ld files with fixed order of entries

the frozenset order inside could be different
This commit is contained in:
Fu Hanxi
2021-09-08 11:54:43 +08:00
parent faa44d5843
commit 404ee09181
3 changed files with 6 additions and 17 deletions

View File

@@ -149,7 +149,7 @@ class RuleNode():
self.add_node_child(entity, sections, target, sections_db)
def get_section_keys(self):
return sorted(self.sections.keys(), key=' '.join)
return sorted(self.sections.keys(), key=lambda x: sorted(x))
class SymbolNode(RuleNode):

View File

@@ -66,8 +66,6 @@ class LinkerScript:
target = member.target
rules = member.rules
del rules[:]
rules.extend(mapping_rules[target])
except KeyError:
message = GenerationException.UNDEFINED_REFERENCE + " to target '" + target + "'."

View File

@@ -102,31 +102,22 @@ class GenerationTest(unittest.TestCase):
def generate_default_rules(self):
rules = collections.defaultdict(list)
rules['flash_text'].append(InputSectionDesc(ROOT, ['.literal', '.literal.*', '.text', '.text.*'], []))
rules['flash_rodata'].append(InputSectionDesc(ROOT, ['.rodata', '.rodata.*'], []))
rules['dram0_data'].append(InputSectionDesc(ROOT, ['.data', '.data.*'], []))
rules['dram0_data'].append(InputSectionDesc(ROOT, ['.dram', '.dram.*'], []))
rules['dram0_bss'].append(InputSectionDesc(ROOT, ['.bss', '.bss.*'], []))
rules['dram0_bss'].append(InputSectionDesc(ROOT, ['COMMON'], []))
rules['flash_text'].append(InputSectionDesc(ROOT, ['.literal', '.literal.*', '.text', '.text.*'], []))
rules['flash_rodata'].append(InputSectionDesc(ROOT, ['.rodata', '.rodata.*'], []))
rules['iram0_text'].append(InputSectionDesc(ROOT, ['.iram', '.iram.*'], []))
rules['rtc_text'].append(InputSectionDesc(ROOT, ['.rtc.text', '.rtc.literal'], []))
rules['rtc_bss'].append(InputSectionDesc(ROOT, ['.rtc.bss'], []))
rules['rtc_data'].append(InputSectionDesc(ROOT, ['.rtc.data'], []))
rules['rtc_data'].append(InputSectionDesc(ROOT, ['.rtc.rodata'], []))
rules['rtc_bss'].append(InputSectionDesc(ROOT, ['.rtc.bss'], []))
rules['rtc_text'].append(InputSectionDesc(ROOT, ['.rtc.text', '.rtc.literal'], []))
return rules
def compare_rules(self, expected, actual):
self.assertEqual(set(expected.keys()), set(actual.keys()))
for target in sorted(actual.keys()):
a_cmds = actual[target]
e_cmds = expected[target]
self.assertEqual(len(a_cmds), len(e_cmds))
for a, e in zip(a_cmds, e_cmds):
self.assertEqual(a, e)
self.assertEqual(expected, actual)
def get_default(self, target, rules):
return rules[target][0]