Merge tag 'trace-v5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux...
[sfrench/cifs-2.6.git] / Documentation / kdump / vmcoreinfo.txt
1 ================================================================
2                         VMCOREINFO
3 ================================================================
4
5 ===========
6 What is it?
7 ===========
8
9 VMCOREINFO is a special ELF note section. It contains various
10 information from the kernel like structure size, page size, symbol
11 values, field offsets, etc. These data are packed into an ELF note
12 section and used by user-space tools like crash and makedumpfile to
13 analyze a kernel's memory layout.
14
15 ================
16 Common variables
17 ================
18
19 init_uts_ns.name.release
20 ------------------------
21
22 The version of the Linux kernel. Used to find the corresponding source
23 code from which the kernel has been built. For example, crash uses it to
24 find the corresponding vmlinux in order to process vmcore.
25
26 PAGE_SIZE
27 ---------
28
29 The size of a page. It is the smallest unit of data used by the memory
30 management facilities. It is usually 4096 bytes of size and a page is
31 aligned on 4096 bytes. Used for computing page addresses.
32
33 init_uts_ns
34 -----------
35
36 The UTS namespace which is used to isolate two specific elements of the
37 system that relate to the uname(2) system call. It is named after the
38 data structure used to store information returned by the uname(2) system
39 call.
40
41 User-space tools can get the kernel name, host name, kernel release
42 number, kernel version, architecture name and OS type from it.
43
44 node_online_map
45 ---------------
46
47 An array node_states[N_ONLINE] which represents the set of online nodes
48 in a system, one bit position per node number. Used to keep track of
49 which nodes are in the system and online.
50
51 swapper_pg_dir
52 -------------
53
54 The global page directory pointer of the kernel. Used to translate
55 virtual to physical addresses.
56
57 _stext
58 ------
59
60 Defines the beginning of the text section. In general, _stext indicates
61 the kernel start address. Used to convert a virtual address from the
62 direct kernel map to a physical address.
63
64 vmap_area_list
65 --------------
66
67 Stores the virtual area list. makedumpfile gets the vmalloc start value
68 from this variable and its value is necessary for vmalloc translation.
69
70 mem_map
71 -------
72
73 Physical addresses are translated to struct pages by treating them as
74 an index into the mem_map array. Right-shifting a physical address
75 PAGE_SHIFT bits converts it into a page frame number which is an index
76 into that mem_map array.
77
78 Used to map an address to the corresponding struct page.
79
80 contig_page_data
81 ----------------
82
83 Makedumpfile gets the pglist_data structure from this symbol, which is
84 used to describe the memory layout.
85
86 User-space tools use this to exclude free pages when dumping memory.
87
88 mem_section|(mem_section, NR_SECTION_ROOTS)|(mem_section, section_mem_map)
89 --------------------------------------------------------------------------
90
91 The address of the mem_section array, its length, structure size, and
92 the section_mem_map offset.
93
94 It exists in the sparse memory mapping model, and it is also somewhat
95 similar to the mem_map variable, both of them are used to translate an
96 address.
97
98 page
99 ----
100
101 The size of a page structure. struct page is an important data structure
102 and it is widely used to compute contiguous memory.
103
104 pglist_data
105 -----------
106
107 The size of a pglist_data structure. This value is used to check if the
108 pglist_data structure is valid. It is also used for checking the memory
109 type.
110
111 zone
112 ----
113
114 The size of a zone structure. This value is used to check if the zone
115 structure has been found. It is also used for excluding free pages.
116
117 free_area
118 ---------
119
120 The size of a free_area structure. It indicates whether the free_area
121 structure is valid or not. Useful when excluding free pages.
122
123 list_head
124 ---------
125
126 The size of a list_head structure. Used when iterating lists in a
127 post-mortem analysis session.
128
129 nodemask_t
130 ----------
131
132 The size of a nodemask_t type. Used to compute the number of online
133 nodes.
134
135 (page, flags|_refcount|mapping|lru|_mapcount|private|compound_dtor|
136        compound_order|compound_head)
137 -------------------------------------------------------------------
138
139 User-space tools compute their values based on the offset of these
140 variables. The variables are used when excluding unnecessary pages.
141
142 (pglist_data, node_zones|nr_zones|node_mem_map|node_start_pfn|node_
143               spanned_pages|node_id)
144 -------------------------------------------------------------------
145
146 On NUMA machines, each NUMA node has a pg_data_t to describe its memory
147 layout. On UMA machines there is a single pglist_data which describes the
148 whole memory.
149
150 These values are used to check the memory type and to compute the
151 virtual address for memory map.
152
153 (zone, free_area|vm_stat|spanned_pages)
154 ---------------------------------------
155
156 Each node is divided into a number of blocks called zones which
157 represent ranges within memory. A zone is described by a structure zone.
158
159 User-space tools compute required values based on the offset of these
160 variables.
161
162 (free_area, free_list)
163 ----------------------
164
165 Offset of the free_list's member. This value is used to compute the number
166 of free pages.
167
168 Each zone has a free_area structure array called free_area[MAX_ORDER].
169 The free_list represents a linked list of free page blocks.
170
171 (list_head, next|prev)
172 ----------------------
173
174 Offsets of the list_head's members. list_head is used to define a
175 circular linked list. User-space tools need these in order to traverse
176 lists.
177
178 (vmap_area, va_start|list)
179 --------------------------
180
181 Offsets of the vmap_area's members. They carry vmalloc-specific
182 information. Makedumpfile gets the start address of the vmalloc region
183 from this.
184
185 (zone.free_area, MAX_ORDER)
186 ---------------------------
187
188 Free areas descriptor. User-space tools use this value to iterate the
189 free_area ranges. MAX_ORDER is used by the zone buddy allocator.
190
191 log_first_idx
192 -------------
193
194 Index of the first record stored in the buffer log_buf. Used by
195 user-space tools to read the strings in the log_buf.
196
197 log_buf
198 -------
199
200 Console output is written to the ring buffer log_buf at index
201 log_first_idx. Used to get the kernel log.
202
203 log_buf_len
204 -----------
205
206 log_buf's length.
207
208 clear_idx
209 ---------
210
211 The index that the next printk() record to read after the last clear
212 command. It indicates the first record after the last SYSLOG_ACTION
213 _CLEAR, like issued by 'dmesg -c'. Used by user-space tools to dump
214 the dmesg log.
215
216 log_next_idx
217 ------------
218
219 The index of the next record to store in the buffer log_buf. Used to
220 compute the index of the current buffer position.
221
222 printk_log
223 ----------
224
225 The size of a structure printk_log. Used to compute the size of
226 messages, and extract dmesg log. It encapsulates header information for
227 log_buf, such as timestamp, syslog level, etc.
228
229 (printk_log, ts_nsec|len|text_len|dict_len)
230 -------------------------------------------
231
232 It represents field offsets in struct printk_log. User space tools
233 parse it and check whether the values of printk_log's members have been
234 changed.
235
236 (free_area.free_list, MIGRATE_TYPES)
237 ------------------------------------
238
239 The number of migrate types for pages. The free_list is described by the
240 array. Used by tools to compute the number of free pages.
241
242 NR_FREE_PAGES
243 -------------
244
245 On linux-2.6.21 or later, the number of free pages is in
246 vm_stat[NR_FREE_PAGES]. Used to get the number of free pages.
247
248 PG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_slab|PG_hwpoision
249 |PG_head_mask|PAGE_BUDDY_MAPCOUNT_VALUE(~PG_buddy)
250 |PAGE_OFFLINE_MAPCOUNT_VALUE(~PG_offline)
251 -----------------------------------------------------------------
252
253 Page attributes. These flags are used to filter various unnecessary for
254 dumping pages.
255
256 HUGETLB_PAGE_DTOR
257 -----------------
258
259 The HUGETLB_PAGE_DTOR flag denotes hugetlbfs pages. Makedumpfile
260 excludes these pages.
261
262 ======
263 x86_64
264 ======
265
266 phys_base
267 ---------
268
269 Used to convert the virtual address of an exported kernel symbol to its
270 corresponding physical address.
271
272 init_top_pgt
273 ------------
274
275 Used to walk through the whole page table and convert virtual addresses
276 to physical addresses. The init_top_pgt is somewhat similar to
277 swapper_pg_dir, but it is only used in x86_64.
278
279 pgtable_l5_enabled
280 ------------------
281
282 User-space tools need to know whether the crash kernel was in 5-level
283 paging mode.
284
285 node_data
286 ---------
287
288 This is a struct pglist_data array and stores all NUMA nodes
289 information. Makedumpfile gets the pglist_data structure from it.
290
291 (node_data, MAX_NUMNODES)
292 -------------------------
293
294 The maximum number of nodes in system.
295
296 KERNELOFFSET
297 ------------
298
299 The kernel randomization offset. Used to compute the page offset. If
300 KASLR is disabled, this value is zero.
301
302 KERNEL_IMAGE_SIZE
303 -----------------
304
305 Currently unused by Makedumpfile. Used to compute the module virtual
306 address by Crash.
307
308 sme_mask
309 --------
310
311 AMD-specific with SME support: it indicates the secure memory encryption
312 mask. Makedumpfile tools need to know whether the crash kernel was
313 encrypted. If SME is enabled in the first kernel, the crash kernel's
314 page table entries (pgd/pud/pmd/pte) contain the memory encryption
315 mask. This is used to remove the SME mask and obtain the true physical
316 address.
317
318 Currently, sme_mask stores the value of the C-bit position. If needed,
319 additional SME-relevant info can be placed in that variable.
320
321 For example:
322 [ misc          ][ enc bit  ][ other misc SME info       ]
323 0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_..._0000
324 63   59   55   51   47   43   39   35   31   27   ... 3
325
326 ======
327 x86_32
328 ======
329
330 X86_PAE
331 -------
332
333 Denotes whether physical address extensions are enabled. It has the cost
334 of a higher page table lookup overhead, and also consumes more page
335 table space per process. Used to check whether PAE was enabled in the
336 crash kernel when converting virtual addresses to physical addresses.
337
338 ====
339 ia64
340 ====
341
342 pgdat_list|(pgdat_list, MAX_NUMNODES)
343 -------------------------------------
344
345 pg_data_t array storing all NUMA nodes information. MAX_NUMNODES
346 indicates the number of the nodes.
347
348 node_memblk|(node_memblk, NR_NODE_MEMBLKS)
349 ------------------------------------------
350
351 List of node memory chunks. Filled when parsing the SRAT table to obtain
352 information about memory nodes. NR_NODE_MEMBLKS indicates the number of
353 node memory chunks.
354
355 These values are used to compute the number of nodes the crashed kernel used.
356
357 node_memblk_s|(node_memblk_s, start_paddr)|(node_memblk_s, size)
358 ----------------------------------------------------------------
359
360 The size of a struct node_memblk_s and the offsets of the
361 node_memblk_s's members. Used to compute the number of nodes.
362
363 PGTABLE_3|PGTABLE_4
364 -------------------
365
366 User-space tools need to know whether the crash kernel was in 3-level or
367 4-level paging mode. Used to distinguish the page table.
368
369 =====
370 ARM64
371 =====
372
373 VA_BITS
374 -------
375
376 The maximum number of bits for virtual addresses. Used to compute the
377 virtual memory ranges.
378
379 kimage_voffset
380 --------------
381
382 The offset between the kernel virtual and physical mappings. Used to
383 translate virtual to physical addresses.
384
385 PHYS_OFFSET
386 -----------
387
388 Indicates the physical address of the start of memory. Similar to
389 kimage_voffset, which is used to translate virtual to physical
390 addresses.
391
392 KERNELOFFSET
393 ------------
394
395 The kernel randomization offset. Used to compute the page offset. If
396 KASLR is disabled, this value is zero.
397
398 ====
399 arm
400 ====
401
402 ARM_LPAE
403 --------
404
405 It indicates whether the crash kernel supports large physical address
406 extensions. Used to translate virtual to physical addresses.
407
408 ====
409 s390
410 ====
411
412 lowcore_ptr
413 ----------
414
415 An array with a pointer to the lowcore of every CPU. Used to print the
416 psw and all registers information.
417
418 high_memory
419 -----------
420
421 Used to get the vmalloc_start address from the high_memory symbol.
422
423 (lowcore_ptr, NR_CPUS)
424 ----------------------
425
426 The maximum number of CPUs.
427
428 =======
429 powerpc
430 =======
431
432
433 node_data|(node_data, MAX_NUMNODES)
434 -----------------------------------
435
436 See above.
437
438 contig_page_data
439 ----------------
440
441 See above.
442
443 vmemmap_list
444 ------------
445
446 The vmemmap_list maintains the entire vmemmap physical mapping. Used
447 to get vmemmap list count and populated vmemmap regions info. If the
448 vmemmap address translation information is stored in the crash kernel,
449 it is used to translate vmemmap kernel virtual addresses.
450
451 mmu_vmemmap_psize
452 -----------------
453
454 The size of a page. Used to translate virtual to physical addresses.
455
456 mmu_psize_defs
457 --------------
458
459 Page size definitions, i.e. 4k, 64k, or 16M.
460
461 Used to make vtop translations.
462
463 vmemmap_backing|(vmemmap_backing, list)|(vmemmap_backing, phys)|
464 (vmemmap_backing, virt_addr)
465 ----------------------------------------------------------------
466
467 The vmemmap virtual address space management does not have a traditional
468 page table to track which virtual struct pages are backed by a physical
469 mapping. The virtual to physical mappings are tracked in a simple linked
470 list format.
471
472 User-space tools need to know the offset of list, phys and virt_addr
473 when computing the count of vmemmap regions.
474
475 mmu_psize_def|(mmu_psize_def, shift)
476 ------------------------------------
477
478 The size of a struct mmu_psize_def and the offset of mmu_psize_def's
479 member.
480
481 Used in vtop translations.
482
483 ==
484 sh
485 ==
486
487 node_data|(node_data, MAX_NUMNODES)
488 -----------------------------------
489
490 See above.
491
492 X2TLB
493 -----
494
495 Indicates whether the crashed kernel enabled SH extended mode.