18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci# 38c2ecf20Sopenharmony_ci# Copyright 2019 Google LLC. 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ciimport gdb 68c2ecf20Sopenharmony_ciimport zlib 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cifrom linux import utils 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ciclass LxConfigDump(gdb.Command): 128c2ecf20Sopenharmony_ci """Output kernel config to the filename specified as the command 138c2ecf20Sopenharmony_ci argument. Equivalent to 'zcat /proc/config.gz > config.txt' on 148c2ecf20Sopenharmony_ci a running target""" 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci def __init__(self): 178c2ecf20Sopenharmony_ci super(LxConfigDump, self).__init__("lx-configdump", gdb.COMMAND_DATA, 188c2ecf20Sopenharmony_ci gdb.COMPLETE_FILENAME) 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci def invoke(self, arg, from_tty): 218c2ecf20Sopenharmony_ci if len(arg) == 0: 228c2ecf20Sopenharmony_ci filename = "config.txt" 238c2ecf20Sopenharmony_ci else: 248c2ecf20Sopenharmony_ci filename = arg 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci try: 278c2ecf20Sopenharmony_ci py_config_ptr = gdb.parse_and_eval("&kernel_config_data") 288c2ecf20Sopenharmony_ci py_config_ptr_end = gdb.parse_and_eval("&kernel_config_data_end") 298c2ecf20Sopenharmony_ci py_config_size = py_config_ptr_end - py_config_ptr 308c2ecf20Sopenharmony_ci except gdb.error as e: 318c2ecf20Sopenharmony_ci raise gdb.GdbError("Can't find config, enable CONFIG_IKCONFIG?") 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci inf = gdb.inferiors()[0] 348c2ecf20Sopenharmony_ci zconfig_buf = utils.read_memoryview(inf, py_config_ptr, 358c2ecf20Sopenharmony_ci py_config_size).tobytes() 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci config_buf = zlib.decompress(zconfig_buf, 16) 388c2ecf20Sopenharmony_ci with open(filename, 'wb') as f: 398c2ecf20Sopenharmony_ci f.write(config_buf) 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci gdb.write("Dumped config to " + filename + "\n") 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ciLxConfigDump() 45