From e8cb6bd6b35d08ad89b11e87539059b85bfbe702 Mon Sep 17 00:00:00 2001 From: Aleksei Apaseev Date: Tue, 26 Apr 2022 21:24:01 +0800 Subject: [PATCH] feat: Added extra gdbinit file loading for reproducible build --- components/espcoredump/espcoredump.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/components/espcoredump/espcoredump.py b/components/espcoredump/espcoredump.py index bf667e5333..0e3a412332 100644 --- a/components/espcoredump/espcoredump.py +++ b/components/espcoredump/espcoredump.py @@ -4,8 +4,10 @@ # SPDX-License-Identifier: Apache-2.0 # +import json import logging import os.path +from typing import Any try: from esp_coredump import CoreDump @@ -16,6 +18,18 @@ except ImportError: from esp_coredump.cli_ext import parser +def get_prefix_map_gdbinit_path(prog_path): # type: (str) -> Any + build_dir = os.path.abspath(os.path.dirname(prog_path)) + desc_path = os.path.abspath(os.path.join(build_dir, 'project_description.json')) + if not os.path.isfile(desc_path): + raise ValueError(f'{desc_path} does not exist. Please build the app with "idf.py build"') + + with open(desc_path, 'r') as f: + project_desc = json.load(f) + + return project_desc.get('debug_prefix_map_gdbinit') + + def main(): # type: () -> None args = parser.parse_args() @@ -32,6 +46,8 @@ def main(): # type: () -> None logging.basicConfig(format='%(levelname)s: %(message)s', level=log_level) kwargs = {k: v for k, v in vars(args).items() if v is not None} + # pass the extra_gdbinit_file if the build is reproducible + kwargs['extra_gdbinit_file'] = get_prefix_map_gdbinit_path(kwargs['prog']) del(kwargs['debug']) del(kwargs['operation'])