1 # SPDX-License-Identifier: GPL-2.0 1 # SPDX-License-Identifier: GPL-2.0 2 # 2 # 3 # Copyright 2019 Google LLC. 3 # Copyright 2019 Google LLC. 4 4 5 import gdb 5 import gdb 6 import zlib 6 import zlib 7 7 8 from linux import utils 8 from linux import utils 9 9 10 10 11 class LxConfigDump(gdb.Command): 11 class LxConfigDump(gdb.Command): 12 """Output kernel config to the filename sp 12 """Output kernel config to the filename specified as the command 13 argument. Equivalent to 'zcat /proc/con 13 argument. Equivalent to 'zcat /proc/config.gz > config.txt' on 14 a running target""" 14 a running target""" 15 15 16 def __init__(self): 16 def __init__(self): 17 super(LxConfigDump, self).__init__("lx 17 super(LxConfigDump, self).__init__("lx-configdump", gdb.COMMAND_DATA, 18 gdb 18 gdb.COMPLETE_FILENAME) 19 19 20 def invoke(self, arg, from_tty): 20 def invoke(self, arg, from_tty): 21 if len(arg) == 0: 21 if len(arg) == 0: 22 filename = "config.txt" 22 filename = "config.txt" 23 else: 23 else: 24 filename = arg 24 filename = arg 25 25 26 try: 26 try: 27 py_config_ptr = gdb.parse_and_eval !! 27 py_config_ptr = gdb.parse_and_eval("kernel_config_data + 8") 28 py_config_ptr_end = gdb.parse_and_ !! 28 py_config_size = gdb.parse_and_eval( 29 py_config_size = py_config_ptr_end !! 29 "sizeof(kernel_config_data) - 1 - 8 * 2") 30 except gdb.error as e: 30 except gdb.error as e: 31 raise gdb.GdbError("Can't find con 31 raise gdb.GdbError("Can't find config, enable CONFIG_IKCONFIG?") 32 32 33 inf = gdb.inferiors()[0] 33 inf = gdb.inferiors()[0] 34 zconfig_buf = utils.read_memoryview(in 34 zconfig_buf = utils.read_memoryview(inf, py_config_ptr, 35 py 35 py_config_size).tobytes() 36 36 37 config_buf = zlib.decompress(zconfig_b 37 config_buf = zlib.decompress(zconfig_buf, 16) 38 with open(filename, 'wb') as f: 38 with open(filename, 'wb') as f: 39 f.write(config_buf) 39 f.write(config_buf) 40 40 41 gdb.write("Dumped config to " + filena 41 gdb.write("Dumped config to " + filename + "\n") 42 42 43 43 44 LxConfigDump() 44 LxConfigDump()
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.