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