twister: Remove unrecognised sections test

The section lists that govern whether the ELF
section is recognised or not are out of date.

A programming bug has rendered the unrecognised
section check unrunnable for years.

Thus, the practically dead code of the
unrecognised section check is removed
in this commit.

Signed-off-by: Lukasz Mrugala <lukaszx.mrugala@intel.com>
This commit is contained in:
Lukasz Mrugala 2025-02-24 18:00:52 +00:00 committed by Benjamin Cabé
commit 6ef4db88dd
6 changed files with 4 additions and 42 deletions

View file

@ -482,12 +482,6 @@ structure in the main Zephyr tree: boards/<vendor>/<board_name>/""")
action="store_true", action="store_true",
help="Collect and report ROM/RAM section sizes for each test image built.") help="Collect and report ROM/RAM section sizes for each test image built.")
parser.add_argument(
"--disable-unrecognized-section-test",
action="store_true",
default=False,
help="Don't error on unrecognized sections in the binary images.")
footprint_group.add_argument( footprint_group.add_argument(
"--footprint-from-buildlog", "--footprint-from-buildlog",
action = "store_true", action = "store_true",

View file

@ -632,19 +632,12 @@ class Reporting:
) )
logger.info("-+" * 40) logger.info("-+" * 40)
def summary(self, results, ignore_unrecognized_sections, duration): def summary(self, results, duration):
failed = 0 failed = 0
run = 0 run = 0
for instance in self.instances.values(): for instance in self.instances.values():
if instance.status == TwisterStatus.FAIL: if instance.status == TwisterStatus.FAIL:
failed += 1 failed += 1
elif not ignore_unrecognized_sections and instance.metrics.get("unrecognized"):
logger.error(
f"{Fore.RED}FAILED{Fore.RESET}:"
f" {instance.name} has unrecognized binary sections:"
f" {instance.metrics.get('unrecognized', [])!s}"
)
failed += 1
# FIXME: need a better way to identify executed tests # FIXME: need a better way to identify executed tests
handler_time = instance.metrics.get('handler_time', 0) handler_time = instance.metrics.get('handler_time', 0)

View file

@ -1793,7 +1793,6 @@ class ProjectBuilder(FilterBuilder):
instance.metrics["used_rom"] = 0 instance.metrics["used_rom"] = 0
instance.metrics["available_rom"] = 0 instance.metrics["available_rom"] = 0
instance.metrics["available_ram"] = 0 instance.metrics["available_ram"] = 0
instance.metrics["unrecognized"] = []
return build_result return build_result
@staticmethod @staticmethod
@ -1809,13 +1808,11 @@ class ProjectBuilder(FilterBuilder):
instance.metrics["used_rom"] = size_calc.get_used_rom() instance.metrics["used_rom"] = size_calc.get_used_rom()
instance.metrics["available_rom"] = size_calc.get_available_rom() instance.metrics["available_rom"] = size_calc.get_available_rom()
instance.metrics["available_ram"] = size_calc.get_available_ram() instance.metrics["available_ram"] = size_calc.get_available_ram()
instance.metrics["unrecognized"] = size_calc.unrecognized_sections()
else: else:
instance.metrics["used_ram"] = 0 instance.metrics["used_ram"] = 0
instance.metrics["used_rom"] = 0 instance.metrics["used_rom"] = 0
instance.metrics["available_rom"] = 0 instance.metrics["available_rom"] = 0
instance.metrics["available_ram"] = 0 instance.metrics["available_ram"] = 0
instance.metrics["unrecognized"] = []
instance.metrics["handler_time"] = instance.execution_time instance.metrics["handler_time"] = instance.execution_time
class TwisterRunner: class TwisterRunner:
@ -1891,7 +1888,6 @@ class TwisterRunner:
else: else:
inst.metrics.update(self.instances[inst.name].metrics) inst.metrics.update(self.instances[inst.name].metrics)
inst.metrics["handler_time"] = inst.execution_time inst.metrics["handler_time"] = inst.execution_time
inst.metrics["unrecognized"] = []
self.instances[inst.name] = inst self.instances[inst.name] = inst
print("") print("")

View file

@ -154,17 +154,6 @@ class SizeCalculator:
""" """
return self.used_rom return self.used_rom
def unrecognized_sections(self):
"""Get a list of sections inside the binary that weren't recognized
@return list of unrecognized section names
"""
slist = []
for v in self.sections:
if not v["recognized"]:
slist.append(v["name"])
return slist
def get_available_ram(self) -> int: def get_available_ram(self) -> int:
"""Get the total available RAM. """Get the total available RAM.
@ -251,7 +240,6 @@ class SizeCalculator:
# Add section to memory use totals (for both non-XIP and XIP scenarios) # Add section to memory use totals (for both non-XIP and XIP scenarios)
# Unrecognized section names are not included in the calculations. # Unrecognized section names are not included in the calculations.
recognized = True
# If build.log file exists, check errors (unrecognized sections # If build.log file exists, check errors (unrecognized sections
# in ELF file). # in ELF file).
@ -262,8 +250,6 @@ class SizeCalculator:
continue continue
else: else:
stype = "unknown" stype = "unknown"
if name not in self.extra_sections:
recognized = False
else: else:
if name in SizeCalculator.alloc_sections: if name in SizeCalculator.alloc_sections:
self.used_ram += size self.used_ram += size
@ -279,12 +265,10 @@ class SizeCalculator:
stype = "ro" stype = "ro"
else: else:
stype = "unknown" stype = "unknown"
if name not in self.extra_sections:
recognized = False
self.sections.append({"name": name, "load_addr": load_addr, self.sections.append({"name": name, "load_addr": load_addr,
"size": size, "virt_addr": virt_addr, "size": size, "virt_addr": virt_addr,
"type": stype, "recognized": recognized}) "type": stype})
def _analyze_elf_file(self) -> None: def _analyze_elf_file(self) -> None:
self._check_elf_file() self._check_elf_file()

View file

@ -181,7 +181,7 @@ def twister(options: argparse.Namespace, default_options: argparse.Namespace):
if options.verbose > 1: if options.verbose > 1:
runner.results.summary() runner.results.summary()
report.summary(runner.results, options.disable_unrecognized_section_test, duration) report.summary(runner.results, duration)
report.coverage_status = True report.coverage_status = True
if options.coverage and not options.disable_coverage_aggregation: if options.coverage and not options.disable_coverage_aggregation:

View file

@ -2411,7 +2411,6 @@ def test_projectbuilder_gather_metrics(
assert instance_mock.metrics['used_rom'] == 0 assert instance_mock.metrics['used_rom'] == 0
assert instance_mock.metrics['available_rom'] == 0 assert instance_mock.metrics['available_rom'] == 0
assert instance_mock.metrics['available_ram'] == 0 assert instance_mock.metrics['available_ram'] == 0
assert instance_mock.metrics['unrecognized'] == []
TESTDATA_16 = [ TESTDATA_16 = [
@ -2463,15 +2462,12 @@ def test_projectbuilder_calc_size(
size_calc_mock.get_available_rom() size_calc_mock.get_available_rom()
assert instance_mock.metrics['available_ram'] == \ assert instance_mock.metrics['available_ram'] == \
size_calc_mock.get_available_ram() size_calc_mock.get_available_ram()
assert instance_mock.metrics['unrecognized'] == \
size_calc_mock.unrecognized_sections()
if expect_zeroes: if expect_zeroes:
assert instance_mock.metrics['used_ram'] == 0 assert instance_mock.metrics['used_ram'] == 0
assert instance_mock.metrics['used_rom'] == 0 assert instance_mock.metrics['used_rom'] == 0
assert instance_mock.metrics['available_rom'] == 0 assert instance_mock.metrics['available_rom'] == 0
assert instance_mock.metrics['available_ram'] == 0 assert instance_mock.metrics['available_ram'] == 0
assert instance_mock.metrics['unrecognized'] == []
if expect_calcs or expect_zeroes: if expect_calcs or expect_zeroes:
assert instance_mock.metrics['handler_time'] == \ assert instance_mock.metrics['handler_time'] == \
@ -2574,8 +2570,7 @@ def test_twisterrunner_run(
assert tr.instances['dummy instance'].metrics == { assert tr.instances['dummy instance'].metrics == {
'k': 'v', 'k': 'v',
'k2': 'v2', 'k2': 'v2',
'handler_time': 30, 'handler_time': 30
'unrecognized': []
} }
assert results_mock().error == 0 assert results_mock().error == 0