1f197d75fSKieran Bingham/* 2f197d75fSKieran Bingham * gdb helper commands and functions for Linux kernel debugging 3f197d75fSKieran Bingham * 4f197d75fSKieran Bingham * Kernel constants derived from include files. 5f197d75fSKieran Bingham * 6f197d75fSKieran Bingham * Copyright (c) 2016 Linaro Ltd 7f197d75fSKieran Bingham * 8f197d75fSKieran Bingham * Authors: 9f197d75fSKieran Bingham * Kieran Bingham <[email protected]> 10f197d75fSKieran Bingham * 11f197d75fSKieran Bingham * This work is licensed under the terms of the GNU GPL version 2. 12f197d75fSKieran Bingham * 13f197d75fSKieran Bingham */ 14f197d75fSKieran Bingham 15e7e6f462SLeonard Crestez#include <linux/clk-provider.h> 16c1a15399SKieran Bingham#include <linux/fs.h> 17442284a8SStephen Boyd#include <linux/hrtimer.h> 18b0969d76SFlorian Fainelli#include <linux/irq.h> 19c1a15399SKieran Bingham#include <linux/mount.h> 20821f7440SPeter Griffin#include <linux/of_fdt.h> 212f060190SKuan-Ying Lee#include <linux/page_ext.h> 22b7235d6bSKieran Bingham#include <linux/radix-tree.h> 2379939c4aSKuan-Ying Lee#include <linux/slab.h> 24442284a8SStephen Boyd#include <linux/threads.h> 25852622bfSKuan-Ying Lee#include <linux/vmalloc.h> 26c1a15399SKieran Bingham 27f197d75fSKieran Bingham/* We need to stringify expanded macros so that they can be parsed */ 28c1a15399SKieran Bingham 29f197d75fSKieran Bingham#define STRING(x) #x 30f197d75fSKieran Bingham#define XSTRING(x) STRING(x) 31f197d75fSKieran Bingham 32f197d75fSKieran Bingham#define LX_VALUE(x) LX_##x = x 33f197d75fSKieran Bingham#define LX_GDBPARSED(x) LX_##x = gdb.parse_and_eval(XSTRING(x)) 34f197d75fSKieran Bingham 35f197d75fSKieran Bingham/* 36f197d75fSKieran Bingham * IS_ENABLED generates (a || b) which is not compatible with python 37f197d75fSKieran Bingham * We can only switch on configuration items we know are available 38f197d75fSKieran Bingham * Therefore - IS_BUILTIN() is more appropriate 39f197d75fSKieran Bingham */ 40f197d75fSKieran Bingham#define LX_CONFIG(x) LX_##x = IS_BUILTIN(x) 41f197d75fSKieran Bingham 42f197d75fSKieran Bingham/* The build system will take care of deleting everything above this marker */ 43f197d75fSKieran Bingham<!-- end-c-headers --> 44f197d75fSKieran Bingham 45f197d75fSKieran Binghamimport gdb 46c1a15399SKieran Bingham 478af055aeSFlorian FainelliLX_CONFIG(CONFIG_DEBUG_INFO_REDUCED) 488af055aeSFlorian Fainelli 49e7e6f462SLeonard Crestez/* linux/clk-provider.h */ 50ef7a77c6SFabiano Rosasif IS_BUILTIN(CONFIG_COMMON_CLK): 51e7e6f462SLeonard Crestez LX_GDBPARSED(CLK_GET_RATE_NOCACHE) 52e7e6f462SLeonard Crestez 53c1a15399SKieran Bingham/* linux/fs.h */ 546a59cb51SFlorian FainelliLX_GDBPARSED(SB_RDONLY) 556a59cb51SFlorian FainelliLX_GDBPARSED(SB_SYNCHRONOUS) 566a59cb51SFlorian FainelliLX_GDBPARSED(SB_MANDLOCK) 576a59cb51SFlorian FainelliLX_GDBPARSED(SB_DIRSYNC) 586a59cb51SFlorian FainelliLX_GDBPARSED(SB_NOATIME) 596a59cb51SFlorian FainelliLX_GDBPARSED(SB_NODIRATIME) 60c1a15399SKieran Bingham 61442284a8SStephen Boyd/* linux/htimer.h */ 62442284a8SStephen BoydLX_GDBPARSED(hrtimer_resolution) 63442284a8SStephen Boyd 64b0969d76SFlorian Fainelli/* linux/irq.h */ 65b0969d76SFlorian FainelliLX_GDBPARSED(IRQD_LEVEL) 66b0969d76SFlorian FainelliLX_GDBPARSED(IRQ_HIDDEN) 67b0969d76SFlorian Fainelli 68b4aff751SPankaj Raghav/* linux/module.h */ 6916501630SClément Légerif IS_BUILTIN(CONFIG_MODULES): 70b4aff751SPankaj Raghav LX_GDBPARSED(MOD_TEXT) 71fb40b053SKuan-Ying Lee LX_GDBPARSED(MOD_DATA) 72fb40b053SKuan-Ying Lee LX_GDBPARSED(MOD_RODATA) 73fb40b053SKuan-Ying Lee LX_GDBPARSED(MOD_RO_AFTER_INIT) 74b4aff751SPankaj Raghav 75c1a15399SKieran Bingham/* linux/mount.h */ 76c1a15399SKieran BinghamLX_VALUE(MNT_NOSUID) 77c1a15399SKieran BinghamLX_VALUE(MNT_NODEV) 78c1a15399SKieran BinghamLX_VALUE(MNT_NOEXEC) 79c1a15399SKieran BinghamLX_VALUE(MNT_NOATIME) 80c1a15399SKieran BinghamLX_VALUE(MNT_NODIRATIME) 81c1a15399SKieran BinghamLX_VALUE(MNT_RELATIME) 82821f7440SPeter Griffin 83442284a8SStephen Boyd/* linux/threads.h */ 84442284a8SStephen BoydLX_VALUE(NR_CPUS) 85442284a8SStephen Boyd 86821f7440SPeter Griffin/* linux/of_fdt.h> */ 87821f7440SPeter GriffinLX_VALUE(OF_DT_HEADER) 88821f7440SPeter Griffin 89b7235d6bSKieran Bingham/* linux/radix-tree.h */ 90b7235d6bSKieran BinghamLX_GDBPARSED(RADIX_TREE_ENTRY_MASK) 91b7235d6bSKieran BinghamLX_GDBPARSED(RADIX_TREE_INTERNAL_NODE) 92b7235d6bSKieran BinghamLX_GDBPARSED(RADIX_TREE_MAP_SIZE) 93b7235d6bSKieran BinghamLX_GDBPARSED(RADIX_TREE_MAP_SHIFT) 94b7235d6bSKieran BinghamLX_GDBPARSED(RADIX_TREE_MAP_MASK) 95b7235d6bSKieran Bingham 96852622bfSKuan-Ying Lee/* linux/vmalloc.h */ 97852622bfSKuan-Ying LeeLX_VALUE(VM_IOREMAP) 98852622bfSKuan-Ying LeeLX_VALUE(VM_ALLOC) 99852622bfSKuan-Ying LeeLX_VALUE(VM_MAP) 100852622bfSKuan-Ying LeeLX_VALUE(VM_USERMAP) 101852622bfSKuan-Ying LeeLX_VALUE(VM_DMA_COHERENT) 102852622bfSKuan-Ying Lee 1032f060190SKuan-Ying Lee/* linux/page_ext.h */ 1042f060190SKuan-Ying Leeif IS_BUILTIN(CONFIG_PAGE_OWNER): 1052f060190SKuan-Ying Lee LX_GDBPARSED(PAGE_EXT_OWNER) 1062f060190SKuan-Ying Lee LX_GDBPARSED(PAGE_EXT_OWNER_ALLOCATED) 1072f060190SKuan-Ying Lee 10879939c4aSKuan-Ying Lee/* linux/slab.h */ 10979939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_RED_ZONE) 11079939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_POISON) 11179939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_KMALLOC) 11279939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_HWCACHE_ALIGN) 11379939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_CACHE_DMA) 11479939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_CACHE_DMA32) 11579939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_STORE_USER) 11679939c4aSKuan-Ying LeeLX_GDBPARSED(SLAB_PANIC) 11779939c4aSKuan-Ying Lee 118821f7440SPeter Griffin/* Kernel Configs */ 119442284a8SStephen BoydLX_CONFIG(CONFIG_GENERIC_CLOCKEVENTS) 120442284a8SStephen BoydLX_CONFIG(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) 121442284a8SStephen BoydLX_CONFIG(CONFIG_HIGH_RES_TIMERS) 122442284a8SStephen BoydLX_CONFIG(CONFIG_NR_CPUS) 123821f7440SPeter GriffinLX_CONFIG(CONFIG_OF) 124442284a8SStephen BoydLX_CONFIG(CONFIG_TICK_ONESHOT) 125b0969d76SFlorian FainelliLX_CONFIG(CONFIG_GENERIC_IRQ_SHOW_LEVEL) 126b0969d76SFlorian FainelliLX_CONFIG(CONFIG_X86_LOCAL_APIC) 127b0969d76SFlorian FainelliLX_CONFIG(CONFIG_SMP) 128b0969d76SFlorian FainelliLX_CONFIG(CONFIG_X86_THERMAL_VECTOR) 129b0969d76SFlorian FainelliLX_CONFIG(CONFIG_X86_MCE_THRESHOLD) 130b0969d76SFlorian FainelliLX_CONFIG(CONFIG_X86_MCE_AMD) 131b0969d76SFlorian FainelliLX_CONFIG(CONFIG_X86_MCE) 132b0969d76SFlorian FainelliLX_CONFIG(CONFIG_X86_IO_APIC) 133b0969d76SFlorian Fainelli/* 134eb985b5dSKuan-Ying Lee * CONFIG_KVM can be "m" but it affects common code too. Use CONFIG_KVM_COMMON 135eb985b5dSKuan-Ying Lee * as a proxy for IS_ENABLED(CONFIG_KVM). 136eb985b5dSKuan-Ying Lee */ 137eb985b5dSKuan-Ying LeeLX_CONFIG_KVM = IS_BUILTIN(CONFIG_KVM_COMMON) 138eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_NUMA) 139eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_ARM64) 140eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_ARM64_4K_PAGES) 141eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_ARM64_16K_PAGES) 142*d3e5bab9SArnd BergmannLX_CONFIG(CONFIG_ARM64_64K_PAGES) 143eb985b5dSKuan-Ying Leeif IS_BUILTIN(CONFIG_ARM64): 144eb985b5dSKuan-Ying Lee LX_VALUE(CONFIG_ARM64_PA_BITS) 145eb985b5dSKuan-Ying Lee LX_VALUE(CONFIG_ARM64_VA_BITS) 146eb985b5dSKuan-Ying Lee LX_VALUE(CONFIG_PAGE_SHIFT) 147eb985b5dSKuan-Ying Lee LX_VALUE(CONFIG_ARCH_FORCE_MAX_ORDER) 148eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_SPARSEMEM) 149eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_SPARSEMEM_EXTREME) 150eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_SPARSEMEM_VMEMMAP) 151eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_KASAN) 152eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_KASAN_GENERIC) 153eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_KASAN_SW_TAGS) 154eb985b5dSKuan-Ying LeeLX_CONFIG(CONFIG_KASAN_HW_TAGS) 155eb985b5dSKuan-Ying Leeif IS_BUILTIN(CONFIG_KASAN_GENERIC) or IS_BUILTIN(CONFIG_KASAN_SW_TAGS): 156eb985b5dSKuan-Ying Lee LX_VALUE(CONFIG_KASAN_SHADOW_OFFSET) 1570e1b240aSKuan-Ying LeeLX_CONFIG(CONFIG_VMAP_STACK) 1582f060190SKuan-Ying Leeif IS_BUILTIN(CONFIG_NUMA): 15979939c4aSKuan-Ying Lee LX_VALUE(CONFIG_NODES_SHIFT) 16079939c4aSKuan-Ying LeeLX_CONFIG(CONFIG_DEBUG_VIRTUAL) 1616620999fSBen WolsiefferLX_CONFIG(CONFIG_STACKDEPOT) 162LX_CONFIG(CONFIG_PAGE_OWNER) 163LX_CONFIG(CONFIG_SLUB_DEBUG) 164LX_CONFIG(CONFIG_SLAB_FREELIST_HARDENED) 165LX_CONFIG(CONFIG_MMU) 166