Skip to content

Commit

Permalink
scripts: build: gen_isr_tables: Cleanup access to ".intList"
Browse files Browse the repository at this point in the history
This commit removes the needs or generating isrList.bin temporary file.
Now gen_isr_tables.py script access the required section directly in
elf file, that was accessed by the script anyway.
It simplifies the building removing one step.

Signed-off-by: Radosław Koppel <radoslaw.koppel@nordicsemi.no>
  • Loading branch information
rakons committed Oct 4, 2023
1 parent 04de62d commit 7027e68
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 17 deletions.
13 changes: 3 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1239,20 +1239,13 @@ if(CONFIG_GEN_ISR_TABLES)
# isr_tables.c is generated from ${ZEPHYR_LINK_STAGE_EXECUTABLE} by
# gen_isr_tables.py
add_custom_command(
OUTPUT isr_tables.c isrList.bin
COMMAND $<TARGET_PROPERTY:bintools,elfconvert_command>
$<TARGET_PROPERTY:bintools,elfconvert_flag>
$<TARGET_PROPERTY:bintools,elfconvert_flag_intarget>${OUTPUT_FORMAT}
$<TARGET_PROPERTY:bintools,elfconvert_flag_outtarget>binary
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_only>.intList
$<TARGET_PROPERTY:bintools,elfconvert_flag_infile>$<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
$<TARGET_PROPERTY:bintools,elfconvert_flag_outfile>isrList.bin
$<TARGET_PROPERTY:bintools,elfconvert_flag_final>
OUTPUT isr_tables.c
COMMAND ${PYTHON_EXECUTABLE}
${ZEPHYR_BASE}/scripts/build/gen_isr_tables.py
--output-source isr_tables.c
--kernel $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
--intlist isrList.bin
--intlist-section .intList
--intlist-section intList
$<$<BOOL:${CONFIG_BIG_ENDIAN}>:--big-endian>
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--debug>
${GEN_ISR_TABLE_EXTRA_ARG}
Expand Down
23 changes: 16 additions & 7 deletions scripts/build/gen_isr_tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def endian_prefix():
else:
return "<"

def read_intlist(intlist_path, syms):
def read_intlist(elfobj, syms, snames):
"""read a binary file containing the contents of the kernel's .intList
section. This is an instance of a header created by
include/zephyr/linker/intlist.ld:
Expand All @@ -66,7 +66,7 @@ def read_intlist(intlist_path, syms):
const void *param;
};
"""

intList_sect = None
intlist = {}

prefix = endian_prefix()
Expand All @@ -77,8 +77,16 @@ def read_intlist(intlist_path, syms):
else:
intlist_entry_fmt = prefix + "iiII"

with open(intlist_path, "rb") as fp:
intdata = fp.read()
for sname in snames:
intList_sect = elfobj.get_section_by_name(sname)
if intList_sect is not None:
debug("Found intlist section: \"{}\"".format(sname))
break

if intList_sect is None:
error("Cannot find the intlist section!")

intdata = intList_sect.data()

header_sz = struct.calcsize(intlist_header_fmt)
header = struct.unpack_from(intlist_header_fmt, intdata, 0)
Expand Down Expand Up @@ -122,8 +130,9 @@ def parse_args():
help="Generate SW ISR table")
parser.add_argument("-V", "--vector-table", action="store_true",
help="Generate vector table")
parser.add_argument("-i", "--intlist", required=True,
help="Zephyr intlist binary for intList extraction")
parser.add_argument("-i", "--intlist-section", action="append", required=True,
help="The name of the section to search for the interupt data. "

Check warning on line 134 in scripts/build/gen_isr_tables.py

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

TYPO_SPELLING

scripts/build/gen_isr_tables.py:134 'interupt' may be misspelled - perhaps 'interrupt'?
"This is accumulative argument. The first section found would be used.")

args = parser.parse_args()

Expand Down Expand Up @@ -286,6 +295,7 @@ def main():
with open(args.kernel, "rb") as fp:
kernel = ELFFile(fp)
syms = get_symbols(kernel)
intlist = read_intlist(kernel, syms, args.intlist_section)

if "CONFIG_MULTI_LEVEL_INTERRUPTS" in syms:
max_irq_per = syms["CONFIG_MAX_IRQ_PER_AGGREGATOR"]
Expand Down Expand Up @@ -313,7 +323,6 @@ def main():

debug('3rd level offsets: {}'.format(list_3rd_lvl_offsets))

intlist = read_intlist(args.intlist, syms)
nvec = intlist["num_vectors"]
offset = intlist["offset"]

Expand Down

0 comments on commit 7027e68

Please sign in to comment.