Skip to content

Commit

Permalink
Merge branch 'bugfix/check_mapping_target_conflict_v4.4' into 'releas…
Browse files Browse the repository at this point in the history
…e/v4.4'

fix(ldgen): check target conflict for entries with section aliases (v4.4)

See merge request espressif/esp-idf!26125
  • Loading branch information
jack0c committed Nov 14, 2023
2 parents 8ddb3d6 + ea2f645 commit 4bc4242
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 10 deletions.
9 changes: 5 additions & 4 deletions components/bt/linker.lf
Expand Up @@ -24,12 +24,13 @@ entries:
[mapping:bt]
archive: libbt.a
entries:
* (bt_start_end);
bt_bss -> dram0_bss ALIGN(4) ALIGN(4, post) SURROUND(bt_bss),
bt_common -> dram0_bss ALIGN(4) ALIGN(4, post) SURROUND(bt_common),
data -> dram0_data ALIGN(4) ALIGN(4, post) SURROUND(bt_data)
if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y:
* (extram_bss)
else:
* (bt_start_end);
bt_bss -> dram0_bss ALIGN(4) ALIGN(4, post) SURROUND(bt_bss),
bt_common -> dram0_bss ALIGN(4) ALIGN(4, post) SURROUND(bt_common),
data -> dram0_data ALIGN(4) ALIGN(4, post) SURROUND(bt_data)

[mapping:btdm]
archive: libbtdm_app.a
Expand Down
2 changes: 1 addition & 1 deletion tools/ldgen/generation.py
Expand Up @@ -477,7 +477,7 @@ def get_section_strs(section):

sections_str = get_section_strs(section)

key = (entity, section.name)
key = (entity, sections_str)

try:
existing = entity_mappings[key]
Expand Down
38 changes: 33 additions & 5 deletions tools/ldgen/test/test_generation.py
Expand Up @@ -79,7 +79,10 @@ def setUp(self):
self.entities.add_sections_info(objdump)

with open('data/linker_script.ld') as linker_script:
self.linker_script = LinkerScript(linker_script)
self.linker_script_expect = LinkerScript(linker_script)

with open('data/linker_script.ld') as linker_script:
self.linker_script_actual = LinkerScript(linker_script)

@staticmethod
def create_fragment_file(contents, name='test_fragment.lf'):
Expand All @@ -93,11 +96,11 @@ def add_fragments(self, text):
self.generation.add_fragments_from_file(fragment_file)

def write(self, expected, actual):
self.linker_script.fill(expected)
self.linker_script.write(open('expected.ld', 'w'))
self.linker_script_expect.fill(expected)
self.linker_script_expect.write(open('expected.ld', 'w'))

self.linker_script.fill(actual)
self.linker_script.write(open('actual.ld', 'w'))
self.linker_script_actual.fill(actual)
self.linker_script_actual.write(open('actual.ld', 'w'))

def generate_default_rules(self):
rules = collections.defaultdict(list)
Expand Down Expand Up @@ -801,6 +804,31 @@ def test_same_entity_conflicting_scheme(self, alt=None):
with self.assertRaises(GenerationException):
self.generation.generate(self.entities)

def test_same_entity_conflicting_section(self):
# Test same entity being mapped by scheme conflicting with another.
#
# custom_rtc = .text -> rtc_text
# noflash = .text -> iram0_text, .rodata -> dram0_data
#
# This operation should fail.
mapping = u"""
[sections:custom_text]
entries:
.text+
.literal+
[scheme:custom_rtc]
entries:
custom_text -> rtc_text
[mapping:test]
archive: libfreertos.a
entries:
croutine (noflash) #1
croutine (custom_rtc) #2
"""
self.test_same_entity_conflicting_scheme(mapping)

def test_complex_mapping_case(self, alt=None):
# Test a complex case where an object is mapped using
# one scheme, but a specific symbol in that object is mapped
Expand Down

0 comments on commit 4bc4242

Please sign in to comment.