Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/crash/defs.h
1 /* defs.h - core analysis suite 2 * 3 * Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc. 4 * Copyright (C) 2002-2020 David Anderson 5 * Copyright (C) 2002-2020 Red Hat, Inc. All rights reserved. 6 * Copyright (C) 2002 Silicon Graphics, Inc. 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 */ 18 19 #ifndef GDB_COMMON 20 21 #include <stdbool.h> 22 #include <stdio.h> 23 #include <stdarg.h> 24 #include <stdint.h> 25 #include <termios.h> 26 #include <unistd.h> 27 #include <sys/mman.h> 28 #include <setjmp.h> 29 #undef basename 30 #if !defined(__USE_GNU) 31 #define __USE_GNU 32 #include <string.h> 33 #undef __USE_GNU 34 #else 35 #include <string.h> 36 #endif 37 #include <fcntl.h> 38 #include <stdlib.h> 39 #include <signal.h> 40 #include <assert.h> 41 #include <errno.h> 42 #include <dirent.h> 43 #include <time.h> 44 #include <zlib.h> 45 #include <sys/types.h> 46 #include <sys/stat.h> 47 #include <sys/param.h> 48 #include <sys/wait.h> 49 #include <sys/time.h> 50 #include <execinfo.h> /* backtrace() */ 51 #include <regex.h> 52 #ifdef LZO 53 #include <lzo/lzo1x.h> 54 #endif 55 #ifdef SNAPPY 56 #include <snappy-c.h> 57 #endif 58 #ifdef ZSTD 59 #include <zstd.h> 60 #endif 61 62 #ifndef ATTRIBUTE_UNUSED 63 #define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 64 #endif 65 66 #undef TRUE 67 #undef FALSE 68 69 #define TRUE (1) 70 #define FALSE (0) 71 #define STR(x) #x 72 #ifndef offsetof 73 # define offsetof(TYPE, MEMBER) ((ulong)&((TYPE *)0)->MEMBER) 74 #endif 75 76 #if !defined(X86) && !defined(X86_64) && !defined(ALPHA) && !defined(PPC) && \ 77 !defined(IA64) && !defined(PPC64) && !defined(S390) && !defined(S390X) && \ 78 !defined(ARM) && !defined(ARM64) && !defined(MIPS) && !defined(MIPS64) && \ 79 !defined(RISCV64) && !defined(LOONGARCH64) && !defined(SPARC64) 80 #ifdef __alpha__ 81 #define ALPHA 82 #endif 83 #ifdef __i386__ 84 #define X86 85 #endif 86 #ifdef __powerpc64__ 87 #define PPC64 88 #else 89 #ifdef __powerpc__ 90 #define PPC 91 #endif 92 #endif 93 #ifdef __ia64__ 94 #define IA64 95 #endif 96 #ifdef __s390__ 97 #define S390 98 #endif 99 #ifdef __s390x__ 100 #define S390X 101 #endif 102 #ifdef __x86_64__ 103 #define X86_64 104 #endif 105 #ifdef __arm__ 106 #define ARM 107 #endif 108 #ifdef __aarch64__ 109 #define ARM64 110 #endif 111 #ifdef __mipsel__ 112 #ifndef __mips64 113 #define MIPS 114 #else 115 #define MIPS64 116 #endif 117 #endif 118 #ifdef __sparc_v9__ 119 #define SPARC64 120 #endif 121 #if defined(__riscv) && (__riscv_xlen == 64) 122 #define RISCV64 123 #endif 124 #ifdef __loongarch64 125 #define LOONGARCH64 126 #endif 127 #endif 128 129 #ifdef X86 130 #define NR_CPUS (256) 131 #endif 132 #ifdef X86_64 133 #define NR_CPUS (8192) 134 #endif 135 #ifdef ALPHA 136 #define NR_CPUS (64) 137 #endif 138 #ifdef PPC 139 #define NR_CPUS (32) 140 #endif 141 #ifdef IA64 142 #define NR_CPUS (4096) 143 #endif 144 #ifdef PPC64 145 #define NR_CPUS (8192) 146 #endif 147 #ifdef S390 148 #define NR_CPUS (512) 149 #endif 150 #ifdef S390X 151 #define NR_CPUS (512) 152 #endif 153 #ifdef ARM 154 #define NR_CPUS (32) 155 #endif 156 #ifdef ARM64 157 #define NR_CPUS (4096) /* TBD */ 158 #endif 159 #ifdef MIPS 160 #define NR_CPUS (32) 161 #endif 162 #ifdef MIPS64 163 #define NR_CPUS (256) 164 #endif 165 #ifdef SPARC64 166 #define NR_CPUS (4096) 167 #endif 168 #ifdef RISCV64 169 #define NR_CPUS (256) 170 #endif 171 #ifdef LOONGARCH64 172 #define NR_CPUS (256) 173 #endif 174 175 #define NR_DEVICE_DUMPS (64) 176 177 /* Some architectures require memory accesses to be aligned. */ 178 #if defined(SPARC64) 179 #define NEED_ALIGNED_MEM_ACCESS 180 #endif 181 182 #define BUFSIZE (1500) 183 #define NULLCHAR ('\0') 184 185 #define MAXARGS (100) /* max number of arguments to one function */ 186 #define MAXARGLEN (40) /* max length of argument */ 187 188 #define HIST_BLKSIZE (4096) 189 190 static inline int string_exists(char *s) { return (s ? TRUE : FALSE); } 191 #define STREQ(A, B) (string_exists((char *)A) && string_exists((char *)B) && \ 192 (strcmp((char *)(A), (char *)(B)) == 0)) 193 #define STRNEQ(A, B) (string_exists((char *)A) && string_exists((char *)B) && \ 194 (strncmp((char *)(A), (char *)(B), strlen((char *)(B))) == 0)) 195 #define BZERO(S, N) (memset(S, NULLCHAR, N)) 196 #define BCOPY(S, D, C) (memcpy(D, S, C)) 197 #define BNEG(S, N) (memset(S, 0xff, N)) 198 #define BEEP() fprintf(stderr, "%c", 0x7) 199 #define LASTCHAR(s) (s[strlen(s)-1]) 200 #define FIRSTCHAR(s) (s[0]) 201 #define QUOTED_STRING(s) ((FIRSTCHAR(s) == '"') && (LASTCHAR(s) == '"')) 202 #define SINGLE_QUOTED_STRING(s) ((FIRSTCHAR(s) == '\'') && (LASTCHAR(s) == '\'')) 203 #define PATHEQ(A, B) ((A) && (B) && (pathcmp((char *)(A), (char *)(B)) == 0)) 204 205 #ifdef roundup 206 #undef roundup 207 #endif 208 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 209 210 typedef uint64_t physaddr_t; 211 212 #define PADDR_NOT_AVAILABLE (0x1ULL) 213 #define KCORE_USE_VADDR (-1ULL) 214 215 typedef unsigned long long int ulonglong; 216 struct number_option { 217 ulong num; 218 ulonglong ll_num; 219 ulong retflags; 220 }; 221 222 /* 223 * program_context flags 224 */ 225 #define LIVE_SYSTEM (0x1ULL) 226 #define TTY (0x2ULL) 227 #define RUNTIME (0x4ULL) 228 #define IN_FOREACH (0x8ULL) 229 #define MCLXCD (0x10ULL) 230 #define CMDLINE_IFILE (0x20ULL) 231 #define MFD_RDWR (0x40ULL) 232 #define KVMDUMP (0x80ULL) 233 #define SILENT (0x100ULL) 234 #define SADUMP (0x200ULL) 235 #define HASH (0x400ULL) 236 #define SCROLL (0x800ULL) 237 #define NO_CONSOLE (0x1000ULL) 238 #define RUNTIME_IFILE (0x2000ULL) 239 #define DROP_CORE (0x4000ULL) 240 #define LKCD (0x8000ULL) 241 #define GDB_INIT (0x10000ULL) 242 #define IN_GDB (0x20000ULL) 243 #define RCLOCAL_IFILE (0x40000ULL) 244 #define RCHOME_IFILE (0x80000ULL) 245 #define VMWARE_VMSS (0x100000ULL) 246 #define READLINE (0x200000ULL) 247 #define _SIGINT_ (0x400000ULL) 248 #define IN_RESTART (0x800000ULL) 249 #define KERNEL_DEBUG_QUERY (0x1000000ULL) 250 #define DEVMEM (0x2000000ULL) 251 #define REM_LIVE_SYSTEM (0x4000000ULL) 252 #define NAMELIST_LOCAL (0x8000000ULL) 253 #define LIVE_RAMDUMP (0x10000000ULL) 254 #define NAMELIST_SAVED (0x20000000ULL) 255 #define DUMPFILE_SAVED (0x40000000ULL) 256 #define UNLINK_NAMELIST (0x80000000ULL) 257 #define NAMELIST_UNLINKED (0x100000000ULL) 258 #define REM_MCLXCD (0x200000000ULL) 259 #define REM_LKCD (0x400000000ULL) 260 #define NAMELIST_NO_GZIP (0x800000000ULL) 261 #define UNLINK_MODULES (0x1000000000ULL) 262 #define S390D (0x2000000000ULL) 263 #define REM_S390D (0x4000000000ULL) 264 #define SYSRQ (0x8000000000ULL) 265 #define KDUMP (0x10000000000ULL) 266 #define NETDUMP (0x20000000000ULL) 267 #define REM_NETDUMP (0x40000000000ULL) 268 #define SYSMAP (0x80000000000ULL) 269 #define SYSMAP_ARG (0x100000000000ULL) 270 #define MEMMOD (0x200000000000ULL) 271 #define MODPRELOAD (0x400000000000ULL) 272 #define DISKDUMP (0x800000000000ULL) 273 #define DATADEBUG (0x1000000000000ULL) 274 #define FINDKERNEL (0x2000000000000ULL) 275 #define VERSION_QUERY (0x4000000000000ULL) 276 #define READNOW (0x8000000000000ULL) 277 #define NOCRASHRC (0x10000000000000ULL) 278 #define INIT_IFILE (0x20000000000000ULL) 279 #define XENDUMP (0x40000000000000ULL) 280 #define XEN_HYPER (0x80000000000000ULL) 281 #define XEN_CORE (0x100000000000000ULL) 282 #define PLEASE_WAIT (0x200000000000000ULL) 283 #define IFILE_ERROR (0x400000000000000ULL) 284 #define KERNTYPES (0x800000000000000ULL) 285 #define MINIMAL_MODE (0x1000000000000000ULL) 286 #define CRASHBUILTIN (0x2000000000000000ULL) 287 #define PRELOAD_EXTENSIONS \ 288 (0x4000000000000000ULL) 289 #define PROC_KCORE (0x8000000000000000ULL) 290 291 #define ACTIVE() (pc->flags & LIVE_SYSTEM) 292 #define LOCAL_ACTIVE() ((pc->flags & (LIVE_SYSTEM|LIVE_RAMDUMP)) == LIVE_SYSTEM) 293 #define DUMPFILE() (!(pc->flags & LIVE_SYSTEM)) 294 #define LIVE() (pc->flags2 & LIVE_DUMP || pc->flags & LIVE_SYSTEM) 295 #define MEMORY_SOURCES (NETDUMP|KDUMP|MCLXCD|LKCD|DEVMEM|S390D|MEMMOD|DISKDUMP|XENDUMP|CRASHBUILTIN|KVMDUMP|PROC_KCORE|SADUMP|VMWARE_VMSS|LIVE_RAMDUMP) 296 #define DUMPFILE_TYPES (DISKDUMP|NETDUMP|KDUMP|MCLXCD|LKCD|S390D|XENDUMP|KVMDUMP|SADUMP|VMWARE_VMSS|LIVE_RAMDUMP) 297 #define REMOTE() (pc->flags2 & REMOTE_DAEMON) 298 #define REMOTE_ACTIVE() (pc->flags & REM_LIVE_SYSTEM) 299 #define REMOTE_DUMPFILE() \ 300 (pc->flags & (REM_NETDUMP|REM_MCLXCD|REM_LKCD|REM_S390D)) 301 #define REMOTE_MEMSRC() (REMOTE_ACTIVE() || REMOTE_PAUSED() || REMOTE_DUMPFILE()) 302 #define LKCD_DUMPFILE() (pc->flags & (LKCD|REM_LKCD)) 303 #define NETDUMP_DUMPFILE() (pc->flags & (NETDUMP|REM_NETDUMP)) 304 #define DISKDUMP_DUMPFILE() (pc->flags & DISKDUMP) 305 #define KDUMP_DUMPFILE() (pc->flags & KDUMP) 306 #define XENDUMP_DUMPFILE() (pc->flags & XENDUMP) 307 #define XEN_HYPER_MODE() (pc->flags & XEN_HYPER) 308 #define SYSRQ_TASK(X) ((pc->flags & SYSRQ) && is_task_active(X)) 309 #define XEN_CORE_DUMPFILE() (pc->flags & XEN_CORE) 310 #define LKCD_KERNTYPES() (pc->flags & KERNTYPES) 311 #define KVMDUMP_DUMPFILE() (pc->flags & KVMDUMP) 312 #define SADUMP_DUMPFILE() (pc->flags & SADUMP) 313 #define VMSS_DUMPFILE() (pc->flags & VMWARE_VMSS) 314 #define QEMU_MEM_DUMP_NO_VMCOREINFO() \ 315 ((pc->flags2 & (QEMU_MEM_DUMP_ELF|QEMU_MEM_DUMP_COMPRESSED)) && !(pc->flags2 & VMCOREINFO)) 316 317 318 #define NETDUMP_LOCAL (0x1) /* netdump_data flags */ 319 #define NETDUMP_REMOTE (0x2) 320 #define VMCORE_VALID() (nd->flags & (NETDUMP_LOCAL|NETDUMP_REMOTE|KDUMP_LOCAL)) 321 #define NETDUMP_ELF32 (0x4) 322 #define NETDUMP_ELF64 (0x8) 323 #define PARTIAL_DUMP (0x10) /* netdump or diskdump */ 324 #define KDUMP_ELF32 (0x20) 325 #define KDUMP_ELF64 (0x40) 326 #define KDUMP_LOCAL (0x80) 327 #define KCORE_LOCAL (0x100) 328 #define KCORE_ELF32 (0x200) 329 #define KCORE_ELF64 (0x400) 330 #define QEMU_MEM_DUMP_KDUMP_BACKUP \ 331 (0x800) 332 #define KVMDUMP_LOCAL (0x1) 333 #define KVMDUMP_VALID() (kvm->flags & (KVMDUMP_LOCAL)) 334 335 #define DUMPFILE_FORMAT(flags) ((flags) & \ 336 (NETDUMP_ELF32|NETDUMP_ELF64|KDUMP_ELF32|KDUMP_ELF64)) 337 338 #define DISKDUMP_LOCAL (0x1) 339 #define KDUMP_CMPRS_LOCAL (0x2) 340 #define ERROR_EXCLUDED (0x4) 341 #define ZERO_EXCLUDED (0x8) 342 #define DUMPFILE_SPLIT (0x10) 343 #define NO_ELF_NOTES (0x20) 344 #define LZO_SUPPORTED (0x40) 345 #define SNAPPY_SUPPORTED (0x80) 346 #define ZSTD_SUPPORTED (0x100) 347 #define DISKDUMP_VALID() (dd->flags & DISKDUMP_LOCAL) 348 #define KDUMP_CMPRS_VALID() (dd->flags & KDUMP_CMPRS_LOCAL) 349 #define KDUMP_SPLIT() (dd->flags & DUMPFILE_SPLIT) 350 351 #define XENDUMP_LOCAL (0x1) 352 #define XENDUMP_VALID() (xd->flags & XENDUMP_LOCAL) 353 354 #define SADUMP_LOCAL (0x1) 355 #define SADUMP_DISKSET (0x2) 356 #define SADUMP_MEDIA (0x4) 357 #define SADUMP_ZERO_EXCLUDED (0x8) 358 #define SADUMP_KDUMP_BACKUP (0x10) 359 #define SADUMP_VALID() (sd->flags & SADUMP_LOCAL) 360 361 #define CRASHDEBUG(x) (pc->debug >= (x)) 362 363 #define CRASHDEBUG_SUSPEND(X) { pc->debug_save = pc->debug; pc->debug = X; } 364 #define CRASHDEBUG_RESTORE() { pc->debug = pc->debug_save; } 365 366 #define VERBOSE (0x1) 367 #define ADDRESS_SPECIFIED (0x2) 368 369 #define FAULT_ON_ERROR (0x1) 370 #define RETURN_ON_ERROR (0x2) 371 #define QUIET (0x4) 372 #define HEX_BIAS (0x8) 373 #define LONG_LONG (0x10) 374 #define RETURN_PARTIAL (0x20) 375 #define NO_DEVMEM_SWITCH (0x40) 376 377 #define SEEK_ERROR (-1) 378 #define READ_ERROR (-2) 379 #define WRITE_ERROR (-3) 380 #define PAGE_EXCLUDED (-4) 381 #define PAGE_INCOMPLETE (-5) 382 383 #define RESTART() (longjmp(pc->main_loop_env, 1)) 384 #define RESUME_FOREACH() (longjmp(pc->foreach_loop_env, 1)) 385 386 #define INFO (1) 387 #define FATAL (2) 388 #define FATAL_RESTART (3) 389 #define WARNING (4) 390 #define NOTE (5) 391 #define CONT (6) 392 #define FATAL_ERROR(x) (((x) == FATAL) || ((x) == FATAL_RESTART)) 393 394 #define CONSOLE_OFF(x) ((x) = console_off()) 395 #define CONSOLE_ON(x) (console_on(x)) 396 397 #define RADIX(X) (X) 398 399 #define NUM_HEX (0x1) 400 #define NUM_DEC (0x2) 401 #define NUM_EXPR (0x4) 402 #define NUM_ANY (NUM_HEX|NUM_DEC|NUM_EXPR) 403 404 /* 405 * program context redirect flags 406 */ 407 #define FROM_COMMAND_LINE (0x1) 408 #define FROM_INPUT_FILE (0x2) 409 #define REDIRECT_NOT_DONE (0x4) 410 #define REDIRECT_TO_PIPE (0x8) 411 #define REDIRECT_TO_STDPIPE (0x10) 412 #define REDIRECT_TO_FILE (0x20) 413 #define REDIRECT_FAILURE (0x40) 414 #define REDIRECT_SHELL_ESCAPE (0x80) 415 #define REDIRECT_SHELL_COMMAND (0x100) 416 #define REDIRECT_PID_KNOWN (0x200) 417 #define REDIRECT_MULTI_PIPE (0x400) 418 419 #define PIPE_OPTIONS (FROM_COMMAND_LINE | FROM_INPUT_FILE | REDIRECT_TO_PIPE | \ 420 REDIRECT_TO_STDPIPE | REDIRECT_TO_FILE) 421 422 #define DEFAULT_REDHAT_DEBUG_LOCATION "/usr/lib/debug/lib/modules" 423 424 #define MEMORY_DRIVER_MODULE "crash" 425 #define MEMORY_DRIVER_DEVICE "/dev/crash" 426 #define MEMORY_DRIVER_DEVICE_MODE (S_IFCHR|S_IRUSR) 427 428 /* 429 * structure definitions 430 */ 431 struct program_context { 432 char *program_name; /* this program's name */ 433 char *program_path; /* unadulterated argv[0] */ 434 char *program_version; /* this program's version */ 435 char *gdb_version; /* embedded gdb version */ 436 char *prompt; /* this program's prompt */ 437 unsigned long long flags; /* flags from above */ 438 char *namelist; /* linux namelist */ 439 char *dumpfile; /* dumpfile or /dev/kmem */ 440 char *live_memsrc; /* live memory driver */ 441 char *system_map; /* get symbol values from System.map */ 442 char *namelist_debug; /* namelist containing debug data */ 443 char *debuginfo_file; /* separate debuginfo file */ 444 char *memory_module; /* alternative to mem.c driver */ 445 char *memory_device; /* alternative to /dev/[k]mem device */ 446 char *machine_type; /* machine's processor type */ 447 char *editing_mode; /* readline vi or emacs */ 448 char *server; /* network daemon */ 449 char *server_memsrc; /* memory source on server */ 450 char *server_namelist; /* kernel namelist on server */ 451 int nfd; /* linux namelist fd */ 452 int mfd; /* /dev/mem fd */ 453 int kfd; /* /dev/kmem fd */ 454 int dfd; /* dumpfile fd */ 455 int confd; /* console fd */ 456 int sockfd; /* network daemon socket */ 457 ushort port; /* network daemon port */ 458 int rmfd; /* remote server memory source fd */ 459 int rkfd; /* remote server /dev/kmem fd */ 460 ulong program_pid; /* program pid */ 461 ulong server_pid; /* server pid */ 462 ulong rcvbufsize; /* client-side receive buffer size */ 463 char *home; /* user's home directory */ 464 char command_line[BUFSIZE]; /* possibly parsed input command line */ 465 char orig_line[BUFSIZE]; /* original input line */ 466 char *readline; /* pointer to last readline() return */ 467 char my_tty[10]; /* real tty name (shown by ps -ef) */ 468 ulong debug; /* level of debug */ 469 ulong debug_save; /* saved level for debug-suspend */ 470 char *console; /* current debug console device */ 471 char *redhat_debug_loc; /* location of matching debug objects */ 472 int pipefd[2]; /* output pipe file descriptors */ 473 FILE *nullfp; /* bitbucket */ 474 FILE *stdpipe; /* standard pipe for output */ 475 FILE *pipe; /* command line specified pipe */ 476 FILE *ofile; /* command line specified output file */ 477 FILE *ifile; /* command line specified input file */ 478 FILE *ifile_pipe; /* output pipe specified from file */ 479 FILE *ifile_ofile; /* output file specified from file */ 480 FILE *symfile; /* symbol table data file */ 481 FILE *symfile2; /* alternate access to above */ 482 FILE *tmpfile; /* tmpfile for selective data output */ 483 FILE *saved_fp; /* for printing while parsing tmpfile */ 484 FILE *tmp_fp; /* stored tmpfile pointer */ 485 char *input_file; /* input file specified at invocation */ 486 FILE *tmpfile2; /* tmpfile2 does not use save_fp! */ 487 int eoc_index; /* end of redirected command index */ 488 int scroll_command; /* default scroll command for output */ 489 #define SCROLL_NONE 0 490 #define SCROLL_LESS 1 491 #define SCROLL_MORE 2 492 #define SCROLL_CRASHPAGER 3 493 ulong redirect; /* per-cmd origin and output flags */ 494 pid_t stdpipe_pid; /* per-cmd standard output pipe's pid */ 495 pid_t pipe_pid; /* per-cmd output pipe's pid */ 496 pid_t pipe_shell_pid; /* per-cmd output pipe's shell pid */ 497 char pipe_command[BUFSIZE]; /* pipe command line */ 498 struct command_table_entry *cmd_table; /* linux/xen command table */ 499 char *curcmd; /* currently-executing command */ 500 char *lastcmd; /* previously-executed command */ 501 ulong cmdgencur; /* current command generation number */ 502 ulong curcmd_flags; /* general purpose per-command flag */ 503 #define XEN_MACHINE_ADDR (0x1) 504 #define REPEAT (0x2) 505 #define IDLE_TASK_SHOWN (0x4) 506 #define TASK_SPECIFIED (0x8) 507 #define MEMTYPE_UVADDR (0x10) 508 #define MEMTYPE_FILEADDR (0x20) 509 #define HEADER_PRINTED (0x40) 510 #define BAD_INSTRUCTION (0x80) 511 #define UD2A_INSTRUCTION (0x100) 512 #define IRQ_IN_USE (0x200) 513 #define NO_MODIFY (0x400) 514 #define IGNORE_ERRORS (0x800) 515 #define FROM_RCFILE (0x1000) 516 #define MEMTYPE_KVADDR (0x2000) 517 #define MOD_SECTIONS (0x4000) 518 #define MOD_READNOW (0x8000) 519 #define MM_STRUCT_FORCE (0x10000) 520 #define CPUMASK (0x20000) 521 #define PARTIAL_READ_OK (0x40000) 522 ulonglong curcmd_private; /* general purpose per-command info */ 523 int cur_gdb_cmd; /* current gdb command */ 524 int last_gdb_cmd; /* previously-executed gdb command */ 525 int sigint_cnt; /* number of ignored SIGINTs */ 526 struct gnu_request *cur_req; /* current gdb gnu_request */ 527 struct sigaction sigaction; /* general usage sigaction. */ 528 struct sigaction gdb_sigaction; /* gdb's SIGINT sigaction. */ 529 jmp_buf main_loop_env; /* longjmp target default */ 530 jmp_buf foreach_loop_env; /* longjmp target within foreach */ 531 struct termios termios_orig; /* non-raw settings */ 532 struct termios termios_raw; /* while gathering command input */ 533 int ncmds; /* number of commands in menu */ 534 char **cmdlist; /* current list of available commands */ 535 int cmdlistsz; /* space available in cmdlist */ 536 unsigned output_radix; /* current gdb output_radix */ 537 void *sbrk; /* current sbrk value */ 538 struct extension_table *curext; /* extension being loaded */ 539 int (*readmem)(int, void *, int, ulong, physaddr_t); /* memory access */ 540 int (*writemem)(int, void *, int, ulong, physaddr_t);/* memory access */ 541 ulong ifile_in_progress; /* original xxx_IFILE flags */ 542 off_t ifile_offset; /* current offset into input file */ 543 char *runtime_ifile_cmd; /* runtime command using input file */ 544 char *kvmdump_mapfile; /* storage of physical to file offsets */ 545 ulonglong flags2; /* flags overrun */ 546 #define FLAT (0x01ULL) 547 #define ELF_NOTES (0x02ULL) 548 #define GET_OSRELEASE (0x04ULL) 549 #define REMOTE_DAEMON (0x08ULL) 550 #define ERASEINFO_DATA (0x10ULL) 551 #define GDB_CMD_MODE (0x20ULL) 552 #define LIVE_DUMP (0x40ULL) 553 #define FLAT_FORMAT() (pc->flags2 & FLAT) 554 #define ELF_NOTES_VALID() (pc->flags2 & ELF_NOTES) 555 #define RADIX_OVERRIDE (0x80ULL) 556 #define QEMU_MEM_DUMP_ELF (0x100ULL) 557 #define GET_LOG (0x200ULL) 558 #define VMCOREINFO (0x400ULL) 559 #define ALLOW_FP (0x800ULL) 560 #define REM_PAUSED_F (0x1000ULL) 561 #define RAMDUMP (0x2000ULL) 562 #define REMOTE_PAUSED() (pc->flags2 & REM_PAUSED_F) 563 #define OFFLINE_HIDE (0x4000ULL) 564 #define INCOMPLETE_DUMP (0x8000ULL) 565 #define is_incomplete_dump() (pc->flags2 & INCOMPLETE_DUMP) 566 #define QEMU_MEM_DUMP_COMPRESSED (0x10000ULL) 567 #define SNAP (0x20000ULL) 568 #define EXCLUDED_VMEMMAP (0x40000ULL) 569 #define is_excluded_vmemmap() (pc->flags2 & EXCLUDED_VMEMMAP) 570 #define MEMSRC_LOCAL (0x80000ULL) 571 #define REDZONE (0x100000ULL) 572 #define VMWARE_VMSS_GUESTDUMP (0x200000ULL) 573 char *cleanup; 574 char *namelist_orig; 575 char *namelist_debug_orig; 576 FILE *args_ifile; /* per-command args input file */ 577 void (*cmd_cleanup)(void *); /* per-command cleanup function */ 578 void *cmd_cleanup_arg; /* optional cleanup function argument */ 579 ulong scope; /* optional text context address */ 580 ulong nr_hash_queues; /* hash queue head count */ 581 char *(*read_vmcoreinfo)(const char *); 582 FILE *error_fp; /* error() message direction */ 583 char *error_path; /* stderr path information */ 584 }; 585 586 #define READMEM pc->readmem 587 588 typedef void (*cmd_func_t)(void); 589 590 struct command_table_entry { /* one for each command in menu */ 591 char *name; 592 cmd_func_t func; 593 char **help_data; 594 ulong flags; 595 }; 596 597 struct args_input_file { 598 int index; 599 int args_used; 600 int is_gdb_cmd; 601 int in_expression; 602 int start; 603 int resume; 604 char *fileptr; 605 }; 606 607 #define REFRESH_TASK_TABLE (0x1) /* command_table_entry flags */ 608 #define HIDDEN_COMMAND (0x2) 609 #define CLEANUP (0x4) /* for extensions only */ 610 #define MINIMAL (0x8) 611 612 /* 613 * A linked list of extension table structures keeps track of the current 614 * set of shared library extensions. 615 */ 616 struct extension_table { 617 void *handle; /* handle from dlopen() */ 618 char *filename; /* name of shared library */ 619 struct command_table_entry *command_table; /* list of commands */ 620 ulong flags; /* registration flags */ 621 struct extension_table *next, *prev; /* bookkeeping */ 622 }; 623 624 #define REGISTERED (0x1) /* extension_table flags */ 625 #define DUPLICATE_COMMAND_NAME (0x2) 626 #define NO_MINIMAL_COMMANDS (0x4) 627 628 struct new_utsname { 629 char sysname[65]; 630 char nodename[65]; 631 char release[65]; 632 char version[65]; 633 char machine[65]; 634 char domainname[65]; 635 }; 636 637 #define NO_MODULE_ACCESS (0x1) 638 #define TVEC_BASES_V1 (0x2) 639 #define GCC_3_2 (0x4) 640 #define GCC_3_2_3 (0x8) 641 #define GCC_2_96 (0x10) 642 #define RA_SEEK (0x20) 643 #define NO_RA_SEEK (0x40) 644 #define KALLSYMS_V1 (0x80) 645 #define NO_KALLSYMS (0x100) 646 #define PER_CPU_OFF (0x200) 647 #define SMP (0x400) 648 #define GCC_3_3_2 (0x800) 649 #define KMOD_V1 (0x1000) 650 #define KMOD_V2 (0x2000) 651 #define KALLSYMS_V2 (0x2000) 652 #define TVEC_BASES_V2 (0x4000) 653 #define GCC_3_3_3 (0x8000) 654 #define USE_OLD_BT (0x10000) 655 #define USE_OPT_BT (0x10000) 656 #define ARCH_XEN (0x20000) 657 #define NO_IKCONFIG (0x40000) 658 #define DWARF_UNWIND (0x80000) 659 #define NO_DWARF_UNWIND (0x100000) 660 #define DWARF_UNWIND_MEMORY (0x200000) 661 #define DWARF_UNWIND_EH_FRAME (0x400000) 662 #define DWARF_UNWIND_CAPABLE (DWARF_UNWIND_MEMORY|DWARF_UNWIND_EH_FRAME) 663 #define DWARF_UNWIND_MODULES (0x800000) 664 #define BUGVERBOSE_OFF (0x1000000) 665 #define RELOC_SET (0x2000000) 666 #define RELOC_FORCE (0x4000000) 667 #define ARCH_OPENVZ (0x8000000) 668 #define ARCH_PVOPS (0x10000000) 669 #define PRE_KERNEL_INIT (0x20000000) 670 #define ARCH_PVOPS_XEN (0x40000000) 671 672 #define GCC_VERSION_DEPRECATED (GCC_3_2|GCC_3_2_3|GCC_2_96|GCC_3_3_2|GCC_3_3_3) 673 674 /* flags2 */ 675 #define RELOC_AUTO (0x1ULL) 676 #define KASLR (0x2ULL) 677 #define KASLR_CHECK (0x4ULL) 678 #define GET_TIMESTAMP (0x8ULL) 679 #define TVEC_BASES_V3 (0x10ULL) 680 #define TIMER_BASES (0x20ULL) 681 #define IRQ_DESC_TREE_RADIX (0x40ULL) 682 #define IRQ_DESC_TREE_XARRAY (0x80ULL) 683 #define KMOD_PAX (0x100ULL) 684 #define KMOD_MEMORY (0x200ULL) 685 #define IRQ_DESC_TREE_MAPLE (0x400ULL) 686 687 #define XEN() (kt->flags & ARCH_XEN) 688 #define OPENVZ() (kt->flags & ARCH_OPENVZ) 689 #define PVOPS() (kt->flags & ARCH_PVOPS) 690 #define PVOPS_XEN() (kt->flags & ARCH_PVOPS_XEN) 691 692 #define PAX_MODULE_SPLIT() (kt->flags2 & KMOD_PAX) 693 #define MODULE_MEMORY() (kt->flags2 & KMOD_MEMORY) 694 695 #define XEN_MACHINE_TO_MFN(m) ((ulonglong)(m) >> PAGESHIFT()) 696 #define XEN_PFN_TO_PSEUDO(p) ((ulonglong)(p) << PAGESHIFT()) 697 698 #define XEN_MFN_NOT_FOUND (~0UL) 699 #define XEN_PFNS_PER_PAGE (PAGESIZE()/sizeof(ulong)) 700 #define XEN_FOREIGN_FRAME (1UL << (BITS()-1)) 701 702 #define XEN_MACHADDR_NOT_FOUND (~0ULL) 703 704 #define XEN_P2M_PER_PAGE (PAGESIZE() / sizeof(unsigned long)) 705 #define XEN_P2M_MID_PER_PAGE (PAGESIZE() / sizeof(unsigned long *)) 706 #define XEN_P2M_TOP_PER_PAGE (PAGESIZE() / sizeof(unsigned long **)) 707 708 struct kernel_table { /* kernel data */ 709 ulong flags; 710 ulong stext; 711 ulong etext; 712 ulong stext_init; 713 ulong etext_init; 714 ulong init_begin; 715 ulong init_end; 716 ulong end; 717 int cpus; 718 char *cpus_override; 719 void (*display_bh)(void); 720 ulong module_list; 721 ulong kernel_module; 722 int mods_installed; 723 struct timespec date; 724 char proc_version[BUFSIZE]; 725 struct new_utsname utsname; 726 uint kernel_version[3]; 727 uint gcc_version[3]; 728 int runq_siblings; 729 int kernel_NR_CPUS; 730 long __per_cpu_offset[NR_CPUS]; 731 long *__rq_idx; 732 long *__cpu_idx; 733 ulong *cpu_flags; 734 #define POSSIBLE (0x1) 735 #define PRESENT (0x2) 736 #define ONLINE (0x4) 737 #define NMI (0x8) 738 #define POSSIBLE_MAP (POSSIBLE) 739 #define PRESENT_MAP (PRESENT) 740 #define ONLINE_MAP (ONLINE) 741 #define ACTIVE_MAP (0x10) 742 int BUG_bytes; 743 ulong xen_flags; 744 #define WRITABLE_PAGE_TABLES (0x1) 745 #define SHADOW_PAGE_TABLES (0x2) 746 #define CANONICAL_PAGE_TABLES (0x4) 747 #define XEN_SUSPEND (0x8) 748 char *m2p_page; 749 ulong phys_to_machine_mapping; 750 ulong p2m_table_size; 751 #define P2M_MAPPING_CACHE (512) 752 struct p2m_mapping_cache { 753 ulong mapping; 754 ulong pfn; 755 ulong start; 756 ulong end; 757 } p2m_mapping_cache[P2M_MAPPING_CACHE]; 758 #define P2M_MAPPING_PAGE_PFN(c) \ 759 (PVOPS_XEN() ? kt->p2m_mapping_cache[c].pfn : \ 760 (((kt->p2m_mapping_cache[c].mapping - kt->phys_to_machine_mapping)/PAGESIZE()) \ 761 * XEN_PFNS_PER_PAGE)) 762 ulong last_mapping_read; 763 ulong p2m_cache_index; 764 ulong p2m_pages_searched; 765 ulong p2m_mfn_cache_hits; 766 ulong p2m_page_cache_hits; 767 ulong relocate; 768 char *module_tree; 769 struct pvops_xen_info { 770 int p2m_top_entries; 771 ulong p2m_top; 772 ulong p2m_mid_missing; 773 ulong p2m_missing; 774 } pvops_xen; 775 int highest_irq; 776 #define IKCONFIG_AVAIL 0x1 /* kernel contains ikconfig data */ 777 #define IKCONFIG_LOADED 0x2 /* ikconfig data is currently loaded */ 778 int ikconfig_flags; 779 int ikconfig_ents; 780 char *hypervisor; 781 struct vmcoreinfo_data { 782 ulong log_buf_SYMBOL; 783 ulong log_end_SYMBOL; 784 ulong log_buf_len_SYMBOL; 785 ulong logged_chars_SYMBOL; 786 ulong log_first_idx_SYMBOL; 787 ulong log_next_idx_SYMBOL; 788 long log_SIZE; 789 long log_ts_nsec_OFFSET; 790 long log_len_OFFSET; 791 long log_text_len_OFFSET; 792 long log_dict_len_OFFSET; 793 ulong phys_base_SYMBOL; 794 ulong _stext_SYMBOL; 795 } vmcoreinfo; 796 ulonglong flags2; 797 char *source_tree; 798 struct timespec boot_date; 799 }; 800 801 /* 802 * Aid for the two versions of the kernel's module list linkage. 803 */ 804 #define NEXT_MODULE(next_module, modbuf) \ 805 { \ 806 switch (kt->flags & (KMOD_V1|KMOD_V2)) \ 807 { \ 808 case KMOD_V1: \ 809 next_module = ULONG(modbuf + OFFSET(module_next)); \ 810 break; \ 811 case KMOD_V2: \ 812 next_module = ULONG(modbuf + OFFSET(module_list)); \ 813 if (next_module != kt->kernel_module) \ 814 next_module -= OFFSET(module_list); \ 815 break; \ 816 } \ 817 } 818 819 #define THIS_KERNEL_VERSION ((kt->kernel_version[0] << 24) + \ 820 (kt->kernel_version[1] << 16) + \ 821 (kt->kernel_version[2])) 822 #define LINUX(x,y,z) (((uint)(x) << 24) + ((uint)(y) << 16) + (uint)(z)) 823 824 #define THIS_GCC_VERSION ((kt->gcc_version[0] << 16) + \ 825 (kt->gcc_version[1] << 8) + \ 826 (kt->gcc_version[2])) 827 #define GCC(x,y,z) (((uint)(x) << 16) + ((uint)(y) << 8) + (uint)(z)) 828 829 #define IS_KERNEL_STATIC_TEXT(x) (((ulong)(x) >= kt->stext) && \ 830 ((ulong)(x) < kt->etext)) 831 832 #define TASK_COMM_LEN 16 /* task command name length including NULL */ 833 834 struct task_context { /* context stored for each task */ 835 ulong task; 836 ulong thread_info; 837 ulong pid; 838 char comm[TASK_COMM_LEN+1]; 839 int processor; 840 ulong ptask; 841 ulong mm_struct; 842 struct task_context *tc_next; 843 }; 844 845 struct tgid_context { /* tgid and task stored for each task */ 846 ulong tgid; 847 ulong task; 848 long rss_cache; 849 }; 850 851 struct task_table { /* kernel/local task table data */ 852 struct task_context *current; 853 struct task_context *context_array; 854 void (*refresh_task_table)(void); 855 ulong flags; 856 ulong task_start; 857 ulong task_end; 858 void *task_local; 859 int max_tasks; 860 int nr_threads; 861 ulong running_tasks; 862 ulong retries; 863 ulong panicmsg; 864 int panic_processor; 865 ulong *idle_threads; 866 ulong *panic_threads; 867 ulong *active_set; 868 ulong *panic_ksp; 869 ulong *hardirq_ctx; 870 ulong *hardirq_tasks; 871 ulong *softirq_ctx; 872 ulong *softirq_tasks; 873 ulong panic_task; 874 ulong this_task; 875 int pidhash_len; 876 ulong pidhash_addr; 877 ulong last_task_read; 878 ulong last_thread_info_read; 879 ulong last_mm_read; 880 char *task_struct; 881 char *thread_info; 882 char *mm_struct; 883 ulong init_pid_ns; 884 struct tgid_context *tgid_array; 885 struct tgid_context *last_tgid; 886 ulong tgid_searches; 887 ulong tgid_cache_hits; 888 long filepages; 889 long anonpages; 890 ulong stack_end_magic; 891 ulong pf_kthread; 892 ulong pid_radix_tree; 893 int callbacks; 894 struct task_context **context_by_task; /* task_context sorted by task addr */ 895 ulong pid_xarray; 896 long shmempages; 897 }; 898 899 #define TASK_INIT_DONE (0x1) 900 #define TASK_ARRAY_EXISTS (0x2) 901 #define PANIC_TASK_NOT_FOUND (0x4) 902 #define TASK_REFRESH (0x8) 903 #define TASK_REFRESH_OFF (0x10) 904 #define PANIC_KSP (0x20) 905 #define ACTIVE_SET (0x40) 906 #define POPULATE_PANIC (0x80) 907 #define PIDHASH (0x100) 908 #define PID_HASH (0x200) 909 #define THREAD_INFO (0x400) 910 #define IRQSTACKS (0x800) 911 #define TIMESPEC (0x1000) 912 #define NO_TIMESPEC (0x2000) 913 #define ACTIVE_ONLY (0x4000) 914 #define START_TIME_NSECS (0x8000) 915 #define THREAD_INFO_IN_TASK (0x10000) 916 #define PID_RADIX_TREE (0x20000) 917 #define INDEXED_CONTEXTS (0x40000) 918 #define PID_XARRAY (0x80000) 919 920 #define TASK_SLUSH (20) 921 922 #define NO_PROC_ID 0xFF /* No processor magic marker (from kernel) */ 923 924 /* 925 * Global "tt" points to task_table 926 */ 927 #define CURRENT_CONTEXT() (tt->current) 928 #define CURRENT_TASK() (tt->current->task) 929 #define CURRENT_PID() (tt->current->pid) 930 #define CURRENT_COMM() (tt->current->comm) 931 #define RUNNING_TASKS() (tt->running_tasks) 932 #define FIRST_CONTEXT() (tt->context_array) 933 934 #define NO_PID ((ulong)-1) 935 #define NO_TASK (0) 936 937 #define IS_TASK_ADDR(X) (machdep->is_task_addr(X)) 938 #define GET_STACKBASE(X) (machdep->get_stackbase(X)) 939 #define GET_STACKTOP(X) (machdep->get_stacktop(X)) 940 #define STACKSIZE() (machdep->stacksize) 941 #define LONGS_PER_STACK (machdep->stacksize/sizeof(ulong)) 942 943 #define INSTACK(X,BT) \ 944 (((ulong)(X) >= (BT)->stackbase) && ((ulong)(X) < (BT)->stacktop)) 945 946 #define ALIGNED_STACK_OFFSET(task) ((ulong)(task) & (STACKSIZE()-1)) 947 948 #define BITS() (machdep->bits) 949 #define BITS32() (machdep->bits == 32) 950 #define BITS64() (machdep->bits == 64) 951 #define IS_KVADDR(X) (machdep->is_kvaddr(X)) 952 #define IS_UVADDR(X,C) (machdep->is_uvaddr(X,C)) 953 954 #define PID_ALIVE(x) (kill(x, 0) == 0) 955 956 struct kernel_list_head { 957 struct kernel_list_head *next, *prev; 958 }; 959 960 struct stack_hook { 961 ulong esp; 962 ulong eip; 963 }; 964 965 struct bt_info { 966 ulong task; 967 ulonglong flags; 968 ulong instptr; 969 ulong stkptr; 970 ulong bptr; 971 ulong stackbase; 972 ulong stacktop; 973 char *stackbuf; 974 struct task_context *tc; 975 struct stack_hook *hp; 976 struct stack_hook *textlist; 977 struct reference *ref; 978 ulong frameptr; 979 char *call_target; 980 void *machdep; 981 ulong debug; 982 ulong eframe_ip; 983 ulong radix; 984 ulong *cpumask; 985 bool need_free; 986 }; 987 988 #define STACK_OFFSET_TYPE(OFF) \ 989 (((ulong)(OFF) > STACKSIZE()) ? \ 990 (ulong)((ulong)(OFF) - (ulong)(bt->stackbase)) : (ulong)(OFF)) 991 992 #define GET_STACK_ULONG(OFF) \ 993 *((ulong *)((char *)(&bt->stackbuf[(ulong)(STACK_OFFSET_TYPE(OFF))]))) 994 995 #define GET_STACK_DATA(OFF, LOC, SZ) memcpy((void *)(LOC), \ 996 (void *)(&bt->stackbuf[(ulong)STACK_OFFSET_TYPE(OFF)]), (size_t)(SZ)) 997 998 struct machine_specific; /* uniquely defined below each machine's area */ 999 struct xendump_data; 1000 struct xen_kdump_data; 1001 1002 struct vaddr_range { 1003 ulong start; 1004 ulong end; 1005 ulong type; 1006 #define KVADDR_UNITY_MAP (1) 1007 #define KVADDR_VMALLOC (2) 1008 #define KVADDR_VMEMMAP (3) 1009 #define KVADDR_START_MAP (4) 1010 #define KVADDR_MODULES (5) 1011 #define MAX_KVADDR_RANGES KVADDR_MODULES 1012 }; 1013 1014 #define MAX_MACHDEP_ARGS 5 /* for --machdep/-m machine-specific args */ 1015 1016 struct machdep_table { 1017 ulong flags; 1018 ulong kvbase; 1019 ulong identity_map_base; 1020 uint pagesize; 1021 uint pageshift; 1022 ulonglong pagemask; 1023 ulong pageoffset; 1024 ulong stacksize; 1025 uint hz; 1026 ulong mhz; 1027 int bits; 1028 int nr_irqs; 1029 uint64_t memsize; 1030 int (*eframe_search)(struct bt_info *); 1031 void (*back_trace)(struct bt_info *); 1032 ulong (*processor_speed)(void); 1033 int (*uvtop)(struct task_context *, ulong, physaddr_t *, int); 1034 int (*kvtop)(struct task_context *, ulong, physaddr_t *, int); 1035 ulong (*get_task_pgd)(ulong); 1036 void (*dump_irq)(int); 1037 void (*get_stack_frame)(struct bt_info *, ulong *, ulong *); 1038 ulong (*get_stackbase)(ulong); 1039 ulong (*get_stacktop)(ulong); 1040 int (*translate_pte)(ulong, void *, ulonglong); 1041 uint64_t (*memory_size)(void); 1042 ulong (*vmalloc_start)(void); 1043 int (*is_task_addr)(ulong); 1044 int (*verify_symbol)(const char *, ulong, char); 1045 int (*dis_filter)(ulong, char *, unsigned int); 1046 int (*get_smp_cpus)(void); 1047 int (*is_kvaddr)(ulong); 1048 int (*is_uvaddr)(ulong, struct task_context *); 1049 int (*verify_paddr)(uint64_t); 1050 void (*cmd_mach)(void); 1051 void (*init_kernel_pgd)(void); 1052 struct syment *(*value_to_symbol)(ulong, ulong *); 1053 struct line_number_hook { 1054 char *func; 1055 char **file; 1056 } *line_number_hooks; 1057 ulong last_pgd_read; 1058 ulong last_pud_read; 1059 ulong last_pmd_read; 1060 ulong last_ptbl_read; 1061 char *pgd; 1062 char *pud; 1063 char *pmd; 1064 char *ptbl; 1065 int ptrs_per_pgd; 1066 char *cmdline_args[MAX_MACHDEP_ARGS]; 1067 struct machine_specific *machspec; 1068 ulong section_size_bits; 1069 ulong max_physmem_bits; 1070 ulong sections_per_root; 1071 int (*xendump_p2m_create)(struct xendump_data *); 1072 ulong (*xendump_panic_task)(struct xendump_data *); 1073 void (*get_xendump_regs)(struct xendump_data *, struct bt_info *, ulong *, ulong *); 1074 void (*clear_machdep_cache)(void); 1075 int (*xen_kdump_p2m_create)(struct xen_kdump_data *); 1076 int (*in_alternate_stack)(int, ulong); 1077 void (*dumpfile_init)(int, void *); 1078 void (*process_elf_notes)(void *, unsigned long); 1079 int (*get_kvaddr_ranges)(struct vaddr_range *); 1080 int (*verify_line_number)(ulong, ulong, ulong); 1081 void (*get_irq_affinity)(int); 1082 void (*show_interrupts)(int, ulong *); 1083 int (*is_page_ptr)(ulong, physaddr_t *); 1084 int (*get_current_task_reg)(int, const char *, int, void *, int); 1085 int (*is_cpu_prstatus_valid)(int cpu); 1086 }; 1087 1088 /* 1089 * Processor-common flags; processor-specific flags use the lower bits 1090 * as defined in their processor-specific files below. (see KSYMS_START defs). 1091 */ 1092 #define HWRESET (0x80000000) 1093 #define OMIT_FRAME_PTR (0x40000000) 1094 #define FRAMESIZE_DEBUG (0x20000000) 1095 #define MACHDEP_BT_TEXT (0x10000000) 1096 #define DEVMEMRD (0x8000000) 1097 #define INIT (0x4000000) 1098 #define VM_4_LEVEL (0x2000000) 1099 #define MCA (0x1000000) 1100 #define PAE (0x800000) 1101 #define VMEMMAP (0x400000) 1102 1103 extern struct machdep_table *machdep; 1104 1105 #ifndef HZ 1106 #define HZ sysconf(_SC_CLK_TCK) 1107 #endif 1108 1109 #define IS_LAST_PGD_READ(pgd) ((ulong)(pgd) == machdep->last_pgd_read) 1110 #define IS_LAST_PMD_READ(pmd) ((ulong)(pmd) == machdep->last_pmd_read) 1111 #define IS_LAST_PTBL_READ(ptbl) ((ulong)(ptbl) == machdep->last_ptbl_read) 1112 #define IS_LAST_PUD_READ(pud) ((ulong)(pud) == machdep->last_pud_read) 1113 1114 #define FILL_PGD(PGD, TYPE, SIZE) \ 1115 if (!IS_LAST_PGD_READ(PGD)) { \ 1116 readmem((ulonglong)((ulong)(PGD)), TYPE, machdep->pgd, \ 1117 SIZE, "pgd page", FAULT_ON_ERROR); \ 1118 machdep->last_pgd_read = (ulong)(PGD); \ 1119 } 1120 1121 #define FILL_PUD(PUD, TYPE, SIZE) \ 1122 if (!IS_LAST_PUD_READ(PUD)) { \ 1123 readmem((ulonglong)((ulong)(PUD)), TYPE, machdep->pud, \ 1124 SIZE, "pud page", FAULT_ON_ERROR); \ 1125 machdep->last_pud_read = (ulong)(PUD); \ 1126 } 1127 1128 #define FILL_PMD(PMD, TYPE, SIZE) \ 1129 if (!IS_LAST_PMD_READ(PMD)) { \ 1130 readmem((ulonglong)(PMD), TYPE, machdep->pmd, \ 1131 SIZE, "pmd page", FAULT_ON_ERROR); \ 1132 machdep->last_pmd_read = (ulong)(PMD); \ 1133 } 1134 1135 #define FILL_PTBL(PTBL, TYPE, SIZE) \ 1136 if (!IS_LAST_PTBL_READ(PTBL)) { \ 1137 readmem((ulonglong)(PTBL), TYPE, machdep->ptbl, \ 1138 SIZE, "page table", FAULT_ON_ERROR); \ 1139 machdep->last_ptbl_read = (ulong)(PTBL); \ 1140 } 1141 1142 #define SETUP_ENV (0) 1143 #define PRE_SYMTAB (1) 1144 #define PRE_GDB (2) 1145 #define POST_GDB (3) 1146 #define POST_INIT (4) 1147 #define POST_VM (5) 1148 #define LOG_ONLY (6) 1149 #define POST_RELOC (7) 1150 1151 #define FOREACH_BT (1) 1152 #define FOREACH_VM (2) 1153 #define FOREACH_TASK (3) 1154 #define FOREACH_SET (4) 1155 #define FOREACH_FILES (5) 1156 #define FOREACH_NET (6) 1157 #define FOREACH_TEST (7) 1158 #define FOREACH_VTOP (8) 1159 #define FOREACH_SIG (9) 1160 #define FOREACH_PS (10) 1161 1162 #define MAX_FOREACH_KEYWORDS (10) 1163 #define MAX_FOREACH_TASKS (50) 1164 #define MAX_FOREACH_PIDS (50) 1165 #define MAX_FOREACH_COMMS (50) 1166 #define MAX_FOREACH_ARGS (50) 1167 #define MAX_REGEX_ARGS (10) 1168 1169 #define FOREACH_CMD (0x1) 1170 #define FOREACH_r_FLAG (0x2) 1171 #define FOREACH_s_FLAG (0x4) 1172 #define FOREACH_S_FLAG (0x8) 1173 #define FOREACH_i_FLAG (0x10) 1174 #define FOREACH_e_FLAG (0x20) 1175 #define FOREACH_g_FLAG (0x40) 1176 #define FOREACH_l_FLAG (0x80) 1177 #define FOREACH_p_FLAG (0x100) 1178 #define FOREACH_t_FLAG (0x200) 1179 #define FOREACH_u_FLAG (0x400) 1180 #define FOREACH_m_FLAG (0x800) 1181 #define FOREACH_v_FLAG (0x1000) 1182 #define FOREACH_KERNEL (0x2000) 1183 #define FOREACH_USER (0x4000) 1184 #define FOREACH_SPECIFIED (0x8000) 1185 #define FOREACH_ACTIVE (0x10000) 1186 #define FOREACH_k_FLAG (0x20000) 1187 #define FOREACH_c_FLAG (0x40000) 1188 #define FOREACH_f_FLAG (0x80000) 1189 #define FOREACH_o_FLAG (0x100000) 1190 #define FOREACH_T_FLAG (0x200000) 1191 #define FOREACH_F_FLAG (0x400000) 1192 #define FOREACH_x_FLAG (0x800000) 1193 #define FOREACH_d_FLAG (0x1000000) 1194 #define FOREACH_STATE (0x2000000) 1195 #define FOREACH_a_FLAG (0x4000000) 1196 #define FOREACH_G_FLAG (0x8000000) 1197 #define FOREACH_F_FLAG2 (0x10000000) 1198 #define FOREACH_y_FLAG (0x20000000) 1199 #define FOREACH_GLEADER (0x40000000) 1200 1201 #define FOREACH_PS_EXCLUSIVE \ 1202 (FOREACH_g_FLAG|FOREACH_a_FLAG|FOREACH_t_FLAG|FOREACH_c_FLAG|FOREACH_p_FLAG|FOREACH_l_FLAG|FOREACH_r_FLAG|FOREACH_m_FLAG) 1203 1204 struct foreach_data { 1205 ulong flags; 1206 int keyword_array[MAX_FOREACH_KEYWORDS]; 1207 ulong task_array[MAX_FOREACH_TASKS]; 1208 char *comm_array[MAX_FOREACH_COMMS]; 1209 ulong pid_array[MAX_FOREACH_PIDS]; 1210 ulong arg_array[MAX_FOREACH_ARGS]; 1211 struct regex_info { 1212 char *pattern; 1213 regex_t regex; 1214 } regex_info[MAX_REGEX_ARGS]; 1215 const char *state; 1216 char *reference; 1217 int keys; 1218 int pids; 1219 int tasks; 1220 int comms; 1221 int args; 1222 int regexs; 1223 int policy; 1224 }; 1225 1226 struct reference { 1227 char *str; 1228 ulong cmdflags; 1229 ulong hexval; 1230 ulong decval; 1231 ulong ref1; 1232 ulong ref2; 1233 void *refp; 1234 }; 1235 1236 struct offset_table { /* stash of commonly-used offsets */ 1237 long list_head_next; /* add new entries to end of table */ 1238 long list_head_prev; 1239 long task_struct_pid; 1240 long task_struct_state; 1241 long task_struct_comm; 1242 long task_struct_mm; 1243 long task_struct_tss; 1244 long task_struct_thread; 1245 long task_struct_active_mm; 1246 long task_struct_tss_eip; 1247 long task_struct_tss_esp; 1248 long task_struct_tss_ksp; 1249 long task_struct_processor; 1250 long task_struct_p_pptr; 1251 long task_struct_parent; 1252 long task_struct_has_cpu; 1253 long task_struct_cpus_runnable; 1254 long task_struct_thread_eip; 1255 long task_struct_thread_esp; 1256 long task_struct_thread_ksp; 1257 long task_struct_next_task; 1258 long task_struct_files; 1259 long task_struct_fs; 1260 long task_struct_pidhash_next; 1261 long task_struct_next_run; 1262 long task_struct_flags; 1263 long task_struct_sig; 1264 long task_struct_signal; 1265 long task_struct_blocked; 1266 long task_struct_sigpending; 1267 long task_struct_pending; 1268 long task_struct_sigqueue; 1269 long task_struct_sighand; 1270 long task_struct_start_time; 1271 long task_struct_times; 1272 long task_struct_utime; 1273 long task_struct_stime; 1274 long task_struct_cpu; 1275 long task_struct_run_list; 1276 long task_struct_pgrp; 1277 long task_struct_tgid; 1278 long task_struct_namespace; 1279 long task_struct_pids; 1280 long task_struct_last_run; 1281 long task_struct_timestamp; 1282 long task_struct_thread_info; 1283 long task_struct_nsproxy; 1284 long task_struct_rlim; 1285 long thread_info_task; 1286 long thread_info_cpu; 1287 long thread_info_previous_esp; 1288 long thread_info_flags; 1289 long nsproxy_mnt_ns; 1290 long mnt_namespace_root; 1291 long mnt_namespace_list; 1292 long pid_link_pid; 1293 long pid_hash_chain; 1294 long hlist_node_next; 1295 long hlist_node_pprev; 1296 long pid_pid_chain; 1297 long thread_struct_eip; 1298 long thread_struct_esp; 1299 long thread_struct_ksp; 1300 long thread_struct_fph; 1301 long thread_struct_rip; 1302 long thread_struct_rsp; 1303 long thread_struct_rsp0; 1304 long tms_tms_utime; 1305 long tms_tms_stime; 1306 long signal_struct_count; 1307 long signal_struct_action; 1308 long signal_struct_shared_pending; 1309 long signal_struct_rlim; 1310 long k_sigaction_sa; 1311 long sigaction_sa_handler; 1312 long sigaction_sa_flags; 1313 long sigaction_sa_mask; 1314 long sigpending_head; 1315 long sigpending_list; 1316 long sigpending_signal; 1317 long signal_queue_next; 1318 long signal_queue_info; 1319 long sigqueue_next; 1320 long sigqueue_list; 1321 long sigqueue_info; 1322 long sighand_struct_action; 1323 long siginfo_si_signo; 1324 long thread_struct_cr3; 1325 long thread_struct_ptbr; 1326 long thread_struct_pg_tables; 1327 long switch_stack_r26; 1328 long switch_stack_b0; 1329 long switch_stack_ar_bspstore; 1330 long switch_stack_ar_pfs; 1331 long switch_stack_ar_rnat; 1332 long switch_stack_pr; 1333 long cpuinfo_ia64_proc_freq; 1334 long cpuinfo_ia64_unimpl_va_mask; 1335 long cpuinfo_ia64_unimpl_pa_mask; 1336 long device_node_type; 1337 long device_node_allnext; 1338 long device_node_properties; 1339 long property_name; 1340 long property_value; 1341 long property_next; 1342 long machdep_calls_setup_residual; 1343 long RESIDUAL_VitalProductData; 1344 long VPD_ProcessorHz; 1345 long bd_info_bi_intfreq; 1346 long hwrpb_struct_cycle_freq; 1347 long hwrpb_struct_processor_offset; 1348 long hwrpb_struct_processor_size; 1349 long percpu_struct_halt_PC; 1350 long percpu_struct_halt_ra; 1351 long percpu_struct_halt_pv; 1352 long mm_struct_mmap; 1353 long mm_struct_pgd; 1354 long mm_struct_rss; 1355 long mm_struct_anon_rss; 1356 long mm_struct_file_rss; 1357 long mm_struct_total_vm; 1358 long mm_struct_start_code; 1359 long mm_struct_arg_start; 1360 long mm_struct_arg_end; 1361 long mm_struct_env_start; 1362 long mm_struct_env_end; 1363 long vm_area_struct_vm_mm; 1364 long vm_area_struct_vm_next; 1365 long vm_area_struct_vm_end; 1366 long vm_area_struct_vm_start; 1367 long vm_area_struct_vm_flags; 1368 long vm_area_struct_vm_file; 1369 long vm_area_struct_vm_offset; 1370 long vm_area_struct_vm_pgoff; 1371 long vm_struct_addr; 1372 long vm_struct_size; 1373 long vm_struct_next; 1374 long module_size_of_struct; 1375 long module_next; 1376 long module_size; 1377 long module_name; 1378 long module_nsyms; 1379 long module_syms; 1380 long module_flags; 1381 long module_num_syms; 1382 long module_list; 1383 long module_gpl_syms; 1384 long module_num_gpl_syms; 1385 long module_module_core; 1386 long module_core_size; 1387 long module_core_text_size; 1388 long module_num_symtab; 1389 long module_symtab; 1390 long module_strtab; 1391 1392 long module_kallsyms_start; 1393 long kallsyms_header_sections; 1394 long kallsyms_header_section_off; 1395 long kallsyms_header_symbols; 1396 long kallsyms_header_symbol_off; 1397 long kallsyms_header_string_off; 1398 long kallsyms_symbol_section_off; 1399 long kallsyms_symbol_symbol_addr; 1400 long kallsyms_symbol_name_off; 1401 long kallsyms_section_start; 1402 long kallsyms_section_size; 1403 long kallsyms_section_name_off; 1404 1405 long page_next; 1406 long page_prev; 1407 long page_next_hash; 1408 long page_list; 1409 long page_list_next; 1410 long page_list_prev; 1411 long page_inode; 1412 long page_offset; 1413 long page_count; 1414 long page_flags; 1415 long page_mapping; 1416 long page_index; 1417 long page_buffers; 1418 long page_lru; 1419 long page_pte; 1420 long swap_info_struct_swap_file; 1421 long swap_info_struct_swap_vfsmnt; 1422 long swap_info_struct_flags; 1423 long swap_info_struct_swap_map; 1424 long swap_info_struct_swap_device; 1425 long swap_info_struct_prio; 1426 long swap_info_struct_max; 1427 long swap_info_struct_pages; 1428 long swap_info_struct_old_block_size; 1429 long block_device_bd_inode; 1430 long block_device_bd_list; 1431 long block_device_bd_disk; 1432 long irq_desc_t_status; 1433 long irq_desc_t_handler; 1434 long irq_desc_t_chip; 1435 long irq_desc_t_action; 1436 long irq_desc_t_depth; 1437 long irqdesc_action; 1438 long irqdesc_ctl; 1439 long irqdesc_level; 1440 long irqaction_handler; 1441 long irqaction_flags; 1442 long irqaction_mask; 1443 long irqaction_name; 1444 long irqaction_dev_id; 1445 long irqaction_next; 1446 long hw_interrupt_type_typename; 1447 long hw_interrupt_type_startup; 1448 long hw_interrupt_type_shutdown; 1449 long hw_interrupt_type_handle; 1450 long hw_interrupt_type_enable; 1451 long hw_interrupt_type_disable; 1452 long hw_interrupt_type_ack; 1453 long hw_interrupt_type_end; 1454 long hw_interrupt_type_set_affinity; 1455 long irq_chip_typename; 1456 long irq_chip_startup; 1457 long irq_chip_shutdown; 1458 long irq_chip_enable; 1459 long irq_chip_disable; 1460 long irq_chip_ack; 1461 long irq_chip_end; 1462 long irq_chip_set_affinity; 1463 long irq_chip_mask; 1464 long irq_chip_mask_ack; 1465 long irq_chip_unmask; 1466 long irq_chip_eoi; 1467 long irq_chip_retrigger; 1468 long irq_chip_set_type; 1469 long irq_chip_set_wake; 1470 long irq_cpustat_t___softirq_active; 1471 long irq_cpustat_t___softirq_mask; 1472 long fdtable_max_fds; 1473 long fdtable_max_fdset; 1474 long fdtable_open_fds; 1475 long fdtable_fd; 1476 long files_struct_fdt; 1477 long files_struct_max_fds; 1478 long files_struct_max_fdset; 1479 long files_struct_open_fds; 1480 long files_struct_fd; 1481 long files_struct_open_fds_init; 1482 long file_f_dentry; 1483 long file_f_vfsmnt; 1484 long file_f_count; 1485 long file_f_path; 1486 long path_mnt; 1487 long path_dentry; 1488 long fs_struct_root; 1489 long fs_struct_pwd; 1490 long fs_struct_rootmnt; 1491 long fs_struct_pwdmnt; 1492 long dentry_d_inode; 1493 long dentry_d_parent; 1494 long dentry_d_name; 1495 long dentry_d_covers; 1496 long dentry_d_iname; 1497 long qstr_len; 1498 long qstr_name; 1499 long inode_i_mode; 1500 long inode_i_op; 1501 long inode_i_sb; 1502 long inode_u; 1503 long inode_i_flock; 1504 long inode_i_fop; 1505 long inode_i_mapping; 1506 long address_space_nrpages; 1507 long vfsmount_mnt_next; 1508 long vfsmount_mnt_devname; 1509 long vfsmount_mnt_dirname; 1510 long vfsmount_mnt_sb; 1511 long vfsmount_mnt_list; 1512 long vfsmount_mnt_mountpoint; 1513 long vfsmount_mnt_parent; 1514 long namespace_root; 1515 long namespace_list; 1516 long super_block_s_dirty; 1517 long super_block_s_type; 1518 long super_block_s_files; 1519 long file_system_type_name; 1520 long nlm_file_f_file; 1521 long file_lock_fl_owner; 1522 long nlm_host_h_exportent; 1523 long svc_client_cl_ident; 1524 long kmem_cache_s_c_nextp; 1525 long kmem_cache_s_c_name; 1526 long kmem_cache_s_c_num; 1527 long kmem_cache_s_c_org_size; 1528 long kmem_cache_s_c_flags; 1529 long kmem_cache_s_c_offset; 1530 long kmem_cache_s_c_firstp; 1531 long kmem_cache_s_c_gfporder; 1532 long kmem_cache_s_c_magic; 1533 long kmem_cache_s_num; 1534 long kmem_cache_s_next; 1535 long kmem_cache_s_name; 1536 long kmem_cache_s_objsize; 1537 long kmem_cache_s_flags; 1538 long kmem_cache_s_gfporder; 1539 long kmem_cache_s_slabs; 1540 long kmem_cache_s_slabs_full; 1541 long kmem_cache_s_slabs_partial; 1542 long kmem_cache_s_slabs_free; 1543 long kmem_cache_s_cpudata; 1544 long kmem_cache_s_c_align; 1545 long kmem_cache_s_colour_off; 1546 long cpucache_s_avail; 1547 long cpucache_s_limit; 1548 long kmem_cache_s_array; 1549 long array_cache_avail; 1550 long array_cache_limit; 1551 long kmem_cache_s_lists; 1552 long kmem_list3_slabs_partial; 1553 long kmem_list3_slabs_full; 1554 long kmem_list3_slabs_free; 1555 long kmem_list3_free_objects; 1556 long kmem_list3_shared; 1557 long kmem_slab_s_s_nextp; 1558 long kmem_slab_s_s_freep; 1559 long kmem_slab_s_s_inuse; 1560 long kmem_slab_s_s_mem; 1561 long kmem_slab_s_s_index; 1562 long kmem_slab_s_s_offset; 1563 long kmem_slab_s_s_magic; 1564 long slab_s_list; 1565 long slab_s_s_mem; 1566 long slab_s_inuse; 1567 long slab_s_free; 1568 long slab_list; 1569 long slab_s_mem; 1570 long slab_inuse; 1571 long slab_free; 1572 long net_device_next; 1573 long net_device_name; 1574 long net_device_type; 1575 long net_device_addr_len; 1576 long net_device_ip_ptr; 1577 long net_device_dev_list; 1578 long net_dev_base_head; 1579 long device_next; 1580 long device_name; 1581 long device_type; 1582 long device_ip_ptr; 1583 long device_addr_len; 1584 long socket_sk; 1585 long sock_daddr; 1586 long sock_rcv_saddr; 1587 long sock_dport; 1588 long sock_sport; 1589 long sock_num; 1590 long sock_type; 1591 long sock_family; 1592 long sock_common_skc_family; 1593 long sock_sk_type; 1594 long inet_sock_inet; 1595 long inet_opt_daddr; 1596 long inet_opt_rcv_saddr; 1597 long inet_opt_dport; 1598 long inet_opt_sport; 1599 long inet_opt_num; 1600 long ipv6_pinfo_rcv_saddr; 1601 long ipv6_pinfo_daddr; 1602 long timer_list_list; 1603 long timer_list_next; 1604 long timer_list_entry; 1605 long timer_list_expires; 1606 long timer_list_function; 1607 long timer_vec_root_vec; 1608 long timer_vec_vec; 1609 long tvec_root_s_vec; 1610 long tvec_s_vec; 1611 long tvec_t_base_s_tv1; 1612 long wait_queue_task; 1613 long wait_queue_next; 1614 long __wait_queue_task; 1615 long __wait_queue_head_task_list; 1616 long __wait_queue_task_list; 1617 long pglist_data_node_zones; 1618 long pglist_data_node_mem_map; 1619 long pglist_data_node_start_paddr; 1620 long pglist_data_node_start_mapnr; 1621 long pglist_data_node_size; 1622 long pglist_data_node_id; 1623 long pglist_data_node_next; 1624 long pglist_data_nr_zones; 1625 long pglist_data_node_start_pfn; 1626 long pglist_data_pgdat_next; 1627 long pglist_data_node_present_pages; 1628 long pglist_data_node_spanned_pages; 1629 long pglist_data_bdata; 1630 long page_cache_bucket_chain; 1631 long zone_struct_free_pages; 1632 long zone_struct_free_area; 1633 long zone_struct_zone_pgdat; 1634 long zone_struct_name; 1635 long zone_struct_size; 1636 long zone_struct_memsize; 1637 long zone_struct_zone_start_pfn; 1638 long zone_struct_zone_start_paddr; 1639 long zone_struct_zone_start_mapnr; 1640 long zone_struct_zone_mem_map; 1641 long zone_struct_inactive_clean_pages; 1642 long zone_struct_inactive_clean_list; 1643 long zone_struct_inactive_dirty_pages; 1644 long zone_struct_active_pages; 1645 long zone_struct_pages_min; 1646 long zone_struct_pages_low; 1647 long zone_struct_pages_high; 1648 long zone_free_pages; 1649 long zone_free_area; 1650 long zone_zone_pgdat; 1651 long zone_zone_mem_map; 1652 long zone_name; 1653 long zone_spanned_pages; 1654 long zone_zone_start_pfn; 1655 long zone_pages_min; 1656 long zone_pages_low; 1657 long zone_pages_high; 1658 long zone_vm_stat; 1659 long neighbour_next; 1660 long neighbour_primary_key; 1661 long neighbour_ha; 1662 long neighbour_dev; 1663 long neighbour_nud_state; 1664 long neigh_table_hash_buckets; 1665 long neigh_table_key_len; 1666 long in_device_ifa_list; 1667 long in_ifaddr_ifa_next; 1668 long in_ifaddr_ifa_address; 1669 long pci_dev_global_list; 1670 long pci_dev_next; 1671 long pci_dev_bus; 1672 long pci_dev_devfn; 1673 long pci_dev_class; 1674 long pci_dev_device; 1675 long pci_dev_vendor; 1676 long pci_bus_number; 1677 long resource_entry_t_from; 1678 long resource_entry_t_num; 1679 long resource_entry_t_name; 1680 long resource_entry_t_next; 1681 long resource_name; 1682 long resource_start; 1683 long resource_end; 1684 long resource_sibling; 1685 long resource_child; 1686 long runqueue_curr; 1687 long runqueue_idle; 1688 long runqueue_active; 1689 long runqueue_expired; 1690 long runqueue_arrays; 1691 long runqueue_cpu; 1692 long cpu_s_idle; 1693 long cpu_s_curr; 1694 long prio_array_nr_active; 1695 long prio_array_queue; 1696 long user_regs_struct_ebp; 1697 long user_regs_struct_esp; 1698 long user_regs_struct_rip; 1699 long user_regs_struct_cs; 1700 long user_regs_struct_eflags; 1701 long user_regs_struct_rsp; 1702 long user_regs_struct_ss; 1703 long e820map_nr_map; 1704 long e820entry_addr; 1705 long e820entry_size; 1706 long e820entry_type; 1707 long char_device_struct_next; 1708 long char_device_struct_name; 1709 long char_device_struct_fops; 1710 long char_device_struct_major; 1711 long gendisk_major; 1712 long gendisk_disk_name; 1713 long gendisk_fops; 1714 long blk_major_name_next; 1715 long blk_major_name_major; 1716 long blk_major_name_name; 1717 long radix_tree_root_height; 1718 long radix_tree_root_rnode; 1719 long x8664_pda_pcurrent; 1720 long x8664_pda_data_offset; 1721 long x8664_pda_kernelstack; 1722 long x8664_pda_irqrsp; 1723 long x8664_pda_irqstackptr; 1724 long x8664_pda_level4_pgt; 1725 long x8664_pda_cpunumber; 1726 long x8664_pda_me; 1727 long tss_struct_ist; 1728 long mem_section_section_mem_map; 1729 long vcpu_guest_context_user_regs; 1730 long cpu_user_regs_eip; 1731 long cpu_user_regs_esp; 1732 long cpu_user_regs_rip; 1733 long cpu_user_regs_rsp; 1734 long unwind_table_core; 1735 long unwind_table_init; 1736 long unwind_table_address; 1737 long unwind_table_size; 1738 long unwind_table_link; 1739 long unwind_table_name; 1740 long rq_cfs; 1741 long rq_rt; 1742 long rq_nr_running; 1743 long cfs_rq_rb_leftmost; 1744 long cfs_rq_nr_running; 1745 long cfs_rq_tasks_timeline; 1746 long task_struct_se; 1747 long sched_entity_run_node; 1748 long rt_rq_active; 1749 long kmem_cache_size; 1750 long kmem_cache_objsize; 1751 long kmem_cache_offset; 1752 long kmem_cache_order; 1753 long kmem_cache_local_node; 1754 long kmem_cache_objects; 1755 long kmem_cache_inuse; 1756 long kmem_cache_align; 1757 long kmem_cache_name; 1758 long kmem_cache_list; 1759 long kmem_cache_node; 1760 long kmem_cache_cpu_slab; 1761 long page_inuse; 1762 /* long page_offset; use "old" page->offset */ 1763 long page_slab; 1764 long page_first_page; 1765 long page_freelist; 1766 long kmem_cache_node_nr_partial; 1767 long kmem_cache_node_nr_slabs; 1768 long kmem_cache_node_partial; 1769 long kmem_cache_node_full; 1770 long pid_numbers; 1771 long upid_nr; 1772 long upid_ns; 1773 long upid_pid_chain; 1774 long pid_tasks; 1775 long kmem_cache_cpu_freelist; 1776 long kmem_cache_cpu_page; 1777 long kmem_cache_cpu_node; 1778 long kmem_cache_flags; 1779 long zone_nr_active; 1780 long zone_nr_inactive; 1781 long zone_all_unreclaimable; 1782 long zone_present_pages; 1783 long zone_flags; 1784 long zone_pages_scanned; 1785 long pcpu_info_vcpu; 1786 long pcpu_info_idle; 1787 long vcpu_struct_rq; 1788 long task_struct_sched_info; 1789 long sched_info_last_arrival; 1790 long page_objects; 1791 long kmem_cache_oo; 1792 long char_device_struct_cdev; 1793 long char_device_struct_baseminor; 1794 long cdev_ops; 1795 long probe_next; 1796 long probe_dev; 1797 long probe_data; 1798 long kobj_map_probes; 1799 long task_struct_prio; 1800 long zone_watermark; 1801 long module_sect_attrs; 1802 long module_sect_attrs_attrs; 1803 long module_sect_attrs_nsections; 1804 long module_sect_attr_mattr; 1805 long module_sect_attr_name; 1806 long module_sect_attr_address; 1807 long module_attribute_attr; 1808 long attribute_owner; 1809 long module_sect_attr_attr; 1810 long module_sections_attrs; 1811 long swap_info_struct_inuse_pages; 1812 long s390_lowcore_psw_save_area; 1813 long mm_struct_rss_stat; 1814 long mm_rss_stat_count; 1815 long module_module_init; 1816 long module_init_text_size; 1817 long cpu_context_save_fp; 1818 long cpu_context_save_sp; 1819 long cpu_context_save_pc; 1820 long elf_prstatus_pr_pid; 1821 long elf_prstatus_pr_reg; 1822 long irq_desc_t_name; 1823 long thread_info_cpu_context; 1824 long unwind_table_list; 1825 long unwind_table_start; 1826 long unwind_table_stop; 1827 long unwind_table_begin_addr; 1828 long unwind_table_end_addr; 1829 long unwind_idx_addr; 1830 long unwind_idx_insn; 1831 long signal_struct_nr_threads; 1832 long module_init_size; 1833 long module_percpu; 1834 long radix_tree_node_slots; 1835 long s390_stack_frame_back_chain; 1836 long s390_stack_frame_r14; 1837 long user_regs_struct_eip; 1838 long user_regs_struct_rax; 1839 long user_regs_struct_eax; 1840 long user_regs_struct_rbx; 1841 long user_regs_struct_ebx; 1842 long user_regs_struct_rcx; 1843 long user_regs_struct_ecx; 1844 long user_regs_struct_rdx; 1845 long user_regs_struct_edx; 1846 long user_regs_struct_rsi; 1847 long user_regs_struct_esi; 1848 long user_regs_struct_rdi; 1849 long user_regs_struct_edi; 1850 long user_regs_struct_ds; 1851 long user_regs_struct_es; 1852 long user_regs_struct_fs; 1853 long user_regs_struct_gs; 1854 long user_regs_struct_rbp; 1855 long user_regs_struct_r8; 1856 long user_regs_struct_r9; 1857 long user_regs_struct_r10; 1858 long user_regs_struct_r11; 1859 long user_regs_struct_r12; 1860 long user_regs_struct_r13; 1861 long user_regs_struct_r14; 1862 long user_regs_struct_r15; 1863 long sched_entity_cfs_rq; 1864 long sched_entity_my_q; 1865 long sched_entity_on_rq; 1866 long task_struct_on_rq; 1867 long cfs_rq_curr; 1868 long irq_desc_t_irq_data; 1869 long irq_desc_t_kstat_irqs; 1870 long irq_desc_t_affinity; 1871 long irq_data_chip; 1872 long irq_data_affinity; 1873 long kernel_stat_irqs; 1874 long socket_alloc_vfs_inode; 1875 long class_devices; 1876 long class_p; 1877 long class_private_devices; 1878 long device_knode_class; 1879 long device_node; 1880 long gendisk_dev; 1881 long gendisk_kobj; 1882 long gendisk_part0; 1883 long gendisk_queue; 1884 long hd_struct_dev; 1885 long klist_k_list; 1886 long klist_node_n_klist; 1887 long klist_node_n_node; 1888 long kobject_entry; 1889 long kset_list; 1890 long request_list_count; 1891 long request_queue_in_flight; 1892 long request_queue_rq; 1893 long subsys_private_klist_devices; 1894 long subsystem_kset; 1895 long mount_mnt_parent; 1896 long mount_mnt_mountpoint; 1897 long mount_mnt_list; 1898 long mount_mnt_devname; 1899 long mount_mnt; 1900 long task_struct_exit_state; 1901 long timekeeper_xtime; 1902 long file_f_op; 1903 long file_private_data; 1904 long hstate_order; 1905 long hugetlbfs_sb_info_hstate; 1906 long idr_layer_ary; 1907 long idr_layer_layer; 1908 long idr_layers; 1909 long idr_top; 1910 long ipc_id_ary_p; 1911 long ipc_ids_entries; 1912 long ipc_ids_max_id; 1913 long ipc_ids_ipcs_idr; 1914 long ipc_ids_in_use; 1915 long ipc_namespace_ids; 1916 long kern_ipc_perm_deleted; 1917 long kern_ipc_perm_key; 1918 long kern_ipc_perm_mode; 1919 long kern_ipc_perm_uid; 1920 long kern_ipc_perm_id; 1921 long kern_ipc_perm_seq; 1922 long nsproxy_ipc_ns; 1923 long shmem_inode_info_swapped; 1924 long shmem_inode_info_vfs_inode; 1925 long shm_file_data_file; 1926 long shmid_kernel_shm_file; 1927 long shmid_kernel_shm_nattch; 1928 long shmid_kernel_shm_perm; 1929 long shmid_kernel_shm_segsz; 1930 long shmid_kernel_id; 1931 long sem_array_sem_perm; 1932 long sem_array_sem_id; 1933 long sem_array_sem_nsems; 1934 long msg_queue_q_perm; 1935 long msg_queue_q_id; 1936 long msg_queue_q_cbytes; 1937 long msg_queue_q_qnum; 1938 long super_block_s_fs_info; 1939 long rq_timestamp; 1940 long radix_tree_node_height; 1941 long rb_root_rb_node; 1942 long rb_node_rb_left; 1943 long rb_node_rb_right; 1944 long rt_prio_array_queue; 1945 long task_struct_rt; 1946 long sched_rt_entity_run_list; 1947 long log_ts_nsec; 1948 long log_len; 1949 long log_text_len; 1950 long log_dict_len; 1951 long log_level; 1952 long log_flags_level; 1953 long timekeeper_xtime_sec; 1954 long neigh_table_hash_mask; 1955 long sched_rt_entity_my_q; 1956 long neigh_table_hash_shift; 1957 long neigh_table_nht_ptr; 1958 long task_group_parent; 1959 long task_group_css; 1960 long cgroup_subsys_state_cgroup; 1961 long cgroup_dentry; 1962 long task_group_rt_rq; 1963 long rt_rq_tg; 1964 long task_group_cfs_rq; 1965 long cfs_rq_tg; 1966 long task_group_siblings; 1967 long task_group_children; 1968 long task_group_cfs_bandwidth; 1969 long cfs_rq_throttled; 1970 long task_group_rt_bandwidth; 1971 long rt_rq_rt_throttled; 1972 long rt_rq_highest_prio; 1973 long rt_rq_rt_nr_running; 1974 long vmap_area_va_start; 1975 long vmap_area_va_end; 1976 long vmap_area_list; 1977 long vmap_area_flags; 1978 long vmap_area_vm; 1979 long hrtimer_cpu_base_clock_base; 1980 long hrtimer_clock_base_offset; 1981 long hrtimer_clock_base_active; 1982 long hrtimer_clock_base_first; 1983 long hrtimer_clock_base_get_time; 1984 long hrtimer_base_first; 1985 long hrtimer_base_pending; 1986 long hrtimer_base_get_time; 1987 long hrtimer_node; 1988 long hrtimer_list; 1989 long hrtimer_softexpires; 1990 long hrtimer_expires; 1991 long hrtimer_function; 1992 long timerqueue_head_next; 1993 long timerqueue_node_expires; 1994 long timerqueue_node_node; 1995 long ktime_t_tv64; 1996 long ktime_t_sec; 1997 long ktime_t_nsec; 1998 long module_taints; 1999 long module_gpgsig_ok; 2000 long module_license_gplok; 2001 long tnt_bit; 2002 long tnt_true; 2003 long tnt_false; 2004 long task_struct_thread_context_fp; 2005 long task_struct_thread_context_sp; 2006 long task_struct_thread_context_pc; 2007 long page_slab_page; 2008 long trace_print_flags_mask; 2009 long trace_print_flags_name; 2010 long task_struct_rss_stat; 2011 long task_rss_stat_count; 2012 long page_s_mem; 2013 long page_active; 2014 long hstate_nr_huge_pages; 2015 long hstate_free_huge_pages; 2016 long hstate_name; 2017 long cgroup_kn; 2018 long kernfs_node_name; 2019 long kernfs_node_parent; 2020 long kmem_cache_cpu_partial; 2021 long kmem_cache_cpu_cache; 2022 long nsproxy_net_ns; 2023 long atomic_t_counter; 2024 long percpu_counter_count; 2025 long mm_struct_mm_count; 2026 long task_struct_thread_reg29; 2027 long task_struct_thread_reg31; 2028 long pt_regs_regs; 2029 long pt_regs_cp0_badvaddr; 2030 long address_space_page_tree; 2031 long page_compound_head; 2032 long irq_desc_irq_data; 2033 long kmem_cache_node_total_objects; 2034 long timer_base_vectors; 2035 long request_queue_mq_ops; 2036 long request_queue_queue_ctx; 2037 long blk_mq_ctx_rq_dispatched; 2038 long blk_mq_ctx_rq_completed; 2039 long task_struct_stack; 2040 long tnt_mod; 2041 long radix_tree_node_shift; 2042 long kmem_cache_red_left_pad; 2043 long inactive_task_frame_ret_addr; 2044 long sk_buff_head_next; 2045 long sk_buff_head_qlen; 2046 long sk_buff_next; 2047 long sk_buff_len; 2048 long sk_buff_data; 2049 long nlmsghdr_nlmsg_type; 2050 long module_arch; 2051 long mod_arch_specific_num_orcs; 2052 long mod_arch_specific_orc_unwind_ip; 2053 long mod_arch_specific_orc_unwind; 2054 long task_struct_policy; 2055 long kmem_cache_random; 2056 long pid_namespace_idr; 2057 long idr_idr_rt; 2058 long bpf_prog_aux; 2059 long bpf_prog_type; 2060 long bpf_prog_tag; 2061 long bpf_prog_jited_len; 2062 long bpf_prog_bpf_func; 2063 long bpf_prog_len; 2064 long bpf_prog_insnsi; 2065 long bpf_prog_pages; 2066 long bpf_map_map_type; 2067 long bpf_map_map_flags; 2068 long bpf_map_pages; 2069 long bpf_map_key_size; 2070 long bpf_map_value_size; 2071 long bpf_map_max_entries; 2072 long bpf_map_user; 2073 long bpf_map_name; 2074 long bpf_prog_aux_used_map_cnt; 2075 long bpf_prog_aux_used_maps; 2076 long bpf_prog_aux_load_time; 2077 long bpf_prog_aux_user; 2078 long user_struct_uid; 2079 long idr_cur; 2080 long kmem_cache_memcg_params; 2081 long memcg_cache_params___root_caches_node; 2082 long memcg_cache_params_children; 2083 long memcg_cache_params_children_node; 2084 long task_struct_pid_links; 2085 long kernel_symbol_value; 2086 long pci_dev_dev; 2087 long pci_dev_hdr_type; 2088 long pci_dev_pcie_flags_reg; 2089 long pci_bus_node; 2090 long pci_bus_devices; 2091 long pci_bus_dev; 2092 long pci_bus_children; 2093 long pci_bus_parent; 2094 long pci_bus_self; 2095 long device_kobj; 2096 long kobject_name; 2097 long memory_block_dev; 2098 long memory_block_start_section_nr; 2099 long memory_block_end_section_nr; 2100 long memory_block_state; 2101 long memory_block_nid; 2102 long mem_section_pageblock_flags; 2103 long bus_type_p; 2104 long device_private_device; 2105 long device_private_knode_bus; 2106 long xarray_xa_head; 2107 long xa_node_slots; 2108 long xa_node_shift; 2109 long hd_struct_dkstats; 2110 long disk_stats_in_flight; 2111 long cpu_context_save_r7; 2112 long dentry_d_sb; 2113 long device_private_knode_class; 2114 long timerqueue_head_rb_root; 2115 long rb_root_cached_rb_leftmost; 2116 long bpf_map_memory; 2117 long bpf_map_memory_pages; 2118 long bpf_map_memory_user; 2119 long bpf_prog_aux_name; 2120 long page_private; 2121 long swap_info_struct_bdev; 2122 long zram_mem_pool; 2123 long zram_compressor; 2124 long zram_table_entry_flags; 2125 long zs_pool_size_class; 2126 long size_class_size; 2127 long gendisk_private_data; 2128 long zram_table_entry; /* unused; but cannot remove */ 2129 long module_core_size_rw; 2130 long module_core_size_rx; 2131 long module_init_size_rw; 2132 long module_init_size_rx; 2133 long module_module_core_rw; 2134 long module_module_core_rx; 2135 long module_module_init_rw; 2136 long module_module_init_rx; 2137 long super_block_s_inodes; 2138 long inode_i_sb_list; 2139 long irq_common_data_affinity; 2140 long irq_desc_irq_common_data; 2141 long uts_namespace_name; 2142 long printk_info_seq; 2143 long printk_info_ts_nsec; 2144 long printk_info_text_len; 2145 long printk_info_level; 2146 long printk_info_caller_id; 2147 long printk_info_dev_info; 2148 long dev_printk_info_subsystem; 2149 long dev_printk_info_device; 2150 long prb_desc_ring; 2151 long prb_text_data_ring; 2152 long prb_desc_ring_count_bits; 2153 long prb_desc_ring_descs; 2154 long prb_desc_ring_infos; 2155 long prb_desc_ring_head_id; 2156 long prb_desc_ring_tail_id; 2157 long prb_desc_state_var; 2158 long prb_desc_text_blk_lpos; 2159 long prb_data_blk_lpos_begin; 2160 long prb_data_blk_lpos_next; 2161 long prb_data_ring_size_bits; 2162 long prb_data_ring_data; 2163 long atomic_long_t_counter; 2164 long block_device_bd_device; 2165 long block_device_bd_stats; 2166 long wait_queue_entry_private; 2167 long wait_queue_head_head; 2168 long wait_queue_entry_entry; 2169 long printk_safe_seq_buf_len; 2170 long printk_safe_seq_buf_message_lost; 2171 long printk_safe_seq_buf_buffer; 2172 long sbitmap_word_depth; 2173 long sbitmap_word_word; 2174 long sbitmap_word_cleared; 2175 long sbitmap_depth; 2176 long sbitmap_shift; 2177 long sbitmap_map_nr; 2178 long sbitmap_map; 2179 long sbitmap_queue_sb; 2180 long sbitmap_queue_alloc_hint; 2181 long sbitmap_queue_wake_batch; 2182 long sbitmap_queue_wake_index; 2183 long sbitmap_queue_ws; 2184 long sbitmap_queue_ws_active; 2185 long sbitmap_queue_round_robin; 2186 long sbitmap_queue_min_shallow_depth; 2187 long sbq_wait_state_wait_cnt; 2188 long sbq_wait_state_wait; 2189 long sbitmap_alloc_hint; 2190 long sbitmap_round_robin; 2191 long request_cmd_flags; 2192 long request_q; 2193 long request_state; 2194 long request_queue_queue_hw_ctx; 2195 long request_queue_nr_hw_queues; 2196 long blk_mq_hw_ctx_tags; 2197 long blk_mq_tags_bitmap_tags; 2198 long blk_mq_tags_breserved_tags; 2199 long blk_mq_tags_nr_reserved_tags; 2200 long blk_mq_tags_rqs; 2201 long request_queue_hctx_table; 2202 long percpu_counter_counters; 2203 long slab_slab_list; 2204 long mm_struct_mm_mt; 2205 long maple_tree_ma_root; 2206 long maple_tree_ma_flags; 2207 long maple_node_parent; 2208 long maple_node_ma64; 2209 long maple_node_mr64; 2210 long maple_node_slot; 2211 long maple_arange_64_pivot; 2212 long maple_arange_64_slot; 2213 long maple_arange_64_gap; 2214 long maple_arange_64_meta; 2215 long maple_range_64_pivot; 2216 long maple_range_64_slot; 2217 long maple_metadata_end; 2218 long maple_metadata_gap; 2219 long sock_sk_common; 2220 long sock_common_skc_v6_daddr; 2221 long sock_common_skc_v6_rcv_saddr; 2222 long inactive_task_frame_bp; 2223 long net_device_ip6_ptr; 2224 long inet6_dev_addr_list; 2225 long inet6_ifaddr_addr; 2226 long inet6_ifaddr_if_list; 2227 long inet6_ifaddr_if_next; 2228 long in6_addr_in6_u; 2229 long kset_kobj; 2230 long subsys_private_subsys; 2231 long vmap_area_purge_list; 2232 long module_mem; 2233 long module_memory_base; 2234 long module_memory_size; 2235 long irq_data_irq; 2236 long zspage_huge; 2237 long zram_comp_algs; 2238 long task_struct_thread_reg01; 2239 long task_struct_thread_reg03; 2240 long mnt_namespace_mounts; 2241 long mnt_namespace_nr_mounts; 2242 long mount_mnt_node; 2243 long log_caller_id; 2244 long vmap_node_busy; 2245 long rb_list_head; 2246 long file_f_inode; 2247 long page_page_type; 2248 long inactive_task_frame_r15; 2249 long inactive_task_frame_r14; 2250 long inactive_task_frame_r13; 2251 long inactive_task_frame_r12; 2252 long inactive_task_frame_flags; 2253 long inactive_task_frame_si; 2254 long inactive_task_frame_di; 2255 long inactive_task_frame_bx; 2256 long thread_struct_es; 2257 long thread_struct_ds; 2258 long thread_struct_fsbase; 2259 long thread_struct_gsbase; 2260 long thread_struct_fs; 2261 long thread_struct_gs; 2262 long task_struct_thread_context_x19; 2263 long task_struct_thread_context_x20; 2264 long task_struct_thread_context_x21; 2265 long task_struct_thread_context_x22; 2266 long task_struct_thread_context_x23; 2267 long task_struct_thread_context_x24; 2268 long task_struct_thread_context_x25; 2269 long task_struct_thread_context_x26; 2270 long task_struct_thread_context_x27; 2271 long task_struct_thread_context_x28; 2272 long neigh_table_hash_heads; 2273 long neighbour_hash; 2274 long request_queue_tag_set; 2275 long blk_mq_tag_set_flags; 2276 long blk_mq_tag_set_shared_tags; 2277 long vfsmount_mnt_flags; 2278 long proc_mounts_cursor; 2279 long bpf_ringbuf_map_map; 2280 long bpf_ringbuf_map_rb; 2281 long bpf_ringbuf_consumer_pos; 2282 long bpf_ringbuf_nr_pages; 2283 }; 2284 2285 struct size_table { /* stash of commonly-used sizes */ 2286 long page; 2287 long free_area_struct; 2288 long zone_struct; 2289 long free_area; 2290 long zone; 2291 long kmem_slab_s; 2292 long kmem_cache_s; 2293 long kmem_bufctl_t; 2294 long slab_s; 2295 long slab; 2296 long cpucache_s; 2297 long array_cache; 2298 long swap_info_struct; 2299 long mm_struct; 2300 long vm_area_struct; 2301 long pglist_data; 2302 long page_cache_bucket; 2303 long pt_regs; 2304 long task_struct; 2305 long thread_info; 2306 long softirq_state; 2307 long desc_struct; 2308 long umode_t; 2309 long dentry; 2310 long files_struct; 2311 long fdtable; 2312 long fs_struct; 2313 long file; 2314 long inode; 2315 long vfsmount; 2316 long super_block; 2317 long irqdesc; 2318 long module; 2319 long list_head; 2320 long hlist_node; 2321 long hlist_head; 2322 long irq_cpustat_t; 2323 long cpuinfo_x86; 2324 long cpuinfo_ia64; 2325 long timer_list; 2326 long timer_vec_root; 2327 long timer_vec; 2328 long tvec_root_s; 2329 long tvec_s; 2330 long tvec_t_base_s; 2331 long wait_queue; 2332 long __wait_queue; 2333 long device; 2334 long net_device; 2335 long sock; 2336 long signal_struct; 2337 long sigpending_signal; 2338 long signal_queue; 2339 long sighand_struct; 2340 long sigqueue; 2341 long k_sigaction; 2342 long resource_entry_t; 2343 long resource; 2344 long runqueue; 2345 long irq_desc_t; 2346 long task_union; 2347 long thread_union; 2348 long prio_array; 2349 long user_regs_struct; 2350 long switch_stack; 2351 long vm_area_struct_vm_flags; 2352 long e820map; 2353 long e820entry; 2354 long cpu_s; 2355 long pgd_t; 2356 long kallsyms_header; 2357 long kallsyms_symbol; 2358 long kallsyms_section; 2359 long irq_ctx; 2360 long block_device; 2361 long blk_major_name; 2362 long gendisk; 2363 long address_space; 2364 long char_device_struct; 2365 long inet_sock; 2366 long in6_addr; 2367 long socket; 2368 long spinlock_t; 2369 long radix_tree_root; 2370 long radix_tree_node; 2371 long x8664_pda; 2372 long ppc64_paca; 2373 long gate_struct; 2374 long tss_struct; 2375 long task_struct_start_time; 2376 long cputime_t; 2377 long mem_section; 2378 long pid_link; 2379 long unwind_table; 2380 long rlimit; 2381 long kmem_cache; 2382 long kmem_cache_node; 2383 long upid; 2384 long kmem_cache_cpu; 2385 long cfs_rq; 2386 long pcpu_info; 2387 long vcpu_struct; 2388 long cdev; 2389 long probe; 2390 long kobj_map; 2391 long page_flags; 2392 long module_sect_attr; 2393 long task_struct_utime; 2394 long task_struct_stime; 2395 long cpu_context_save; 2396 long elf_prstatus; 2397 long note_buf; 2398 long unwind_idx; 2399 long softirq_action; 2400 long irq_data; 2401 long s390_stack_frame; 2402 long percpu_data; 2403 long sched_entity; 2404 long kernel_stat; 2405 long subsystem; 2406 long class_private; 2407 long rq_in_flight; 2408 long class_private_devices; 2409 long mount; 2410 long hstate; 2411 long ipc_ids; 2412 long shmid_kernel; 2413 long sem_array; 2414 long msg_queue; 2415 long log; 2416 long log_level; 2417 long rt_rq; 2418 long task_group; 2419 long vmap_area; 2420 long hrtimer_clock_base; 2421 long hrtimer_base; 2422 long tnt; 2423 long trace_print_flags; 2424 long task_struct_flags; 2425 long timer_base; 2426 long taint_flag; 2427 long nlmsghdr; 2428 long nlmsghdr_nlmsg_type; 2429 long sk_buff_head_qlen; 2430 long sk_buff_len; 2431 long orc_entry; 2432 long task_struct_policy; 2433 long pid; 2434 long bpf_prog; 2435 long bpf_prog_aux; 2436 long bpf_map; 2437 long bpf_insn; 2438 long xarray; 2439 long xa_node; 2440 long zram_table_entry; 2441 long irq_common_data; 2442 long printk_info; 2443 long printk_ringbuffer; 2444 long prb_desc; 2445 long wait_queue_entry; 2446 long task_struct_state; 2447 long printk_safe_seq_buf_buffer; 2448 long sbitmap_word; 2449 long sbitmap; 2450 long sbitmap_queue; 2451 long sbq_wait_state; 2452 long blk_mq_tags; 2453 long percpu_counter; 2454 long maple_tree; 2455 long maple_node; 2456 long module_memory; 2457 long fred_frame; 2458 long vmap_node; 2459 long cpumask_t; 2460 long task_struct_exit_state; 2461 long bpf_ringbuf_map; 2462 }; 2463 2464 struct array_table { 2465 int kmem_cache_s_name; 2466 int kmem_cache_s_c_name; 2467 int kmem_cache_s_array; 2468 int kmem_cache_s_cpudata; 2469 int irq_desc; 2470 int irq_action; 2471 int log_buf; 2472 int timer_vec_vec; 2473 int timer_vec_root_vec; 2474 int tvec_s_vec; 2475 int tvec_root_s_vec; 2476 int page_hash_table; 2477 int net_device_name; 2478 int neigh_table_hash_buckets; 2479 int neighbour_ha; 2480 int swap_info; 2481 int pglist_data_node_zones; 2482 int zone_struct_free_area; 2483 int zone_free_area; 2484 int free_area; 2485 int free_area_DIMENSION; 2486 int prio_array_queue; 2487 int height_to_maxindex; 2488 int pid_hash; 2489 int kmem_cache_node; 2490 int kmem_cache_cpu_slab; 2491 int rt_prio_array_queue; 2492 int height_to_maxnodes; 2493 int task_struct_rlim; 2494 int signal_struct_rlim; 2495 int vm_numa_stat; 2496 int pid_numbers; 2497 }; 2498 2499 /* 2500 * The following set of macros use gdb to determine structure, union, 2501 * or member sizes/offsets. They should be used only during initialization 2502 * of the offset_table or size_table, or with data structures whose names 2503 * or members are only known/specified during runtime. 2504 */ 2505 #define MEMBER_SIZE_REQUEST ((struct datatype_member *)(-1)) 2506 #define ANON_MEMBER_OFFSET_REQUEST ((struct datatype_member *)(-2)) 2507 #define MEMBER_TYPE_REQUEST ((struct datatype_member *)(-3)) 2508 #define STRUCT_SIZE_REQUEST ((struct datatype_member *)(-4)) 2509 #define MEMBER_TYPE_NAME_REQUEST ((struct datatype_member *)(-5)) 2510 #define ANON_MEMBER_SIZE_REQUEST ((struct datatype_member *)(-6)) 2511 2512 #define STRUCT_SIZE(X) datatype_info((X), NULL, STRUCT_SIZE_REQUEST) 2513 #define UNION_SIZE(X) datatype_info((X), NULL, STRUCT_SIZE_REQUEST) 2514 #define STRUCT_EXISTS(X) (datatype_info((X), NULL, STRUCT_SIZE_REQUEST) >= 0) 2515 #define DATATYPE_SIZE(X) datatype_info((X)->name, NULL, (X)) 2516 #define MEMBER_OFFSET(X,Y) datatype_info((X), (Y), NULL) 2517 #define MEMBER_EXISTS(X,Y) (datatype_info((X), (Y), NULL) >= 0) 2518 #define MEMBER_SIZE(X,Y) datatype_info((X), (Y), MEMBER_SIZE_REQUEST) 2519 #define MEMBER_TYPE(X,Y) datatype_info((X), (Y), MEMBER_TYPE_REQUEST) 2520 #define MEMBER_TYPE_NAME(X,Y) ((char *)datatype_info((X), (Y), MEMBER_TYPE_NAME_REQUEST)) 2521 #define ANON_MEMBER_OFFSET(X,Y) datatype_info((X), (Y), ANON_MEMBER_OFFSET_REQUEST) 2522 #define ANON_MEMBER_SIZE(X,Y) datatype_info((X), (Y), ANON_MEMBER_SIZE_REQUEST) 2523 2524 /* 2525 * The following set of macros can only be used with pre-intialized fields 2526 * in the offset table, size table or array_table. 2527 */ 2528 #define OFFSET(X) (OFFSET_verify(offset_table.X, (char *)__FUNCTION__, __FILE__, __LINE__, #X)) 2529 #define MODULE_OFFSET(X,Y) (PAX_MODULE_SPLIT() ? OFFSET(Y) : OFFSET(X)) 2530 #define MODULE_OFFSET2(X,T) MODULE_OFFSET(X, X##_##T) 2531 #define SIZE(X) (SIZE_verify(size_table.X, (char *)__FUNCTION__, __FILE__, __LINE__, #X)) 2532 #define INVALID_OFFSET (-1) 2533 #define INVALID_MEMBER(X) (offset_table.X == INVALID_OFFSET) 2534 #define INVALID_SIZE(X) (size_table.X == -1) 2535 #define VALID_SIZE(X) (size_table.X >= 0) 2536 #define VALID_STRUCT(X) (size_table.X >= 0) 2537 #define VALID_MEMBER(X) (offset_table.X >= 0) 2538 #define ARRAY_LENGTH(X) (array_table.X) 2539 #define ASSIGN_OFFSET(X) (offset_table.X) 2540 #define ASSIGN_SIZE(X) (size_table.X) 2541 #define OFFSET_OPTION(X,Y) (OFFSET_option(offset_table.X, offset_table.Y, (char *)__FUNCTION__, __FILE__, __LINE__, #X, #Y)) 2542 #define SIZE_OPTION(X,Y) (SIZE_option(size_table.X, size_table.Y, (char *)__FUNCTION__, __FILE__, __LINE__, #X, #Y)) 2543 2544 #define MEMBER_OFFSET_INIT(X, Y, Z) (ASSIGN_OFFSET(X) = MEMBER_OFFSET(Y, Z)) 2545 #define STRUCT_SIZE_INIT(X, Y) (ASSIGN_SIZE(X) = STRUCT_SIZE(Y)) 2546 #define ARRAY_LENGTH_INIT(A, B, C, D, E) ((A) = get_array_length(C, D, E)) 2547 #define ARRAY_LENGTH_INIT_ALT(A, B, C, D, E) ((A) = get_array_length_alt(B, C, D, E)) 2548 #define MEMBER_SIZE_INIT(X, Y, Z) (ASSIGN_SIZE(X) = MEMBER_SIZE(Y, Z)) 2549 #define ANON_MEMBER_OFFSET_INIT(X, Y, Z) (ASSIGN_OFFSET(X) = ANON_MEMBER_OFFSET(Y, Z)) 2550 2551 /* 2552 * For use with non-debug kernels. 2553 */ 2554 struct builtin_debug_table { 2555 char *release; 2556 char *machine_type; 2557 struct offset_table *offset_table; 2558 struct size_table *size_table; 2559 struct array_table *array_table; 2560 }; 2561 2562 /* 2563 * Facilitators for pulling correctly-sized data out of a buffer at a 2564 * known address. 2565 */ 2566 2567 #ifdef NEED_ALIGNED_MEM_ACCESS 2568 2569 #define DEF_LOADER(TYPE) \ 2570 static inline TYPE \ 2571 load_##TYPE (char *addr) \ 2572 { \ 2573 TYPE ret; \ 2574 size_t i = sizeof(TYPE); \ 2575 while (i--) \ 2576 ((char *)&ret)[i] = addr[i]; \ 2577 return ret; \ 2578 } 2579 2580 DEF_LOADER(int); 2581 DEF_LOADER(uint); 2582 DEF_LOADER(long); 2583 DEF_LOADER(ulong); 2584 DEF_LOADER(ulonglong); 2585 DEF_LOADER(ushort); 2586 DEF_LOADER(short); 2587 typedef void *pointer_t; 2588 DEF_LOADER(pointer_t); 2589 DEF_LOADER(bool); 2590 2591 #define LOADER(TYPE) load_##TYPE 2592 2593 #define INT(ADDR) LOADER(int) ((char *)(ADDR)) 2594 #define UINT(ADDR) LOADER(uint) ((char *)(ADDR)) 2595 #define LONG(ADDR) LOADER(long) ((char *)(ADDR)) 2596 #define ULONG(ADDR) LOADER(ulong) ((char *)(ADDR)) 2597 #define ULONGLONG(ADDR) LOADER(ulonglong) ((char *)(ADDR)) 2598 #define ULONG_PTR(ADDR) ((ulong *) (LOADER(pointer_t) ((char *)(ADDR)))) 2599 #define USHORT(ADDR) LOADER(ushort) ((char *)(ADDR)) 2600 #define SHORT(ADDR) LOADER(short) ((char *)(ADDR)) 2601 #define UCHAR(ADDR) *((unsigned char *)((char *)(ADDR))) 2602 #define VOID_PTR(ADDR) ((void *) (LOADER(pointer_t) ((char *)(ADDR)))) 2603 #define BOOL(ADDR) LOADER(bool) ((char *)(ADDR)) 2604 2605 #else 2606 2607 #define INT(ADDR) *((int *)((char *)(ADDR))) 2608 #define UINT(ADDR) *((uint *)((char *)(ADDR))) 2609 #define LONG(ADDR) *((long *)((char *)(ADDR))) 2610 #define ULONG(ADDR) *((ulong *)((char *)(ADDR))) 2611 #define ULONGLONG(ADDR) *((ulonglong *)((char *)(ADDR))) 2612 #define ULONG_PTR(ADDR) *((ulong **)((char *)(ADDR))) 2613 #define USHORT(ADDR) *((ushort *)((char *)(ADDR))) 2614 #define SHORT(ADDR) *((short *)((char *)(ADDR))) 2615 #define UCHAR(ADDR) *((unsigned char *)((char *)(ADDR))) 2616 #define VOID_PTR(ADDR) *((void **)((char *)(ADDR))) 2617 #define BOOL(ADDR) *((bool *)((char *)(ADDR))) 2618 2619 #endif /* NEED_ALIGNED_MEM_ACCESS */ 2620 2621 struct node_table { 2622 int node_id; 2623 ulong pgdat; 2624 ulong mem_map; 2625 ulong size; 2626 ulong present; 2627 ulonglong start_paddr; 2628 ulong start_mapnr; 2629 }; 2630 2631 struct meminfo; 2632 struct slab_data; 2633 2634 #define VMA_CACHE (20) 2635 2636 struct vm_table { /* kernel VM-related data */ 2637 ulong flags; 2638 ulong kernel_pgd[NR_CPUS]; 2639 ulong high_memory; 2640 ulong vmalloc_start; 2641 ulong mem_map; 2642 long total_pages; 2643 ulong totalram_pages; 2644 ulong totalhigh_pages; 2645 ulong num_physpages; 2646 ulong max_mapnr; 2647 ulong kmem_max_c_num; 2648 ulong kmem_max_limit; 2649 ulong kmem_max_cpus; 2650 ulong kmem_cache_count; 2651 ulong kmem_cache_len_nodes; 2652 ulong PG_reserved; 2653 ulong PG_slab; 2654 ulong PG_head_tail_mask; 2655 int kmem_cache_namelen; 2656 ulong page_hash_table; 2657 int page_hash_table_len; 2658 int paddr_prlen; 2659 int numnodes; 2660 int nr_zones; 2661 int nr_free_areas; 2662 struct node_table *node_table; 2663 void (*dump_free_pages)(struct meminfo *); 2664 void (*dump_kmem_cache)(struct meminfo *); 2665 struct slab_data *slab_data; 2666 uint nr_swapfiles; 2667 ulong last_swap_read; 2668 char *swap_info_struct; 2669 char *vma_cache; 2670 ulong cached_vma[VMA_CACHE]; 2671 ulong cached_vma_hits[VMA_CACHE]; 2672 int vma_cache_index; 2673 ulong vma_cache_fills; 2674 void *mem_sec; 2675 char *mem_section; 2676 int ZONE_HIGHMEM; 2677 ulong *node_online_map; 2678 int node_online_map_len; 2679 int nr_vm_stat_items; 2680 char **vm_stat_items; 2681 int cpu_slab_type; 2682 int nr_vm_event_items; 2683 char **vm_event_items; 2684 int nr_bad_slab_caches; 2685 ulong *bad_slab_caches; 2686 int nr_pageflags; 2687 struct pageflags_data { 2688 ulong mask; 2689 char *name; 2690 } *pageflags_data; 2691 ulong max_mem_section_nr; 2692 ulong zero_paddr; 2693 ulong huge_zero_paddr; 2694 uint page_type_base; 2695 }; 2696 2697 #define NODES (0x1) 2698 #define ZONES (0x2) 2699 #define PERCPU_KMALLOC_V1 (0x4) 2700 #define COMMON_VADDR (0x8) 2701 #define KMEM_CACHE_INIT (0x10) 2702 #define V_MEM_MAP (0x20) 2703 #define PERCPU_KMALLOC_V2 (0x40) 2704 #define KMEM_CACHE_UNAVAIL (0x80) 2705 #define FLATMEM (0x100) 2706 #define DISCONTIGMEM (0x200) 2707 #define SPARSEMEM (0x400) 2708 #define SPARSEMEM_EX (0x800) 2709 #define PERCPU_KMALLOC_V2_NODES (0x1000) 2710 #define KMEM_CACHE_DELAY (0x2000) 2711 #define NODES_ONLINE (0x4000) 2712 #define VM_STAT (0x8000) 2713 #define KMALLOC_SLUB (0x10000) 2714 #define CONFIG_NUMA (0x20000) 2715 #define VM_EVENT (0x40000) 2716 #define PGCNT_ADJ (0x80000) 2717 #define VM_INIT (0x100000) 2718 #define SWAPINFO_V1 (0x200000) 2719 #define SWAPINFO_V2 (0x400000) 2720 #define NODELISTS_IS_PTR (0x800000) 2721 #define KMALLOC_COMMON (0x1000000) 2722 #define USE_VMAP_AREA (0x2000000) 2723 #define PAGEFLAGS (0x4000000) 2724 #define SLAB_OVERLOAD_PAGE (0x8000000) 2725 #define SLAB_CPU_CACHE (0x10000000) 2726 #define SLAB_ROOT_CACHES (0x20000000) 2727 #define USE_VMAP_NODES (0x40000000) 2728 /* 2729 * The SLAB_PAGEFLAGS flag is introduced to detect the change of 2730 * PG_slab's type from a page flag to a page type. 2731 */ 2732 #define SLAB_PAGEFLAGS (0x80000000) 2733 2734 #define IS_FLATMEM() (vt->flags & FLATMEM) 2735 #define IS_DISCONTIGMEM() (vt->flags & DISCONTIGMEM) 2736 #define IS_SPARSEMEM() (vt->flags & SPARSEMEM) 2737 #define IS_SPARSEMEM_EX() (vt->flags & SPARSEMEM_EX) 2738 2739 #define COMMON_VADDR_SPACE() (vt->flags & COMMON_VADDR) 2740 #define PADDR_PRLEN (vt->paddr_prlen) 2741 2742 struct datatype_member { /* minimal definition of a structure/union */ 2743 char *name; /* and possibly a member within it */ 2744 char *member; 2745 ulong type; 2746 long size; 2747 long member_offset; 2748 long member_size; 2749 int member_typecode; 2750 ulong flags; 2751 const char *tagname; /* tagname and value for enums */ 2752 long value; 2753 ulong vaddr; 2754 }; 2755 2756 #define union_name struct_name 2757 2758 struct list_data { /* generic structure used by do_list() to walk */ 2759 ulong flags; /* through linked lists in the kernel */ 2760 ulong start; 2761 long member_offset; 2762 long list_head_offset; 2763 ulong end; 2764 ulong searchfor; 2765 char **structname; 2766 int structname_args; 2767 char *header; 2768 ulong *list_ptr; 2769 int (*callback_func)(void *, void *); 2770 void *callback_data; 2771 long struct_list_offset; 2772 }; 2773 #define LIST_OFFSET_ENTERED (VERBOSE << 1) 2774 #define LIST_START_ENTERED (VERBOSE << 2) 2775 #define LIST_HEAD_FORMAT (VERBOSE << 3) 2776 #define LIST_HEAD_POINTER (VERBOSE << 4) 2777 #define RETURN_ON_DUPLICATE (VERBOSE << 5) 2778 #define RETURN_ON_LIST_ERROR (VERBOSE << 6) 2779 #define LIST_STRUCT_RADIX_10 (VERBOSE << 7) 2780 #define LIST_STRUCT_RADIX_16 (VERBOSE << 8) 2781 #define LIST_HEAD_REVERSE (VERBOSE << 9) 2782 #define LIST_ALLOCATE (VERBOSE << 10) 2783 #define LIST_CALLBACK (VERBOSE << 11) 2784 #define CALLBACK_RETURN (VERBOSE << 12) 2785 #define LIST_PARSE_MEMBER (VERBOSE << 13) 2786 #define LIST_READ_MEMBER (VERBOSE << 14) 2787 #define LIST_BRENT_ALGO (VERBOSE << 15) 2788 #define LIST_HEAD_OFFSET_ENTERED (VERBOSE << 16) 2789 2790 struct tree_data { 2791 ulong flags; 2792 ulong start; 2793 long node_member_offset; 2794 char **structname; 2795 int structname_args; 2796 int count; 2797 }; 2798 2799 #define TREE_ROOT_OFFSET_ENTERED (VERBOSE << 1) 2800 #define TREE_NODE_OFFSET_ENTERED (VERBOSE << 2) 2801 #define TREE_NODE_POINTER (VERBOSE << 3) 2802 #define TREE_POSITION_DISPLAY (VERBOSE << 4) 2803 #define TREE_STRUCT_RADIX_10 (VERBOSE << 5) 2804 #define TREE_STRUCT_RADIX_16 (VERBOSE << 6) 2805 #define TREE_PARSE_MEMBER (VERBOSE << 7) 2806 #define TREE_READ_MEMBER (VERBOSE << 8) 2807 #define TREE_LINEAR_ORDER (VERBOSE << 9) 2808 #define TREE_STRUCT_VERBOSE (VERBOSE << 10) 2809 2810 #define ALIAS_RUNTIME (1) 2811 #define ALIAS_RCLOCAL (2) 2812 #define ALIAS_RCHOME (3) 2813 #define ALIAS_BUILTIN (4) 2814 2815 struct alias_data { /* command alias storage */ 2816 struct alias_data *next; 2817 char *alias; 2818 int argcnt; 2819 int size; 2820 int origin; 2821 char *args[MAXARGS]; 2822 char argbuf[1]; 2823 }; 2824 2825 struct rb_node 2826 { 2827 unsigned long rb_parent_color; 2828 #define RB_RED 0 2829 #define RB_BLACK 1 2830 struct rb_node *rb_right; 2831 struct rb_node *rb_left; 2832 }; 2833 2834 struct rb_root 2835 { 2836 struct rb_node *rb_node; 2837 }; 2838 2839 #define NUMBER_STACKFRAMES 4 2840 2841 #define SAVE_RETURN_ADDRESS(retaddr) \ 2842 { \ 2843 int i; \ 2844 int saved_stacks; \ 2845 \ 2846 saved_stacks = backtrace((void **)retaddr, NUMBER_STACKFRAMES); \ 2847 \ 2848 /* explicitely zero out the invalid addresses */ \ 2849 for (i = saved_stacks; i < NUMBER_STACKFRAMES; i++) \ 2850 retaddr[i] = 0; \ 2851 } 2852 2853 #endif /* !GDB_COMMON */ 2854 2855 2856 #define SYMBOL_NAME_USED (0x1) 2857 #define MODULE_SYMBOL (0x2) 2858 #define IS_MODULE_SYMBOL(SYM) ((SYM)->flags & MODULE_SYMBOL) 2859 2860 struct syment { 2861 ulong value; 2862 char *name; 2863 struct syment *val_hash_next; 2864 struct syment *name_hash_next; 2865 char type; 2866 unsigned char cnt; 2867 unsigned char flags; 2868 unsigned char pad2; 2869 }; 2870 2871 #define NAMESPACE_INIT (1) 2872 #define NAMESPACE_REUSE (2) 2873 #define NAMESPACE_FREE (3) 2874 #define NAMESPACE_INSTALL (4) 2875 #define NAMESPACE_COMPLETE (5) 2876 2877 struct symbol_namespace { 2878 char *address; 2879 size_t size; 2880 long index; 2881 long cnt; 2882 }; 2883 2884 struct downsized { 2885 char *name; 2886 struct downsized *next; 2887 }; 2888 2889 #define SYMVAL_HASH (512) 2890 #define SYMVAL_HASH_INDEX(vaddr) \ 2891 (((vaddr) >> machdep->pageshift) % SYMVAL_HASH) 2892 2893 #define SYMNAME_HASH (512) 2894 2895 #define PATCH_KERNEL_SYMBOLS_START ((char *)(1)) 2896 #define PATCH_KERNEL_SYMBOLS_STOP ((char *)(2)) 2897 2898 #ifndef GDB_COMMON 2899 2900 struct symbol_table_data { 2901 ulong flags; 2902 #ifdef GDB_5_3 2903 struct _bfd *bfd; 2904 #else 2905 struct bfd *bfd; 2906 #endif 2907 struct sec *sections; 2908 struct syment *symtable; 2909 struct syment *symend; 2910 long symcnt; 2911 ulong syment_size; 2912 struct symval_hash_chain { 2913 struct syment *val_hash_head; 2914 struct syment *val_hash_last; 2915 } symval_hash[SYMVAL_HASH]; 2916 double val_hash_searches; 2917 double val_hash_iterations; 2918 struct syment *symname_hash[SYMNAME_HASH]; 2919 struct symbol_namespace kernel_namespace; 2920 struct syment *ext_module_symtable; 2921 struct syment *ext_module_symend; 2922 long ext_module_symcnt; 2923 struct symbol_namespace ext_module_namespace; 2924 int mods_installed; 2925 struct load_module *current; 2926 struct load_module *load_modules; 2927 off_t dwarf_eh_frame_file_offset; 2928 ulong dwarf_eh_frame_size; 2929 ulong first_ksymbol; 2930 ulong __per_cpu_start; 2931 ulong __per_cpu_end; 2932 off_t dwarf_debug_frame_file_offset; 2933 ulong dwarf_debug_frame_size; 2934 ulong first_section_start; 2935 ulong last_section_end; 2936 ulong _stext_vmlinux; 2937 struct downsized downsized; 2938 ulong divide_error_vmlinux; 2939 ulong idt_table_vmlinux; 2940 ulong saved_command_line_vmlinux; 2941 ulong pti_init_vmlinux; 2942 ulong kaiser_init_vmlinux; 2943 int kernel_symbol_type; 2944 ulong linux_banner_vmlinux; 2945 struct syment *mod_symname_hash[SYMNAME_HASH]; 2946 }; 2947 2948 /* flags for st */ 2949 #define KERNEL_SYMS (0x1) 2950 #define MODULE_SYMS (0x2) 2951 #define LOAD_MODULE_SYMS (0x4) 2952 #define INSMOD_BUILTIN (0x8) 2953 #define GDB_SYMS_PATCHED (0x10) 2954 #define GDB_PATCHED() (st->flags & GDB_SYMS_PATCHED) 2955 #define NO_SEC_LOAD (0x20) 2956 #define NO_SEC_CONTENTS (0x40) 2957 #define FORCE_DEBUGINFO (0x80) 2958 #define CRC_MATCHES (0x100) 2959 #define ADD_SYMBOL_FILE (0x200) 2960 #define USE_OLD_ADD_SYM (0x400) 2961 #define PERCPU_SYMS (0x800) 2962 #define MODSECT_UNKNOWN (0x1000) 2963 #define MODSECT_V1 (0x2000) 2964 #define MODSECT_V2 (0x4000) 2965 #define MODSECT_V3 (0x8000) 2966 #define MODSECT_VMASK (MODSECT_V1|MODSECT_V2|MODSECT_V3) 2967 #define NO_STRIP (0x10000) 2968 2969 #define NO_LINE_NUMBERS() ((st->flags & GDB_SYMS_PATCHED) && !(kt->flags2 & KASLR)) 2970 2971 #endif /* !GDB_COMMON */ 2972 2973 #define ALL_MODULES (0) 2974 2975 #define MAX_MOD_NAMELIST (256) 2976 #define MAX_MOD_NAME (64) 2977 #define MAX_MOD_SEC_NAME (64) 2978 2979 #define MOD_EXT_SYMS (0x1) 2980 #define MOD_LOAD_SYMS (0x2) 2981 #define MOD_REMOTE (0x4) 2982 #define MOD_KALLSYMS (0x8) 2983 #define MOD_INITRD (0x10) 2984 #define MOD_NOPATCH (0x20) 2985 #define MOD_INIT (0x40) 2986 #define MOD_DO_READNOW (0x80) 2987 2988 #define SEC_FOUND (0x10000) 2989 2990 struct mod_section_data { 2991 #if defined(GDB_5_3) || defined(GDB_6_0) 2992 struct sec *section; 2993 #else 2994 struct bfd_section *section; 2995 #endif 2996 char name[MAX_MOD_SEC_NAME]; 2997 ulong offset; 2998 ulong size; 2999 int priority; 3000 int flags; 3001 ulong addr; 3002 }; 3003 3004 /* Emulate enum mod_mem_type in include/linux/module.h */ 3005 #define MOD_TEXT (0) 3006 #define MOD_DATA (1) 3007 #define MOD_RODATA (2) 3008 #define MOD_RO_AFTER_INIT (3) 3009 #define MOD_INIT_TEXT (4) 3010 #define MOD_INIT_DATA (5) 3011 #define MOD_INIT_RODATA (6) 3012 #define MOD_MEM_NUM_TYPES (7) 3013 #define MOD_INVALID (-1) 3014 3015 struct module_memory { 3016 ulong base; 3017 uint size; 3018 }; 3019 3020 struct load_module { 3021 ulong mod_base; 3022 ulong module_struct; 3023 long mod_size; 3024 char mod_namelist[MAX_MOD_NAMELIST]; 3025 char mod_name[MAX_MOD_NAME]; 3026 ulong mod_flags; 3027 struct syment *mod_symtable; 3028 struct syment *mod_symend; 3029 long mod_ext_symcnt; 3030 struct syment *mod_ext_symtable; 3031 struct syment *mod_ext_symend; 3032 long mod_load_symcnt; 3033 struct syment *mod_load_symtable; 3034 struct syment *mod_load_symend; 3035 long mod_symalloc; 3036 struct symbol_namespace mod_load_namespace; 3037 ulong mod_size_of_struct; 3038 ulong mod_text_start; 3039 ulong mod_etext_guess; 3040 ulong mod_rodata_start; 3041 ulong mod_data_start; 3042 ulong mod_bss_start; 3043 int mod_sections; 3044 struct mod_section_data *mod_section_data; 3045 ulong mod_init_text_size; 3046 ulong mod_init_module_ptr; 3047 ulong mod_init_size; 3048 struct syment *mod_init_symtable; 3049 struct syment *mod_init_symend; 3050 ulong mod_percpu; 3051 ulong mod_percpu_size; 3052 struct objfile *loaded_objfile; 3053 3054 /* For 6.4 module_memory */ 3055 struct module_memory mem[MOD_MEM_NUM_TYPES]; 3056 struct syment **symtable; 3057 struct syment **symend; 3058 struct syment *ext_symtable[MOD_MEM_NUM_TYPES]; 3059 struct syment *ext_symend[MOD_MEM_NUM_TYPES]; 3060 struct syment *load_symtable[MOD_MEM_NUM_TYPES]; 3061 struct syment *load_symend[MOD_MEM_NUM_TYPES]; 3062 }; 3063 3064 #define IN_MODULE(A,L) (in_module_range(A, L, MOD_TEXT, MOD_RO_AFTER_INIT) != MOD_INVALID) 3065 #define IN_MODULE_INIT(A,L) (in_module_range(A, L, MOD_INIT_TEXT, MOD_INIT_RODATA) != MOD_INVALID) 3066 #define IN_MODULE_TEXT(A,L) (in_module_range(A, L, MOD_TEXT, MOD_TEXT) == MOD_TEXT || \ 3067 in_module_range(A, L, MOD_INIT_TEXT, MOD_INIT_TEXT) == MOD_INIT_TEXT) 3068 #define IN_MODULE_PERCPU(A,L) \ 3069 (((ulong)(A) >= (L)->mod_percpu) && ((ulong)(A) < ((L)->mod_percpu+(L)->mod_percpu_size))) 3070 3071 #define MODULE_PERCPU_SYMS_LOADED(L) ((L)->mod_percpu && (L)->mod_percpu_size) 3072 3073 #define for_each_mod_mem_type(type) \ 3074 for ((type) = MOD_TEXT; (type) < MOD_MEM_NUM_TYPES; (type)++) 3075 3076 #ifndef GDB_COMMON 3077 3078 #define KVADDR (0x1) 3079 #define UVADDR (0x2) 3080 #define PHYSADDR (0x4) 3081 #define XENMACHADDR (0x8) 3082 #define FILEADDR (0x10) 3083 #define AMBIGUOUS (~0) 3084 3085 #define USE_USER_PGD (UVADDR << 2) 3086 3087 #define VERIFY_ADDR (0x8) /* vm_area_dump() flags -- must follow */ 3088 #define PRINT_INODES (0x10) /* KVADDR, UVADDR, and PHYSADDR */ 3089 #define PRINT_MM_STRUCT (0x20) 3090 #define PRINT_VMA_STRUCTS (0x40) 3091 #define PRINT_SINGLE_VMA (0x80) 3092 #define PRINT_RADIX_10 (0x100) 3093 #define PRINT_RADIX_16 (0x200) 3094 #define PRINT_NRPAGES (0x400) 3095 3096 #define MIN_PAGE_SIZE (4096) 3097 3098 #define PTOB(X) ((ulonglong)(X) << machdep->pageshift) 3099 #define BTOP(X) ((ulonglong)(X) >> machdep->pageshift) 3100 3101 #define PAGESIZE() (machdep->pagesize) 3102 #define PAGESHIFT() (machdep->pageshift) 3103 3104 #define PAGEOFFSET(X) (((ulong)(X)) & machdep->pageoffset) 3105 #define VIRTPAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3106 #define PHYSPAGEBASE(X) (((physaddr_t)(X)) & (physaddr_t)machdep->pagemask) 3107 3108 #define IS_ZEROPAGE(paddr) ((paddr) == vt->zero_paddr || \ 3109 (paddr) == vt->huge_zero_paddr) 3110 3111 /* 3112 * Sparse memory stuff 3113 * These must follow the definitions in the kernel mmzone.h 3114 */ 3115 #define SECTION_SIZE_BITS() (machdep->section_size_bits) 3116 #define MAX_PHYSMEM_BITS() (machdep->max_physmem_bits) 3117 #define SECTIONS_SHIFT() (MAX_PHYSMEM_BITS() - SECTION_SIZE_BITS()) 3118 #define PA_SECTION_SHIFT() (SECTION_SIZE_BITS()) 3119 #define PFN_SECTION_SHIFT() (SECTION_SIZE_BITS() - PAGESHIFT()) 3120 #define NR_MEM_SECTIONS() (1UL << SECTIONS_SHIFT()) 3121 #define PAGES_PER_SECTION() (1UL << PFN_SECTION_SHIFT()) 3122 #define PAGE_SECTION_MASK() (~(PAGES_PER_SECTION()-1)) 3123 3124 #define pfn_to_section_nr(pfn) ((pfn) >> PFN_SECTION_SHIFT()) 3125 #define section_nr_to_pfn(sec) ((sec) << PFN_SECTION_SHIFT()) 3126 3127 #define SECTIONS_PER_ROOT() (machdep->sections_per_root) 3128 3129 /* CONFIG_SPARSEMEM_EXTREME */ 3130 #define _SECTIONS_PER_ROOT_EXTREME() (PAGESIZE() / SIZE(mem_section)) 3131 /* !CONFIG_SPARSEMEM_EXTREME */ 3132 #define _SECTIONS_PER_ROOT() (1) 3133 3134 #define SECTION_NR_TO_ROOT(sec) ((sec) / SECTIONS_PER_ROOT()) 3135 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 3136 #define NR_SECTION_ROOTS() (DIV_ROUND_UP(NR_MEM_SECTIONS(), SECTIONS_PER_ROOT())) 3137 #define SECTION_ROOT_MASK() (SECTIONS_PER_ROOT() - 1) 3138 3139 struct QEMUCPUSegment { 3140 uint32_t selector; 3141 uint32_t limit; 3142 uint32_t flags; 3143 uint32_t pad; 3144 uint64_t base; 3145 }; 3146 3147 typedef struct QEMUCPUSegment QEMUCPUSegment; 3148 3149 struct QEMUCPUState { 3150 uint32_t version; 3151 uint32_t size; 3152 uint64_t rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp; 3153 uint64_t r8, r9, r10, r11, r12, r13, r14, r15; 3154 uint64_t rip, rflags; 3155 QEMUCPUSegment cs, ds, es, fs, gs, ss; 3156 QEMUCPUSegment ldt, tr, gdt, idt; 3157 uint64_t cr[5]; 3158 }; 3159 3160 typedef struct QEMUCPUState QEMUCPUState; 3161 3162 /* 3163 * Machine specific stuff 3164 */ 3165 3166 #ifdef ARM 3167 #define _32BIT_ 3168 #define MACHINE_TYPE "ARM" 3169 3170 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3171 3172 #define PTOV(X) \ 3173 ((unsigned long)(X)-(machdep->machspec->phys_base)+(machdep->kvbase)) 3174 #define VTOP(X) \ 3175 ((unsigned long)(X)-(machdep->kvbase)+(machdep->machspec->phys_base)) 3176 3177 #define IS_VMALLOC_ADDR(X) arm_is_vmalloc_addr((ulong)(X)) 3178 3179 #define DEFAULT_MODULES_VADDR (machdep->kvbase - 16 * 1024 * 1024) 3180 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3181 #define MODULES_END (machdep->machspec->modules_end) 3182 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3183 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3184 3185 #define PGDIR_SHIFT (21) 3186 #define PTRS_PER_PTE (512) 3187 #define PTRS_PER_PGD (2048) 3188 3189 #define PGD_OFFSET(vaddr) ((vaddr) >> PGDIR_SHIFT) 3190 #define PTE_OFFSET(vaddr) (((vaddr) >> PAGESHIFT()) & (PTRS_PER_PTE - 1)) 3191 3192 #define __SWP_TYPE_SHIFT 3 3193 #define __SWP_TYPE_BITS 6 3194 #define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1) 3195 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT) 3196 3197 #define SWP_TYPE(entry) (((entry) >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK) 3198 #define SWP_OFFSET(entry) ((entry) >> __SWP_OFFSET_SHIFT) 3199 3200 #define __swp_type(entry) SWP_TYPE(entry) 3201 #define __swp_offset(entry) SWP_OFFSET(entry) 3202 3203 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 0 : 2) 3204 3205 #define _SECTION_SIZE_BITS 28 3206 #define _MAX_PHYSMEM_BITS 32 3207 3208 /*add for LPAE*/ 3209 typedef unsigned long long u64; 3210 typedef signed int s32; 3211 typedef u64 pgd_t; 3212 typedef u64 pmd_t; 3213 typedef u64 pte_t; 3214 3215 #define PMDSIZE() (PAGESIZE()) 3216 #define LPAE_PGDIR_SHIFT (30) 3217 #define LPAE_PMDIR_SHIFT (21) 3218 3219 #define LPAE_PGD_OFFSET(vaddr) ((vaddr) >> LPAE_PGDIR_SHIFT) 3220 #define LPAE_PMD_OFFSET(vaddr) (((vaddr) >> LPAE_PMDIR_SHIFT) & \ 3221 ((1<<(LPAE_PGDIR_SHIFT-LPAE_PMDIR_SHIFT))-1)) 3222 3223 #define _SECTION_SIZE_BITS_LPAE 28 3224 #define _MAX_PHYSMEM_BITS_LPAE 36 3225 3226 /* 3227 * #define PTRS_PER_PTE 512 3228 * #define PTRS_PER_PMD 512 3229 * #define PTRS_PER_PGD 4 3230 * 3231 */ 3232 3233 #define LPAE_PGDIR_SIZE() 32 3234 #define LPAE_PGDIR_OFFSET(X) (((ulong)(X)) & (LPAE_PGDIR_SIZE() - 1)) 3235 3236 #define LPAE_PMDIR_SIZE() 4096 3237 #define LPAE_PMDIR_OFFSET(X) (((ulong)(X)) & (LPAE_PMDIR_SIZE() - 1)) 3238 3239 #define LPAE_PTEDIR_SIZE() 4096 3240 #define LPAE_PTEDIR_OFFSET(X) (((ulong)(X)) & (LPAE_PTEDIR_SIZE() - 1)) 3241 3242 /*section size for LPAE is 2MiB*/ 3243 #define LPAE_SECTION_PAGE_MASK (~((MEGABYTES(2))-1)) 3244 3245 #define _PHYSICAL_MASK_LPAE ((1ULL << _MAX_PHYSMEM_BITS_LPAE) - 1) 3246 #define PAGE_BASE_MASK ((u64)((s32)machdep->pagemask & _PHYSICAL_MASK_LPAE)) 3247 #define LPAE_PAGEBASE(X) (((ulonglong)(X)) & PAGE_BASE_MASK) 3248 3249 #define LPAE_VTOP(X) \ 3250 ((unsigned long long)(unsigned long)(X) - \ 3251 (machdep->kvbase) + (machdep->machspec->phys_base)) 3252 3253 #define IS_LAST_PGD_READ_LPAE(pgd) ((pgd) == \ 3254 machdep->machspec->last_pgd_read_lpae) 3255 #define IS_LAST_PMD_READ_LPAE(pmd) ((pmd) == \ 3256 machdep->machspec->last_pmd_read_lpae) 3257 #define IS_LAST_PTBL_READ_LPAE(ptbl) ((ptbl) == \ 3258 machdep->machspec->last_ptbl_read_lpae) 3259 3260 #define FILL_PGD_LPAE(PGD, TYPE, SIZE) \ 3261 if (!IS_LAST_PGD_READ_LPAE(PGD)) { \ 3262 readmem((ulonglong)(PGD), TYPE, machdep->pgd, \ 3263 SIZE, "pmd page", FAULT_ON_ERROR); \ 3264 machdep->machspec->last_pgd_read_lpae \ 3265 = (ulonglong)(PGD); \ 3266 } 3267 #define FILL_PMD_LPAE(PMD, TYPE, SIZE) \ 3268 if (!IS_LAST_PMD_READ_LPAE(PMD)) { \ 3269 readmem((ulonglong)(PMD), TYPE, machdep->pmd, \ 3270 SIZE, "pmd page", FAULT_ON_ERROR); \ 3271 machdep->machspec->last_pmd_read_lpae \ 3272 = (ulonglong)(PMD); \ 3273 } 3274 3275 #define FILL_PTBL_LPAE(PTBL, TYPE, SIZE) \ 3276 if (!IS_LAST_PTBL_READ_LPAE(PTBL)) { \ 3277 readmem((ulonglong)(PTBL), TYPE, machdep->ptbl, \ 3278 SIZE, "page table", FAULT_ON_ERROR); \ 3279 machdep->machspec->last_ptbl_read_lpae \ 3280 = (ulonglong)(PTBL); \ 3281 } 3282 #endif /* ARM */ 3283 3284 #ifndef EM_AARCH64 3285 #define EM_AARCH64 183 3286 #endif 3287 3288 #ifdef ARM64 3289 #define _64BIT_ 3290 #define MACHINE_TYPE "ARM64" 3291 3292 #define USERSPACE_TOP (machdep->machspec->userspace_top) 3293 #define PAGE_OFFSET (machdep->machspec->page_offset) 3294 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3295 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3296 #define VMEMMAP_VADDR (machdep->machspec->vmemmap_vaddr) 3297 #define VMEMMAP_END (machdep->machspec->vmemmap_end) 3298 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3299 #define MODULES_END (machdep->machspec->modules_end) 3300 3301 #define PTOV(X) arm64_PTOV((ulong)(X)) 3302 #define VTOP(X) arm64_VTOP((ulong)(X)) 3303 3304 #define IS_VMALLOC_ADDR(X) arm64_IS_VMALLOC_ADDR((ulong)(X)) 3305 3306 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3307 3308 /* 3309 * 48-bit physical address supported. 3310 */ 3311 #define PHYS_MASK_SHIFT (48) 3312 #define PHYS_MASK (((1UL) << PHYS_MASK_SHIFT) - 1) 3313 3314 typedef signed int s32; 3315 3316 /* 3317 * 3-levels / 4K pages 3318 * 39-bit VA 3319 */ 3320 #define PTRS_PER_PGD_L3_4K ((1UL) << (39 - 30)) 3321 #define PTRS_PER_PMD_L3_4K (512) 3322 #define PTRS_PER_PTE_L3_4K (512) 3323 #define PGDIR_SHIFT_L3_4K (30) 3324 #define PGDIR_SIZE_L3_4K ((1UL) << PGDIR_SHIFT_L3_4K) 3325 #define PGDIR_MASK_L3_4K (~(PGDIR_SIZE_L3_4K-1)) 3326 #define PMD_SHIFT_L3_4K (21) 3327 #define PMD_SIZE_L3_4K (1UL << PMD_SHIFT_L3_4K) 3328 #define PMD_MASK_L3_4K (~(PMD_SIZE_L3_4K-1)) 3329 3330 /* 3331 * 4-levels / 4K pages 3332 * 48-bit VA 3333 */ 3334 #define PTRS_PER_PGD_L4_4K ((1UL) << (48 - 39)) 3335 #define PTRS_PER_PUD_L4_4K (512) 3336 #define PTRS_PER_PMD_L4_4K (512) 3337 #define PTRS_PER_PTE_L4_4K (512) 3338 #define PGDIR_SHIFT_L4_4K (39) 3339 #define PGDIR_SIZE_L4_4K ((1UL) << PGDIR_SHIFT_L4_4K) 3340 #define PGDIR_MASK_L4_4K (~(PGDIR_SIZE_L4_4K-1)) 3341 #define PUD_SHIFT_L4_4K (30) 3342 #define PUD_SIZE_L4_4K ((1UL) << PUD_SHIFT_L4_4K) 3343 #define PUD_MASK_L4_4K (~(PUD_SIZE_L4_4K-1)) 3344 #define PMD_SHIFT_L4_4K (21) 3345 #define PMD_SIZE_L4_4K (1UL << PMD_SHIFT_L4_4K) 3346 #define PMD_MASK_L4_4K (~(PMD_SIZE_L4_4K-1)) 3347 3348 #define PGDIR_SIZE_48VA (1UL << ((48 - 39) + 3)) 3349 #define PGDIR_MASK_48VA (~(PGDIR_SIZE_48VA - 1)) 3350 #define PGDIR_OFFSET_48VA(X) (((ulong)(X)) & (PGDIR_SIZE_48VA - 1)) 3351 3352 /* 3353 * 2-levels / 16K pages 3354 * 36-bit VA 3355 */ 3356 #define PTRS_PER_PGD_L2_16K ((1UL) << (36 - 25)) 3357 #define PTRS_PER_PTE_L2_16K (2048) 3358 #define PGDIR_SHIFT_L2_16K (25) 3359 #define PGDIR_SIZE_L2_16K ((1UL) << PGDIR_SHIFT_L2_16K) 3360 #define PGDIR_MASK_L2_16K (~(PGDIR_SIZE_L2_16K-1)) 3361 #define PGDIR_OFFSET_L2_16K(X) (((ulong)(X)) & ((machdep->ptrs_per_pgd * 8) - 1)) 3362 3363 /* 3364 * 3-levels / 16K pages 3365 * 47-bit VA 3366 */ 3367 #define PTRS_PER_PGD_L3_16K ((1UL) << (47 - 36)) 3368 #define PTRS_PER_PMD_L3_16K (2048) 3369 #define PTRS_PER_PTE_L3_16K (2048) 3370 #define PGDIR_SHIFT_L3_16K (36) 3371 #define PGDIR_SIZE_L3_16K ((1UL) << PGDIR_SHIFT_L3_16K) 3372 #define PGDIR_MASK_L3_16K (~(PGDIR_SIZE_L3_16K-1)) 3373 #define PMD_SHIFT_L3_16K (25) 3374 #define PMD_SIZE_L3_16K (1UL << PMD_SHIFT_L3_16K) 3375 #define PMD_MASK_L3_16K (~(PMD_SIZE_L3_16K-1)) 3376 #define PGDIR_OFFSET_L3_16K(X) (((ulong)(X)) & ((machdep->ptrs_per_pgd * 8) - 1)) 3377 3378 /* 3379 * 4-levels / 16K pages 3380 * 48-bit VA 3381 */ 3382 #define PTRS_PER_PGD_L4_16K ((1UL) << (48 - 47)) 3383 #define PTRS_PER_PUD_L4_16K (2048) 3384 #define PTRS_PER_PMD_L4_16K (2048) 3385 #define PTRS_PER_PTE_L4_16K (2048) 3386 #define PGDIR_SHIFT_L4_16K (47) 3387 #define PGDIR_SIZE_L4_16K ((1UL) << PGDIR_SHIFT_L4_16K) 3388 #define PGDIR_MASK_L4_16K (~(PGDIR_SIZE_L4_16K-1)) 3389 #define PUD_SHIFT_L4_16K (36) 3390 #define PUD_SIZE_L4_16K ((1UL) << PUD_SHIFT_L4_16K) 3391 #define PUD_MASK_L4_16K (~(PUD_SIZE_L4_16K-1)) 3392 #define PMD_SHIFT_L4_16K (25) 3393 #define PMD_SIZE_L4_16K (1UL << PMD_SHIFT_L4_16K) 3394 #define PMD_MASK_L4_16K (~(PMD_SIZE_L4_16K-1)) 3395 #define PGDIR_OFFSET_L4_16K(X) (((ulong)(X)) & ((machdep->ptrs_per_pgd * 8) - 1)) 3396 3397 /* 3398 * 3-levels / 64K pages 3399 * 48-bit, 52-bit VA 3400 */ 3401 #define PTRS_PER_PGD_L3_64K_48 ((1UL) << (48 - 42)) 3402 #define PTRS_PER_PGD_L3_64K_52 ((1UL) << (52 - 42)) 3403 #define PTRS_PER_PMD_L3_64K (8192) 3404 #define PTRS_PER_PTE_L3_64K (8192) 3405 #define PGDIR_SHIFT_L3_64K (42) 3406 #define PGDIR_SIZE_L3_64K ((1UL) << PGDIR_SHIFT_L3_64K) 3407 #define PGDIR_MASK_L3_64K (~(PGDIR_SIZE_L3_64K-1)) 3408 #define PMD_SHIFT_L3_64K (29) 3409 #define PMD_SIZE_L3_64K (1UL << PMD_SHIFT_L3_64K) 3410 #define PMD_MASK_L3_64K (~(PMD_SIZE_L3_64K-1)) 3411 #define PGDIR_OFFSET_L3_64K(X) (((ulong)(X)) & ((machdep->ptrs_per_pgd * 8) - 1)) 3412 3413 /* 3414 * 2-levels / 64K pages 3415 * 42-bit VA 3416 */ 3417 #define PTRS_PER_PGD_L2_64K ((1UL) << (42 - 29)) 3418 #define PTRS_PER_PTE_L2_64K (8192) 3419 #define PGDIR_SHIFT_L2_64K (29) 3420 #define PGDIR_SIZE_L2_64K ((1UL) << PGDIR_SHIFT_L2_64K) 3421 #define PGDIR_MASK_L2_64K (~(PGDIR_SIZE_L2_64K-1)) 3422 3423 /* 3424 * Software defined PTE bits definition. 3425 * (arch/arm64/include/asm/pgtable.h) 3426 */ 3427 #define PTE_VALID (1UL << 0) 3428 #define PTE_DIRTY (1UL << 55) 3429 #define PTE_SPECIAL (1UL << 56) 3430 3431 /* 3432 * Level 3 descriptor (PTE). 3433 * (arch/arm64/include/asm/pgtable-hwdef.h) 3434 */ 3435 #define PTE_TYPE_MASK (3UL << 0) 3436 #define PTE_TYPE_FAULT (0UL << 0) 3437 #define PTE_TYPE_PAGE (3UL << 0) 3438 #define PTE_USER (1UL << 6) /* AP[1] */ 3439 #define PTE_RDONLY (1UL << 7) /* AP[2] */ 3440 #define PTE_SHARED (3UL << 8) /* SH[1:0], inner shareable */ 3441 #define PTE_AF (1UL << 10) /* Access Flag */ 3442 #define PTE_NG (1UL << 11) /* nG */ 3443 #define PTE_PXN (1UL << 53) /* Privileged XN */ 3444 #define PTE_UXN (1UL << 54) /* User XN */ 3445 3446 #define __swp_type(x) arm64_swp_type(x) 3447 #define __swp_offset(x) arm64_swp_offset(x) 3448 #define SWP_TYPE(x) __swp_type(x) 3449 #define SWP_OFFSET(x) __swp_offset(x) 3450 3451 #define KSYMS_START (0x1) 3452 #define PHYS_OFFSET (0x2) 3453 #define VM_L2_64K (0x4) 3454 #define VM_L3_64K (0x8) 3455 #define VM_L3_4K (0x10) 3456 #define KDUMP_ENABLED (0x20) 3457 #define IRQ_STACKS (0x40) 3458 #define NEW_VMEMMAP (0x80) 3459 #define VM_L4_4K (0x100) 3460 #define UNW_4_14 (0x200) 3461 #define FLIPPED_VM (0x400) 3462 #define HAS_PHYSVIRT_OFFSET (0x800) 3463 #define OVERFLOW_STACKS (0x1000) 3464 #define ARM64_MTE (0x2000) 3465 #define VM_L3_16K (0x4000) 3466 #define VM_L2_16K (0x8000) 3467 #define VM_L4_16K (0x10000) 3468 3469 /* 3470 * Get kimage_voffset from /dev/crash 3471 */ 3472 #define DEV_CRASH_ARCH_DATA _IOR('c', 1, unsigned long) 3473 3474 /* 3475 * sources: Documentation/arm64/memory.txt 3476 * arch/arm64/include/asm/memory.h 3477 * arch/arm64/include/asm/pgtable.h 3478 */ 3479 #define ARM64_VA_START ((0xffffffffffffffffUL) \ 3480 << machdep->machspec->VA_BITS) 3481 #define _VA_START(va) ((0xffffffffffffffffUL) - \ 3482 ((1UL) << ((va) - 1)) + 1) 3483 #define TEXT_OFFSET_MASK (~((MEGABYTES(2UL))-1)) 3484 3485 #define ARM64_PAGE_OFFSET ((0xffffffffffffffffUL) \ 3486 << (machdep->machspec->VA_BITS - 1)) 3487 /* kernels >= v5.4 the kernel VA space is flipped */ 3488 #define ARM64_FLIP_PAGE_OFFSET (-(1UL) << machdep->machspec->VA_BITS) 3489 3490 #define ARM64_USERSPACE_TOP ((1UL) << machdep->machspec->VA_BITS) 3491 #define ARM64_USERSPACE_TOP_ACTUAL ((1UL) << machdep->machspec->VA_BITS_ACTUAL) 3492 3493 /* only used for v4.6 or later */ 3494 #define ARM64_MODULES_VSIZE MEGABYTES(128) 3495 #define ARM64_KASAN_SHADOW_SIZE (1UL << (machdep->machspec->VA_BITS - 3)) 3496 3497 /* 3498 * The following 3 definitions are the original values, but are obsolete 3499 * for 3.17 and later kernels because they are now build-time calculations. 3500 * They all depend on the kernel's new VMEMMAP_SIZE value, which is dependent 3501 * upon the size of struct page. Accordingly, arm64_calc_virtual_memory_ranges() 3502 * determines their values at POST_GDB time. 3503 */ 3504 #define ARM64_VMALLOC_END (ARM64_PAGE_OFFSET - 0x400000000UL - KILOBYTES(64) - 1) 3505 #define ARM64_VMEMMAP_VADDR ((ARM64_VMALLOC_END+1) + KILOBYTES(64)) 3506 #define ARM64_VMEMMAP_END (ARM64_VMEMMAP_VADDR + GIGABYTES(8UL) - 1) 3507 3508 #define ARM64_STACK_SIZE (16384) 3509 #define ARM64_IRQ_STACK_SIZE ARM64_STACK_SIZE 3510 #define ARM64_OVERFLOW_STACK_SIZE (4096) 3511 3512 #define _SECTION_SIZE_BITS 30 3513 #define _SECTION_SIZE_BITS_5_12 27 3514 #define _SECTION_SIZE_BITS_5_12_64K 29 3515 #define _MAX_PHYSMEM_BITS 40 3516 #define _MAX_PHYSMEM_BITS_3_17 48 3517 #define _MAX_PHYSMEM_BITS_52 52 3518 3519 typedef unsigned long long __u64; 3520 typedef unsigned long long u64; 3521 3522 struct arm64_user_pt_regs { 3523 __u64 regs[31]; 3524 __u64 sp; 3525 __u64 pc; 3526 __u64 pstate; 3527 }; 3528 3529 struct arm64_pt_regs { 3530 union { 3531 struct arm64_user_pt_regs user_regs; 3532 struct { 3533 u64 regs[31]; 3534 u64 sp; 3535 u64 pc; 3536 u64 pstate; 3537 }; 3538 }; 3539 u64 orig_x0; 3540 u64 syscallno; 3541 }; 3542 3543 /* AArch32 CPSR bits */ 3544 #define PSR_MODE32_BIT 0x00000010 3545 3546 #define TIF_SIGPENDING (0) 3547 #define display_idt_table() \ 3548 error(FATAL, "-d option is not applicable to ARM64 architecture\n") 3549 3550 struct machine_specific { 3551 ulong flags; 3552 ulong userspace_top; 3553 ulong page_offset; 3554 ulong vmalloc_start_addr; 3555 ulong vmalloc_end; 3556 ulong vmemmap_vaddr; 3557 ulong vmemmap_end; 3558 ulong modules_vaddr; 3559 ulong modules_end; 3560 ulong phys_offset; 3561 ulong __exception_text_start; 3562 ulong __exception_text_end; 3563 struct arm64_pt_regs *panic_task_regs; 3564 ulong PTE_PROT_NONE; 3565 ulong PTE_FILE; 3566 ulong VA_BITS; 3567 ulong __SWP_TYPE_BITS; 3568 ulong __SWP_TYPE_SHIFT; 3569 ulong __SWP_TYPE_MASK; 3570 ulong __SWP_OFFSET_BITS; 3571 ulong __SWP_OFFSET_SHIFT; 3572 ulong __SWP_OFFSET_MASK; 3573 ulong crash_kexec_start; 3574 ulong crash_kexec_end; 3575 ulong crash_save_cpu_start; 3576 ulong crash_save_cpu_end; 3577 ulong kernel_flags; 3578 ulong irq_stack_size; 3579 ulong *irq_stacks; 3580 char *irq_stackbuf; 3581 ulong __irqentry_text_start; 3582 ulong __irqentry_text_end; 3583 ulong overflow_stack_size; 3584 ulong *overflow_stacks; 3585 char *overflow_stackbuf; 3586 /* for exception vector code */ 3587 ulong exp_entry1_start; 3588 ulong exp_entry1_end; 3589 ulong exp_entry2_start; 3590 ulong exp_entry2_end; 3591 /* only needed for v4.6 or later kernel */ 3592 ulong kimage_voffset; 3593 ulong kimage_text; 3594 ulong kimage_end; 3595 ulong user_eframe_offset; 3596 /* for v4.14 or later */ 3597 ulong kern_eframe_offset; 3598 ulong machine_kexec_start; 3599 ulong machine_kexec_end; 3600 ulong VA_BITS_ACTUAL; 3601 ulong CONFIG_ARM64_VA_BITS; 3602 ulong VA_START; 3603 ulong CONFIG_ARM64_KERNELPACMASK; 3604 ulong physvirt_offset; 3605 ulong struct_page_size; 3606 ulong vmemmap; 3607 }; 3608 3609 struct arm64_stackframe { 3610 unsigned long x19; 3611 unsigned long x20; 3612 unsigned long x21; 3613 unsigned long x22; 3614 unsigned long x23; 3615 unsigned long x24; 3616 unsigned long x25; 3617 unsigned long x26; 3618 unsigned long x27; 3619 unsigned long x28; 3620 unsigned long fp; 3621 unsigned long sp; 3622 unsigned long pc; 3623 }; 3624 3625 #endif /* ARM64 */ 3626 3627 #ifdef MIPS 3628 #define _32BIT_ 3629 #define MACHINE_TYPE "MIPS" 3630 3631 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3632 3633 #define PTOV(X) ((unsigned long)(X) + 0x80000000lu) 3634 #define VTOP(X) ((unsigned long)(X) & 0x1ffffffflu) 3635 3636 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start) 3637 3638 #define DEFAULT_MODULES_VADDR (machdep->kvbase - 16 * 1024 * 1024) 3639 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3640 #define MODULES_END (machdep->machspec->modules_end) 3641 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3642 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3643 3644 #define __SWP_TYPE_SHIFT 3 3645 #define __SWP_TYPE_BITS 6 3646 #define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1) 3647 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT) 3648 3649 #define SWP_TYPE(entry) (((entry) >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK) 3650 #define SWP_OFFSET(entry) ((entry) >> __SWP_OFFSET_SHIFT) 3651 3652 #define __swp_type(entry) SWP_TYPE(entry) 3653 #define __swp_offset(entry) SWP_OFFSET(entry) 3654 3655 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 1 : 2) 3656 3657 #define _SECTION_SIZE_BITS 26 3658 #define _MAX_PHYSMEM_BITS 32 3659 #endif /* MIPS */ 3660 3661 #ifdef MIPS64 3662 #define _64BIT_ 3663 #define MACHINE_TYPE "MIPS64" 3664 3665 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3666 #define IS_CKPHYS(X) (((X) >= 0xffffffff80000000lu) && \ 3667 ((X) < 0xffffffffc0000000lu)) 3668 #define IS_XKPHYS(X) (((X) >= 0x8000000000000000lu) && \ 3669 ((X) < 0xc000000000000000lu)) 3670 3671 #define PTOV(X) ((ulong)(X) + 0x9800000000000000lu) 3672 #define VTOP(X) (IS_CKPHYS(X) ? ((ulong)(X) & 0x000000001ffffffflu) \ 3673 : ((ulong)(X) & 0x0000fffffffffffflu)) 3674 3675 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start && !IS_CKPHYS(X)) 3676 3677 #define DEFAULT_MODULES_VADDR 0xffffffffc0000000lu 3678 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3679 #define MODULES_END (machdep->machspec->modules_end) 3680 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3681 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3682 3683 #define __SWP_TYPE_SHIFT 16 3684 #define __SWP_TYPE_BITS 8 3685 #define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1) 3686 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT) 3687 3688 #define SWP_TYPE(entry) (((entry) >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK) 3689 #define SWP_OFFSET(entry) ((entry) >> __SWP_OFFSET_SHIFT) 3690 3691 #define __swp_type(entry) SWP_TYPE(entry) 3692 #define __swp_offset(entry) SWP_OFFSET(entry) 3693 3694 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 1 : 2) 3695 3696 #define _SECTION_SIZE_BITS 28 3697 #define _MAX_PHYSMEM_BITS 48 3698 #endif /* MIPS64 */ 3699 3700 #ifndef EM_RISCV 3701 #define EM_RISCV 243 3702 #endif 3703 3704 #ifdef RISCV64 3705 #define _64BIT_ 3706 #define MACHINE_TYPE "RISCV64" 3707 3708 typedef struct { ulong pgd; } pgd_t; 3709 typedef struct { ulong p4d; } p4d_t; 3710 typedef struct { ulong pud; } pud_t; 3711 typedef struct { ulong pmd; } pmd_t; 3712 typedef struct { ulong pte; } pte_t; 3713 typedef signed int s32; 3714 3715 /* arch/riscv/include/asm/pgtable-64.h */ 3716 #define PGD_SHIFT_L3 (30) 3717 #define PGD_SHIFT_L4 (39) 3718 #define PGD_SHIFT_L5 (48) 3719 3720 #define P4D_SHIFT (39) 3721 #define PUD_SHIFT (30) 3722 #define PMD_SHIFT (21) 3723 3724 #define PTRS_PER_PGD (512) 3725 #define PTRS_PER_P4D (512) 3726 #define PTRS_PER_PUD (512) 3727 #define PTRS_PER_PMD (512) 3728 #define PTRS_PER_PTE (512) 3729 3730 /* 3731 * Mask for bit 0~53(PROT and PPN) of PTE 3732 * 63 6261 60 54 53 10 9 8 7 6 5 4 3 2 1 0 3733 * N PBMT Reserved P P N RSW D A G U X W R V 3734 */ 3735 #define PTE_PFN_PROT_MASK 0x3FFFFFFFFFFFFF 3736 3737 /* 3738 * 3-levels / 4K pages 3739 * 3740 * sv39 3741 * PGD | PMD | PTE | OFFSET | 3742 * 9 | 9 | 9 | 12 | 3743 */ 3744 #define pgd_index_l3_4k(addr) (((addr) >> PGD_SHIFT_L3) & (PTRS_PER_PGD - 1)) 3745 #define pmd_index_l3_4k(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)) 3746 #define pte_index_l3_4k(addr) (((addr) >> PAGESHIFT()) & (PTRS_PER_PTE - 1)) 3747 3748 /* 3749 * 4-levels / 4K pages 3750 * 3751 * sv48 3752 * PGD | PUD | PMD | PTE | OFFSET | 3753 * 9 | 9 | 9 | 9 | 12 | 3754 */ 3755 #define pgd_index_l4_4k(addr) (((addr) >> PGD_SHIFT_L4) & (PTRS_PER_PGD - 1)) 3756 #define pud_index_l4_4k(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1)) 3757 #define pmd_index_l4_4k(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)) 3758 #define pte_index_l4_4k(addr) (((addr) >> PAGESHIFT()) & (PTRS_PER_PTE - 1)) 3759 3760 /* 3761 * 5-levels / 4K pages 3762 * 3763 * sv57 3764 * PGD | P4D | PUD | PMD | PTE | OFFSET | 3765 * 9 | 9 | 9 | 9 | 9 | 12 | 3766 */ 3767 #define pgd_index_l5_4k(addr) (((addr) >> PGD_SHIFT_L5) & (PTRS_PER_PGD - 1)) 3768 #define p4d_index_l5_4k(addr) (((addr) >> P4D_SHIFT) & (PTRS_PER_P4D - 1)) 3769 #define pud_index_l5_4k(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1)) 3770 #define pmd_index_l5_4k(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)) 3771 #define pte_index_l5_4k(addr) (((addr) >> PAGESHIFT()) & (PTRS_PER_PTE - 1)) 3772 3773 /* machdep->flags */ 3774 #define KSYMS_START (0x1) 3775 #define VM_L3_4K (0x2) 3776 #define VM_L3_2M (0x4) 3777 #define VM_L3_1G (0x8) 3778 #define VM_L4_4K (0x10) 3779 #define VM_L4_2M (0x20) 3780 #define VM_L4_1G (0x40) 3781 #define VM_L5_4K (0x80) 3782 #define VM_L5_2M (0x100) 3783 #define VM_L5_1G (0x200) 3784 #define IRQ_STACKS (0x400) 3785 #define OVERFLOW_STACKS (0x800) 3786 3787 #define RISCV64_OVERFLOW_STACK_SIZE (1 << 12) 3788 3789 #define VM_FLAGS (VM_L3_4K | VM_L3_2M | VM_L3_1G | \ 3790 VM_L4_4K | VM_L4_2M | VM_L4_1G | \ 3791 VM_L5_4K | VM_L5_2M | VM_L5_1G) 3792 3793 /* 3794 * Direct memory mapping 3795 */ 3796 #define PTOV(X) \ 3797 (((unsigned long)(X)+(machdep->kvbase)) - machdep->machspec->phys_base) 3798 #define VTOP(X) ({ \ 3799 ulong _X = X; \ 3800 (THIS_KERNEL_VERSION >= LINUX(5,13,0) && \ 3801 (_X) >= machdep->machspec->kernel_link_addr) ? \ 3802 ((unsigned long)(_X)-(machdep->machspec->va_kernel_pa_offset)): \ 3803 (((unsigned long)(_X)-(machdep->kvbase)) + \ 3804 machdep->machspec->phys_base); \ 3805 }) 3806 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3807 3808 /* 3809 * Stack size order 3810 */ 3811 #define THREAD_SIZE_ORDER 2 3812 3813 #define PAGE_OFFSET (machdep->machspec->page_offset) 3814 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3815 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3816 #define VMEMMAP_VADDR (machdep->machspec->vmemmap_vaddr) 3817 #define VMEMMAP_END (machdep->machspec->vmemmap_end) 3818 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3819 #define MODULES_END (machdep->machspec->modules_end) 3820 #define IS_VMALLOC_ADDR(X) riscv64_IS_VMALLOC_ADDR((ulong)(X)) 3821 3822 /* from arch/riscv/include/asm/pgtable.h */ 3823 #define __SWP_TYPE_SHIFT 6 3824 #define __SWP_TYPE_BITS 5 3825 #define __SWP_TYPE_MASK ((1UL << __SWP_TYPE_BITS) - 1) 3826 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT) 3827 3828 #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) 3829 3830 #define SWP_TYPE(entry) (((entry) >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK) 3831 #define SWP_OFFSET(entry) ((entry) >> __SWP_OFFSET_SHIFT) 3832 #define __swp_type(entry) SWP_TYPE(entry) 3833 #define __swp_offset(entry) SWP_OFFSET(entry) 3834 3835 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 1 : 2) 3836 3837 /* from arch/riscv/include/asm/sparsemem.h */ 3838 #define _SECTION_SIZE_BITS 27 3839 #define _MAX_PHYSMEM_BITS 56 /* 56-bit physical address supported */ 3840 #define PHYS_MASK_SHIFT _MAX_PHYSMEM_BITS 3841 #define PHYS_MASK (((1UL) << PHYS_MASK_SHIFT) - 1) 3842 3843 #define IS_LAST_P4D_READ(p4d) ((ulong)(p4d) == machdep->machspec->last_p4d_read) 3844 #define FILL_P4D(P4D, TYPE, SIZE) \ 3845 if (!IS_LAST_P4D_READ(P4D)) { \ 3846 readmem((ulonglong)((ulong)(P4D)), TYPE, machdep->machspec->p4d, \ 3847 SIZE, "p4d page", FAULT_ON_ERROR); \ 3848 machdep->machspec->last_p4d_read = (ulong)(P4D); \ 3849 } 3850 3851 #endif /* RISCV64 */ 3852 3853 /* fix compilation errors due to elf.h version. */ 3854 #ifndef EM_LOONGARCH 3855 #define EM_LOONGARCH 258 3856 #endif 3857 3858 #ifdef LOONGARCH64 3859 #define _64BIT_ 3860 #define MACHINE_TYPE "LOONGARCH64" 3861 3862 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 3863 3864 #define IS_XKPRANGE(X) (((X) >= 0x8000000000000000lu) && \ 3865 ((X) < 0xc000000000000000lu)) 3866 3867 #define PTOV(X) ((ulong)(X) + 0x9000000000000000lu) 3868 #define VTOP(X) ((ulong)(X) & 0x0000fffffffffffflu) 3869 3870 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start) 3871 3872 #define DEFAULT_MODULES_VADDR 0xffff800000000000lu 3873 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3874 #define MODULES_END (machdep->machspec->modules_end) 3875 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3876 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3877 3878 #define __SWP_TYPE_SHIFT 16 3879 #define __SWP_TYPE_BITS 8 3880 #define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1) 3881 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT) 3882 3883 #define SWP_TYPE(entry) (((entry) >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK) 3884 #define SWP_OFFSET(entry) ((entry) >> __SWP_OFFSET_SHIFT) 3885 3886 #define __swp_type(entry) SWP_TYPE(entry) 3887 #define __swp_offset(entry) SWP_OFFSET(entry) 3888 3889 #define TIF_SIGPENDING (1) 3890 3891 #define _SECTION_SIZE_BITS 28 3892 #define _MAX_PHYSMEM_BITS 48 3893 #endif /* LOONGARCH64 */ 3894 3895 #ifdef X86 3896 #define _32BIT_ 3897 #define MACHINE_TYPE "X86" 3898 #define PTOV(X) ((unsigned long)(X)+(machdep->kvbase)) 3899 #define VTOP(X) ((unsigned long)(X)-(machdep->kvbase)) 3900 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start) 3901 #define KVBASE_MASK (0x1ffffff) 3902 3903 #define PGDIR_SHIFT_2LEVEL (22) 3904 #define PTRS_PER_PTE_2LEVEL (1024) 3905 #define PTRS_PER_PGD_2LEVEL (1024) 3906 3907 #define PGDIR_SHIFT_3LEVEL (30) 3908 #define PTRS_PER_PTE_3LEVEL (512) 3909 #define PTRS_PER_PGD_3LEVEL (4) 3910 #define PMD_SHIFT (21) /* only used by PAE translators */ 3911 #define PTRS_PER_PMD (512) /* only used by PAE translators */ 3912 3913 #define _PAGE_PRESENT 0x001 3914 #define _PAGE_RW 0x002 3915 #define _PAGE_USER 0x004 3916 #define _PAGE_PWT 0x008 3917 #define _PAGE_PCD 0x010 3918 #define _PAGE_ACCESSED 0x020 3919 #define _PAGE_DIRTY 0x040 3920 #define _PAGE_4M 0x080 /* 4 MB page, Pentium+, if present.. */ 3921 #define _PAGE_PSE 0x080 /* 4 MB (or 2MB) page, Pentium+, if present.. */ 3922 #define _PAGE_GLOBAL 0x100 /* Global TLB entry PPro+ */ 3923 #define _PAGE_PROTNONE (machdep->machspec->page_protnone) 3924 #define _PAGE_NX (0x8000000000000000ULL) 3925 3926 #define NONPAE_PAGEBASE(X) (((unsigned long)(X)) & (unsigned long)machdep->pagemask) 3927 #define NX_BIT_MASK (0x7fffffffffffffffULL) 3928 #define PAE_PAGEBASE(X) (((unsigned long long)(X)) & ((unsigned long long)machdep->pagemask) & NX_BIT_MASK) 3929 3930 #define SWP_TYPE(entry) (((entry) >> 1) & 0x3f) 3931 #define SWP_OFFSET(entry) ((entry) >> 8) 3932 #define __swp_type_PAE(entry) (((entry) >> 32) & 0x1f) 3933 #define __swp_type_nonPAE(entry) (((entry) >> 1) & 0x1f) 3934 #define __swp_offset_PAE(entry) (((entry) >> 32) >> 5) 3935 #define __swp_offset_nonPAE(entry) ((entry) >> 8) 3936 #define __swp_type(entry) (machdep->flags & PAE ? \ 3937 __swp_type_PAE(entry) : __swp_type_nonPAE(entry)) 3938 #define __swp_offset(entry) (machdep->flags & PAE ? \ 3939 __swp_offset_PAE(entry) : __swp_offset_nonPAE(entry)) 3940 3941 #define TIF_SIGPENDING (2) 3942 3943 // CONFIG_X86_PAE 3944 #define _SECTION_SIZE_BITS_PAE_ORIG 30 3945 #define _SECTION_SIZE_BITS_PAE_2_6_26 29 3946 #define _MAX_PHYSMEM_BITS_PAE 36 3947 3948 // !CONFIG_X86_PAE 3949 #define _SECTION_SIZE_BITS 26 3950 #define _MAX_PHYSMEM_BITS 32 3951 3952 #define IS_LAST_PMD_READ_PAE(pmd) ((ulong)(pmd) == machdep->machspec->last_pmd_read_PAE) 3953 #define IS_LAST_PTBL_READ_PAE(ptbl) ((ulong)(ptbl) == machdep->machspec->last_ptbl_read_PAE) 3954 3955 #define FILL_PMD_PAE(PMD, TYPE, SIZE) \ 3956 if (!IS_LAST_PMD_READ_PAE(PMD)) { \ 3957 readmem((ulonglong)(PMD), TYPE, machdep->pmd, \ 3958 SIZE, "pmd page", FAULT_ON_ERROR); \ 3959 machdep->machspec->last_pmd_read_PAE = (ulonglong)(PMD); \ 3960 } 3961 3962 #define FILL_PTBL_PAE(PTBL, TYPE, SIZE) \ 3963 if (!IS_LAST_PTBL_READ_PAE(PTBL)) { \ 3964 readmem((ulonglong)(PTBL), TYPE, machdep->ptbl, \ 3965 SIZE, "page table", FAULT_ON_ERROR); \ 3966 machdep->machspec->last_ptbl_read_PAE = (ulonglong)(PTBL); \ 3967 } 3968 3969 #endif /* X86 */ 3970 3971 #ifdef X86_64 3972 #define _64BIT_ 3973 #define MACHINE_TYPE "X86_64" 3974 3975 #define USERSPACE_TOP (machdep->machspec->userspace_top) 3976 #define PAGE_OFFSET (machdep->machspec->page_offset) 3977 #define VMALLOC_START (machdep->machspec->vmalloc_start_addr) 3978 #define VMALLOC_END (machdep->machspec->vmalloc_end) 3979 #define VMEMMAP_VADDR (machdep->machspec->vmemmap_vaddr) 3980 #define VMEMMAP_END (machdep->machspec->vmemmap_end) 3981 #define MODULES_VADDR (machdep->machspec->modules_vaddr) 3982 #define MODULES_END (machdep->machspec->modules_end) 3983 3984 #define __START_KERNEL_map 0xffffffff80000000UL 3985 #define MODULES_LEN (MODULES_END - MODULES_VADDR) 3986 3987 #define USERSPACE_TOP_ORIG 0x0000008000000000 3988 #define PAGE_OFFSET_ORIG 0x0000010000000000 3989 #define VMALLOC_START_ADDR_ORIG 0xffffff0000000000 3990 #define VMALLOC_END_ORIG 0xffffff7fffffffff 3991 #define MODULES_VADDR_ORIG 0xffffffffa0000000 3992 #define MODULES_END_ORIG 0xffffffffafffffff 3993 3994 #define USERSPACE_TOP_2_6_11 0x0000800000000000 3995 #define PAGE_OFFSET_2_6_11 0xffff810000000000 3996 #define VMALLOC_START_ADDR_2_6_11 0xffffc20000000000 3997 #define VMALLOC_END_2_6_11 0xffffe1ffffffffff 3998 #define MODULES_VADDR_2_6_11 0xffffffff88000000 3999 #define MODULES_END_2_6_11 0xfffffffffff00000 4000 4001 #define VMEMMAP_VADDR_2_6_24 0xffffe20000000000 4002 #define VMEMMAP_END_2_6_24 0xffffe2ffffffffff 4003 4004 #define MODULES_VADDR_2_6_26 0xffffffffa0000000 4005 4006 #define PAGE_OFFSET_2_6_27 0xffff880000000000 4007 #define MODULES_END_2_6_27 0xffffffffff000000 4008 4009 #define USERSPACE_TOP_XEN 0x0000800000000000 4010 #define PAGE_OFFSET_XEN 0xffff880000000000 4011 #define VMALLOC_START_ADDR_XEN 0xffffc20000000000 4012 #define VMALLOC_END_XEN 0xffffe1ffffffffff 4013 #define MODULES_VADDR_XEN 0xffffffff88000000 4014 #define MODULES_END_XEN 0xfffffffffff00000 4015 4016 #define USERSPACE_TOP_XEN_RHEL4 0x0000008000000000 4017 #define PAGE_OFFSET_XEN_RHEL4 0xffffff8000000000 4018 #define VMALLOC_START_ADDR_XEN_RHEL4 0xffffff0000000000 4019 #define VMALLOC_END_XEN_RHEL4 0xffffff7fffffffff 4020 #define MODULES_VADDR_XEN_RHEL4 0xffffffffa0000000 4021 #define MODULES_END_XEN_RHEL4 0xffffffffafffffff 4022 4023 #define VMALLOC_START_ADDR_2_6_31 0xffffc90000000000 4024 #define VMALLOC_END_2_6_31 0xffffe8ffffffffff 4025 #define VMEMMAP_VADDR_2_6_31 0xffffea0000000000 4026 #define VMEMMAP_END_2_6_31 0xffffeaffffffffff 4027 #define MODULES_VADDR_2_6_31 0xffffffffa0000000 4028 #define MODULES_END_2_6_31 0xffffffffff000000 4029 4030 #define USERSPACE_TOP_5LEVEL 0x0100000000000000 4031 #define PAGE_OFFSET_5LEVEL 0xff10000000000000 4032 #define VMALLOC_START_ADDR_5LEVEL 0xffa0000000000000 4033 #define VMALLOC_END_5LEVEL 0xffd1ffffffffffff 4034 #define MODULES_VADDR_5LEVEL 0xffffffffa0000000 4035 #define MODULES_END_5LEVEL 0xffffffffff5fffff 4036 #define VMEMMAP_VADDR_5LEVEL 0xffd4000000000000 4037 #define VMEMMAP_END_5LEVEL 0xffd5ffffffffffff 4038 4039 #define PAGE_OFFSET_4LEVEL_4_20 0xffff888000000000 4040 #define PAGE_OFFSET_5LEVEL_4_20 0xff11000000000000 4041 4042 #define VSYSCALL_START 0xffffffffff600000 4043 #define VSYSCALL_END 0xffffffffff601000 4044 4045 #define CPU_ENTRY_AREA_START 0xfffffe0000000000 4046 #define CPU_ENTRY_AREA_END 0xfffffe7fffffffff 4047 4048 #define PTOV(X) ((unsigned long)(X)+(machdep->kvbase)) 4049 #define VTOP(X) x86_64_VTOP((ulong)(X)) 4050 #define IS_VMALLOC_ADDR(X) x86_64_IS_VMALLOC_ADDR((ulong)(X)) 4051 4052 /* 4053 * the default page table level for x86_64: 4054 * 4 level page tables 4055 */ 4056 #define PGDIR_SHIFT 39 4057 #define PTRS_PER_PGD 512 4058 #define PUD_SHIFT 30 4059 #define PTRS_PER_PUD 512 4060 #define PMD_SHIFT 21 4061 #define PTRS_PER_PMD 512 4062 #define PTRS_PER_PTE 512 4063 4064 /* 5 level page */ 4065 #define PGDIR_SHIFT_5LEVEL 48 4066 #define PTRS_PER_PGD_5LEVEL 512 4067 #define P4D_SHIFT 39 4068 #define PTRS_PER_P4D 512 4069 4070 #define __PGDIR_SHIFT (machdep->machspec->pgdir_shift) 4071 #define __PTRS_PER_PGD (machdep->machspec->ptrs_per_pgd) 4072 4073 #define pgd_index(address) (((address) >> __PGDIR_SHIFT) & (__PTRS_PER_PGD-1)) 4074 #define p4d_index(address) (((address) >> P4D_SHIFT) & (PTRS_PER_P4D - 1)) 4075 #define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD - 1)) 4076 #define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1)) 4077 #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) 4078 4079 #define FILL_TOP_PGD() \ 4080 if (!(pc->flags & RUNTIME) || ACTIVE()) { \ 4081 FILL_PGD(vt->kernel_pgd[0], KVADDR, PAGESIZE()); \ 4082 } 4083 4084 #define FILL_TOP_PGD_HYPER() \ 4085 unsigned long idle_pg_table = symbol_exists("idle_pg_table_4") ? \ 4086 symbol_value("idle_pg_table_4") : \ 4087 symbol_value("idle_pg_table"); \ 4088 FILL_PGD(idle_pg_table, KVADDR, PAGESIZE()); 4089 4090 #define IS_LAST_P4D_READ(p4d) ((ulong)(p4d) == machdep->machspec->last_p4d_read) 4091 4092 #define FILL_P4D(P4D, TYPE, SIZE) \ 4093 if (!IS_LAST_P4D_READ(P4D)) { \ 4094 readmem((ulonglong)((ulong)(P4D)), TYPE, machdep->machspec->p4d, \ 4095 SIZE, "p4d page", FAULT_ON_ERROR); \ 4096 machdep->machspec->last_p4d_read = (ulong)(P4D); \ 4097 } 4098 4099 #define MAX_POSSIBLE_PHYSMEM_BITS 52 4100 4101 /* 4102 * PHYSICAL_PAGE_MASK changed (enlarged) between 2.4 and 2.6, so 4103 * for safety, use the 2.6 values to generate it. 4104 */ 4105 #define __PHYSICAL_MASK_SHIFT_XEN 52 4106 #define __PHYSICAL_MASK_SHIFT_2_6 46 4107 #define __PHYSICAL_MASK_SHIFT_5LEVEL 52 4108 #define __PHYSICAL_MASK_SHIFT (machdep->machspec->physical_mask_shift) 4109 #define __PHYSICAL_MASK ((1UL << __PHYSICAL_MASK_SHIFT) - 1) 4110 #define __VIRTUAL_MASK_SHIFT 48 4111 #define __VIRTUAL_MASK ((1UL << __VIRTUAL_MASK_SHIFT) - 1) 4112 #define PAGE_SHIFT 12 4113 #define PAGE_SIZE (1UL << PAGE_SHIFT) 4114 #define PHYSICAL_PAGE_MASK (~(PAGE_SIZE-1) & __PHYSICAL_MASK ) 4115 4116 #define _PAGE_BIT_NX 63 4117 #define _PAGE_PRESENT 0x001 4118 #define _PAGE_RW 0x002 4119 #define _PAGE_USER 0x004 4120 #define _PAGE_PWT 0x008 4121 #define _PAGE_PCD 0x010 4122 #define _PAGE_ACCESSED 0x020 4123 #define _PAGE_DIRTY 0x040 4124 #define _PAGE_PSE 0x080 /* 2MB page */ 4125 #define _PAGE_FILE 0x040 /* set:pagecache, unset:swap */ 4126 #define _PAGE_GLOBAL 0x100 /* Global TLB entry */ 4127 #define _PAGE_PROTNONE (machdep->machspec->page_protnone) 4128 #define _PAGE_NX (1UL<<_PAGE_BIT_NX) 4129 4130 #define SWP_TYPE(entry) (((entry) >> 1) & 0x3f) 4131 #define SWP_OFFSET(entry) ((entry) >> 8) 4132 #define __swp_type(entry) x86_64_swp_type(entry) 4133 #define __swp_offset(entry) x86_64_swp_offset(entry) 4134 4135 #define TIF_SIGPENDING (2) 4136 4137 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 4138 4139 #define _CPU_PDA_READ2(CPU, BUFFER) \ 4140 ((readmem(symbol_value("_cpu_pda"), \ 4141 KVADDR, &cpu_pda_addr, sizeof(unsigned long), \ 4142 "_cpu_pda addr", RETURN_ON_ERROR)) && \ 4143 (readmem(cpu_pda_addr + ((CPU) * sizeof(void *)), \ 4144 KVADDR, &cpu_pda_addr, sizeof(unsigned long), \ 4145 "_cpu_pda addr", RETURN_ON_ERROR)) && \ 4146 (cpu_pda_addr) && \ 4147 (readmem(cpu_pda_addr, KVADDR, (BUFFER), SIZE(x8664_pda), \ 4148 "cpu_pda entry", RETURN_ON_ERROR))) 4149 4150 #define _CPU_PDA_READ(CPU, BUFFER) \ 4151 ((STRNEQ("_cpu_pda", closest_symbol((symbol_value("_cpu_pda") + \ 4152 ((CPU) * sizeof(unsigned long)))))) && \ 4153 (readmem(symbol_value("_cpu_pda") + ((CPU) * sizeof(void *)), \ 4154 KVADDR, &cpu_pda_addr, sizeof(unsigned long), \ 4155 "_cpu_pda addr", RETURN_ON_ERROR)) && \ 4156 (readmem(cpu_pda_addr, KVADDR, (BUFFER), SIZE(x8664_pda), \ 4157 "cpu_pda entry", RETURN_ON_ERROR))) 4158 4159 #define CPU_PDA_READ(CPU, BUFFER) \ 4160 (STRNEQ("cpu_pda", closest_symbol((symbol_value("cpu_pda") + \ 4161 ((CPU) * SIZE(x8664_pda))))) && \ 4162 readmem(symbol_value("cpu_pda") + ((CPU) * SIZE(x8664_pda)), \ 4163 KVADDR, (BUFFER), SIZE(x8664_pda), "cpu_pda entry", \ 4164 RETURN_ON_ERROR)) 4165 4166 #define VALID_LEVEL4_PGT_ADDR(X) \ 4167 (((X) == VIRTPAGEBASE(X)) && IS_KVADDR(X) && !IS_VMALLOC_ADDR(X)) 4168 4169 #define _SECTION_SIZE_BITS 27 4170 #define _MAX_PHYSMEM_BITS 40 4171 #define _MAX_PHYSMEM_BITS_2_6_26 44 4172 #define _MAX_PHYSMEM_BITS_2_6_31 46 4173 #define _MAX_PHYSMEM_BITS_5LEVEL 52 4174 4175 #endif /* X86_64 */ 4176 4177 #ifdef ALPHA 4178 #define _64BIT_ 4179 #define MACHINE_TYPE "ALPHA" 4180 4181 #define PAGEBASE(X) (((unsigned long)(X)) & (unsigned long)machdep->pagemask) 4182 4183 #define PTOV(X) ((unsigned long)(X)+(machdep->kvbase)) 4184 #define VTOP(X) ((unsigned long)(X)-(machdep->kvbase)) 4185 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start) 4186 #define KSEG_BASE_48_BIT (0xffff800000000000) 4187 #define KSEG_BASE (0xfffffc0000000000) 4188 #define _PFN_MASK (0xFFFFFFFF00000000) 4189 #define VMALLOC_START (0xFFFFFE0000000000) 4190 #define MIN_SYMBOL_VALUE (KSEG_BASE_48_BIT) 4191 4192 #define PGDIR_SHIFT (PAGESHIFT() + 2*(PAGESHIFT()-3)) 4193 #define PMD_SHIFT (PAGESHIFT() + (PAGESHIFT()-3)) 4194 #define PTRS_PER_PAGE (1024) 4195 4196 #define PTRS_PER_PGD (1UL << (PAGESHIFT()-3)) 4197 4198 /* 4199 * OSF/1 PAL-code-imposed page table bits 4200 */ 4201 #define _PAGE_VALID 0x0001 4202 #define _PAGE_FOR 0x0002 /* used for page protection (fault on read) */ 4203 #define _PAGE_FOW 0x0004 /* used for page protection (fault on write) */ 4204 #define _PAGE_FOE 0x0008 /* used for page protection (fault on exec) */ 4205 #define _PAGE_ASM 0x0010 4206 #define _PAGE_KRE 0x0100 /* xxx - see below on the "accessed" bit */ 4207 #define _PAGE_URE 0x0200 /* xxx */ 4208 #define _PAGE_KWE 0x1000 /* used to do the dirty bit in software */ 4209 #define _PAGE_UWE 0x2000 /* used to do the dirty bit in software */ 4210 4211 /* .. and these are ours ... */ 4212 #define _PAGE_DIRTY 0x20000 4213 #define _PAGE_ACCESSED 0x40000 4214 4215 #define SWP_TYPE(entry) (((entry) >> 32) & 0xff) 4216 #define SWP_OFFSET(entry) ((entry) >> 40) 4217 #define __swp_type(entry) SWP_TYPE(entry) 4218 #define __swp_offset(entry) SWP_OFFSET(entry) 4219 4220 #define TIF_SIGPENDING (2) 4221 4222 #endif /* ALPHA */ 4223 4224 #ifdef PPC 4225 #define _32BIT_ 4226 #define MACHINE_TYPE "PPC" 4227 4228 #define PAGEBASE(X) ((X) & machdep->pagemask) 4229 4230 #define PTOV(X) ((unsigned long)(X)+(machdep->kvbase)) 4231 #define VTOP(X) ((unsigned long)(X)-(machdep->kvbase)) 4232 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start) 4233 4234 /* Holds the platform specific info for page translation */ 4235 struct machine_specific { 4236 char *platform; 4237 4238 /* page address translation bits */ 4239 int pte_size; 4240 int pte_rpn_shift; 4241 4242 /* page flags */ 4243 ulong _page_present; 4244 ulong _page_user; 4245 ulong _page_rw; 4246 ulong _page_guarded; 4247 ulong _page_coherent; 4248 ulong _page_no_cache; 4249 ulong _page_writethru; 4250 ulong _page_dirty; 4251 ulong _page_accessed; 4252 ulong _page_hwwrite; 4253 ulong _page_shared; 4254 ulong _page_k_rw; 4255 4256 /* platform special vtop */ 4257 int (*vtop_special)(ulong vaddr, physaddr_t *paddr, int verbose); 4258 void *mmu_special; 4259 }; 4260 4261 /* machdep flags for ppc32 specific */ 4262 #define IS_PAE() (machdep->flags & PAE) 4263 #define IS_BOOKE() (machdep->flags & CPU_BOOKE) 4264 /* Page translation bits */ 4265 #define PPC_PLATFORM (machdep->machspec->platform) 4266 #define PTE_SIZE (machdep->machspec->pte_size) 4267 #define PTE_RPN_SHIFT (machdep->machspec->pte_rpn_shift) 4268 #define PAGE_SHIFT (12) 4269 #define PTE_T_LOG2 (ffs(PTE_SIZE) - 1) 4270 #define PTE_SHIFT (PAGE_SHIFT - PTE_T_LOG2) 4271 #define PGDIR_SHIFT (PAGE_SHIFT + PTE_SHIFT) 4272 #define PTRS_PER_PGD (1 << (32 - PGDIR_SHIFT)) 4273 #define PTRS_PER_PTE (1 << PTE_SHIFT) 4274 /* special vtop */ 4275 #define VTOP_SPECIAL (machdep->machspec->vtop_special) 4276 #define MMU_SPECIAL (machdep->machspec->mmu_special) 4277 4278 /* PFN shifts */ 4279 #define BOOKE3E_PTE_RPN_SHIFT (24) 4280 4281 /* PAGE flags */ 4282 #define _PAGE_PRESENT (machdep->machspec->_page_present) /* software: pte contains a translation */ 4283 #define _PAGE_USER (machdep->machspec->_page_user) /* matches one of the PP bits */ 4284 #define _PAGE_RW (machdep->machspec->_page_rw) /* software: user write access allowed */ 4285 #define _PAGE_GUARDED (machdep->machspec->_page_guarded) 4286 #define _PAGE_COHERENT (machdep->machspec->_page_coherent /* M: enforce memory coherence (SMP systems) */) 4287 #define _PAGE_NO_CACHE (machdep->machspec->_page_no_cache) /* I: cache inhibit */ 4288 #define _PAGE_WRITETHRU (machdep->machspec->_page_writethru) /* W: cache write-through */ 4289 #define _PAGE_DIRTY (machdep->machspec->_page_dirty) /* C: page changed */ 4290 #define _PAGE_ACCESSED (machdep->machspec->_page_accessed) /* R: page referenced */ 4291 #define _PAGE_HWWRITE (machdep->machspec->_page_hwwrite) /* software: _PAGE_RW & _PAGE_DIRTY */ 4292 #define _PAGE_SHARED (machdep->machspec->_page_shared) 4293 #define _PAGE_K_RW (machdep->machspec->_page_k_rw) /* privilege only write access allowed */ 4294 4295 /* Default values for PAGE flags */ 4296 #define DEFAULT_PAGE_PRESENT 0x001 4297 #define DEFAULT_PAGE_USER 0x002 4298 #define DEFAULT_PAGE_RW 0x004 4299 #define DEFAULT_PAGE_GUARDED 0x008 4300 #define DEFAULT_PAGE_COHERENT 0x010 4301 #define DEFAULT_PAGE_NO_CACHE 0x020 4302 #define DEFAULT_PAGE_WRITETHRU 0x040 4303 #define DEFAULT_PAGE_DIRTY 0x080 4304 #define DEFAULT_PAGE_ACCESSED 0x100 4305 #define DEFAULT_PAGE_HWWRITE 0x200 4306 #define DEFAULT_PAGE_SHARED 0 4307 4308 /* PPC44x PAGE flags: Values from kernel asm/pte-44x.h */ 4309 #define PPC44x_PAGE_PRESENT 0x001 4310 #define PPC44x_PAGE_RW 0x002 4311 #define PPC44x_PAGE_ACCESSED 0x008 4312 #define PPC44x_PAGE_DIRTY 0x010 4313 #define PPC44x_PAGE_USER 0x040 4314 #define PPC44x_PAGE_GUARDED 0x100 4315 #define PPC44x_PAGE_COHERENT 0x200 4316 #define PPC44x_PAGE_NO_CACHE 0x400 4317 #define PPC44x_PAGE_WRITETHRU 0x800 4318 #define PPC44x_PAGE_HWWRITE 0 4319 #define PPC44x_PAGE_SHARED 0 4320 4321 /* BOOK3E */ 4322 #define BOOK3E_PAGE_PRESENT 0x000001 4323 #define BOOK3E_PAGE_BAP_SR 0x000004 4324 #define BOOK3E_PAGE_BAP_UR 0x000008 /* User Readable */ 4325 #define BOOK3E_PAGE_BAP_SW 0x000010 4326 #define BOOK3E_PAGE_BAP_UW 0x000020 /* User Writable */ 4327 #define BOOK3E_PAGE_DIRTY 0x001000 4328 #define BOOK3E_PAGE_ACCESSED 0x040000 4329 #define BOOK3E_PAGE_GUARDED 0x100000 4330 #define BOOK3E_PAGE_COHERENT 0x200000 4331 #define BOOK3E_PAGE_NO_CACHE 0x400000 4332 #define BOOK3E_PAGE_WRITETHRU 0x800000 4333 #define BOOK3E_PAGE_HWWRITE 0 4334 #define BOOK3E_PAGE_SHARED 0 4335 #define BOOK3E_PAGE_USER (BOOK3E_PAGE_BAP_SR | BOOK3E_PAGE_BAP_UR) 4336 #define BOOK3E_PAGE_RW (BOOK3E_PAGE_BAP_SW | BOOK3E_PAGE_BAP_UW) 4337 #define BOOK3E_PAGE_KERNEL_RW (BOOK3E_PAGE_BAP_SW | BOOK3E_PAGE_BAP_SR | BOOK3E_PAGE_DIRTY) 4338 4339 /* FSL BOOKE */ 4340 #define FSL_BOOKE_PAGE_PRESENT 0x00001 4341 #define FSL_BOOKE_PAGE_USER 0x00002 4342 #define FSL_BOOKE_PAGE_RW 0x00004 4343 #define FSL_BOOKE_PAGE_DIRTY 0x00008 4344 #define FSL_BOOKE_PAGE_ACCESSED 0x00020 4345 #define FSL_BOOKE_PAGE_GUARDED 0x00080 4346 #define FSL_BOOKE_PAGE_COHERENT 0x00100 4347 #define FSL_BOOKE_PAGE_NO_CACHE 0x00200 4348 #define FSL_BOOKE_PAGE_WRITETHRU 0x00400 4349 #define FSL_BOOKE_PAGE_HWWRITE 0 4350 #define FSL_BOOKE_PAGE_SHARED 0 4351 4352 #define SWP_TYPE(entry) (((entry) >> 1) & 0x7f) 4353 #define SWP_OFFSET(entry) ((entry) >> 8) 4354 #define __swp_type(entry) SWP_TYPE(entry) 4355 #define __swp_offset(entry) SWP_OFFSET(entry) 4356 4357 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 1 : 2) 4358 4359 #define _SECTION_SIZE_BITS 24 4360 #define _MAX_PHYSMEM_BITS 44 4361 4362 #define STACK_FRAME_OVERHEAD 16 4363 #define STACK_FRAME_LR_SAVE (sizeof(ulong)) 4364 #define STACK_FRAME_MARKER (2 * sizeof(ulong)) 4365 #define STACK_FRAME_REGS_MARKER 0x72656773 4366 #define PPC_STACK_SIZE 8192 4367 4368 #endif /* PPC */ 4369 4370 #ifdef IA64 4371 #define _64BIT_ 4372 #define MACHINE_TYPE "IA64" 4373 4374 #define PAGEBASE(X) (((unsigned long)(X)) & (unsigned long)machdep->pagemask) 4375 4376 #define REGION_SHIFT (61) 4377 #define VADDR_REGION(X) ((ulong)(X) >> REGION_SHIFT) 4378 4379 #define KERNEL_CACHED_REGION (7) 4380 #define KERNEL_UNCACHED_REGION (6) 4381 #define KERNEL_VMALLOC_REGION (5) 4382 #define USER_STACK_REGION (4) 4383 #define USER_DATA_REGION (3) 4384 #define USER_TEXT_REGION (2) 4385 #define USER_SHMEM_REGION (1) 4386 #define USER_IA32_EMUL_REGION (0) 4387 4388 #define KERNEL_VMALLOC_BASE ((ulong)KERNEL_VMALLOC_REGION << REGION_SHIFT) 4389 #define KERNEL_UNCACHED_BASE ((ulong)KERNEL_UNCACHED_REGION << REGION_SHIFT) 4390 #define KERNEL_CACHED_BASE ((ulong)KERNEL_CACHED_REGION << REGION_SHIFT) 4391 4392 #define _SECTION_SIZE_BITS 30 4393 #define _MAX_PHYSMEM_BITS 50 4394 4395 /* 4396 * As of 2.6, these are no longer straight forward. 4397 */ 4398 #define PTOV(X) ia64_PTOV((ulong)(X)) 4399 #define VTOP(X) ia64_VTOP((ulong)(X)) 4400 #define IS_VMALLOC_ADDR(X) ia64_IS_VMALLOC_ADDR((ulong)(X)) 4401 4402 #define SWITCH_STACK_ADDR(X) (ia64_get_switch_stack((ulong)(X))) 4403 4404 #define __IA64_UL(x) ((unsigned long)(x)) 4405 #define IA64_MAX_PHYS_BITS (50) /* max # of phys address bits (architected) */ 4406 4407 /* 4408 * How many pointers will a page table level hold expressed in shift 4409 */ 4410 #define PTRS_PER_PTD_SHIFT (PAGESHIFT()-3) 4411 4412 /* 4413 * Definitions for fourth level: 4414 */ 4415 #define PTRS_PER_PTE (__IA64_UL(1) << (PTRS_PER_PTD_SHIFT)) 4416 4417 /* 4418 * Definitions for third level: 4419 * 4420 * PMD_SHIFT determines the size of the area a third-level page table 4421 * can map. 4422 */ 4423 #define PMD_SHIFT (PAGESHIFT() + (PTRS_PER_PTD_SHIFT)) 4424 #define PMD_SIZE (1UL << PMD_SHIFT) 4425 #define PMD_MASK (~(PMD_SIZE-1)) 4426 #define PTRS_PER_PMD (1UL << (PTRS_PER_PTD_SHIFT)) 4427 4428 /* 4429 * PUD_SHIFT determines the size of the area a second-level page table 4430 * can map 4431 */ 4432 #define PUD_SHIFT (PMD_SHIFT + (PTRS_PER_PTD_SHIFT)) 4433 #define PUD_SIZE (1UL << PUD_SHIFT) 4434 #define PUD_MASK (~(PUD_SIZE-1)) 4435 #define PTRS_PER_PUD (1UL << (PTRS_PER_PTD_SHIFT)) 4436 4437 /* 4438 * Definitions for first level: 4439 * 4440 * PGDIR_SHIFT determines what a first-level page table entry can map. 4441 */ 4442 4443 #define PGDIR_SHIFT_4L (PUD_SHIFT + (PTRS_PER_PTD_SHIFT)) 4444 #define PGDIR_SHIFT_3L (PMD_SHIFT + (PTRS_PER_PTD_SHIFT)) 4445 /* Turns out 4L & 3L PGDIR_SHIFT are the same (for now) */ 4446 #define PGDIR_SHIFT PGDIR_SHIFT_4L 4447 #define PGDIR_SIZE (__IA64_UL(1) << PGDIR_SHIFT) 4448 #define PGDIR_MASK (~(PGDIR_SIZE-1)) 4449 #define PTRS_PER_PGD_SHIFT PTRS_PER_PTD_SHIFT 4450 #define PTRS_PER_PGD (1UL << PTRS_PER_PGD_SHIFT) 4451 #define USER_PTRS_PER_PGD (5*PTRS_PER_PGD/8) /* regions 0-4 are user regions */ 4452 #define FIRST_USER_ADDRESS 0 4453 4454 /* 4455 * First, define the various bits in a PTE. Note that the PTE format 4456 * matches the VHPT short format, the firt doubleword of the VHPD long 4457 * format, and the first doubleword of the TLB insertion format. 4458 */ 4459 #define _PAGE_P (1 << 0) /* page present bit */ 4460 #define _PAGE_MA_WB (0x0 << 2) /* write back memory attribute */ 4461 #define _PAGE_MA_UC (0x4 << 2) /* uncacheable memory attribute */ 4462 #define _PAGE_MA_UCE (0x5 << 2) /* UC exported attribute */ 4463 #define _PAGE_MA_WC (0x6 << 2) /* write coalescing memory attribute */ 4464 #define _PAGE_MA_NAT (0x7 << 2) /* not-a-thing attribute */ 4465 #define _PAGE_MA_MASK (0x7 << 2) 4466 #define _PAGE_PL_0 (0 << 7) /* privilege level 0 (kernel) */ 4467 #define _PAGE_PL_1 (1 << 7) /* privilege level 1 (unused) */ 4468 #define _PAGE_PL_2 (2 << 7) /* privilege level 2 (unused) */ 4469 #define _PAGE_PL_3 (3 << 7) /* privilege level 3 (user) */ 4470 #define _PAGE_PL_MASK (3 << 7) 4471 #define _PAGE_AR_R (0 << 9) /* read only */ 4472 #define _PAGE_AR_RX (1 << 9) /* read & execute */ 4473 #define _PAGE_AR_RW (2 << 9) /* read & write */ 4474 #define _PAGE_AR_RWX (3 << 9) /* read, write & execute */ 4475 #define _PAGE_AR_R_RW (4 << 9) /* read / read & write */ 4476 #define _PAGE_AR_RX_RWX (5 << 9) /* read & exec / read, write & exec */ 4477 #define _PAGE_AR_RWX_RW (6 << 9) /* read, write & exec / read & write */ 4478 #define _PAGE_AR_X_RX (7 << 9) /* exec & promote / read & exec */ 4479 #define _PAGE_AR_MASK (7 << 9) 4480 #define _PAGE_AR_SHIFT 9 4481 #define _PAGE_A (1 << 5) /* page accessed bit */ 4482 #define _PAGE_D (1 << 6) /* page dirty bit */ 4483 #define _PAGE_PPN_MASK (((__IA64_UL(1) << IA64_MAX_PHYS_BITS) - 1) & ~0xfffUL) 4484 #define _PAGE_ED (__IA64_UL(1) << 52) /* exception deferral */ 4485 #define _PAGE_PROTNONE (__IA64_UL(1) << 63) 4486 4487 #define _PFN_MASK _PAGE_PPN_MASK 4488 #define _PAGE_CHG_MASK (_PFN_MASK | _PAGE_A | _PAGE_D) 4489 4490 #define _PAGE_SIZE_4K 12 4491 #define _PAGE_SIZE_8K 13 4492 #define _PAGE_SIZE_16K 14 4493 #define _PAGE_SIZE_64K 16 4494 #define _PAGE_SIZE_256K 18 4495 #define _PAGE_SIZE_1M 20 4496 #define _PAGE_SIZE_4M 22 4497 #define _PAGE_SIZE_16M 24 4498 #define _PAGE_SIZE_64M 26 4499 #define _PAGE_SIZE_256M 28 4500 4501 #define __ACCESS_BITS _PAGE_ED | _PAGE_A | _PAGE_P | _PAGE_MA_WB 4502 #define __DIRTY_BITS_NO_ED _PAGE_A | _PAGE_P | _PAGE_D | _PAGE_MA_WB 4503 #define __DIRTY_BITS _PAGE_ED | __DIRTY_BITS_NO_ED 4504 4505 #define EFI_PAGE_SHIFT (12) 4506 4507 /* 4508 * NOTE: #include'ing <asm/efi.h> creates too many compiler problems, so 4509 * this stuff is hardwired here; it's probably etched in stone somewhere. 4510 */ 4511 struct efi_memory_desc_t { 4512 uint32_t type; 4513 uint32_t pad; 4514 uint64_t phys_addr; 4515 uint64_t virt_addr; 4516 uint64_t num_pages; 4517 uint64_t attribute; 4518 } desc; 4519 4520 /* Memory types: */ 4521 #define EFI_RESERVED_TYPE 0 4522 #define EFI_LOADER_CODE 1 4523 #define EFI_LOADER_DATA 2 4524 #define EFI_BOOT_SERVICES_CODE 3 4525 #define EFI_BOOT_SERVICES_DATA 4 4526 #define EFI_RUNTIME_SERVICES_CODE 5 4527 #define EFI_RUNTIME_SERVICES_DATA 6 4528 #define EFI_CONVENTIONAL_MEMORY 7 4529 #define EFI_UNUSABLE_MEMORY 8 4530 #define EFI_ACPI_RECLAIM_MEMORY 9 4531 #define EFI_ACPI_MEMORY_NVS 10 4532 #define EFI_MEMORY_MAPPED_IO 11 4533 #define EFI_MEMORY_MAPPED_IO_PORT_SPACE 12 4534 #define EFI_PAL_CODE 13 4535 #define EFI_MAX_MEMORY_TYPE 14 4536 4537 /* Attribute values: */ 4538 #define EFI_MEMORY_UC 0x0000000000000001 /* uncached */ 4539 #define EFI_MEMORY_WC 0x0000000000000002 /* write-coalescing */ 4540 #define EFI_MEMORY_WT 0x0000000000000004 /* write-through */ 4541 #define EFI_MEMORY_WB 0x0000000000000008 /* write-back */ 4542 #define EFI_MEMORY_WP 0x0000000000001000 /* write-protect */ 4543 #define EFI_MEMORY_RP 0x0000000000002000 /* read-protect */ 4544 #define EFI_MEMORY_XP 0x0000000000004000 /* execute-protect */ 4545 #define EFI_MEMORY_RUNTIME 0x8000000000000000 /* range requires runtime mapping */ 4546 4547 #define SWP_TYPE(entry) (((entry) >> 1) & 0xff) 4548 #define SWP_OFFSET(entry) ((entry) >> 9) 4549 #define __swp_type(entry) ((entry >> 2) & 0x7f) 4550 #define __swp_offset(entry) ((entry << 1) >> 10) 4551 4552 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 0 : 1) 4553 4554 #define KERNEL_TR_PAGE_SIZE (1 << _PAGE_SIZE_64M) 4555 #define KERNEL_TR_PAGE_MASK (~(KERNEL_TR_PAGE_SIZE - 1)) 4556 4557 #define UNKNOWN_PHYS_START ((ulong)(-1)) 4558 #define DEFAULT_PHYS_START (KERNEL_TR_PAGE_SIZE * 1) 4559 4560 #define IA64_GET_STACK_ULONG(OFF) \ 4561 ((INSTACK(OFF,bt)) ? (GET_STACK_ULONG(OFF)) : get_init_stack_ulong((unsigned long)OFF)) 4562 4563 #endif /* IA64 */ 4564 4565 #ifdef PPC64 4566 #define _64BIT_ 4567 #define MACHINE_TYPE "PPC64" 4568 4569 #define PPC64_64K_PAGE_SIZE 65536 4570 #define PPC64_STACK_SIZE 16384 4571 4572 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 4573 4574 #define PTOV(X) ((unsigned long)(X)+(machdep->identity_map_base)) 4575 #define VTOP(X) ((unsigned long)(X)-(machdep->identity_map_base)) 4576 #define BOOK3E_VMBASE 0x8000000000000000 4577 #define IS_VMALLOC_ADDR(X) machdep->machspec->is_vmaddr(X) 4578 #define KERNELBASE machdep->pageoffset 4579 4580 #define PGDIR_SHIFT (machdep->pageshift + (machdep->pageshift -3) + (machdep->pageshift - 2)) 4581 #define PMD_SHIFT (machdep->pageshift + (machdep->pageshift - 3)) 4582 4583 #define PGD_MASK (~((1UL << PGDIR_SHIFT) - 1)) 4584 #define PMD_MASK (~((1UL << PMD_SHIFT) - 1)) 4585 4586 /* shift to put page number into pte */ 4587 #define PTE_RPN_SHIFT_DEFAULT 16 4588 #define PMD_TO_PTEPAGE_SHIFT 2 /* Used for 2.6 or later */ 4589 4590 #define PTE_INDEX_SIZE 9 4591 #define PMD_INDEX_SIZE 10 4592 #define PGD_INDEX_SIZE 10 4593 4594 #define PTRS_PER_PTE (1 << PTE_INDEX_SIZE) 4595 #define PTRS_PER_PMD (1 << PMD_INDEX_SIZE) 4596 #define PTRS_PER_PGD (1 << PGD_INDEX_SIZE) 4597 4598 #define PGD_OFFSET_24(vaddr) ((vaddr >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)) 4599 #define PGD_OFFSET(vaddr) ((vaddr >> PGDIR_SHIFT) & 0x7ff) 4600 #define PMD_OFFSET(vaddr) ((vaddr >> PMD_SHIFT) & (PTRS_PER_PMD - 1)) 4601 4602 /* 4-level page table support */ 4603 4604 /* 4K pagesize */ 4605 #define PTE_INDEX_SIZE_L4_4K 9 4606 #define PMD_INDEX_SIZE_L4_4K 7 4607 #define PUD_INDEX_SIZE_L4_4K 7 4608 #define PGD_INDEX_SIZE_L4_4K 9 4609 #define PUD_INDEX_SIZE_L4_4K_3_7 9 4610 #define PTE_INDEX_SIZE_RADIX_4K 9 4611 #define PMD_INDEX_SIZE_RADIX_4K 9 4612 #define PUD_INDEX_SIZE_RADIX_4K 9 4613 #define PGD_INDEX_SIZE_RADIX_4K 13 4614 #define PTE_RPN_SHIFT_L4_4K 17 4615 #define PTE_RPN_SHIFT_L4_4K_4_5 18 4616 #define PGD_MASKED_BITS_4K 0 4617 #define PUD_MASKED_BITS_4K 0 4618 #define PMD_MASKED_BITS_4K 0 4619 4620 /* 64K pagesize */ 4621 #define PTE_INDEX_SIZE_L4_64K 12 4622 #define PMD_INDEX_SIZE_L4_64K 12 4623 #define PUD_INDEX_SIZE_L4_64K 0 4624 #define PGD_INDEX_SIZE_L4_64K 4 4625 #define PTE_INDEX_SIZE_L4_64K_3_10 8 4626 #define PMD_INDEX_SIZE_L4_64K_3_10 10 4627 #define PGD_INDEX_SIZE_L4_64K_3_10 12 4628 #define PMD_INDEX_SIZE_L4_64K_4_6 5 4629 #define PUD_INDEX_SIZE_L4_64K_4_6 5 4630 #define PMD_INDEX_SIZE_L4_64K_4_12 10 4631 #define PUD_INDEX_SIZE_L4_64K_4_12 7 4632 #define PGD_INDEX_SIZE_L4_64K_4_12 8 4633 #define PUD_INDEX_SIZE_L4_64K_4_17 10 4634 #define PTE_INDEX_SIZE_RADIX_64K 5 4635 #define PMD_INDEX_SIZE_RADIX_64K 9 4636 #define PUD_INDEX_SIZE_RADIX_64K 9 4637 #define PGD_INDEX_SIZE_RADIX_64K 13 4638 #define PTE_RPN_SHIFT_L4_64K_V1 32 4639 #define PTE_RPN_SHIFT_L4_64K_V2 30 4640 #define PTE_RPN_SHIFT_L4_BOOK3E_64K 28 4641 #define PTE_RPN_SHIFT_L4_BOOK3E_4K 24 4642 #define PGD_MASKED_BITS_64K 0 4643 #define PUD_MASKED_BITS_64K 0x1ff 4644 #define PMD_MASKED_BITS_64K 0x1ff 4645 #define PMD_MASKED_BITS_64K_3_11 0xfff 4646 #define PMD_MASKED_BITS_BOOK3E_64K_4_5 0x7ff 4647 #define PGD_MASKED_BITS_64K_4_6 0xc0000000000000ffUL 4648 #define PUD_MASKED_BITS_64K_4_6 0xc0000000000000ffUL 4649 #define PMD_MASKED_BITS_64K_4_6 0xc0000000000000ffUL 4650 4651 #define PTE_RPN_MASK_DEFAULT 0xffffffffffffffffUL 4652 #define PAGE_PA_MAX_L4_4_6 (THIS_KERNEL_VERSION >= LINUX(4,11,0) ? 53 : 57) 4653 #define PTE_RPN_MASK_L4_4_6 \ 4654 (((1UL << PAGE_PA_MAX_L4_4_6) - 1) & ~((1UL << PAGESHIFT()) - 1)) 4655 #define PTE_RPN_SHIFT_L4_4_6 PAGESHIFT() 4656 4657 #define PGD_MASKED_BITS_4_7 0xc0000000000000ffUL 4658 #define PUD_MASKED_BITS_4_7 0xc0000000000000ffUL 4659 #define PMD_MASKED_BITS_4_7 0xc0000000000000ffUL 4660 4661 #define PD_HUGE 0x8000000000000000 4662 #define HUGE_PTE_MASK 0x03 4663 #define HUGEPD_SHIFT_MASK 0x3f 4664 #define HUGEPD_ADDR_MASK (0x0fffffffffffffffUL & ~HUGEPD_SHIFT_MASK) 4665 4666 #define PGD_MASK_L4 \ 4667 (THIS_KERNEL_VERSION >= LINUX(3,10,0) ? (machdep->ptrs_per_pgd - 1) : 0x1ff) 4668 4669 #define PGD_OFFSET_L4(vaddr) \ 4670 ((vaddr >> (machdep->machspec->l4_shift)) & PGD_MASK_L4) 4671 4672 #define PUD_OFFSET_L4(vaddr) \ 4673 ((vaddr >> (machdep->machspec->l3_shift)) & (machdep->machspec->ptrs_per_l3 - 1)) 4674 4675 #define PMD_OFFSET_L4(vaddr) \ 4676 ((vaddr >> (machdep->machspec->l2_shift)) & (machdep->machspec->ptrs_per_l2 - 1)) 4677 4678 #define _PAGE_PTE (machdep->machspec->_page_pte) /* distinguishes PTEs from pointers */ 4679 #define _PAGE_PRESENT (machdep->machspec->_page_present) /* software: pte contains a translation */ 4680 #define _PAGE_USER (machdep->machspec->_page_user) /* matches one of the PP bits */ 4681 #define _PAGE_RW (machdep->machspec->_page_rw) /* software: user write access allowed */ 4682 #define _PAGE_GUARDED (machdep->machspec->_page_guarded) 4683 #define _PAGE_COHERENT (machdep->machspec->_page_coherent /* M: enforce memory coherence (SMP systems) */) 4684 #define _PAGE_NO_CACHE (machdep->machspec->_page_no_cache) /* I: cache inhibit */ 4685 #define _PAGE_WRITETHRU (machdep->machspec->_page_writethru) /* W: cache write-through */ 4686 #define _PAGE_DIRTY (machdep->machspec->_page_dirty) /* C: page changed */ 4687 #define _PAGE_ACCESSED (machdep->machspec->_page_accessed) /* R: page referenced */ 4688 4689 #define PTE_RPN_MASK (machdep->machspec->pte_rpn_mask) 4690 #define PTE_RPN_SHIFT (machdep->machspec->pte_rpn_shift) 4691 4692 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(2,6,23) ? 1 : 2) 4693 4694 #define SWP_TYPE(entry) (((entry) >> 1) & 0x7f) 4695 #define SWP_OFFSET(entry) ((entry) >> 8) 4696 #define __swp_type(entry) SWP_TYPE(entry) 4697 #define __swp_offset(entry) SWP_OFFSET(entry) 4698 4699 #define MSR_PR_LG 14 /* Problem State / Privilege Level */ 4700 /* Used to find the user or kernel-mode frame*/ 4701 4702 #define STACK_FRAME_OVERHEAD 112 4703 #define EXCP_FRAME_MARKER 0x7265677368657265 4704 4705 #define _SECTION_SIZE_BITS 24 4706 #define _MAX_PHYSMEM_BITS 44 4707 #define _MAX_PHYSMEM_BITS_3_7 46 4708 #define _MAX_PHYSMEM_BITS_4_19 47 4709 #define _MAX_PHYSMEM_BITS_4_20 51 4710 4711 #endif /* PPC64 */ 4712 4713 #ifdef S390 4714 #define _32BIT_ 4715 #define MACHINE_TYPE "S390" 4716 4717 #define PTOV(X) ((unsigned long)(X)+(machdep->kvbase)) 4718 #define VTOP(X) ((unsigned long)(X)-(machdep->kvbase)) 4719 #define IS_VMALLOC_ADDR(X) (vt->vmalloc_start && (ulong)(X) >= vt->vmalloc_start) 4720 4721 #define PTRS_PER_PTE 1024 4722 #define PTRS_PER_PMD 1 4723 #define PTRS_PER_PGD 512 4724 #define SEGMENT_TABLE_SIZE ((sizeof(ulong)*4) * PTRS_PER_PGD) 4725 4726 #define SWP_TYPE(entry) (((entry) >> 2) & 0x1f) 4727 #define SWP_OFFSET(entry) ((((entry) >> 11) & 0xfffffffe) | \ 4728 (((entry) >> 7) & 0x1)) 4729 #define __swp_type(entry) SWP_TYPE(entry) 4730 #define __swp_offset(entry) SWP_OFFSET(entry) 4731 4732 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(3,16,0) ? 1 : 2) 4733 4734 #define _SECTION_SIZE_BITS 25 4735 #define _MAX_PHYSMEM_BITS 31 4736 4737 #endif /* S390 */ 4738 4739 #ifdef S390X 4740 #define _64BIT_ 4741 #define MACHINE_TYPE "S390X" 4742 4743 #define PTOV(X) s390x_PTOV((ulong)(X)) 4744 #define VTOP(X) s390x_VTOP((ulong)(X)) 4745 #define IS_VMALLOC_ADDR(X) s390x_IS_VMALLOC_ADDR(X) 4746 #define PTRS_PER_PTE 512 4747 #define PTRS_PER_PMD 1024 4748 #define PTRS_PER_PGD 2048 4749 #define SEGMENT_TABLE_SIZE ((sizeof(ulong)*2) * PTRS_PER_PMD) 4750 4751 #define SWP_TYPE(entry) (((entry) >> 2) & 0x1f) 4752 #define SWP_OFFSET(entry) ((((entry) >> 11) & 0xfffffffffffffffe) | \ 4753 (((entry) >> 7) & 0x1)) 4754 #define __swp_type(entry) SWP_TYPE(entry) 4755 #define __swp_offset(entry) SWP_OFFSET(entry) 4756 4757 #define TIF_SIGPENDING (THIS_KERNEL_VERSION >= LINUX(3,16,0) ? 1 : 2) 4758 4759 #define _SECTION_SIZE_BITS 28 4760 #define _MAX_PHYSMEM_BITS_OLD 42 4761 #define _MAX_PHYSMEM_BITS_NEW 46 4762 4763 #endif /* S390X */ 4764 4765 #ifdef SPARC64 4766 #define _64BIT_ 4767 #define MACHINE_TYPE "SPARC64" 4768 4769 #define PTOV(X) \ 4770 ((unsigned long)(X) + machdep->machspec->page_offset) 4771 #define VTOP(X) \ 4772 ((unsigned long)(X) - machdep->machspec->page_offset) 4773 4774 #define PAGE_OFFSET (machdep->machspec->page_offset) 4775 4776 extern int sparc64_IS_VMALLOC_ADDR(ulong vaddr); 4777 #define IS_VMALLOC_ADDR(X) sparc64_IS_VMALLOC_ADDR((ulong)(X)) 4778 #define PAGE_SHIFT (13) 4779 #define PAGE_SIZE (1UL << PAGE_SHIFT) 4780 #define PAGE_MASK (~(PAGE_SIZE - 1)) 4781 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) 4782 #define THREAD_SIZE (2 * PAGE_SIZE) 4783 4784 /* S3 Core 4785 * Core 48-bit physical address supported. 4786 * Bit 47 distinguishes memory or I/O. When set to "1" it is I/O. 4787 */ 4788 #define PHYS_MASK_SHIFT (47) 4789 #define PHYS_MASK (((1UL) << PHYS_MASK_SHIFT) - 1) 4790 4791 typedef signed int s32; 4792 4793 /* 4794 * This next two defines are convenience defines for normal page table. 4795 */ 4796 #define PTES_PER_PAGE (1UL << (PAGE_SHIFT - 3)) 4797 #define PTES_PER_PAGE_MASK (PTES_PER_PAGE - 1) 4798 4799 /* 4-level page table */ 4800 #define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-3)) 4801 #define PMD_SIZE (1UL << PMD_SHIFT) 4802 #define PMD_MASK (~(PMD_SIZE - 1)) 4803 #define PMD_BITS (PAGE_SHIFT - 3) 4804 4805 #define PUD_SHIFT (PMD_SHIFT + PMD_BITS) 4806 #define PUD_SIZE (1UL << PUD_SHIFT) 4807 #define PUD_MASK (~(PUD_SIZE - 1)) 4808 #define PUD_BITS (PAGE_SHIFT - 3) 4809 4810 #define PGDIR_SHIFT (PUD_SHIFT + PUD_BITS) 4811 #define PGDIR_SIZE (1UL << PGDIR_SHIFT) 4812 #define PGDIR_MASK (~(PGDIR_SIZE - 1)) 4813 #define PGDIR_BITS (PAGE_SHIFT - 3) 4814 4815 #define PTRS_PER_PTE (1UL << (PAGE_SHIFT - 3)) 4816 #define PTRS_PER_PMD (1UL << PMD_BITS) 4817 #define PTRS_PER_PUD (1UL << PUD_BITS) 4818 #define PTRS_PER_PGD (1UL << PGDIR_BITS) 4819 4820 #define HPAGE_SHIFT (23) 4821 /* Down one huge page */ 4822 #define SPARC64_USERSPACE_TOP (-(1UL << HPAGE_SHIFT)) 4823 #define PAGE_PMD_HUGE (0x0100000000000000UL) 4824 4825 /* These are for SUN4V. */ 4826 #define _PAGE_VALID (0x8000000000000000UL) 4827 #define _PAGE_NFO_4V (0x4000000000000000UL) 4828 #define _PAGE_MODIFIED_4V (0x2000000000000000UL) 4829 #define _PAGE_ACCESSED_4V (0x1000000000000000UL) 4830 #define _PAGE_READ_4V (0x0800000000000000UL) 4831 #define _PAGE_WRITE_4V (0x0400000000000000UL) 4832 #define _PAGE_PADDR_4V (0x00FFFFFFFFFFE000UL) 4833 #define _PAGE_PFN_MASK (_PAGE_PADDR_4V) 4834 #define _PAGE_P_4V (0x0000000000000100UL) 4835 #define _PAGE_EXEC_4V (0x0000000000000080UL) 4836 #define _PAGE_W_4V (0x0000000000000040UL) 4837 #define _PAGE_PRESENT_4V (0x0000000000000010UL) 4838 #define _PAGE_SZALL_4V (0x0000000000000007UL) 4839 /* There are other page sizes. Some supported. */ 4840 #define _PAGE_SZ4MB_4V (0x0000000000000003UL) 4841 #define _PAGE_SZ512K_4V (0x0000000000000002UL) 4842 #define _PAGE_SZ64K_4V (0x0000000000000001UL) 4843 #define _PAGE_SZ8K_4V (0x0000000000000000UL) 4844 4845 #define SPARC64_MODULES_VADDR (0x0000000010000000UL) 4846 #define SPARC64_MODULES_END (0x00000000f0000000UL) 4847 #define SPARC64_VMALLOC_START (0x0000000100000000UL) 4848 4849 #define SPARC64_STACK_SIZE 0x4000 4850 4851 /* sparsemem */ 4852 #define _SECTION_SIZE_BITS 30 4853 #define _MAX_PHYSMEM_BITS 53 4854 4855 #define STACK_BIAS 2047 4856 4857 struct machine_specific { 4858 ulong page_offset; 4859 ulong vmalloc_end; 4860 }; 4861 4862 #define TIF_SIGPENDING (2) 4863 #define SWP_OFFSET(E) ((E) >> (PAGE_SHIFT + 8UL)) 4864 #define SWP_TYPE(E) (((E) >> PAGE_SHIFT) & 0xffUL) 4865 #define __swp_type(E) SWP_TYPE(E) 4866 #define __swp_offset(E) SWP_OFFSET(E) 4867 #endif /* SPARC64 */ 4868 4869 #ifdef PLATFORM 4870 4871 #define SWP_TYPE(entry) (error("PLATFORM_SWP_TYPE: TBD\n")) 4872 #define SWP_OFFSET(entry) (error("PLATFORM_SWP_OFFSET: TBD\n")) 4873 #define __swp_type(entry) SWP_TYPE(entry) 4874 #define __swp_offset(entry) SWP_OFFSET(entry) 4875 4876 #endif /* PLATFORM */ 4877 4878 #define KILOBYTES(x) ((x) * (1024)) 4879 #define MEGABYTES(x) ((x) * (1048576)) 4880 #define GIGABYTES(x) ((x) * (1073741824)) 4881 #define TB_SHIFT (40) 4882 #define TERABYTES(x) ((x) * (1UL << TB_SHIFT)) 4883 4884 #define MEGABYTE_MASK (MEGABYTES(1)-1) 4885 4886 #define SIZEOF_64BIT (8) 4887 #define SIZEOF_32BIT (4) 4888 #define SIZEOF_16BIT (2) 4889 #define SIZEOF_8BIT (1) 4890 4891 #ifdef ARM 4892 #define MAX_HEXADDR_STRLEN (8) 4893 #define UVADDR_PRLEN (8) 4894 #endif 4895 #ifdef X86 4896 #define MAX_HEXADDR_STRLEN (8) 4897 #define UVADDR_PRLEN (8) 4898 #endif 4899 #ifdef ALPHA 4900 #define MAX_HEXADDR_STRLEN (16) 4901 #define UVADDR_PRLEN (11) 4902 #endif 4903 #ifdef PPC 4904 #define MAX_HEXADDR_STRLEN (8) 4905 #define UVADDR_PRLEN (8) 4906 #endif 4907 #ifdef IA64 4908 #define MAX_HEXADDR_STRLEN (16) 4909 #define UVADDR_PRLEN (16) 4910 #endif 4911 #ifdef S390 4912 #define MAX_HEXADDR_STRLEN (8) 4913 #define UVADDR_PRLEN (8) 4914 #endif 4915 #ifdef S390X 4916 #define MAX_HEXADDR_STRLEN (16) 4917 #define UVADDR_PRLEN (16) 4918 #endif 4919 #ifdef X86_64 4920 #define MAX_HEXADDR_STRLEN (16) 4921 #define UVADDR_PRLEN (10) 4922 #endif 4923 #ifdef PPC64 4924 #define MAX_HEXADDR_STRLEN (16) 4925 #define UVADDR_PRLEN (16) 4926 #endif 4927 #ifdef ARM64 4928 #define MAX_HEXADDR_STRLEN (16) 4929 #define UVADDR_PRLEN (10) 4930 #endif 4931 #ifdef MIPS 4932 #define MAX_HEXADDR_STRLEN (8) 4933 #define UVADDR_PRLEN (8) 4934 #endif 4935 #ifdef MIPS64 4936 #define MAX_HEXADDR_STRLEN (16) 4937 #define UVADDR_PRLEN (16) 4938 #endif 4939 #ifdef SPARC64 4940 #define MAX_HEXADDR_STRLEN (16) 4941 #define UVADDR_PRLEN (16) 4942 #endif 4943 #ifdef RISCV64 4944 #define MAX_HEXADDR_STRLEN (16) 4945 #define UVADDR_PRLEN (16) 4946 #endif 4947 #ifdef LOONGARCH64 4948 #define MAX_HEXADDR_STRLEN (16) 4949 #define UVADDR_PRLEN (16) 4950 #endif 4951 4952 #define BADADDR ((ulong)(-1)) 4953 #define BADVAL ((ulong)(-1)) 4954 #define UNUSED (-1) 4955 4956 #define UNINITIALIZED (BADVAL) 4957 4958 #define BITS_PER_BYTE (8) 4959 #define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long)) 4960 #define NUM_TO_BIT(x) (1UL<<((x)%BITS_PER_LONG)) 4961 #define NUM_IN_BITMAP(bitmap, x) (bitmap[(x)/BITS_PER_LONG] & NUM_TO_BIT(x)) 4962 #define SET_BIT(bitmap, x) (bitmap[(x)/BITS_PER_LONG] |= NUM_TO_BIT(x)) 4963 4964 static inline unsigned int __const_hweight8(unsigned long w) 4965 { 4966 return 4967 (!!((w) & (1ULL << 0))) + 4968 (!!((w) & (1ULL << 1))) + 4969 (!!((w) & (1ULL << 2))) + 4970 (!!((w) & (1ULL << 3))) + 4971 (!!((w) & (1ULL << 4))) + 4972 (!!((w) & (1ULL << 5))) + 4973 (!!((w) & (1ULL << 6))) + 4974 (!!((w) & (1ULL << 7))); 4975 } 4976 4977 #define __const_hweight16(w) (__const_hweight8(w) + __const_hweight8((w) >> 8)) 4978 #define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16)) 4979 #define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32)) 4980 4981 #define hweight32(w) __const_hweight32(w) 4982 #define hweight64(w) __const_hweight64(w) 4983 4984 /* 4985 * precision lengths for fprintf 4986 */ 4987 #define VADDR_PRLEN (sizeof(char *) == 8 ? 16 : 8) 4988 #define LONG_LONG_PRLEN (16) 4989 #define LONG_PRLEN (sizeof(long) == 8 ? 16 : 8) 4990 #define INT_PRLEN (sizeof(int) == 8 ? 16 : 8) 4991 #define CHAR_PRLEN (2) 4992 #define SHORT_PRLEN (4) 4993 4994 #define MINSPACE (-100) 4995 4996 #define SYNOPSIS (0x1) 4997 #define COMPLETE_HELP (0x2) 4998 #define PIPE_TO_SCROLL (0x4) 4999 #define MUST_HELP (0x8) 5000 5001 #define LEFT_JUSTIFY (1) 5002 #define RIGHT_JUSTIFY (2) 5003 5004 #define CENTER (0x1) 5005 #define LJUST (0x2) 5006 #define RJUST (0x4) 5007 #define LONG_DEC (0x8) 5008 #define LONG_HEX (0x10) 5009 #define INT_DEC (0x20) 5010 #define INT_HEX (0x40) 5011 #define LONGLONG_HEX (0x80) 5012 #define ZERO_FILL (0x100) 5013 #define SLONG_DEC (0x200) 5014 5015 #define INIT_TIME (1) 5016 #define RUN_TIME (2) 5017 5018 /* 5019 * IRQ line status. 5020 * For kernels up to and including 2.6.17 5021 */ 5022 #define IRQ_INPROGRESS_2_6_17 1 /* IRQ handler active - do not enter! */ 5023 #define IRQ_DISABLED_2_6_17 2 /* IRQ disabled - do not enter! */ 5024 #define IRQ_PENDING_2_6_17 4 /* IRQ pending - replay on enable */ 5025 #define IRQ_REPLAY_2_6_17 8 /* IRQ has been replayed but not acked yet */ 5026 #define IRQ_AUTODETECT_2_6_17 16 /* IRQ is being autodetected */ 5027 #define IRQ_WAITING_2_6_17 32 /* IRQ not yet seen - for autodetection */ 5028 #define IRQ_LEVEL_2_6_17 64 /* IRQ level triggered */ 5029 #define IRQ_MASKED_2_6_17 128 /* IRQ masked - shouldn't be seen again */ 5030 5031 /* 5032 * For kernel 2.6.21 and later 5033 */ 5034 #define IRQ_TYPE_NONE_2_6_21 0x00000000 /* Default, unspecified type */ 5035 #define IRQ_TYPE_EDGE_RISING_2_6_21 0x00000001 /* Edge rising type */ 5036 #define IRQ_TYPE_EDGE_FALLING_2_6_21 0x00000002 /* Edge falling type */ 5037 #define IRQ_TYPE_EDGE_BOTH_2_6_21 (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING) 5038 #define IRQ_TYPE_LEVEL_HIGH_2_6_21 0x00000004 /* Level high type */ 5039 #define IRQ_TYPE_LEVEL_LOW_2_6_21 0x00000008 /* Level low type */ 5040 #define IRQ_TYPE_SENSE_MASK_2_6_21 0x0000000f /* Mask of the above */ 5041 #define IRQ_TYPE_PROBE_2_6_21 0x00000010 /* Probing in progress */ 5042 5043 #define IRQ_INPROGRESS_2_6_21 0x00000100 /* IRQ handler active - do not enter! */ 5044 #define IRQ_DISABLED_2_6_21 0x00000200 /* IRQ disabled - do not enter! */ 5045 #define IRQ_PENDING_2_6_21 0x00000400 /* IRQ pending - replay on enable */ 5046 #define IRQ_REPLAY_2_6_21 0x00000800 /* IRQ has been replayed but not acked yet */ 5047 #define IRQ_AUTODETECT_2_6_21 0x00001000 /* IRQ is being autodetected */ 5048 #define IRQ_WAITING_2_6_21 0x00002000 /* IRQ not yet seen - for autodetection */ 5049 #define IRQ_LEVEL_2_6_21 0x00004000 /* IRQ level triggered */ 5050 #define IRQ_MASKED_2_6_21 0x00008000 /* IRQ masked - shouldn't be seen again */ 5051 #define IRQ_PER_CPU_2_6_21 0x00010000 /* IRQ is per CPU */ 5052 #define IRQ_NOPROBE_2_6_21 0x00020000 /* IRQ is not valid for probing */ 5053 #define IRQ_NOREQUEST_2_6_21 0x00040000 /* IRQ cannot be requested */ 5054 #define IRQ_NOAUTOEN_2_6_21 0x00080000 /* IRQ will not be enabled on request irq */ 5055 #define IRQ_WAKEUP_2_6_21 0x00100000 /* IRQ triggers system wakeup */ 5056 #define IRQ_MOVE_PENDING_2_6_21 0x00200000 /* need to re-target IRQ destination */ 5057 #define IRQ_NO_BALANCING_2_6_21 0x00400000 /* IRQ is excluded from balancing */ 5058 #define IRQ_SPURIOUS_DISABLED_2_6_21 0x00800000 /* IRQ was disabled by the spurious trap */ 5059 #define IRQ_MOVE_PCNTXT_2_6_21 0x01000000 /* IRQ migration from process context */ 5060 #define IRQ_AFFINITY_SET_2_6_21 0x02000000 /* IRQ affinity was set from userspace*/ 5061 5062 /* 5063 * Select proper IRQ value depending on kernel version 5064 */ 5065 #define IRQ_TYPE_NONE \ 5066 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_NONE_2_6_21 : 0) 5067 #define IRQ_TYPE_EDGE_RISING \ 5068 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_EDGE_RISING_2_6_21 : 0) 5069 #define IRQ_TYPE_EDGE_FALLING \ 5070 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_EDGE_FALLING_2_6_21 : 0) 5071 #define IRQ_TYPE_EDGE_BOTH \ 5072 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_EDGE_BOTH_2_6_21 : 0) 5073 #define IRQ_TYPE_LEVEL_HIGH \ 5074 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_LEVEL_HIGH_2_6_21 : 0) 5075 #define IRQ_TYPE_LEVEL_LOW \ 5076 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_LEVEL_LOW_2_6_21 : 0) 5077 #define IRQ_TYPE_SENSE_MASK \ 5078 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_SENSE_MASK_2_6_21 : 0) 5079 #define IRQ_TYPE_PROBE \ 5080 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_TYPE_PROBE_2_6_21 : 0) 5081 5082 #define IRQ_INPROGRESS \ 5083 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_INPROGRESS_2_6_21 : IRQ_INPROGRESS_2_6_17) 5084 #define IRQ_DISABLED \ 5085 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_DISABLED_2_6_21 : IRQ_DISABLED_2_6_17) 5086 #define IRQ_PENDING \ 5087 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_PENDING_2_6_21 : IRQ_PENDING_2_6_17) 5088 #define IRQ_REPLAY \ 5089 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_REPLAY_2_6_21 : IRQ_REPLAY_2_6_17) 5090 #define IRQ_AUTODETECT \ 5091 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_AUTODETECT_2_6_21 : IRQ_AUTODETECT_2_6_17) 5092 #define IRQ_WAITING \ 5093 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_WAITING_2_6_21 : IRQ_WAITING_2_6_17) 5094 #define IRQ_LEVEL \ 5095 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_LEVEL_2_6_21 : IRQ_LEVEL_2_6_17) 5096 #define IRQ_MASKED \ 5097 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_MASKED_2_6_21 : IRQ_MASKED_2_6_17) 5098 #define IRQ_PER_CPU \ 5099 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_PER_CPU_2_6_21 : 0) 5100 #define IRQ_NOPROBE \ 5101 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_NOPROBE_2_6_21 : 0) 5102 #define IRQ_NOREQUEST \ 5103 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_NOREQUEST_2_6_21 : 0) 5104 #define IRQ_NOAUTOEN \ 5105 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_NOAUTOEN_2_6_21 : 0) 5106 #define IRQ_WAKEUP \ 5107 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_WAKEUP_2_6_21 : 0) 5108 #define IRQ_MOVE_PENDING \ 5109 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_MOVE_PENDING_2_6_21 : 0) 5110 #define IRQ_NO_BALANCING \ 5111 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_NO_BALANCING_2_6_21 : 0) 5112 #define IRQ_SPURIOUS_DISABLED \ 5113 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_SPURIOUS_DISABLED_2_6_21 : 0) 5114 #define IRQ_MOVE_PCNTXT \ 5115 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_MOVE_PCNTXT_2_6_21 : 0) 5116 #define IRQ_AFFINITY_SET \ 5117 (THIS_KERNEL_VERSION >= LINUX(2,6,21) ? IRQ_AFFINITY_SET_2_6_21 : 0) 5118 5119 #ifdef ARM 5120 #define SA_PROBE SA_ONESHOT 5121 #define SA_SAMPLE_RANDOM SA_RESTART 5122 #define SA_SHIRQ 0x04000000 5123 #define SA_RESTORER 0x04000000 5124 #endif 5125 5126 #ifdef X86 5127 #define SA_PROBE SA_ONESHOT 5128 #define SA_SAMPLE_RANDOM SA_RESTART 5129 #define SA_SHIRQ 0x04000000 5130 #define SA_RESTORER 0x04000000 5131 #endif 5132 5133 #ifdef X86_64 5134 #define SA_PROBE SA_ONESHOT 5135 #define SA_SAMPLE_RANDOM SA_RESTART 5136 #define SA_SHIRQ 0x04000000 5137 #define SA_RESTORER 0x04000000 5138 #endif 5139 5140 #ifdef ALPHA 5141 #define SA_PROBE SA_ONESHOT 5142 #define SA_SAMPLE_RANDOM SA_RESTART 5143 #define SA_SHIRQ 0x40000000 5144 #endif 5145 5146 #ifdef PPC 5147 #define SA_PROBE SA_ONESHOT 5148 #define SA_SAMPLE_RANDOM SA_RESTART 5149 #define SA_SHIRQ 0x04000000 5150 #define SA_RESTORER 0x04000000 5151 #endif 5152 5153 #ifdef PPC64 5154 #define SA_PROBE SA_ONESHOT 5155 #define SA_SAMPLE_RANDOM SA_RESTART 5156 #define SA_SHIRQ 0x04000000 5157 #define SA_RESTORER 0x04000000u 5158 #endif 5159 5160 #ifdef IA64 5161 #define SA_PROBE SA_ONESHOT 5162 #define SA_SAMPLE_RANDOM SA_RESTART 5163 #define SA_SHIRQ 0x04000000 5164 #define SA_RESTORER 0x04000000 5165 #endif 5166 5167 #ifdef S390 5168 #define SA_PROBE SA_ONESHOT 5169 #define SA_SAMPLE_RANDOM SA_RESTART 5170 #define SA_SHIRQ 0x04000000 5171 #define SA_RESTORER 0x04000000 5172 #endif 5173 5174 #ifdef S390X 5175 #define SA_PROBE SA_ONESHOT 5176 #define SA_SAMPLE_RANDOM SA_RESTART 5177 #define SA_SHIRQ 0x04000000 5178 #define SA_RESTORER 0x04000000 5179 #endif 5180 5181 5182 #define ACTION_FLAGS (SA_INTERRUPT|SA_PROBE|SA_SAMPLE_RANDOM|SA_SHIRQ) 5183 5184 5185 #endif /* !GDB_COMMON */ 5186 5187 typedef enum drill_ops_s { 5188 EOP_MEMBER_SIZES, 5189 EOP_MEMBER_NAME, 5190 EOP_POINTER, 5191 EOP_TYPEDEF, 5192 EOP_INT, 5193 EOP_VALUE, 5194 EOP_ARRAY, 5195 EOP_UNION, 5196 EOP_ENUM, 5197 EOP_ENUMVAL, 5198 EOP_STRUCT, 5199 EOP_FUNCTION, 5200 EOP_DONE, 5201 EOP_OOPS 5202 } drill_ops_t; 5203 5204 /* 5205 * Common request structure for BFD or GDB data or commands. 5206 */ 5207 struct gnu_request { 5208 int command; 5209 char *buf; 5210 FILE *fp; 5211 ulong addr; 5212 ulong addr2; 5213 ulong count; 5214 ulong flags; 5215 char *name; 5216 ulong length; 5217 int typecode; 5218 #if defined(GDB_5_3) || defined(GDB_6_0) || defined(GDB_6_1) || defined(GDB_7_0) 5219 char *typename; 5220 #else 5221 char *type_name; 5222 #endif 5223 char *target_typename; 5224 ulong target_length; 5225 int target_typecode; 5226 int is_typedef; 5227 char *member; 5228 long member_offset; 5229 long member_length; 5230 int member_typecode; 5231 long value; 5232 const char *tagname; 5233 ulong pc; 5234 ulong sp; 5235 ulong ra; 5236 int curframe; 5237 ulong frame; 5238 ulong prevsp; 5239 ulong prevpc; 5240 ulong lastsp; 5241 ulong task; 5242 ulong debug; 5243 struct stack_hook *hookp; 5244 ulong lowest; 5245 ulong highest; 5246 void (*callback) (struct gnu_request *req, void *data); 5247 void *callback_data; 5248 struct load_module *lm; 5249 char *member_main_type_name; 5250 char *member_main_type_tag_name; 5251 char *member_target_type_name; 5252 char *member_target_type_tag_name; 5253 char *type_tag_name; 5254 /* callback function for 3rd party symbol and type (EPPIC for now) */ 5255 void *priv; 5256 int (*tcb)(drill_ops_t, struct gnu_request *, const void *, const void *, const void *, const void *); 5257 }; 5258 5259 /* 5260 * GNU commands 5261 */ 5262 #define GNU_DATATYPE_INIT (1) 5263 #define GNU_DISASSEMBLE (2) 5264 #define GNU_GET_LINE_NUMBER (3) 5265 #define GNU_PASS_THROUGH (4) 5266 #define GNU_GET_DATATYPE (5) 5267 #define GNU_COMMAND_EXISTS (6) 5268 #define GNU_STACK_TRACE (7) 5269 #define GNU_ALPHA_FRAME_OFFSET (8) 5270 #define GNU_FUNCTION_NUMARGS (9) 5271 #define GNU_RESOLVE_TEXT_ADDR (10) 5272 #define GNU_ADD_SYMBOL_FILE (11) 5273 #define GNU_DELETE_SYMBOL_FILE (12) 5274 #define GNU_VERSION (13) 5275 #define GNU_PATCH_SYMBOL_VALUES (14) 5276 #define GNU_GET_SYMBOL_TYPE (15) 5277 #define GNU_USER_PRINT_OPTION (16) 5278 #define GNU_SET_CRASH_BLOCK (17) 5279 #define GNU_GET_FUNCTION_RANGE (18) 5280 #define GNU_ITERATE_DATATYPES (19) 5281 #define GNU_LOOKUP_STRUCT_CONTENTS (20) 5282 #define GNU_DEBUG_COMMAND (100) 5283 /* 5284 * GNU flags 5285 */ 5286 #define GNU_PRINT_LINE_NUMBERS (0x1) 5287 #define GNU_FUNCTION_ONLY (0x2) 5288 #define GNU_PRINT_ENUMERATORS (0x4) 5289 #define GNU_RETURN_ON_ERROR (0x8) 5290 #define GNU_COMMAND_FAILED (0x10) 5291 #define GNU_FROM_TTY_OFF (0x20) 5292 #define GNU_NO_READMEM (0x40) 5293 #define GNU_VAR_LENGTH_TYPECODE (0x80) 5294 5295 #undef TRUE 5296 #undef FALSE 5297 5298 #define TRUE (1) 5299 #define FALSE (0) 5300 5301 #ifdef GDB_COMMON 5302 /* 5303 * function prototypes required by modified gdb source files. 5304 */ 5305 extern "C" int console(const char *, ...); 5306 extern "C" int gdb_CRASHDEBUG(ulong); 5307 int gdb_readmem_callback(ulong, void *, int, int); 5308 void patch_load_module(struct objfile *objfile, struct minimal_symbol *msymbol); 5309 extern "C" int patch_kernel_symbol(struct gnu_request *); 5310 struct syment *symbol_search(char *); 5311 int gdb_line_number_callback(ulong, ulong, ulong); 5312 int gdb_print_callback(ulong); 5313 char *gdb_lookup_module_symbol(ulong, ulong *); 5314 extern "C" int same_file(char *, char *); 5315 #endif 5316 5317 #ifndef GDB_COMMON 5318 /* 5319 * WARNING: the following type codes are type_code enums from gdb/gdbtypes.h 5320 */ 5321 enum type_code { 5322 TYPE_CODE_UNDEF, /* Not used; catches errors */ 5323 TYPE_CODE_PTR, /* Pointer type */ 5324 TYPE_CODE_ARRAY, /* Array type with lower & upper bounds. */ 5325 TYPE_CODE_STRUCT, /* C struct or Pascal record */ 5326 TYPE_CODE_UNION, /* C union or Pascal variant part */ 5327 TYPE_CODE_ENUM, /* Enumeration type */ 5328 #if defined(GDB_5_3) || defined(GDB_6_0) || defined(GDB_6_1) || defined(GDB_7_0) || defined(GDB_7_3_1) || defined(GDB_7_6) || defined(GDB_10_2) || defined(GDB_16_3) 5329 #if defined(GDB_7_0) || defined(GDB_7_3_1) || defined(GDB_7_6) || defined(GDB_10_2) || defined(GDB_16_3) 5330 TYPE_CODE_FLAGS, /* Bit flags type */ 5331 #endif 5332 TYPE_CODE_FUNC, /* Function type */ 5333 TYPE_CODE_INT, /* Integer type */ 5334 5335 /* Floating type. This is *NOT* a complex type. Beware, there are parts 5336 of GDB which bogusly assume that TYPE_CODE_FLT can mean complex. */ 5337 TYPE_CODE_FLT, 5338 5339 /* Void type. The length field specifies the length (probably always 5340 one) which is used in pointer arithmetic involving pointers to 5341 this type, but actually dereferencing such a pointer is invalid; 5342 a void type has no length and no actual representation in memory 5343 or registers. A pointer to a void type is a generic pointer. */ 5344 TYPE_CODE_VOID, 5345 5346 TYPE_CODE_SET, /* Pascal sets */ 5347 TYPE_CODE_RANGE, /* Range (integers within spec'd bounds) */ 5348 5349 /* 5350 * NOTE: the remainder of the type codes are not list or used here... 5351 */ 5352 TYPE_CODE_BOOL = 20, 5353 #endif 5354 }; 5355 5356 /* 5357 * include/linux/sched.h 5358 */ 5359 #define PF_EXITING 0x00000004 /* getting shut down */ 5360 #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ 5361 #define SCHED_NORMAL 0 5362 #define SCHED_FIFO 1 5363 #define SCHED_RR 2 5364 #define SCHED_BATCH 3 5365 #define SCHED_ISO 4 5366 #define SCHED_IDLE 5 5367 #define SCHED_DEADLINE 6 5368 5369 extern long _ZOMBIE_; 5370 #define IS_ZOMBIE(task) (task_state(task) & _ZOMBIE_) 5371 #define IS_EXITING(task) (task_flags(task) & PF_EXITING) 5372 5373 /* 5374 * ps command options. 5375 */ 5376 #define PS_BY_PID (0x1) 5377 #define PS_BY_TASK (0x2) 5378 #define PS_BY_CMD (0x4) 5379 #define PS_SHOW_ALL (0x8) 5380 #define PS_PPID_LIST (0x10) 5381 #define PS_CHILD_LIST (0x20) 5382 #define PS_KERNEL (0x40) 5383 #define PS_USER (0x80) 5384 #define PS_TIMES (0x100) 5385 #define PS_KSTACKP (0x200) 5386 #define PS_LAST_RUN (0x400) 5387 #define PS_ARGV_ENVP (0x800) 5388 #define PS_TGID_LIST (0x1000) 5389 #define PS_RLIMIT (0x2000) 5390 #define PS_GROUP (0x4000) 5391 #define PS_BY_REGEX (0x8000) 5392 #define PS_NO_HEADER (0x10000) 5393 #define PS_MSECS (0x20000) 5394 #define PS_SUMMARY (0x40000) 5395 #define PS_POLICY (0x80000) 5396 #define PS_ACTIVE (0x100000) 5397 5398 #define PS_EXCLUSIVE (PS_TGID_LIST|PS_ARGV_ENVP|PS_TIMES|PS_CHILD_LIST|PS_PPID_LIST|PS_LAST_RUN|PS_RLIMIT|PS_MSECS|PS_SUMMARY|PS_ACTIVE) 5399 5400 #define MAX_PS_ARGS (100) /* maximum command-line specific requests */ 5401 5402 struct psinfo { 5403 int argc; 5404 ulong pid[MAX_PS_ARGS]; 5405 int type[MAX_PS_ARGS]; 5406 ulong task[MAX_PS_ARGS]; 5407 char comm[MAX_PS_ARGS][TASK_COMM_LEN+1]; 5408 struct regex_data { 5409 char *pattern; 5410 regex_t regex; 5411 } regex_data[MAX_PS_ARGS]; 5412 int regexs; 5413 ulong *cpus; 5414 int policy; 5415 }; 5416 5417 #define IS_A_NUMBER(X) (decimal(X, 0) || hexadecimal(X, 0)) 5418 #define AMBIGUOUS_NUMBER(X) (decimal(X, 0) && hexadecimal(X, 0)) 5419 5420 #define is_mclx_compressed_dump(X) (va_server_init((X), 0, 0, 0) == 0) 5421 5422 struct task_mem_usage { 5423 ulong rss; 5424 ulong total_vm; 5425 double pct_physmem; 5426 ulong mm_struct_addr; 5427 ulong pgd_addr; 5428 }; 5429 5430 /* 5431 * Global data (global_data.c) 5432 */ 5433 extern FILE *fp; 5434 extern struct program_context program_context, *pc; 5435 extern struct task_table task_table, *tt; 5436 extern struct kernel_table kernel_table, *kt; 5437 extern struct command_table_entry linux_command_table[]; 5438 extern char *args[MAXARGS]; 5439 extern int argcnt; 5440 extern int argerrs; 5441 extern struct offset_table offset_table; 5442 extern struct size_table size_table; 5443 extern struct array_table array_table; 5444 extern struct vm_table vm_table, *vt; 5445 extern struct machdep_table *machdep; 5446 extern struct symbol_table_data symbol_table_data, *st; 5447 extern struct extension_table *extension_table; 5448 5449 /* 5450 * Generated in build_data.c 5451 */ 5452 extern char *build_command; 5453 extern char *build_data; 5454 extern char *build_target; 5455 extern char *build_version; 5456 extern char *compiler_version; 5457 5458 5459 /* 5460 * command prototypes 5461 */ 5462 void cmd_quit(void); /* main.c */ 5463 void cmd_mach(void); /* main.c */ 5464 void cmd_help(void); /* help.c */ 5465 void cmd_test(void); /* test.c */ 5466 void cmd_ascii(void); /* tools.c */ 5467 void cmd_sbitmapq(void); /* sbitmap.c */ 5468 void cmd_bpf(void); /* bfp.c */ 5469 void cmd_set(void); /* tools.c */ 5470 void cmd_eval(void); /* tools.c */ 5471 void cmd_list(void); /* tools.c */ 5472 void cmd_tree(void); /* tools.c */ 5473 void cmd_template(void); /* tools.c */ 5474 void cmd_alias(void); /* cmdline.c */ 5475 void cmd_repeat(void); /* cmdline.c */ 5476 void cmd_rd(void); /* memory.c */ 5477 void cmd_wr(void); /* memory.c */ 5478 void cmd_ptov(void); /* memory.c */ 5479 void cmd_vtop(void); /* memory.c */ 5480 void cmd_vm(void); /* memory.c */ 5481 void cmd_ptob(void); /* memory.c */ 5482 void cmd_btop(void); /* memory.c */ 5483 void cmd_kmem(void); /* memory.c */ 5484 void cmd_search(void); /* memory.c */ 5485 void cmd_swap(void); /* memory.c */ 5486 void cmd_pte(void); /* memory.c */ 5487 void cmd_ps(void); /* task.c */ 5488 void cmd_task(void); /* task.c */ 5489 void cmd_foreach(void); /* task.c */ 5490 void cmd_runq(void); /* task.c */ 5491 void cmd_sig(void); /* task.c */ 5492 void cmd_bt(void); /* kernel.c */ 5493 void cmd_dis(void); /* kernel.c */ 5494 void cmd_mod(void); /* kernel.c */ 5495 void cmd_log(void); /* kernel.c */ 5496 void cmd_sys(void); /* kernel.c */ 5497 void cmd_irq(void); /* kernel.c */ 5498 void cmd_timer(void); /* kernel.c */ 5499 void cmd_waitq(void); /* kernel.c */ 5500 void cmd_sym(void); /* symbols.c */ 5501 void cmd_struct(void); /* symbols.c */ 5502 void cmd_union(void); /* symbols.c */ 5503 void cmd_pointer(void); /* symbols.c */ 5504 void cmd_whatis(void); /* symbols.c */ 5505 void cmd_p(void); /* symbols.c */ 5506 void cmd_mount(void); /* filesys.c */ 5507 void cmd_files(void); /* filesys.c */ 5508 void cmd_fuser(void); /* filesys.c */ 5509 void cmd_dev(void); /* dev.c */ 5510 void cmd_gdb(void); /* gdb_interface.c */ 5511 void cmd_net(void); /* net.c */ 5512 void cmd_extend(void); /* extensions.c */ 5513 #if defined(S390) || defined(S390X) 5514 void cmd_s390dbf(void); 5515 #endif 5516 void cmd_map(void); /* kvmdump.c */ 5517 void cmd_ipcs(void); /* ipcs.c */ 5518 void cmd_rustfilt(void); /* symbols.c */ 5519 5520 /* 5521 * main.c 5522 */ 5523 void main_loop(void); 5524 void exec_command(void); 5525 struct command_table_entry *get_command_table_entry(char *); 5526 void program_usage(int); 5527 #define LONG_FORM (1) 5528 #define SHORT_FORM (0) 5529 void dump_program_context(void); 5530 void dump_build_data(void); 5531 #ifdef ARM 5532 #define machdep_init(X) arm_init(X) 5533 #endif 5534 #ifdef ARM64 5535 #define machdep_init(X) arm64_init(X) 5536 #endif 5537 #ifdef X86 5538 #define machdep_init(X) x86_init(X) 5539 #endif 5540 #ifdef ALPHA 5541 #define machdep_init(X) alpha_init(X) 5542 #endif 5543 #ifdef PPC 5544 #define machdep_init(X) ppc_init(X) 5545 #endif 5546 #ifdef IA64 5547 #define machdep_init(X) ia64_init(X) 5548 #endif 5549 #ifdef S390 5550 #define machdep_init(X) s390_init(X) 5551 #endif 5552 #ifdef S390X 5553 #define machdep_init(X) s390x_init(X) 5554 #endif 5555 #ifdef X86_64 5556 #define machdep_init(X) x86_64_init(X) 5557 #endif 5558 #ifdef PPC64 5559 #define machdep_init(X) ppc64_init(X) 5560 #endif 5561 #ifdef MIPS 5562 #define machdep_init(X) mips_init(X) 5563 #endif 5564 #ifdef MIPS64 5565 #define machdep_init(X) mips64_init(X) 5566 #endif 5567 #ifdef RISCV64 5568 #define machdep_init(X) riscv64_init(X) 5569 #endif 5570 #ifdef SPARC64 5571 #define machdep_init(X) sparc64_init(X) 5572 #endif 5573 #ifdef LOONGARCH64 5574 #define machdep_init(X) loongarch64_init(X) 5575 #endif 5576 int clean_exit(int); 5577 int untrusted_file(FILE *, char *); 5578 char *readmem_function_name(void); 5579 char *writemem_function_name(void); 5580 char *no_vmcoreinfo(const char *); 5581 5582 /* 5583 * cmdline.c 5584 */ 5585 void restart(int); 5586 void alias_init(char *); 5587 struct alias_data *is_alias(char *); 5588 void deallocate_alias(char *); 5589 void cmdline_init(void); 5590 void set_command_prompt(char *); 5591 void exec_input_file(void); 5592 void process_command_line(void); 5593 void dump_history(void); 5594 void resolve_rc_cmd(char *, int); 5595 void dump_alias_data(void); 5596 int output_open(void); 5597 #define output_closed() (!output_open()) 5598 void close_output(void); 5599 int interruptible(void); 5600 int received_SIGINT(void); 5601 void debug_redirect(char *); 5602 int CRASHPAGER_valid(void); 5603 char *setup_scroll_command(void); 5604 int minimal_functions(char *); 5605 int is_args_input_file(struct command_table_entry *, struct args_input_file *); 5606 void exec_args_input_file(struct command_table_entry *, struct args_input_file *); 5607 5608 /* 5609 * tools.c 5610 */ 5611 FILE *set_error(char *); 5612 int __error(int, char *, ...); 5613 #define error __error /* avoid conflict with gdb error() */ 5614 int console(const char *, ...); 5615 void create_console_device(char *); 5616 int console_off(void); 5617 int console_on(int); 5618 int console_verbatim(char *); 5619 int whitespace(int); 5620 int ascii(int); 5621 int ascii_string(char *); 5622 int printable_string(char *); 5623 char *clean_line(char *); 5624 char *strip_line_end(char *); 5625 char *strip_linefeeds(char *); 5626 char *strip_beginning_whitespace(char *); 5627 char *strip_ending_whitespace(char *); 5628 char *strip_ending_char(char *, char); 5629 char *strip_beginning_char(char *, char); 5630 char *strip_comma(char *); 5631 char *strip_hex(char *); 5632 char *upper_case(const char *, char *); 5633 char *first_nonspace(char *); 5634 char *first_space(char *); 5635 char *replace_string(char *, char *, char); 5636 void string_insert(char *, char *); 5637 char *strstr_rightmost(char *, char *); 5638 char *null_first_space(char *); 5639 int parse_line(char *, char **); 5640 void print_verbatim(FILE *, char *); 5641 char *fixup_percent(char *); 5642 int can_eval(char *); 5643 ulong eval(char *, int, int *); 5644 ulonglong evall(char *, int, int *); 5645 int eval_common(char *, int, int *, struct number_option *); 5646 ulong htol(char *, int, int *); 5647 ulong dtol(char *, int, int *); 5648 unsigned int dtoi(char *, int, int *); 5649 ulong stol(char *, int, int *); 5650 ulonglong stoll(char *, int, int *); 5651 ulonglong htoll(char *, int, int *); 5652 ulonglong dtoll(char *, int, int *); 5653 int decimal(char *, int); 5654 int hexadecimal(char *, int); 5655 int hexadecimal_only(char *, int); 5656 ulong convert(char *, int, int *, ulong); 5657 void pad_line(FILE *, int, char); 5658 #define INDENT(x) pad_line(fp, x, ' ') 5659 char *mkstring(char *, int, ulong, const char *); 5660 #define MKSTR(X) ((const char *)(X)) 5661 int count_leading_spaces(char *); 5662 int count_chars(char *, char); 5663 long count_buffer_chars(char *, char, long); 5664 char *space(int); 5665 char *concat_args(char *, int, int); 5666 char *shift_string_left(char *, int); 5667 char *shift_string_right(char *, int); 5668 int bracketed(char *, char *, int); 5669 void backspace(int); 5670 int do_list(struct list_data *); 5671 int do_list_no_hash(struct list_data *); 5672 struct radix_tree_ops { 5673 void (*entry)(ulong node, ulong slot, const char *path, 5674 ulong index, void *private); 5675 uint radix; 5676 void *private; 5677 }; 5678 int do_radix_tree_traverse(ulong ptr, int is_root, struct radix_tree_ops *ops); 5679 struct xarray_ops { 5680 void (*entry)(ulong node, ulong slot, const char *path, 5681 ulong index, void *private); 5682 uint radix; 5683 void *private; 5684 }; 5685 int do_xarray_traverse(ulong ptr, int is_root, struct xarray_ops *ops); 5686 int do_rdtree(struct tree_data *); 5687 int do_rbtree(struct tree_data *); 5688 int do_xatree(struct tree_data *); 5689 int retrieve_list(ulong *, int); 5690 long power(long, int); 5691 long long ll_power(long long, long long); 5692 void hq_init(void); 5693 int hq_open(void); 5694 int hq_close(void); 5695 int hq_enter(ulong); 5696 int hq_entry_exists(ulong); 5697 int hq_is_open(void); 5698 int hq_is_inuse(void); 5699 long get_embedded(void); 5700 void dump_embedded(char *); 5701 char *ordinal(ulong, char *); 5702 char *first_nonspace(char *); 5703 void dump_hash_table(int); 5704 void dump_shared_bufs(void); 5705 void drop_core(char *); 5706 int extract_hex(char *, ulong *, char, ulong); 5707 int count_bits_int(int); 5708 int count_bits_long(ulong); 5709 int highest_bit_long(ulong); 5710 int lowest_bit_long(ulong); 5711 void buf_init(void); 5712 void sym_buf_init(void); 5713 void free_all_bufs(void); 5714 char *getbuf(long); 5715 void freebuf(char *); 5716 char *resizebuf(char *, long, long); 5717 char *strdupbuf(char *); 5718 #define GETBUF(X) getbuf((long)(X)) 5719 #define FREEBUF(X) freebuf((char *)(X)) 5720 #define RESIZEBUF(X,Y,Z) (X) = (typeof(X))resizebuf((char *)(X), (long)(Y), (long)(Z)); 5721 #define STRDUPBUF(X) strdupbuf((char *)(X)) 5722 void sigsetup(int, void *, struct sigaction *, struct sigaction *); 5723 #define SIGACTION(s, h, a, o) sigsetup(s, h, a, o) 5724 char *convert_time(ulonglong, char *); 5725 char *ctime_tz(time_t *); 5726 void stall(ulong); 5727 char *pages_to_size(ulong, char *); 5728 int clean_arg(void); 5729 int empty_list(ulong); 5730 int machine_type(char *); 5731 int machine_type_mismatch(char *, char *, char *, ulong); 5732 void command_not_supported(void); 5733 void option_not_supported(int); 5734 void please_wait(char *); 5735 void please_wait_done(void); 5736 int pathcmp(char *, char *); 5737 int calculate(char *, ulong *, ulonglong *, ulong); 5738 int endian_mismatch(char *, char, ulong); 5739 uint16_t swap16(uint16_t, int); 5740 uint32_t swap32(uint32_t, int); 5741 uint64_t swap64(uint64_t, int); 5742 ulong *get_cpumask_buf(void); 5743 int make_cpumask(char *, ulong *, int, int *); 5744 size_t strlcpy(char *, const char *, size_t) __attribute__ ((__weak__)); 5745 struct rb_node *rb_first(struct rb_root *); 5746 struct rb_node *rb_parent(struct rb_node *, struct rb_node *); 5747 struct rb_node *rb_right(struct rb_node *, struct rb_node *); 5748 struct rb_node *rb_left(struct rb_node *, struct rb_node *); 5749 struct rb_node *rb_next(struct rb_node *); 5750 struct rb_node *rb_last(struct rb_root *); 5751 long percpu_counter_sum_positive(ulong fbc); 5752 ulong get_subsys_private(char *, char *); 5753 5754 /* 5755 * symbols.c 5756 */ 5757 void symtab_init(void); 5758 char *check_specified_kernel_debug_file(void); 5759 void no_debugging_data(int); 5760 void get_text_init_space(void); 5761 int is_kernel_text(ulong); 5762 int is_kernel_data(ulong); 5763 int is_init_data(ulong value); 5764 int is_kernel_text_offset(ulong); 5765 int is_symbol_text(struct syment *); 5766 int is_rodata(ulong, struct syment **); 5767 int get_text_function_range(ulong, ulong *, ulong *); 5768 void datatype_init(void); 5769 struct syment *symbol_search(char *); 5770 struct syment *value_search(ulong, ulong *); 5771 struct syment *value_search_base_kernel(ulong, ulong *); 5772 struct syment *value_search_module(ulong, ulong *); 5773 struct syment *symbol_search_next(char *, struct syment *); 5774 ulong highest_bss_symbol(void); 5775 int in_ksymbol_range(ulong); 5776 int module_symbol(ulong, struct syment **, 5777 struct load_module **, char *, ulong); 5778 #define IS_MODULE_VADDR(X) \ 5779 (module_symbol((ulong)(X), NULL, NULL, NULL, *gdb_output_radix)) 5780 char *closest_symbol(ulong); 5781 ulong closest_symbol_value(ulong); 5782 #define SAME_FUNCTION(X,Y) (closest_symbol_value(X) == closest_symbol_value(Y)) 5783 void show_symbol(struct syment *, ulong, ulong); 5784 #define SHOW_LINENUM (0x1) 5785 #define SHOW_SECTION (0x2) 5786 #define SHOW_HEX_OFFS (0x4) 5787 #define SHOW_DEC_OFFS (0x8) 5788 #define SHOW_RADIX() (*gdb_output_radix == 16 ? SHOW_HEX_OFFS : SHOW_DEC_OFFS) 5789 #define SHOW_MODULE (0x10) 5790 int symbol_name_count(char *); 5791 int symbol_query(char *, char *, struct syment **); 5792 struct syment *next_symbol(char *, struct syment *); 5793 struct syment *prev_symbol(char *, struct syment *); 5794 void get_symbol_data(char *, long, void *); 5795 int try_get_symbol_data(char *, long, void *); 5796 char *value_to_symstr(ulong, char *, ulong); 5797 char *value_symbol(ulong); 5798 ulong symbol_value(char *); 5799 ulong symbol_value_module(char *, char *); 5800 struct syment *per_cpu_symbol_search(char *); 5801 int symbol_exists(char *s); 5802 int kernel_symbol_exists(char *s); 5803 struct syment *kernel_symbol_search(char *); 5804 ulong symbol_value_from_proc_kallsyms(char *); 5805 int get_syment_array(char *, struct syment **, int); 5806 void set_temporary_radix(unsigned int, unsigned int *); 5807 void restore_current_radix(unsigned int); 5808 void dump_struct(char *, ulong, unsigned); 5809 void dump_struct_member(char *, ulong, unsigned); 5810 void dump_union(char *, ulong, unsigned); 5811 void store_module_symbols_v1(ulong, int); 5812 void store_module_symbols_v2(ulong, int); 5813 void store_module_symbols_6_4(ulong, int); 5814 int is_datatype_command(void); 5815 int is_typedef(char *); 5816 int arg_to_datatype(char *, struct datatype_member *, ulong); 5817 void dump_symbol_table(void); 5818 void dump_struct_table(ulong); 5819 void dump_offset_table(char *, ulong); 5820 int is_elf_file(char *); 5821 int is_kernel(char *); 5822 int is_shared_object(char *); 5823 int file_elf_version(char *); 5824 int is_system_map(char *); 5825 int is_compressed_kernel(char *, char **); 5826 int select_namelist(char *); 5827 int get_array_length(char *, int *, long); 5828 int get_array_length_alt(char *, char *, int *, long); 5829 int builtin_array_length(char *, int, int *); 5830 char *get_line_number(ulong, char *, int); 5831 char *get_build_directory(char *); 5832 int datatype_exists(char *); 5833 int get_function_numargs(ulong); 5834 int is_module_name(char *, ulong *, struct load_module **); 5835 int is_module_address(ulong, char *); 5836 ulong lowest_module_address(void); 5837 ulong highest_module_address(void); 5838 int load_module_symbols(char *, char *, ulong); 5839 void delete_load_module(ulong); 5840 ulong gdb_load_module_callback(ulong, char *); 5841 char *load_module_filter(char *, int); 5842 #define LM_P_FILTER (1) 5843 #define LM_DIS_FILTER (2) 5844 long datatype_info(char *, char *, struct datatype_member *); 5845 int get_symbol_type(char *, char *, struct gnu_request *); 5846 int get_symbol_length(char *); 5847 void dump_numargs_cache(void); 5848 int patch_kernel_symbol(struct gnu_request *); 5849 struct syment *generic_machdep_value_to_symbol(ulong, ulong *); 5850 long OFFSET_verify(long, char *, char *, int, char *); 5851 long SIZE_verify(long, char *, char *, int, char *); 5852 long OFFSET_option(long, long, char *, char *, int, char *, char *); 5853 long SIZE_option(long, long, char *, char *, int, char *, char *); 5854 void dump_trace(void **); 5855 int enumerator_value(char *, long *); 5856 int dump_enumerator_list(char *); 5857 struct load_module *init_module_function(ulong); 5858 struct struct_member_data { 5859 char *structure; 5860 char *member; 5861 long type; 5862 long unsigned_type; 5863 long length; 5864 long offset; 5865 long bitpos; 5866 long bitsize; 5867 }; 5868 int fill_struct_member_data(struct struct_member_data *); 5869 void parse_for_member_extended(struct datatype_member *, ulong); 5870 void add_to_downsized(char *); 5871 int is_downsized(char *); 5872 int is_string(char *, char *); 5873 struct syment *symbol_complete_match(const char *, struct syment *); 5874 5875 /* 5876 * memory.c 5877 */ 5878 void mem_init(void); 5879 void vm_init(void); 5880 int readmem(ulonglong, int, void *, long, char *, ulong); 5881 int writemem(ulonglong, int, void *, long, char *, ulong); 5882 int generic_verify_paddr(uint64_t); 5883 int read_dev_mem(int, void *, int, ulong, physaddr_t); 5884 int read_memory_device(int, void *, int, ulong, physaddr_t); 5885 int read_mclx_dumpfile(int, void *, int, ulong, physaddr_t); 5886 int read_lkcd_dumpfile(int, void *, int, ulong, physaddr_t); 5887 int read_daemon(int, void *, int, ulong, physaddr_t); 5888 int write_dev_mem(int, void *, int, ulong, physaddr_t); 5889 int write_memory_device(int, void *, int, ulong, physaddr_t); 5890 int write_mclx_dumpfile(int, void *, int, ulong, physaddr_t); 5891 int write_lkcd_dumpfile(int, void *, int, ulong, physaddr_t); 5892 int write_daemon(int, void *, int, ulong, physaddr_t); 5893 int kvtop(struct task_context *, ulong, physaddr_t *, int); 5894 int uvtop(struct task_context *, ulong, physaddr_t *, int); 5895 void do_vtop(ulong, struct task_context *, ulong); 5896 void raw_stack_dump(ulong, ulong); 5897 void raw_data_dump(ulong, long, int); 5898 int accessible(ulong); 5899 ulong vm_area_dump(ulong, ulong, ulong, struct reference *); 5900 #define IN_TASK_VMA(TASK,VA) (vm_area_dump((TASK), UVADDR|VERIFY_ADDR, (VA), 0)) 5901 char *fill_vma_cache(ulong); 5902 void clear_vma_cache(void); 5903 void dump_vma_cache(ulong); 5904 int generic_is_page_ptr(ulong, physaddr_t *); 5905 int is_page_ptr(ulong, physaddr_t *); 5906 void dump_vm_table(int); 5907 int read_string(ulong, char *, int); 5908 void get_task_mem_usage(ulong, struct task_mem_usage *); 5909 char *get_memory_size(char *); 5910 uint64_t generic_memory_size(void); 5911 char *swap_location(ulonglong, char *); 5912 void clear_swap_info_cache(void); 5913 uint memory_page_size(void); 5914 void force_page_size(char *); 5915 ulong first_vmalloc_address(void); 5916 ulong last_vmalloc_address(void); 5917 int in_vmlist_segment(ulong); 5918 int phys_to_page(physaddr_t, ulong *); 5919 int generic_get_kvaddr_ranges(struct vaddr_range *); 5920 int l1_cache_size(void); 5921 int dumpfile_memory(int); 5922 #define DUMPFILE_MEM_USED (1) 5923 #define DUMPFILE_FREE_MEM (2) 5924 #define DUMPFILE_MEM_DUMP (3) 5925 #define DUMPFILE_ENVIRONMENT (4) 5926 uint64_t total_node_memory(void); 5927 int generic_is_kvaddr(ulong); 5928 int generic_is_uvaddr(ulong, struct task_context *); 5929 void fill_stackbuf(struct bt_info *); 5930 void alter_stackbuf(struct bt_info *); 5931 int vaddr_type(ulong, struct task_context *); 5932 char *format_stack_entry(struct bt_info *bt, char *, ulong, ulong); 5933 int in_user_stack(ulong, ulong); 5934 int dump_inode_page(ulong); 5935 ulong valid_section_nr(ulong); 5936 void display_memory_from_file_offset(ulonglong, long, void *); 5937 void swap_info_init(void); 5938 5939 /* 5940 * filesys.c 5941 */ 5942 void fd_init(void); 5943 void vfs_init(void); 5944 int is_a_tty(char *); 5945 int file_exists(char *, struct stat *); 5946 int file_readable(char *); 5947 int is_directory(char *); 5948 char *search_directory_tree(char *, char *, int); 5949 void open_tmpfile(void); 5950 void close_tmpfile(void); 5951 void open_tmpfile2(void); 5952 void set_tmpfile2(FILE *); 5953 void close_tmpfile2(void); 5954 void open_files_dump(ulong, int, struct reference *); 5955 void get_pathname(ulong, char *, int, int, ulong); 5956 ulong *get_mount_list(int *, struct task_context *); 5957 char *vfsmount_devname(ulong, char *, int); 5958 ulong file_to_dentry(ulong); 5959 ulong file_to_vfsmnt(ulong); 5960 int get_proc_version(void); 5961 int file_checksum(char *, long *); 5962 void dump_filesys_table(int); 5963 char *fill_file_cache(ulong); 5964 void clear_file_cache(void); 5965 char *fill_dentry_cache(ulong); 5966 void clear_dentry_cache(void); 5967 char *fill_inode_cache(ulong); 5968 void clear_inode_cache(void); 5969 int monitor_memory(long *, long *, long *, long *); 5970 int is_readable(char *); 5971 struct list_pair { 5972 ulong index; 5973 void *value; 5974 }; 5975 #define radix_tree_pair list_pair 5976 ulong do_radix_tree(ulong, int, struct list_pair *); 5977 #define RADIX_TREE_COUNT (1) 5978 #define RADIX_TREE_SEARCH (2) 5979 #define RADIX_TREE_DUMP (3) 5980 #define RADIX_TREE_GATHER (4) 5981 #define RADIX_TREE_DUMP_CB (5) 5982 /* 5983 * from: "include/linux/radix-tree.h" 5984 */ 5985 #define RADIX_TREE_ENTRY_MASK 3UL 5986 #define RADIX_TREE_EXCEPTIONAL_ENTRY 2 5987 5988 ulong do_xarray(ulong, int, struct list_pair *); 5989 #define XARRAY_COUNT (1) 5990 #define XARRAY_SEARCH (2) 5991 #define XARRAY_DUMP (3) 5992 #define XARRAY_GATHER (4) 5993 #define XARRAY_DUMP_CB (5) 5994 #define XARRAY_TAG_MASK (3UL) 5995 #define XARRAY_TAG_INTERNAL (2UL) 5996 5997 int file_dump(ulong, ulong, ulong, int, int); 5998 #define DUMP_FULL_NAME 0x1 5999 #define DUMP_INODE_ONLY 0x2 6000 #define DUMP_DENTRY_ONLY 0x4 6001 #define DUMP_EMPTY_FILE 0x8 6002 #define DUMP_FILE_NRPAGES 0x10 6003 int same_file(char *, char *); 6004 int cleanup_memory_driver(void); 6005 6006 void maple_init(void); 6007 int do_mptree(struct tree_data *); 6008 ulong do_maple_tree(ulong, int, struct list_pair *); 6009 #define MAPLE_TREE_COUNT (1) 6010 #define MAPLE_TREE_SEARCH (2) 6011 #define MAPLE_TREE_DUMP (3) 6012 #define MAPLE_TREE_GATHER (4) 6013 #define MAPLE_TREE_DUMP_CB (5) 6014 6015 /* 6016 * help.c 6017 */ 6018 #define HELP_COLUMNS 5 6019 #define START_OF_HELP_DATA(X) "START_OF_HELP_DATA" X 6020 #define END_OF_HELP_DATA "END_OF_HELP_DATA" 6021 void help_init(void); 6022 void cmd_usage(char *, int); 6023 void display_version(void); 6024 void display_help_screen(char *); 6025 #ifdef ARM 6026 #define dump_machdep_table(X) arm_dump_machdep_table(X) 6027 #endif 6028 #ifdef ARM64 6029 #define dump_machdep_table(X) arm64_dump_machdep_table(X) 6030 #endif 6031 #ifdef X86 6032 #define dump_machdep_table(X) x86_dump_machdep_table(X) 6033 #endif 6034 #ifdef ALPHA 6035 #define dump_machdep_table(X) alpha_dump_machdep_table(X) 6036 #endif 6037 #ifdef PPC 6038 #define dump_machdep_table(X) ppc_dump_machdep_table(X) 6039 #endif 6040 #ifdef IA64 6041 #define dump_machdep_table(X) ia64_dump_machdep_table(X) 6042 #endif 6043 #ifdef S390 6044 #define dump_machdep_table(X) s390_dump_machdep_table(X) 6045 #endif 6046 #ifdef S390X 6047 #define dump_machdep_table(X) s390x_dump_machdep_table(X) 6048 #endif 6049 #ifdef X86_64 6050 #define dump_machdep_table(X) x86_64_dump_machdep_table(X) 6051 #endif 6052 #ifdef PPC64 6053 #define dump_machdep_table(X) ppc64_dump_machdep_table(X) 6054 #endif 6055 #ifdef MIPS 6056 #define dump_machdep_table(X) mips_dump_machdep_table(X) 6057 #endif 6058 #ifdef MIPS64 6059 #define dump_machdep_table(X) mips64_dump_machdep_table(X) 6060 #endif 6061 #ifdef SPARC64 6062 #define dump_machdep_table(X) sparc64_dump_machdep_table(X) 6063 #endif 6064 #ifdef RISCV64 6065 #define dump_machdep_table(X) riscv64_dump_machdep_table(X) 6066 #endif 6067 #ifdef LOONGARCH64 6068 #define dump_machdep_table(X) loongarch64_dump_machdep_table(X) 6069 #endif 6070 6071 extern char *help_pointer[]; 6072 extern char *help_alias[]; 6073 extern char *help_ascii[]; 6074 extern char *help_bpf[]; 6075 extern char *help_bt[]; 6076 extern char *help_btop[]; 6077 extern char *help_dev[]; 6078 extern char *help_dis[]; 6079 extern char *help_eval[]; 6080 extern char *help_exit[]; 6081 extern char *help_extend[]; 6082 extern char *help_files[]; 6083 extern char *help_foreach[]; 6084 extern char *help_fuser[]; 6085 extern char *help_gdb[]; 6086 extern char *help_help[]; 6087 extern char *help_irq[]; 6088 extern char *help_kmem[]; 6089 extern char *help__list[]; 6090 extern char *help_tree[]; 6091 extern char *help_log[]; 6092 extern char *help_mach[]; 6093 extern char *help_mod[]; 6094 extern char *help_mount[]; 6095 extern char *help_net[]; 6096 extern char *help_p[]; 6097 extern char *help_ps[]; 6098 extern char *help_pte[]; 6099 extern char *help_ptob[]; 6100 extern char *help_ptov[]; 6101 extern char *help_quit[]; 6102 extern char *help_rd[]; 6103 extern char *help_repeat[]; 6104 extern char *help_runq[]; 6105 extern char *help_ipcs[]; 6106 extern char *help_sbitmapq[]; 6107 extern char *help_search[]; 6108 extern char *help_set[]; 6109 extern char *help_sig[]; 6110 extern char *help_struct[]; 6111 extern char *help_swap[]; 6112 extern char *help_sym[]; 6113 extern char *help_sys[]; 6114 extern char *help_task[]; 6115 extern char *help_timer[]; 6116 extern char *help_union[]; 6117 extern char *help_vm[]; 6118 extern char *help_vtop[]; 6119 extern char *help_waitq[]; 6120 extern char *help_whatis[]; 6121 extern char *help_wr[]; 6122 #if defined(S390) || defined(S390X) 6123 extern char *help_s390dbf[]; 6124 #endif 6125 extern char *help_map[]; 6126 extern char *help_rustfilt[]; 6127 6128 /* 6129 * task.c 6130 */ 6131 void task_init(void); 6132 int set_context(ulong, ulong, uint); 6133 void show_context(struct task_context *); 6134 ulong pid_to_task(ulong); 6135 ulong task_to_pid(ulong); 6136 int task_exists(ulong); 6137 int is_kernel_thread(ulong); 6138 int is_idle_thread(ulong); 6139 void get_idle_threads(ulong *, int); 6140 char *task_state_string(ulong, char *, int); 6141 ulong task_flags(ulong); 6142 ulong task_state(ulong); 6143 ulong task_mm(ulong, int); 6144 ulong task_tgid(ulong); 6145 ulonglong task_last_run(ulong); 6146 ulong vaddr_in_task_struct(ulong); 6147 int comm_exists(char *); 6148 struct task_context *task_to_context(ulong); 6149 struct task_context *pid_to_context(ulong); 6150 struct task_context *tgid_to_context(ulong); 6151 ulong stkptr_to_task(ulong); 6152 ulong task_to_thread_info(ulong); 6153 ulong task_to_stackbase(ulong); 6154 int str_to_context(char *, ulong *, struct task_context **); 6155 #define STR_PID (0x1) 6156 #define STR_TASK (0x2) 6157 #define STR_INVALID (0x4) 6158 char *get_panicmsg(char *); 6159 char *task_cpu(int, char *, int); 6160 void print_task_header(FILE *, struct task_context *, int); 6161 ulong get_active_task(int); 6162 int is_task_active(ulong); 6163 int is_panic_thread(ulong); 6164 int get_panic_ksp(struct bt_info *, ulong *); 6165 void foreach(struct foreach_data *); 6166 int pid_exists(ulong); 6167 #define TASKS_PER_PID(x) pid_exists(x) 6168 char *fill_task_struct(ulong); 6169 #define IS_LAST_TASK_READ(task) ((ulong)(task) == tt->last_task_read) 6170 char *fill_thread_info(ulong); 6171 #define IS_LAST_THREAD_INFO_READ(ti) ((ulong)(ti) == tt->last_thread_info_read) 6172 char *fill_mm_struct(ulong); 6173 #define IS_LAST_MM_READ(mm) ((ulong)(mm) == tt->last_mm_read) 6174 void do_task(ulong, ulong, struct reference *, unsigned int); 6175 void clear_task_cache(void); 6176 int get_active_set(void); 6177 void clear_active_set(void); 6178 void do_sig(ulong, ulong, struct reference *); 6179 void modify_signame(int, char *, char *); 6180 ulong generic_get_stackbase(ulong); 6181 ulong generic_get_stacktop(ulong); 6182 void dump_task_table(int); 6183 void sort_context_array(void); 6184 void sort_tgid_array(void); 6185 int sort_by_tgid(const void *, const void *); 6186 int in_irq_ctx(ulonglong, int, ulong); 6187 void check_stack_overflow(void); 6188 6189 /* 6190 * extensions.c 6191 */ 6192 void register_extension(struct command_table_entry *); 6193 void dump_extension_table(int); 6194 void load_extension(char *); 6195 void unload_extension(char *); 6196 void preload_extensions(void); 6197 /* Hooks for sial */ 6198 unsigned long get_curtask(void); 6199 char *crash_global_cmd(void); 6200 struct command_table_entry *crash_cmd_table(void); 6201 6202 /* 6203 * kernel.c 6204 */ 6205 void kernel_init(void); 6206 void module_init(void); 6207 void verify_version(void); 6208 void verify_spinlock(void); 6209 void non_matching_kernel(void); 6210 struct load_module *modref_to_load_module(char *); 6211 int load_module_symbols_helper(char *); 6212 void unlink_module(struct load_module *); 6213 int check_specified_module_tree(char *, char *); 6214 int is_system_call(char *, ulong); 6215 void get_dumpfile_regs(struct bt_info*, ulong*, ulong*); 6216 void generic_dump_irq(int); 6217 void generic_get_irq_affinity(int); 6218 void generic_show_interrupts(int, ulong *); 6219 int generic_dis_filter(ulong, char *, unsigned int); 6220 int kernel_BUG_encoding_bytes(void); 6221 void display_sys_stats(void); 6222 char *get_uptime(char *, ulonglong *); 6223 void clone_bt_info(struct bt_info *, struct bt_info *, struct task_context *); 6224 void dump_kernel_table(int); 6225 void dump_bt_info(struct bt_info *, char *where); 6226 void dump_log(int); 6227 void parse_kernel_version(char *); 6228 char *vmcoreinfo_read_from_memory(const char *); 6229 6230 #define LOG_LEVEL(v) ((v) & 0x07) 6231 #define SHOW_LOG_LEVEL (0x1) 6232 #define SHOW_LOG_DICT (0x2) 6233 #define SHOW_LOG_TEXT (0x4) 6234 #define SHOW_LOG_AUDIT (0x8) 6235 #define SHOW_LOG_CTIME (0x10) 6236 #define SHOW_LOG_SAFE (0x20) 6237 #define SHOW_LOG_CALLER (0x40) 6238 #define SHOW_LOG_RUST (0x80) 6239 void set_cpu(int); 6240 void clear_machdep_cache(void); 6241 struct stack_hook *gather_text_list(struct bt_info *); 6242 int get_cpus_online(void); 6243 int get_cpus_active(void); 6244 int get_cpus_present(void); 6245 int get_cpus_possible(void); 6246 int check_offline_cpu(int); 6247 int hide_offline_cpu(int); 6248 int get_highest_cpu_online(void); 6249 int get_highest_cpu_present(void); 6250 int get_cpus_to_display(void); 6251 void get_log_from_vmcoreinfo(char *file); 6252 int in_cpu_map(int, int); 6253 void paravirt_init(void); 6254 void print_stack_text_syms(struct bt_info *, ulong, ulong); 6255 void back_trace(struct bt_info *); 6256 int in_alternate_stack(int, ulong); 6257 ulong cpu_map_addr(const char *type); 6258 #define BT_RAW (0x1ULL) 6259 #define BT_SYMBOLIC_ARGS (0x2ULL) 6260 #define BT_FULL (0x4ULL) 6261 #define BT_TEXT_SYMBOLS (0x8ULL) 6262 #define BT_TEXT_SYMBOLS_PRINT (0x10ULL) 6263 #define BT_TEXT_SYMBOLS_NOPRINT (0x20ULL) 6264 #define BT_USE_GDB (0x40ULL) 6265 #define BT_EXCEPTION_FRAME (0x80ULL) 6266 #define BT_LINE_NUMBERS (0x100ULL) 6267 #define BT_USER_EFRAME (0x200ULL) 6268 #define BT_INCOMPLETE_USER_EFRAME (BT_USER_EFRAME) 6269 #define BT_SAVE_LASTSP (0x400ULL) 6270 #define BT_FROM_EXCEPTION (0x800ULL) 6271 #define BT_FROM_CALLFRAME (0x1000ULL) 6272 #define BT_EFRAME_SEARCH (0x2000ULL) 6273 #define BT_SPECULATE (0x4000ULL) 6274 #define BT_FRAMESIZE_DISABLE (BT_SPECULATE) 6275 #define BT_RESCHEDULE (0x8000ULL) 6276 #define BT_SCHEDULE (BT_RESCHEDULE) 6277 #define BT_RET_FROM_SMP_FORK (0x10000ULL) 6278 #define BT_STRACE (0x20000ULL) 6279 #define BT_KDUMP_ADJUST (BT_STRACE) 6280 #define BT_KSTACKP (0x40000ULL) 6281 #define BT_LOOP_TRAP (0x80000ULL) 6282 #define BT_BUMP_FRAME_LEVEL (0x100000ULL) 6283 #define BT_EFRAME_COUNT (0x200000ULL) 6284 #define BT_CPU_IDLE (0x400000ULL) 6285 #define BT_WRAP_TRAP (0x800000ULL) 6286 #define BT_KERNEL_THREAD (0x1000000ULL) 6287 #define BT_ERROR_MASK (BT_LOOP_TRAP|BT_WRAP_TRAP|BT_KERNEL_THREAD|BT_CPU_IDLE) 6288 #define BT_UNWIND_ERROR (0x2000000ULL) 6289 #define BT_OLD_BACK_TRACE (0x4000000ULL) 6290 #define BT_OPT_BACK_TRACE (0x4000000ULL) 6291 #define BT_FRAMESIZE_DEBUG (0x8000000ULL) 6292 #define BT_CONTEXT_SWITCH (0x10000000ULL) 6293 #define BT_HARDIRQ (0x20000000ULL) 6294 #define BT_SOFTIRQ (0x40000000ULL) 6295 #define BT_CHECK_CALLER (0x80000000ULL) 6296 #define BT_NO_CHECK_CALLER (0x100000000ULL) 6297 #define BT_EXCEPTION_STACK (0x200000000ULL) 6298 #define BT_IRQSTACK (0x400000000ULL) 6299 #define BT_DUMPFILE_SEARCH (0x800000000ULL) 6300 #define BT_EFRAME_SEARCH2 (0x1000000000ULL) 6301 #define BT_START (0x2000000000ULL) 6302 #define BT_TEXT_SYMBOLS_ALL (0x4000000000ULL) 6303 #define BT_XEN_STOP_THIS_CPU (0x8000000000ULL) 6304 #define BT_THREAD_GROUP (0x10000000000ULL) 6305 #define BT_SAVE_EFRAME_IP (0x20000000000ULL) 6306 #define BT_FULL_SYM_SLAB (0x40000000000ULL) 6307 #define BT_KDUMP_ELF_REGS (0x80000000000ULL) 6308 #define BT_USER_SPACE (0x100000000000ULL) 6309 #define BT_KERNEL_SPACE (0x200000000000ULL) 6310 #define BT_FULL_SYM_SLAB2 (0x400000000000ULL) 6311 #define BT_EFRAME_TARGET (0x800000000000ULL) 6312 #define BT_CPUMASK (0x1000000000000ULL) 6313 #define BT_SHOW_ALL_REGS (0x2000000000000ULL) 6314 #define BT_REGS_NOT_FOUND (0x4000000000000ULL) 6315 #define BT_OVERFLOW_STACK (0x8000000000000ULL) 6316 #define BT_SKIP_IDLE (0x10000000000000ULL) 6317 #define BT_NO_PRINT_REGS (0x20000000000000ULL) 6318 #define BT_SYMBOL_OFFSET (BT_SYMBOLIC_ARGS) 6319 6320 #define BT_REF_HEXVAL (0x1) 6321 #define BT_REF_SYMBOL (0x2) 6322 #define BT_REF_FOUND (0x4) 6323 #define BT_REFERENCE_CHECK(X) ((X)->ref) 6324 #define BT_REFERENCE_FOUND(X) ((X)->ref && ((X)->ref->cmdflags & BT_REF_FOUND)) 6325 6326 #define NO_MODULES() \ 6327 (!kt->module_list || (kt->module_list == kt->kernel_module)) 6328 6329 #define USER_EFRAME_ADDR(task) \ 6330 ((ulong)task + UNION_SIZE("task_union") - SIZE(pt_regs)) 6331 6332 struct remote_file { 6333 char *filename; 6334 char *local; 6335 int fd; 6336 int flags; 6337 int type; 6338 long csum; 6339 off_t size; 6340 }; 6341 6342 #define REMOTE_VERBOSE (O_RDWR << 1) 6343 #define REMOTE_COPY_DONE (REMOTE_VERBOSE << 1) 6344 #define TYPE_ELF (REMOTE_VERBOSE << 2) 6345 #define TYPE_DEVMEM (REMOTE_VERBOSE << 3) 6346 #define TYPE_MCLXCD (REMOTE_VERBOSE << 4) 6347 #define TYPE_LKCD (REMOTE_VERBOSE << 5) 6348 #define TYPE_S390D (REMOTE_VERBOSE << 6) 6349 #define TYPE_NETDUMP (REMOTE_VERBOSE << 7) 6350 6351 ulonglong xen_m2p(ulonglong); 6352 6353 void read_in_kernel_config(int); 6354 6355 #define IKCFG_INIT (0) 6356 #define IKCFG_READ (1) 6357 #define IKCFG_SETUP (2) 6358 #define IKCFG_FREE (3) 6359 6360 int get_kernel_config(char *, char **); 6361 enum { 6362 IKCONFIG_N, 6363 IKCONFIG_Y, 6364 IKCONFIG_M, 6365 IKCONFIG_STR, 6366 }; 6367 6368 #define MAGIC_START "IKCFG_ST" 6369 #define MAGIC_END "IKCFG_ED" 6370 #define MAGIC_SIZE (sizeof(MAGIC_START) - 1) 6371 6372 /* 6373 * dev.c 6374 */ 6375 void dev_init(void); 6376 void dump_dev_table(void); 6377 void devdump_extract(void *, ulonglong, char *, FILE *); 6378 void devdump_info(void *, ulonglong, FILE *); 6379 6380 /* 6381 * ipcs.c 6382 */ 6383 void ipcs_init(void); 6384 ulong idr_find(ulong, int); 6385 6386 /* 6387 * sbitmap.c 6388 */ 6389 /* sbitmap helpers */ 6390 struct sbitmap_context { 6391 unsigned depth; 6392 unsigned shift; 6393 unsigned map_nr; 6394 ulong map_addr; 6395 ulong alloc_hint; 6396 bool round_robin; 6397 }; 6398 6399 typedef bool (*sbitmap_for_each_fn)(unsigned int idx, void *p); 6400 6401 void sbitmap_for_each_set(const struct sbitmap_context *sc, 6402 sbitmap_for_each_fn fn, void *data); 6403 void sbitmap_context_load(ulong addr, struct sbitmap_context *sc); 6404 6405 /* sbitmap_queue helpers */ 6406 typedef bool (*sbitmapq_for_each_fn)(unsigned int idx, ulong addr, void *p); 6407 6408 struct sbitmapq_ops { 6409 /* array params associated with the bitmap */ 6410 ulong addr; 6411 ulong size; 6412 /* callback params */ 6413 sbitmapq_for_each_fn fn; 6414 void *p; 6415 }; 6416 6417 void sbitmapq_init(void); 6418 void sbitmapq_for_each_set(ulong addr, struct sbitmapq_ops *ops); 6419 6420 #ifdef ARM 6421 void arm_init(int); 6422 void arm_dump_machdep_table(ulong); 6423 int arm_is_vmalloc_addr(ulong); 6424 void arm_dump_backtrace_entry(struct bt_info *, int, ulong, ulong); 6425 6426 #define display_idt_table() \ 6427 error(FATAL, "-d option is not applicable to ARM architecture\n") 6428 6429 struct arm_pt_regs { 6430 ulong uregs[18]; 6431 }; 6432 6433 #define ARM_cpsr uregs[16] 6434 #define ARM_pc uregs[15] 6435 #define ARM_lr uregs[14] 6436 #define ARM_sp uregs[13] 6437 #define ARM_ip uregs[12] 6438 #define ARM_fp uregs[11] 6439 #define ARM_r10 uregs[10] 6440 #define ARM_r9 uregs[9] 6441 #define ARM_r8 uregs[8] 6442 #define ARM_r7 uregs[7] 6443 #define ARM_r6 uregs[6] 6444 #define ARM_r5 uregs[5] 6445 #define ARM_r4 uregs[4] 6446 #define ARM_r3 uregs[3] 6447 #define ARM_r2 uregs[2] 6448 #define ARM_r1 uregs[1] 6449 #define ARM_r0 uregs[0] 6450 #define ARM_ORIG_r0 uregs[17] 6451 6452 #define KSYMS_START (0x1) 6453 #define PHYS_BASE (0x2) 6454 #define PGTABLE_V2 (0x4) 6455 #define IDMAP_PGD (0x8) 6456 6457 #define KVBASE_MASK (0x1ffffff) 6458 6459 struct machine_specific { 6460 ulong phys_base; 6461 ulong vmalloc_start_addr; 6462 ulong modules_vaddr; 6463 ulong modules_end; 6464 ulong kernel_text_start; 6465 ulong kernel_text_end; 6466 ulong exception_text_start; 6467 ulong exception_text_end; 6468 ulonglong last_pgd_read_lpae; 6469 ulonglong last_pmd_read_lpae; 6470 ulonglong last_ptbl_read_lpae; 6471 struct arm_pt_regs *crash_task_regs; 6472 int unwind_index_prel31; 6473 }; 6474 6475 int init_unwind_tables(void); 6476 void unwind_backtrace(struct bt_info *); 6477 #endif /* ARM */ 6478 6479 /* 6480 * arm64.c 6481 */ 6482 #ifdef ARM64 6483 void arm64_init(int); 6484 void arm64_dump_machdep_table(ulong); 6485 ulong arm64_VTOP(ulong); 6486 ulong arm64_PTOV(ulong); 6487 int arm64_IS_VMALLOC_ADDR(ulong); 6488 ulong arm64_swp_type(ulong); 6489 ulong arm64_swp_offset(ulong); 6490 #endif 6491 6492 /* 6493 * alpha.c 6494 */ 6495 #ifdef ALPHA 6496 void alpha_init(int); 6497 void alpha_dump_machdep_table(ulong); 6498 #define display_idt_table() \ 6499 error(FATAL, "-d option is not applicable to alpha architecture\n") 6500 6501 #define HWRESET_TASK(X) ((machdep->flags & HWRESET) && is_task_active(X) && \ 6502 (task_to_context(X)->processor == 0)) 6503 #endif 6504 6505 /* 6506 * x86.c 6507 */ 6508 #ifdef X86 6509 void x86_init(int); 6510 void x86_dump_machdep_table(ulong); 6511 void x86_display_idt_table(void); 6512 #define display_idt_table() x86_display_idt_table() 6513 #define KSYMS_START (0x1) 6514 void x86_dump_eframe_common(struct bt_info *bt, ulong *, int); 6515 char *x86_function_called_by(ulong); 6516 struct syment *x86_jmp_error_code(ulong); 6517 struct syment *x86_text_lock_jmp(ulong, ulong *); 6518 6519 struct machine_specific { 6520 ulong *idt_table; 6521 ulong entry_tramp_start; 6522 ulong entry_tramp_end; 6523 physaddr_t entry_tramp_start_phys; 6524 ulonglong last_pmd_read_PAE; 6525 ulonglong last_ptbl_read_PAE; 6526 ulong page_protnone; 6527 int max_numnodes; 6528 ulong *remap_start_vaddr; 6529 ulong *remap_end_vaddr; 6530 ulong *remap_start_pfn; 6531 }; 6532 6533 struct syment *x86_is_entry_tramp_address(ulong, ulong *); 6534 #endif 6535 6536 /* 6537 * x86_64.c 6538 */ 6539 #ifdef X86_64 6540 void x86_64_init(int); 6541 void x86_64_dump_machdep_table(ulong); 6542 ulong x86_64_PTOV(ulong); 6543 ulong x86_64_VTOP(ulong); 6544 int x86_64_IS_VMALLOC_ADDR(ulong); 6545 ulong x86_64_swp_type(ulong); 6546 ulong x86_64_swp_offset(ulong); 6547 void x86_64_display_idt_table(void); 6548 #define display_idt_table() x86_64_display_idt_table() 6549 long x86_64_exception_frame(ulong, ulong, char *, struct bt_info *, FILE *); 6550 #define EFRAME_INIT (0) 6551 6552 struct x86_64_pt_regs_offsets { 6553 long r15; 6554 long r14; 6555 long r13; 6556 long r12; 6557 long rbp; 6558 long rbx; 6559 /* arguments: non interrupts/non tracing syscalls only save upto here*/ 6560 long r11; 6561 long r10; 6562 long r9; 6563 long r8; 6564 long rax; 6565 long rcx; 6566 long rdx; 6567 long rsi; 6568 long rdi; 6569 long orig_rax; 6570 /* end of arguments */ 6571 /* cpu exception frame or undefined */ 6572 long rip; 6573 long cs; 6574 long eflags; 6575 long rsp; 6576 long ss; 6577 }; 6578 6579 #define MAX_EXCEPTION_STACKS 7 6580 #define NMI_STACK (machdep->machspec->stkinfo.NMI_stack_index) 6581 6582 struct x86_64_stkinfo { 6583 ulong ebase[NR_CPUS][MAX_EXCEPTION_STACKS]; 6584 int esize[MAX_EXCEPTION_STACKS]; 6585 char available[NR_CPUS][MAX_EXCEPTION_STACKS]; 6586 ulong ibase[NR_CPUS]; 6587 int isize; 6588 int NMI_stack_index; 6589 char *exception_stacks[MAX_EXCEPTION_STACKS]; 6590 }; 6591 6592 typedef struct __attribute__((__packed__)) { 6593 signed short sp_offset; 6594 signed short bp_offset; 6595 unsigned int sp_reg:4; 6596 unsigned int bp_reg:4; 6597 unsigned int type:2; 6598 unsigned int signal:1; 6599 unsigned int end:1; 6600 } kernel_orc_entry; 6601 6602 typedef struct __attribute__((__packed__)) { 6603 signed short sp_offset; 6604 signed short bp_offset; 6605 unsigned int sp_reg:4; 6606 unsigned int bp_reg:4; 6607 unsigned int type:3; 6608 unsigned int signal:1; 6609 } kernel_orc_entry_6_4; 6610 6611 typedef struct orc_entry { 6612 signed short sp_offset; 6613 signed short bp_offset; 6614 unsigned int sp_reg; 6615 unsigned int bp_reg; 6616 unsigned int type; 6617 unsigned int signal; 6618 unsigned int end; 6619 } orc_entry; 6620 6621 struct ORC_data { 6622 int module_ORC; 6623 uint lookup_num_blocks; 6624 ulong __start_orc_unwind_ip; 6625 ulong __stop_orc_unwind_ip; 6626 ulong __start_orc_unwind; 6627 ulong __stop_orc_unwind; 6628 ulong orc_lookup; 6629 ulong ip_entry; 6630 ulong orc_entry; 6631 orc_entry orc_entry_data; 6632 int has_signal; 6633 int has_end; 6634 }; 6635 6636 #define ORC_TYPE_CALL ((machdep->flags & ORC_6_4) ? 2 : 0) 6637 /* The below entries are not used and must be updated if we use them. */ 6638 #define ORC_TYPE_REGS 1 6639 #define ORC_TYPE_REGS_IRET 2 6640 #define UNWIND_HINT_TYPE_SAVE 3 6641 #define UNWIND_HINT_TYPE_RESTORE 4 6642 6643 #define ORC_REG_UNDEFINED 0 6644 #define ORC_REG_PREV_SP 1 6645 #define ORC_REG_DX 2 6646 #define ORC_REG_DI 3 6647 #define ORC_REG_BP 4 6648 #define ORC_REG_SP 5 6649 #define ORC_REG_R10 6 6650 #define ORC_REG_R13 7 6651 #define ORC_REG_BP_INDIRECT 8 6652 #define ORC_REG_SP_INDIRECT 9 6653 #define ORC_REG_MAX 15 6654 6655 struct machine_specific { 6656 ulong userspace_top; 6657 ulong page_offset; 6658 ulong vmalloc_start_addr; 6659 ulong vmalloc_end; 6660 ulong vmemmap_vaddr; 6661 ulong vmemmap_end; 6662 ulong modules_vaddr; 6663 ulong modules_end; 6664 ulong phys_base; 6665 char *pml4; 6666 char *upml; 6667 ulong last_upml_read; 6668 ulong last_pml4_read; 6669 char *irqstack; 6670 ulong irq_eframe_link; 6671 struct x86_64_pt_regs_offsets pto; 6672 struct x86_64_stkinfo stkinfo; 6673 ulong *current; 6674 ulong *crash_nmi_rsp; 6675 ulong vsyscall_page; 6676 ulong thread_return; 6677 ulong page_protnone; 6678 ulong GART_start; 6679 ulong GART_end; 6680 ulong kernel_image_size; 6681 ulong physical_mask_shift; 6682 ulong pgdir_shift; 6683 char *p4d; 6684 ulong last_p4d_read; 6685 struct ORC_data orc; 6686 ulong irq_stack_gap; 6687 ulong kpti_entry_stack; 6688 ulong kpti_entry_stack_size; 6689 ulong ptrs_per_pgd; 6690 ulong cpu_entry_area_start; 6691 ulong cpu_entry_area_end; 6692 ulong page_offset_force; 6693 char **exception_functions; 6694 ulong sme_mask; 6695 }; 6696 6697 #define KSYMS_START (0x1) 6698 #define PT_REGS_INIT (0x2) 6699 #define VM_ORIG (0x4) 6700 #define VM_2_6_11 (0x8) 6701 #define VM_XEN (0x10) 6702 #define NO_TSS (0x20) 6703 #define SCHED_TEXT (0x40) 6704 #define PHYS_BASE (0x80) 6705 #define VM_XEN_RHEL4 (0x100) 6706 #define FRAMEPOINTER (0x200) 6707 #define GART_REGION (0x400) 6708 #define NESTED_NMI (0x800) 6709 #define RANDOMIZED (0x1000) 6710 #define VM_5LEVEL (0x2000) 6711 #define ORC (0x4000) 6712 #define KPTI (0x8000) 6713 #define L1TF (0x10000) 6714 #define ORC_6_4 (0x20000) 6715 6716 #define VM_FLAGS (VM_ORIG|VM_2_6_11|VM_XEN|VM_XEN_RHEL4|VM_5LEVEL) 6717 6718 #define _2MB_PAGE_MASK (~((MEGABYTES(2))-1)) 6719 #define _1GB_PAGE_MASK (~((GIGABYTES(1))-1)) 6720 6721 #endif 6722 6723 #if defined(X86) || defined(X86_64) 6724 6725 /* 6726 * unwind_x86_32_64.c 6727 */ 6728 void init_unwind_table(void); 6729 int dwarf_backtrace(struct bt_info *, int, ulong); 6730 void dwarf_debug(struct bt_info *); 6731 int dwarf_print_stack_entry(struct bt_info *, int); 6732 6733 #endif 6734 6735 6736 /* 6737 * ppc64.c 6738 */ 6739 6740 /* 6741 * This structure was copied from kernel source 6742 * in include/asm-ppc/ptrace.h 6743 */ 6744 struct ppc64_pt_regs { 6745 long gpr[32]; 6746 long nip; 6747 long msr; 6748 long orig_gpr3; /* Used for restarting system calls */ 6749 long ctr; 6750 long link; 6751 long xer; 6752 long ccr; 6753 long mq; /* 601 only (not used at present) */ 6754 /* Used on APUS to hold IPL value. */ 6755 long trap; /* Reason for being here */ 6756 long dar; /* Fault registers */ 6757 long dsisr; 6758 long result; /* Result of a system call */ 6759 }; 6760 6761 struct ppc64_elf_siginfo { 6762 int si_signo; 6763 int si_code; 6764 int si_errno; 6765 }; 6766 6767 struct ppc64_elf_prstatus { 6768 struct ppc64_elf_siginfo pr_info; 6769 short pr_cursig; 6770 unsigned long pr_sigpend; 6771 unsigned long pr_sighold; 6772 pid_t pr_pid; 6773 pid_t pr_ppid; 6774 pid_t pr_pgrp; 6775 pid_t pr_sid; 6776 struct timeval pr_utime; 6777 struct timeval pr_stime; 6778 struct timeval pr_cutime; 6779 struct timeval pr_cstime; 6780 struct ppc64_pt_regs pr_reg; 6781 int pr_fpvalid; 6782 }; 6783 6784 #ifdef PPC64 6785 6786 enum emergency_stack_type { 6787 NONE_STACK = 0, 6788 EMERGENCY_STACK, 6789 NMI_EMERGENCY_STACK, 6790 MC_EMERGENCY_STACK 6791 }; 6792 6793 struct ppc64_opal { 6794 uint64_t base; 6795 uint64_t entry; 6796 uint64_t size; 6797 }; 6798 6799 struct ppc64_vmemmap { 6800 unsigned long phys; 6801 unsigned long virt; 6802 }; 6803 6804 /* 6805 * Used to store the HW interrupt stack. It is only for 2.4. 6806 */ 6807 struct machine_specific { 6808 ulong *hwintrstack; 6809 char *hwstackbuf; 6810 uint hwstacksize; 6811 6812 /* Emergency stacks */ 6813 ulong *emergency_sp; 6814 ulong *nmi_emergency_sp; 6815 ulong *mc_emergency_sp; 6816 6817 uint l4_index_size; 6818 uint l3_index_size; 6819 uint l2_index_size; 6820 uint l1_index_size; 6821 6822 uint ptrs_per_l4; 6823 uint ptrs_per_l3; 6824 uint ptrs_per_l2; 6825 uint ptrs_per_l1; 6826 6827 uint l4_shift; 6828 uint l3_shift; 6829 uint l2_shift; 6830 uint l1_shift; 6831 6832 uint pte_rpn_shift; 6833 ulong pte_rpn_mask; 6834 ulong pgd_masked_bits; 6835 ulong pud_masked_bits; 6836 ulong pmd_masked_bits; 6837 6838 int vmemmap_cnt; 6839 int vmemmap_psize; 6840 ulong vmemmap_base; 6841 struct ppc64_vmemmap *vmemmap_list; 6842 ulong _page_pte; 6843 ulong _page_present; 6844 ulong _page_user; 6845 ulong _page_rw; 6846 ulong _page_guarded; 6847 ulong _page_coherent; 6848 ulong _page_no_cache; 6849 ulong _page_writethru; 6850 ulong _page_dirty; 6851 ulong _page_accessed; 6852 int (*is_kvaddr)(ulong); 6853 int (*is_vmaddr)(ulong); 6854 struct ppc64_opal opal; 6855 }; 6856 6857 void ppc64_init(int); 6858 void ppc64_dump_machdep_table(ulong); 6859 #define display_idt_table() \ 6860 error(FATAL, "-d option is not applicable to PowerPC architecture\n") 6861 #define KSYMS_START (0x1) 6862 #define VM_ORIG (0x2) 6863 #define VMEMMAP_AWARE (0x4) 6864 #define BOOK3E (0x8) 6865 #define PHYS_ENTRY_L4 (0x10) 6866 #define SWAP_ENTRY_L4 (0x20) 6867 /* 6868 * The flag bit for radix MMU in cpu_spec.mmu_features 6869 * in the kernel is also 0x40. 6870 */ 6871 #define RADIX_MMU (0x40) 6872 #define OPAL_FW (0x80) 6873 6874 #define REGION_SHIFT (60UL) 6875 #define REGION_ID(addr) (((unsigned long)(addr)) >> REGION_SHIFT) 6876 #define VMEMMAP_REGION_ID (0xfUL) 6877 #endif 6878 6879 /* 6880 * ppc.c 6881 */ 6882 #ifdef PPC 6883 void ppc_init(int); 6884 void ppc_dump_machdep_table(ulong); 6885 void ppc_relocate_nt_prstatus_percpu(void **, uint *); 6886 #define display_idt_table() \ 6887 error(FATAL, "-d option is not applicable to PowerPC architecture\n") 6888 #define KSYMS_START (0x1) 6889 /* This should match PPC_FEATURE_BOOKE from include/asm-powerpc/cputable.h */ 6890 #define CPU_BOOKE (0x00008000) 6891 #else 6892 #define ppc_relocate_nt_prstatus_percpu(X,Y) do {} while (0) 6893 #endif 6894 6895 /* 6896 * lkcd_fix_mem.c 6897 */ 6898 6899 struct _dump_header_asm_s; 6900 struct _dump_header_s; 6901 ulong get_lkcd_switch_stack(ulong); 6902 int fix_addr_v8(struct _dump_header_asm_s *); 6903 int lkcd_dump_init_v8_arch(struct _dump_header_s *dh); 6904 int fix_addr_v7(int); 6905 int get_lkcd_regs_for_cpu_arch(int cpu, ulong *eip, ulong *esp); 6906 int lkcd_get_kernel_start_v8(ulong *addr); 6907 6908 /* 6909 * lkcd_v8.c 6910 */ 6911 int get_lkcd_regs_for_cpu_v8(struct bt_info *bt, ulong *eip, ulong *esp); 6912 6913 /* 6914 * ia64.c 6915 */ 6916 #ifdef IA64 6917 void ia64_init(int); 6918 void ia64_dump_machdep_table(ulong); 6919 void ia64_dump_line_number(ulong); 6920 ulong ia64_get_switch_stack(ulong); 6921 void ia64_exception_frame(ulong, struct bt_info *bt); 6922 ulong ia64_PTOV(ulong); 6923 ulong ia64_VTOP(ulong); 6924 int ia64_IS_VMALLOC_ADDR(ulong); 6925 #define display_idt_table() \ 6926 error(FATAL, "-d option TBD on ia64 architecture\n"); 6927 int ia64_in_init_stack(ulong addr); 6928 int ia64_in_mca_stack_hyper(ulong addr, struct bt_info *bt); 6929 physaddr_t ia64_xen_kdump_p2m(struct xen_kdump_data *xkd, physaddr_t pseudo); 6930 6931 #define OLD_UNWIND (0x1) /* CONFIG_IA64_NEW_UNWIND not turned on */ 6932 #define NEW_UNWIND (0x2) /* CONFIG_IA64_NEW_UNWIND turned on */ 6933 #define NEW_UNW_V1 (0x4) 6934 #define NEW_UNW_V2 (0x8) 6935 #define NEW_UNW_V3 (0x10) 6936 #define UNW_OUT_OF_SYNC (0x20) /* shared data structures out of sync */ 6937 #define UNW_READ (0x40) /* kernel unw has been read successfully */ 6938 #define MEM_LIMIT (0x80) 6939 #define UNW_PTREGS (0x100) 6940 #define UNW_R0 (0x200) 6941 6942 #undef IA64_RBS_OFFSET 6943 #undef IA64_STK_OFFSET 6944 #define IA64_RBS_OFFSET ((SIZE(task_struct) + 15) & ~15) 6945 #define IA64_STK_OFFSET (STACKSIZE()) 6946 6947 struct machine_specific { 6948 ulong cpu_data_address; 6949 ulong unimpl_va_mask; 6950 ulong unimpl_pa_mask; 6951 long unw_tables_offset; 6952 long unw_kernel_table_offset; 6953 long unw_pt_regs_offsets; 6954 int script_index; 6955 struct unw_script *script_cache; 6956 ulong script_cache_fills; 6957 ulong script_cache_hits; 6958 void *unw; 6959 ulong mem_limit; 6960 ulong kernel_region; 6961 ulong kernel_start; 6962 ulong phys_start; 6963 ulong vmalloc_start; 6964 char *ia64_memmap; 6965 uint64_t efi_memmap_size; 6966 uint64_t efi_memdesc_size; 6967 void (*unwind_init)(void); 6968 void (*unwind)(struct bt_info *); 6969 void (*dump_unwind_stats)(void); 6970 int (*unwind_debug)(ulong); 6971 int ia64_init_stack_size; 6972 }; 6973 6974 6975 /* 6976 * unwind.c 6977 */ 6978 void unwind_init_v1(void); 6979 void unwind_v1(struct bt_info *); 6980 void dump_unwind_stats_v1(void); 6981 int unwind_debug_v1(ulong); 6982 6983 void unwind_init_v2(void); 6984 void unwind_v2(struct bt_info *); 6985 void dump_unwind_stats_v2(void); 6986 int unwind_debug_v2(ulong); 6987 6988 void unwind_init_v3(void); 6989 void unwind_v3(struct bt_info *); 6990 void dump_unwind_stats_v3(void); 6991 int unwind_debug_v3(ulong); 6992 6993 #endif /* IA64 */ 6994 6995 /* 6996 * s390.c 6997 */ 6998 #ifdef S390 6999 void s390_init(int); 7000 void s390_dump_machdep_table(ulong); 7001 #define display_idt_table() \ 7002 error(FATAL, "-d option is not applicable to S390 architecture\n") 7003 #define KSYMS_START (0x1) 7004 #endif 7005 7006 /* 7007 * s390_dump.c 7008 */ 7009 int is_s390_dump(char *); 7010 FILE* s390_dump_init(char *); 7011 int read_s390_dumpfile(int, void *, int, ulong, physaddr_t); 7012 int write_s390_dumpfile(int, void *, int, ulong, physaddr_t); 7013 uint s390_page_size(void); 7014 int s390_memory_used(void); 7015 int s390_free_memory(void); 7016 int s390_memory_dump(FILE *); 7017 ulong get_s390_panic_task(void); 7018 void get_s390_panicmsg(char *); 7019 7020 /* 7021 * s390x.c 7022 */ 7023 #ifdef S390X 7024 7025 struct machine_specific 7026 { 7027 ulong (*virt_to_phys)(ulong vaddr); 7028 ulong (*phys_to_virt)(ulong paddr); 7029 int (*is_vmalloc_addr)(ulong vaddr); 7030 ulong __kaslr_offset_phys; 7031 ulong amode31_start; 7032 ulong amode31_end; 7033 }; 7034 7035 void s390x_init(int); 7036 ulong s390x_PTOV(ulong); 7037 ulong s390x_VTOP(ulong); 7038 int s390x_IS_VMALLOC_ADDR(ulong); 7039 void s390x_dump_machdep_table(ulong); 7040 #define display_idt_table() \ 7041 error(FATAL, "-d option is not applicable to S390X architecture\n") 7042 #define KSYMS_START (0x1) 7043 #endif 7044 7045 /* 7046 * mips.c 7047 */ 7048 void mips_display_regs_from_elf_notes(int, FILE *); 7049 7050 #ifdef MIPS 7051 void mips_init(int); 7052 void mips_dump_machdep_table(ulong); 7053 7054 #define display_idt_table() \ 7055 error(FATAL, "-d option is not applicable to MIPS architecture\n") 7056 7057 struct mips_regset { 7058 ulong regs[45]; 7059 }; 7060 7061 struct mips_pt_regs_main { 7062 ulong regs[32]; 7063 ulong cp0_status; 7064 ulong hi; 7065 ulong lo; 7066 }; 7067 7068 struct mips_pt_regs_cp0 { 7069 ulong cp0_badvaddr; 7070 ulong cp0_cause; 7071 ulong cp0_epc; 7072 }; 7073 7074 #define KSYMS_START (0x1) 7075 #define PHYS_BASE (0x2) 7076 7077 #define KVBASE_MASK (0x1ffffff) 7078 7079 struct machine_specific { 7080 ulong phys_base; 7081 ulong vmalloc_start_addr; 7082 ulong modules_vaddr; 7083 ulong modules_end; 7084 7085 ulong _page_present; 7086 ulong _page_read; 7087 ulong _page_write; 7088 ulong _page_accessed; 7089 ulong _page_modified; 7090 ulong _page_global; 7091 ulong _page_valid; 7092 ulong _page_no_read; 7093 ulong _page_no_exec; 7094 ulong _page_dirty; 7095 7096 ulong _pfn_shift; 7097 7098 #define _PAGE_PRESENT (machdep->machspec->_page_present) 7099 #define _PAGE_READ (machdep->machspec->_page_read) 7100 #define _PAGE_WRITE (machdep->machspec->_page_write) 7101 #define _PAGE_ACCESSED (machdep->machspec->_page_accessed) 7102 #define _PAGE_MODIFIED (machdep->machspec->_page_modified) 7103 #define _PAGE_GLOBAL (machdep->machspec->_page_global) 7104 #define _PAGE_VALID (machdep->machspec->_page_valid) 7105 #define _PAGE_NO_READ (machdep->machspec->_page_no_read) 7106 #define _PAGE_NO_EXEC (machdep->machspec->_page_no_exec) 7107 #define _PAGE_DIRTY (machdep->machspec->_page_dirty) 7108 #define _PFN_SHIFT (machdep->machspec->_pfn_shift) 7109 7110 struct mips_regset *crash_task_regs; 7111 }; 7112 #endif /* MIPS */ 7113 7114 /* 7115 * mips64.c 7116 */ 7117 void mips64_display_regs_from_elf_notes(int, FILE *); 7118 7119 #ifdef MIPS64 7120 void mips64_init(int); 7121 void mips64_dump_machdep_table(ulong); 7122 7123 #define display_idt_table() \ 7124 error(FATAL, "-d option is not applicable to MIPS64 architecture\n") 7125 7126 /* from arch/mips/include/asm/ptrace.h */ 7127 struct mips64_register { 7128 ulong regs[45]; 7129 }; 7130 7131 struct mips64_pt_regs_main { 7132 ulong regs[32]; 7133 ulong cp0_status; 7134 ulong hi; 7135 ulong lo; 7136 }; 7137 7138 struct mips64_pt_regs_cp0 { 7139 ulong cp0_badvaddr; 7140 ulong cp0_cause; 7141 ulong cp0_epc; 7142 }; 7143 7144 struct mips64_unwind_frame { 7145 unsigned long sp; 7146 unsigned long pc; 7147 unsigned long ra; 7148 }; 7149 7150 #define KSYMS_START (0x1) 7151 7152 struct machine_specific { 7153 ulong phys_base; 7154 ulong vmalloc_start_addr; 7155 ulong modules_vaddr; 7156 ulong modules_end; 7157 7158 ulong _page_present; 7159 ulong _page_read; 7160 ulong _page_write; 7161 ulong _page_accessed; 7162 ulong _page_modified; 7163 ulong _page_huge; 7164 ulong _page_special; 7165 ulong _page_protnone; 7166 ulong _page_global; 7167 ulong _page_valid; 7168 ulong _page_no_read; 7169 ulong _page_no_exec; 7170 ulong _page_dirty; 7171 7172 ulong _pfn_shift; 7173 7174 struct mips64_register *crash_task_regs; 7175 }; 7176 /* from arch/mips/include/asm/pgtable-bits.h */ 7177 #define _PAGE_PRESENT (machdep->machspec->_page_present) 7178 #define _PAGE_READ (machdep->machspec->_page_read) 7179 #define _PAGE_WRITE (machdep->machspec->_page_write) 7180 #define _PAGE_ACCESSED (machdep->machspec->_page_accessed) 7181 #define _PAGE_MODIFIED (machdep->machspec->_page_modified) 7182 #define _PAGE_HUGE (machdep->machspec->_page_huge) 7183 #define _PAGE_SPECIAL (machdep->machspec->_page_special) 7184 #define _PAGE_PROTNONE (machdep->machspec->_page_protnone) 7185 #define _PAGE_GLOBAL (machdep->machspec->_page_global) 7186 #define _PAGE_VALID (machdep->machspec->_page_valid) 7187 #define _PAGE_NO_READ (machdep->machspec->_page_no_read) 7188 #define _PAGE_NO_EXEC (machdep->machspec->_page_no_exec) 7189 #define _PAGE_DIRTY (machdep->machspec->_page_dirty) 7190 #define _PFN_SHIFT (machdep->machspec->_pfn_shift) 7191 7192 #endif /* MIPS64 */ 7193 7194 /* 7195 * riscv64.c 7196 */ 7197 void riscv64_display_regs_from_elf_notes(int, FILE *); 7198 7199 #ifdef RISCV64 7200 void riscv64_init(int); 7201 void riscv64_dump_machdep_table(ulong); 7202 int riscv64_IS_VMALLOC_ADDR(ulong); 7203 7204 #define display_idt_table() \ 7205 error(FATAL, "-d option is not applicable to RISCV64 architecture\n") 7206 7207 /* 7208 * regs[0,31] : struct user_regs_struct 7209 * from arch/riscv/include/uapi/asm/ptrace.h 7210 * regs[0,35] : struct pt_regs 7211 * from arch/riscv/include/asm/ptrace.h 7212 */ 7213 struct riscv64_register { 7214 ulong regs[36]; 7215 }; 7216 7217 struct riscv64_unwind_frame { 7218 ulong fp; 7219 ulong sp; 7220 ulong pc; 7221 }; 7222 7223 struct machine_specific { 7224 ulong phys_base; 7225 ulong page_offset; 7226 ulong vmalloc_start_addr; 7227 ulong vmalloc_end; 7228 ulong vmemmap_vaddr; 7229 ulong vmemmap_end; 7230 ulong modules_vaddr; 7231 ulong modules_end; 7232 ulong kernel_link_addr; 7233 ulong va_kernel_pa_offset; 7234 7235 ulong _page_present; 7236 ulong _page_read; 7237 ulong _page_write; 7238 ulong _page_exec; 7239 ulong _page_user; 7240 ulong _page_global; 7241 ulong _page_accessed; 7242 ulong _page_dirty; 7243 ulong _page_soft; 7244 7245 ulong _pfn_shift; 7246 ulong va_bits; 7247 char *p4d; 7248 ulong last_p4d_read; 7249 ulong struct_page_size; 7250 7251 struct riscv64_register *crash_task_regs; 7252 ulong irq_stack_size; 7253 ulong *irq_stacks; 7254 7255 ulong overflow_stack_size; 7256 ulong *overflow_stacks; 7257 }; 7258 /* from arch/riscv/include/asm/pgtable-bits.h */ 7259 #define _PAGE_PRESENT (machdep->machspec->_page_present) 7260 #define _PAGE_READ (machdep->machspec->_page_read) 7261 #define _PAGE_WRITE (machdep->machspec->_page_write) 7262 #define _PAGE_EXEC (machdep->machspec->_page_exec) 7263 #define _PAGE_USER (machdep->machspec->_page_user) 7264 #define _PAGE_GLOBAL (machdep->machspec->_page_global) 7265 #define _PAGE_ACCESSED (machdep->machspec->_page_accessed) 7266 #define _PAGE_DIRTY (machdep->machspec->_page_dirty) 7267 #define _PAGE_SOFT (machdep->machspec->_page_soft) 7268 #define _PAGE_SEC (machdep->machspec->_page_sec) 7269 #define _PAGE_SHARE (machdep->machspec->_page_share) 7270 #define _PAGE_BUF (machdep->machspec->_page_buf) 7271 #define _PAGE_CACHE (machdep->machspec->_page_cache) 7272 #define _PAGE_SO (machdep->machspec->_page_so) 7273 #define _PAGE_SPECIAL _PAGE_SOFT 7274 #define _PAGE_TABLE _PAGE_PRESENT 7275 #define _PAGE_PROT_NONE _PAGE_READ 7276 #define _PAGE_PFN_SHIFT 10 7277 7278 /* from 'struct pt_regs' definitions of RISC-V arch */ 7279 #define RISCV64_REGS_EPC 0 7280 #define RISCV64_REGS_RA 1 7281 #define RISCV64_REGS_SP 2 7282 #define RISCV64_REGS_FP 8 7283 #define RISCV64_REGS_STATUS 32 7284 #define RISCV64_REGS_CAUSE 34 7285 7286 #endif /* RISCV64 */ 7287 7288 /* 7289 * sparc64.c 7290 */ 7291 #ifdef SPARC64 7292 void sparc64_init(int); 7293 void sparc64_dump_machdep_table(ulong); 7294 int sparc64_vmalloc_addr(ulong); 7295 #define display_idt_table() \ 7296 error(FATAL, "The -d option is not applicable to sparc64.\n") 7297 #endif 7298 7299 /* 7300 * loongarch64.c 7301 */ 7302 void loongarch64_display_regs_from_elf_notes(int, FILE *); 7303 #ifdef LOONGARCH64 7304 void loongarch64_init(int); 7305 void loongarch64_dump_machdep_table(ulong); 7306 7307 #define display_idt_table() \ 7308 error(FATAL, "-d option is not applicable to LOONGARCH64 architecture\n") 7309 7310 7311 #define KSYMS_START (0x1) 7312 7313 struct machine_specific { 7314 ulong phys_base; 7315 ulong vmalloc_start_addr; 7316 ulong modules_vaddr; 7317 ulong modules_end; 7318 7319 struct loongarch64_pt_regs *crash_task_regs; 7320 }; 7321 7322 /* 7323 * Basic page table format: 7324 * 7325 * 63 62 61 PALEN-1 12 10 9 8 7 6 5 4 3 2 1 0 7326 * +----+--+--+------+--------------------+----+--+--+-+-+-+---+---+-+-+ 7327 * |RPLV|NX|NR| | PA[PALEN-1:12] | |SP|PN|W|P|G|MAT|PLV|D|V| 7328 * +----+--+--+------+--------------------+----+--+--+-+-+-+---+---+-+-+ 7329 * 7330 * 7331 * Huge page table format: 7332 * 7333 * 63 62 61 PALEN-1 12 10 9 8 7 6 5 4 3 2 1 0 7334 * +----+--+--+------+-----------------+--+----+--+--+-+-+-+---+---+-+-+ 7335 * |RPLV|NX|NR| | PA[PALEN-1:12] | G| |SP|PN|W|P|H|MAT|PLV|D|V| 7336 * +----+--+--+------+-----------------+--+----+--+--+-+-+-+---+---+-+-+ 7337 * 7338 */ 7339 /* from arch/loongarch/include/asm/pgtable-bits.h */ 7340 7341 /* Page table bits */ 7342 #define _PAGE_VALID_SHIFT 0 7343 #define _PAGE_ACCESSED_SHIFT 0 /* Reuse Valid for Accessed */ 7344 #define _PAGE_DIRTY_SHIFT 1 7345 #define _PAGE_PLV_SHIFT 2 /* 2~3, two bits */ 7346 #define _CACHE_SHIFT 4 /* 4~5, two bits */ 7347 #define _PAGE_GLOBAL_SHIFT 6 7348 #define _PAGE_HUGE_SHIFT 6 /* HUGE is a PMD bit */ 7349 #define _PAGE_PRESENT_SHIFT 7 7350 #define _PAGE_WRITE_SHIFT 8 7351 #define _PAGE_MODIFIED_SHIFT 9 7352 #define _PAGE_PROTNONE_SHIFT 10 7353 #define _PAGE_SPECIAL_SHIFT 11 7354 #define _PAGE_HGLOBAL_SHIFT 12 /* HGlobal is a PMD bit */ 7355 #define _PAGE_PFN_SHIFT 12 7356 #define _PAGE_SWP_EXCLUSIVE_SHIFT 23 7357 #define _PAGE_PFN_END_SHIFT 48 7358 #define _PAGE_PRESENT_INVALID_SHIFT 60 7359 #define _PAGE_NO_READ_SHIFT 61 7360 #define _PAGE_NO_EXEC_SHIFT 62 7361 #define _PAGE_RPLV_SHIFT 63 7362 7363 #ifndef _ULCAST_ 7364 #define _ULCAST_ (unsigned long) 7365 #endif 7366 7367 /* Used by software */ 7368 #define _PAGE_PRESENT (_ULCAST_(1) << _PAGE_PRESENT_SHIFT) 7369 #define _PAGE_PRESENT_INVALID (_ULCAST_(1) << _PAGE_PRESENT_INVALID_SHIFT) 7370 #define _PAGE_WRITE (_ULCAST_(1) << _PAGE_WRITE_SHIFT) 7371 #define _PAGE_ACCESSED (_ULCAST_(1) << _PAGE_ACCESSED_SHIFT) 7372 #define _PAGE_MODIFIED (_ULCAST_(1) << _PAGE_MODIFIED_SHIFT) 7373 #define _PAGE_PROTNONE (_ULCAST_(1) << _PAGE_PROTNONE_SHIFT) 7374 #define _PAGE_SPECIAL (_ULCAST_(1) << _PAGE_SPECIAL_SHIFT) 7375 7376 /* We borrow bit 23 to store the exclusive marker in swap PTEs. */ 7377 #define _PAGE_SWP_EXCLUSIVE (_ULCAST_(1) << _PAGE_SWP_EXCLUSIVE_SHIFT) 7378 7379 /* Used by TLB hardware (placed in EntryLo*) */ 7380 #define _PAGE_VALID (_ULCAST_(1) << _PAGE_VALID_SHIFT) 7381 #define _PAGE_DIRTY (_ULCAST_(1) << _PAGE_DIRTY_SHIFT) 7382 #define _PAGE_PLV (_ULCAST_(3) << _PAGE_PLV_SHIFT) 7383 #define _PAGE_GLOBAL (_ULCAST_(1) << _PAGE_GLOBAL_SHIFT) 7384 #define _PAGE_HUGE (_ULCAST_(1) << _PAGE_HUGE_SHIFT) 7385 #define _PAGE_HGLOBAL (_ULCAST_(1) << _PAGE_HGLOBAL_SHIFT) 7386 #define _PAGE_NO_READ (_ULCAST_(1) << _PAGE_NO_READ_SHIFT) 7387 #define _PAGE_NO_EXEC (_ULCAST_(1) << _PAGE_NO_EXEC_SHIFT) 7388 #define _PAGE_RPLV (_ULCAST_(1) << _PAGE_RPLV_SHIFT) 7389 #define _CACHE_MASK (_ULCAST_(3) << _CACHE_SHIFT) 7390 #define _PFN_SHIFT (PAGESHIFT() - 12 + _PAGE_PFN_SHIFT) 7391 7392 #define _PAGE_USER (PLV_USER << _PAGE_PLV_SHIFT) 7393 #define _PAGE_KERN (PLV_KERN << _PAGE_PLV_SHIFT) 7394 7395 #define _PFN_MASK (~((_ULCAST_(1) << (_PFN_SHIFT)) - 1) & \ 7396 ((_ULCAST_(1) << (_PAGE_PFN_END_SHIFT)) - 1)) 7397 7398 #endif /* LOONGARCH64 */ 7399 7400 /* 7401 * netdump.c 7402 */ 7403 int is_netdump(char *, ulong); 7404 uint netdump_page_size(void); 7405 int read_netdump(int, void *, int, ulong, physaddr_t); 7406 int write_netdump(int, void *, int, ulong, physaddr_t); 7407 int netdump_free_memory(void); 7408 int netdump_memory_used(void); 7409 int netdump_init(char *, FILE *); 7410 ulong get_netdump_panic_task(void); 7411 ulong get_netdump_switch_stack(ulong); 7412 FILE *set_netdump_fp(FILE *); 7413 int netdump_memory_dump(FILE *); 7414 void get_netdump_regs(struct bt_info *, ulong *, ulong *); 7415 int is_partial_netdump(void); 7416 void get_netdump_regs_x86(struct bt_info *, ulong *, ulong *); 7417 void get_netdump_regs_x86_64(struct bt_info *, ulong *, ulong *); 7418 void dump_registers_for_elf_dumpfiles(void); 7419 struct vmcore_data; 7420 struct vmcore_data *get_kdump_vmcore_data(void); 7421 int read_kdump(int, void *, int, ulong, physaddr_t); 7422 int write_kdump(int, void *, int, ulong, physaddr_t); 7423 int is_kdump(char *, ulong); 7424 int kdump_init(char *, FILE *); 7425 ulong get_kdump_panic_task(void); 7426 uint kdump_page_size(void); 7427 int kdump_free_memory(void); 7428 int kdump_memory_used(void); 7429 int kdump_memory_dump(FILE *); 7430 void get_kdump_regs(struct bt_info *, ulong *, ulong *); 7431 void xen_kdump_p2m_mfn(char *); 7432 int is_sadump_xen(void); 7433 void set_xen_phys_start(char *); 7434 ulong xen_phys_start(void); 7435 int xen_major_version(void); 7436 int xen_minor_version(void); 7437 int get_netdump_arch(void); 7438 int exist_regs_in_elf_notes(struct task_context *); 7439 void *get_regs_from_elf_notes(struct task_context *); 7440 void map_cpus_to_prstatus(void); 7441 int kdump_phys_base(ulong *); 7442 int kdump_set_phys_base(ulong); 7443 int arm_kdump_phys_base(ulong *); 7444 int arm_kdump_phys_end(ulong *); 7445 int is_proc_kcore(char *, ulong); 7446 int proc_kcore_init(FILE *, int); 7447 int read_proc_kcore(int, void *, int, ulong, physaddr_t); 7448 int write_proc_kcore(int, void *, int, ulong, physaddr_t); 7449 int kcore_memory_dump(FILE *); 7450 void dump_registers_for_qemu_mem_dump(void); 7451 void kdump_backup_region_init(void); 7452 void display_regs_from_elf_notes(int, FILE *); 7453 void display_ELF_note(int, int, void *, FILE *); 7454 void *netdump_get_prstatus_percpu(int); 7455 int kdump_kaslr_check(void); 7456 void display_vmcoredd_note(void *ptr, FILE *ofp); 7457 int kdump_get_nr_cpus(void); 7458 QEMUCPUState *kdump_get_qemucpustate(int); 7459 void kdump_device_dump_info(FILE *); 7460 void kdump_device_dump_extract(int, char *, FILE *); 7461 #define PRSTATUS_NOTE (1) 7462 #define QEMU_NOTE (2) 7463 7464 /* 7465 * ramdump.c 7466 */ 7467 int is_ramdump(char *pattern); 7468 char *ramdump_to_elf(void); 7469 void ramdump_elf_output_file(char *opt); 7470 void ramdump_cleanup(void); 7471 int read_ramdump(int fd, void *bufptr, int cnt, ulong addr, physaddr_t paddr); 7472 void show_ramdump_files(void); 7473 void dump_ramdump_data(void); 7474 int is_ramdump_image(void); 7475 7476 /* 7477 * diskdump.c 7478 */ 7479 int is_diskdump(char *); 7480 uint diskdump_page_size(void); 7481 int read_diskdump(int, void *, int, ulong, physaddr_t); 7482 int write_diskdump(int, void *, int, ulong, physaddr_t); 7483 int diskdump_free_memory(void); 7484 int diskdump_memory_used(void); 7485 int diskdump_init(char *, FILE *); 7486 ulong get_diskdump_panic_task(void); 7487 ulong get_diskdump_switch_stack(ulong); 7488 int diskdump_memory_dump(FILE *); 7489 FILE *set_diskdump_fp(FILE *); 7490 void get_diskdump_regs(struct bt_info *, ulong *, ulong *); 7491 int diskdump_phys_base(unsigned long *); 7492 int diskdump_set_phys_base(unsigned long); 7493 extern ulong *diskdump_flags; 7494 int is_partial_diskdump(void); 7495 int get_dump_level(void); 7496 int dumpfile_is_split(void); 7497 void show_split_dumpfiles(void); 7498 void x86_process_elf_notes(void *, unsigned long); 7499 void *diskdump_get_prstatus_percpu(int); 7500 int diskdump_is_cpu_prstatus_valid(int cpu); 7501 int have_crash_notes(int cpu); 7502 void map_cpus_to_prstatus_kdump_cmprs(void); 7503 void diskdump_display_regs(int, FILE *); 7504 void process_elf32_notes(void *, ulong); 7505 void process_elf64_notes(void *, ulong); 7506 void dump_registers_for_compressed_kdump(void); 7507 int diskdump_kaslr_check(void); 7508 int diskdump_get_nr_cpus(void); 7509 QEMUCPUState *diskdump_get_qemucpustate(int); 7510 void diskdump_device_dump_info(FILE *); 7511 void diskdump_device_dump_extract(int, char *, FILE *); 7512 ulong readswap(ulonglong pte_val, char *buf, ulong len, ulonglong vaddr); 7513 /*support for zram*/ 7514 ulong try_zram_decompress(ulonglong pte_val, unsigned char *buf, ulong len, ulonglong vaddr); 7515 #define OBJ_TAG_BITS 1 7516 #ifndef MAX_POSSIBLE_PHYSMEM_BITS 7517 #define MAX_POSSIBLE_PHYSMEM_BITS (MAX_PHYSMEM_BITS()) 7518 #endif 7519 #define _PFN_BITS (MAX_POSSIBLE_PHYSMEM_BITS - PAGESHIFT()) 7520 #define OBJ_INDEX_BITS (BITS_PER_LONG - _PFN_BITS - OBJ_TAG_BITS) 7521 #define OBJ_INDEX_MASK ((1 << OBJ_INDEX_BITS) - 1) 7522 #define ZS_HANDLE_SIZE (sizeof(unsigned long)) 7523 #define ZSPAGE_MAGIC 0x58 7524 #define SWAP_ADDRESS_SPACE_SHIFT 14 7525 #define SECTOR_SHIFT 9 7526 #define SECTORS_PER_PAGE_SHIFT (PAGESHIFT() - SECTOR_SHIFT) 7527 #define SECTORS_PER_PAGE (1 << SECTORS_PER_PAGE_SHIFT) 7528 7529 struct zspage { 7530 union { 7531 unsigned int flag_bits; 7532 struct { 7533 unsigned int fullness : 2; 7534 unsigned int class : 9; 7535 unsigned int isolated : 3; 7536 unsigned int magic : 8; 7537 } v0; 7538 struct { 7539 unsigned int huge : 1; 7540 unsigned int fullness : 2; 7541 unsigned int class : 9; 7542 unsigned int isolated : 3; 7543 unsigned int magic : 8; 7544 } v5_17; 7545 }; 7546 unsigned int inuse; 7547 unsigned int freeobj; 7548 }; 7549 7550 /* 7551 * makedumpfile.c 7552 */ 7553 void check_flattened_format(char *file); 7554 int is_flattened_format(char *file); 7555 int read_flattened_format(int fd, off_t offset, void *buf, size_t size); 7556 void dump_flat_header(FILE *); 7557 7558 /* 7559 * xendump.c 7560 */ 7561 int is_xendump(char *); 7562 int read_xendump(int, void *, int, ulong, physaddr_t); 7563 int write_xendump(int, void *, int, ulong, physaddr_t); 7564 uint xendump_page_size(void); 7565 int xendump_free_memory(void); 7566 int xendump_memory_used(void); 7567 int xendump_init(char *, FILE *); 7568 int xendump_memory_dump(FILE *); 7569 ulong get_xendump_panic_task(void); 7570 void get_xendump_regs(struct bt_info *, ulong *, ulong *); 7571 char *xc_core_mfn_to_page(ulong, char *); 7572 int xc_core_mfn_to_page_index(ulong); 7573 void xendump_panic_hook(char *); 7574 int read_xendump_hyper(int, void *, int, ulong, physaddr_t); 7575 struct xendump_data *get_xendump_data(void); 7576 7577 /* 7578 * kvmdump.c 7579 */ 7580 int is_kvmdump(char *); 7581 int is_kvmdump_mapfile(char *); 7582 int kvmdump_init(char *, FILE *); 7583 int read_kvmdump(int, void *, int, ulong, physaddr_t); 7584 int write_kvmdump(int, void *, int, ulong, physaddr_t); 7585 int kvmdump_free_memory(void); 7586 int kvmdump_memory_used(void); 7587 int kvmdump_memory_dump(FILE *); 7588 void get_kvmdump_regs(struct bt_info *, ulong *, ulong *); 7589 ulong get_kvmdump_panic_task(void); 7590 int kvmdump_phys_base(unsigned long *); 7591 void kvmdump_display_regs(int, FILE *); 7592 void set_kvmhost_type(char *); 7593 void set_kvm_iohole(char *); 7594 struct kvm_register_set { 7595 union { 7596 uint32_t cs; 7597 uint32_t ss; 7598 uint32_t ds; 7599 uint32_t es; 7600 uint32_t fs; 7601 uint32_t gs; 7602 uint64_t ip; 7603 uint64_t flags; 7604 uint64_t regs[16]; 7605 } x86; 7606 }; 7607 int get_kvm_register_set(int, struct kvm_register_set *); 7608 7609 /* 7610 * sadump.c 7611 */ 7612 int is_sadump(char *); 7613 uint sadump_page_size(void); 7614 int read_sadump(int, void *, int, ulong, physaddr_t); 7615 int write_sadump(int, void *, int, ulong, physaddr_t); 7616 int sadump_init(char *, FILE *); 7617 int sadump_is_diskset(void); 7618 ulong get_sadump_panic_task(void); 7619 ulong get_sadump_switch_stack(ulong); 7620 int sadump_memory_used(void); 7621 int sadump_free_memory(void); 7622 int sadump_memory_dump(FILE *); 7623 FILE *set_sadump_fp(FILE *); 7624 void get_sadump_regs(struct bt_info *bt, ulong *ipp, ulong *spp); 7625 void sadump_display_regs(int, FILE *); 7626 int sadump_phys_base(ulong *); 7627 int sadump_set_phys_base(ulong); 7628 void sadump_show_diskset(void); 7629 int sadump_is_zero_excluded(void); 7630 void sadump_set_zero_excluded(void); 7631 void sadump_unset_zero_excluded(void); 7632 struct sadump_data; 7633 struct sadump_data *get_sadump_data(void); 7634 int sadump_calc_kaslr_offset(ulong *); 7635 int sadump_get_nr_cpus(void); 7636 int sadump_get_cr3_cr4_idtr(int, ulong *, ulong *, ulong *); 7637 7638 /* 7639 * qemu.c 7640 */ 7641 int qemu_init(char *); 7642 7643 /* 7644 * qemu-load.c 7645 */ 7646 int is_qemu_vm_file(char *); 7647 void dump_qemu_header(FILE *); 7648 7649 /* 7650 * net.c 7651 */ 7652 void net_init(void); 7653 void dump_net_table(void); 7654 void dump_sockets_workhorse(ulong, ulong, struct reference *); 7655 7656 /* 7657 * remote.c 7658 */ 7659 int is_remote_daemon(char *); 7660 physaddr_t get_remote_phys_base(physaddr_t, physaddr_t); 7661 physaddr_t remote_vtop(int, physaddr_t); 7662 int get_remote_regs(struct bt_info *, ulong *, ulong *); 7663 physaddr_t get_remote_cr3(int); 7664 void remote_fd_init(void); 7665 int get_remote_file(struct remote_file *); 7666 uint remote_page_size(void); 7667 int find_remote_module_objfile(struct load_module *lm, char *, char *); 7668 int remote_free_memory(void); 7669 int remote_memory_dump(int); 7670 int remote_memory_used(void); 7671 void remote_exit(void); 7672 int remote_execute(void); 7673 void remote_clear_pipeline(void); 7674 int remote_memory_read(int, char *, int, physaddr_t, int); 7675 7676 /* 7677 * vmware_vmss.c 7678 */ 7679 int is_vmware_vmss(char *filename); 7680 int vmware_vmss_init(char *filename, FILE *ofp); 7681 uint vmware_vmss_page_size(void); 7682 int read_vmware_vmss(int, void *, int, ulong, physaddr_t); 7683 int write_vmware_vmss(int, void *, int, ulong, physaddr_t); 7684 void vmware_vmss_display_regs(int, FILE *); 7685 void get_vmware_vmss_regs(struct bt_info *, ulong *, ulong *); 7686 int vmware_vmss_memory_dump(FILE *); 7687 void dump_registers_for_vmss_dump(void); 7688 int vmware_vmss_valid_regs(struct bt_info *); 7689 int vmware_vmss_get_nr_cpus(void); 7690 int vmware_vmss_get_cr3_cr4_idtr(int, ulong *, ulong *, ulong *); 7691 int vmware_vmss_phys_base(ulong *phys_base); 7692 int vmware_vmss_set_phys_base(ulong); 7693 int vmware_vmss_get_cpu_reg(int, int, const char *, int, void *); 7694 7695 /* 7696 * vmware_guestdump.c 7697 */ 7698 int is_vmware_guestdump(char *filename); 7699 int vmware_guestdump_init(char *filename, FILE *ofp); 7700 int vmware_guestdump_memory_dump(FILE *); 7701 7702 /* 7703 * kaslr_helper.c 7704 */ 7705 int calc_kaslr_offset(ulong *, ulong *); 7706 7707 /* 7708 * printk.c 7709 */ 7710 void dump_lockless_record_log(int); 7711 7712 /* caller_id default and max character sizes based on pid field size */ 7713 #define PID_CHARS_MAX 16 /* Max Number of PID characters */ 7714 #define PID_CHARS_DEFAULT 8 /* Default number of PID characters */ 7715 7716 /* 7717 * gnu_binutils.c 7718 */ 7719 7720 /* NO LONGER IN USE */ 7721 7722 /* 7723 * test.c 7724 */ 7725 void cmd_template(void); 7726 void foreach_test(ulong, ulong); 7727 7728 /* 7729 * va_server.c 7730 */ 7731 int mclx_page_size(void); 7732 int vas_memory_used(void); 7733 int vas_memory_dump(FILE *); 7734 int vas_free_memory(char *); 7735 void set_vas_debug(ulong); 7736 size_t vas_write(void *, size_t); 7737 int va_server_init(char *, ulong *, ulong *, ulong *); 7738 size_t vas_read(void *, size_t); 7739 int vas_lseek(ulong, int); 7740 7741 /* 7742 * lkcd_x86_trace.c 7743 */ 7744 int lkcd_x86_back_trace(struct bt_info *, int, FILE *); 7745 7746 /* 7747 * lkcd_common.c 7748 */ 7749 int lkcd_dump_init(FILE *, int, char *); 7750 ulong get_lkcd_panic_task(void); 7751 void get_lkcd_panicmsg(char *); 7752 int is_lkcd_compressed_dump(char *); 7753 void dump_lkcd_environment(ulong); 7754 int lkcd_lseek(physaddr_t); 7755 long lkcd_read(void *, long); 7756 void set_lkcd_debug(ulong); 7757 FILE *set_lkcd_fp(FILE *); 7758 uint lkcd_page_size(void); 7759 int lkcd_memory_used(void); 7760 int lkcd_memory_dump(FILE *); 7761 int lkcd_free_memory(void); 7762 void lkcd_print(char *, ...); 7763 void set_remote_lkcd_panic_data(ulong, char *); 7764 void set_lkcd_nohash(void); 7765 int lkcd_load_dump_page_header(void *, ulong); 7766 void lkcd_dumpfile_complaint(uint32_t, uint32_t, int); 7767 int set_mb_benchmark(ulong); 7768 ulonglong fix_lkcd_address(ulonglong); 7769 int lkcd_get_kernel_start(ulong *addr); 7770 int get_lkcd_regs_for_cpu(struct bt_info *bt, ulong *eip, ulong *esp); 7771 7772 /* 7773 * lkcd_v1.c 7774 */ 7775 int lkcd_dump_init_v1(FILE *, int); 7776 void dump_dump_page_v1(char *, void *); 7777 void dump_lkcd_environment_v1(ulong); 7778 uint32_t get_dp_size_v1(void); 7779 uint32_t get_dp_flags_v1(void); 7780 uint64_t get_dp_address_v1(void); 7781 7782 /* 7783 * lkcd_v2_v3.c 7784 */ 7785 int lkcd_dump_init_v2_v3(FILE *, int); 7786 void dump_dump_page_v2_v3(char *, void *); 7787 void dump_lkcd_environment_v2_v3(ulong); 7788 uint32_t get_dp_size_v2_v3(void); 7789 uint32_t get_dp_flags_v2_v3(void); 7790 uint64_t get_dp_address_v2_v3(void); 7791 7792 /* 7793 * lkcd_v5.c 7794 */ 7795 int lkcd_dump_init_v5(FILE *, int); 7796 void dump_dump_page_v5(char *, void *); 7797 void dump_lkcd_environment_v5(ulong); 7798 uint32_t get_dp_size_v5(void); 7799 uint32_t get_dp_flags_v5(void); 7800 uint64_t get_dp_address_v5(void); 7801 7802 /* 7803 * lkcd_v7.c 7804 */ 7805 int lkcd_dump_init_v7(FILE *, int, char *); 7806 void dump_dump_page_v7(char *, void *); 7807 void dump_lkcd_environment_v7(ulong); 7808 uint32_t get_dp_size_v7(void); 7809 uint32_t get_dp_flags_v7(void); 7810 uint64_t get_dp_address_v7(void); 7811 7812 /* 7813 * lkcd_v8.c 7814 */ 7815 int lkcd_dump_init_v8(FILE *, int, char *); 7816 void dump_dump_page_v8(char *, void *); 7817 void dump_lkcd_environment_v8(ulong); 7818 uint32_t get_dp_size_v8(void); 7819 uint32_t get_dp_flags_v8(void); 7820 uint64_t get_dp_address_v8(void); 7821 7822 #ifdef LKCD_COMMON 7823 /* 7824 * Until they differ across versions, these remain usable in the common 7825 * routines in lkcd_common.c 7826 */ 7827 #define LKCD_DUMP_MAGIC_NUMBER (0xa8190173618f23edULL) 7828 #define LKCD_DUMP_MAGIC_LIVE (0xa8190173618f23cdULL) 7829 7830 #define LKCD_DUMP_V1 (0x1) /* DUMP_VERSION_NUMBER */ 7831 #define LKCD_DUMP_V2 (0x2) /* DUMP_VERSION_NUMBER */ 7832 #define LKCD_DUMP_V3 (0x3) /* DUMP_VERSION_NUMBER */ 7833 #define LKCD_DUMP_V5 (0x5) /* DUMP_VERSION_NUMBER */ 7834 #define LKCD_DUMP_V6 (0x6) /* DUMP_VERSION_NUMBER */ 7835 #define LKCD_DUMP_V7 (0x7) /* DUMP_VERSION_NUMBER */ 7836 #define LKCD_DUMP_V8 (0x8) /* DUMP_VERSION_NUMBER */ 7837 #define LKCD_DUMP_V9 (0x9) /* DUMP_VERSION_NUMBER */ 7838 #define LKCD_DUMP_V10 (0xa) /* DUMP_VERSION_NUMBER */ 7839 7840 #define LKCD_DUMP_VERSION_NUMBER_MASK (0xf) 7841 #define LKCD_DUMP_RAW (0x1) /* DUMP_[DH_]RAW */ 7842 #define LKCD_DUMP_COMPRESSED (0x2) /* DUMP_[DH_]COMPRESSED */ 7843 #define LKCD_DUMP_END (0x4) /* DUMP_[DH_]END */ 7844 7845 #define LKCD_DUMP_COMPRESS_NONE (0x0) /* DUMP_COMPRESS_NONE */ 7846 #define LKCD_DUMP_COMPRESS_RLE (0x1) /* DUMP_COMPRESS_RLE */ 7847 #define LKCD_DUMP_COMPRESS_GZIP (0x2) /* DUMP_COMPRESS_GZIP */ 7848 7849 #define LKCD_DUMP_MCLX_V0 (0x80000000) /* MCLX mod of LKCD */ 7850 #define LKCD_DUMP_MCLX_V1 (0x40000000) /* Extra page header data */ 7851 #define LKCD_OFFSET_TO_FIRST_PAGE (65536) 7852 7853 #define MCLX_PAGE_HEADERS (4096) 7854 #define MCLX_V1_PAGE_HEADER_CACHE ((sizeof(uint64_t)) * MCLX_PAGE_HEADERS) 7855 7856 /* 7857 * lkcd_load_dump_page_header() return values 7858 */ 7859 #define LKCD_DUMPFILE_OK (0) 7860 #define LKCD_DUMPFILE_EOF (1) 7861 #define LKCD_DUMPFILE_END (2) 7862 7863 /* 7864 * Common handling of LKCD dump environment 7865 */ 7866 #define LKCD_CACHED_PAGES (16) 7867 #define LKCD_PAGE_HASH (32) 7868 #define LKCD_DUMP_HEADER_ONLY (1) /* arguments to lkcd_dump_environment */ 7869 #define LKCD_DUMP_PAGE_ONLY (2) 7870 7871 #define LKCD_VALID (0x1) /* flags */ 7872 #define LKCD_REMOTE (0x2) 7873 #define LKCD_NOHASH (0x4) 7874 #define LKCD_MCLX (0x8) 7875 #define LKCD_BAD_DUMP (0x10) 7876 7877 struct page_hash_entry { 7878 uint32_t pg_flags; 7879 uint64_t pg_addr; 7880 off_t pg_hdr_offset; 7881 struct page_hash_entry *next; 7882 }; 7883 7884 struct page_desc { 7885 off_t offset; /* lseek offset in dump file */ 7886 }; 7887 7888 struct physmem_zone { 7889 uint64_t start; 7890 struct page_desc *pages; 7891 }; 7892 7893 struct fix_addrs { 7894 ulong task; 7895 ulong saddr; 7896 ulong sw; 7897 }; 7898 7899 7900 struct lkcd_environment { 7901 int fd; /* dumpfile file descriptor */ 7902 ulong flags; /* flags from above */ 7903 ulong debug; /* shadow of pc->debug */ 7904 FILE *fp; /* abstracted fp for fprintf */ 7905 void *dump_header; /* header stash, v1 or v2 */ 7906 void *dump_header_asm; /* architecture specific header for v2 */ 7907 void *dump_header_asm_smp; /* architecture specific header for v7 & v8 */ 7908 void *dump_page; /* current page header holder */ 7909 uint32_t version; /* version number of this dump */ 7910 uint32_t page_size; /* size of a Linux memory page */ 7911 int page_shift; /* byte address to page */ 7912 int bits; /* processor bitsize */ 7913 ulong panic_task; /* panic task address */ 7914 char *panic_string; /* pointer to stashed panic string */ 7915 uint32_t compression; /* compression type */ 7916 uint32_t (*get_dp_size)(void); /* returns current page's dp_size */ 7917 uint32_t (*get_dp_flags)(void); /* returns current page's dp_size */ 7918 uint64_t (*get_dp_address)(void); /* returns current page's dp_address*/ 7919 size_t page_header_size; /* size of version's page header */ 7920 unsigned long curpos; /* offset into current page */ 7921 uint64_t curpaddr; /* current page's physical address */ 7922 off_t curhdroffs; /* current page's header offset */ 7923 char *curbufptr; /* pointer to uncompressed page buffer */ 7924 uint64_t kvbase; /* physical-to-LKCD page address format*/ 7925 char *page_cache_buf; /* base of cached buffer pages */ 7926 char *compressed_page; /* copy of compressed page data */ 7927 int evict_index; /* next page to evict */ 7928 ulong evictions; /* total evictions done */ 7929 struct page_cache_hdr { /* header for each cached page */ 7930 uint32_t pg_flags; 7931 uint64_t pg_addr; 7932 char *pg_bufptr; 7933 ulong pg_hit_count; 7934 } page_cache_hdr[LKCD_CACHED_PAGES]; 7935 struct page_hash_entry *page_hash; 7936 ulong total_pages; 7937 ulong benchmark_pages; 7938 ulong benchmarks_done; 7939 off_t *mb_hdr_offsets; 7940 ulong total_reads; 7941 ulong cached_reads; 7942 ulong hashed_reads; 7943 ulong hashed; 7944 ulong compressed; 7945 ulong raw; 7946 7947 /* lkcd_v7 additions */ 7948 char *dumpfile_index; /* array of offsets for each page */ 7949 int ifd; /* index file for dump (LKCD V7+) */ 7950 long memory_pages; /* Mamimum index of dump pages */ 7951 off_t page_offset_max; /* Offset of page with greatest offset seen so far */ 7952 long page_index_max; /* Index of page with greatest offset seen so far */ 7953 off_t *page_offsets; /* Pointer to huge array with seek offsets */ 7954 /* NB: There are no holes in the array */ 7955 7956 struct physmem_zone *zones; /* Array of physical memory zones */ 7957 int num_zones; /* Number of zones initialized */ 7958 int max_zones; /* Size of the zones array */ 7959 long zoned_offsets; /* Number of stored page offsets */ 7960 uint64_t zone_mask; 7961 int zone_shift; 7962 7963 int fix_addr_num; /* Number of active stacks to switch to saved values */ 7964 struct fix_addrs *fix_addr; /* Array of active stacks to switch to saved values */ 7965 7966 7967 }; 7968 7969 #define ZONE_ALLOC 128 7970 #define ZONE_SIZE (MEGABYTES(512)) 7971 7972 #define MEGABYTE_ALIGNED(vaddr) (!((uint64_t)(vaddr) & MEGABYTE_MASK)) 7973 7974 #define LKCD_PAGE_HASH_INDEX(paddr) \ 7975 (((paddr) >> lkcd->page_shift) % LKCD_PAGE_HASH) 7976 #define LKCD_PAGES_PER_MEGABYTE() (MEGABYTES(1) / lkcd->page_size) 7977 #define LKCD_PAGE_MEGABYTE(page) ((page) / LKCD_PAGES_PER_MEGABYTE()) 7978 #define LKCD_BENCHMARKS_DONE() (lkcd->benchmarks_done >= lkcd->benchmark_pages) 7979 #define LKCD_VALID_PAGE(flags) ((flags) & LKCD_VALID) 7980 7981 extern struct lkcd_environment *lkcd; 7982 7983 #define LKCD_DEBUG(x) (lkcd->debug >= (x)) 7984 #undef BITS 7985 #undef BITS32 7986 #undef BITS64 7987 #define BITS() (lkcd->bits) 7988 #define BITS32() (lkcd->bits == 32) 7989 #define BITS64() (lkcd->bits == 64) 7990 7991 #endif /* LKCD_COMMON */ 7992 7993 /* 7994 * gdb_interface.c 7995 */ 7996 void gdb_main_loop(int, char **); 7997 void display_gdb_banner(void); 7998 void get_gdb_version(void); 7999 void gdb_session_init(void); 8000 void gdb_interface(struct gnu_request *); 8001 int gdb_pass_through(char *, FILE *, ulong); 8002 int gdb_readmem_callback(ulong, void *, int, int); 8003 int gdb_line_number_callback(ulong, ulong, ulong); 8004 int gdb_print_callback(ulong); 8005 char *gdb_lookup_module_symbol(ulong, ulong *); 8006 void gdb_error_hook(void); 8007 void restore_gdb_sanity(void); 8008 int is_gdb_command(int, ulong); 8009 char *gdb_command_string(int, char *, int); 8010 void dump_gnu_request(struct gnu_request *, int); 8011 int gdb_CRASHDEBUG(ulong); 8012 void dump_gdb_data(void); 8013 void update_gdb_hooks(void); 8014 void gdb_readnow_warning(void); 8015 int gdb_set_crash_scope(ulong, char *); 8016 extern int *gdb_output_format; 8017 extern unsigned int *gdb_print_max; 8018 extern unsigned char *gdb_prettyprint_structs; 8019 extern unsigned char *gdb_prettyprint_arrays; 8020 extern unsigned int *gdb_repeat_count_threshold; 8021 extern unsigned char *gdb_stop_print_at_null; 8022 extern unsigned int *gdb_output_radix; 8023 int is_kvaddr(ulong); 8024 8025 /* 8026 * gdb/top.c 8027 */ 8028 extern void execute_command (char *, int); 8029 #if defined(GDB_5_3) || defined(GDB_6_0) || defined(GDB_6_1) 8030 extern void (*command_loop_hook)(void); 8031 extern void (*error_hook)(void); 8032 #else 8033 extern void (*deprecated_command_loop_hook)(void); 8034 8035 /* 8036 * gdb/exceptions.c 8037 */ 8038 extern void (*error_hook)(void); 8039 #endif 8040 8041 /* 8042 * gdb/symtab.c 8043 */ 8044 extern void gdb_command_funnel(struct gnu_request *); 8045 8046 /* 8047 * gdb/symfile.c 8048 */ 8049 #if defined(GDB_6_0) || defined(GDB_6_1) 8050 struct objfile; 8051 extern void (*target_new_objfile_hook)(struct objfile *); 8052 #endif 8053 8054 /* 8055 * gdb/valprint.c 8056 */ 8057 extern unsigned output_radix; 8058 #if defined(GDB_5_3) || defined(GDB_6_0) || defined(GDB_6_1) 8059 extern int output_format; 8060 extern int prettyprint_structs; 8061 extern int prettyprint_arrays; 8062 extern int repeat_count_threshold; 8063 extern unsigned int print_max; 8064 extern int stop_print_at_null; 8065 #endif 8066 8067 #ifdef GDB_7_6 8068 /* 8069 * gdb/cleanups.c 8070 */ 8071 struct cleanup; 8072 extern struct cleanup *all_cleanups(void); 8073 extern void do_cleanups(struct cleanup *); 8074 #else 8075 /* 8076 * gdb/utils.c 8077 */ 8078 extern void do_cleanups(void *); 8079 #endif 8080 8081 /* 8082 * gdb/version.c 8083 */ 8084 extern char *version; 8085 8086 /* 8087 * gdb/disasm.c 8088 */ 8089 #ifdef GDB_5_3 8090 extern int gdb_disassemble_from_exec; 8091 #endif 8092 8093 /* 8094 * readline/readline.c 8095 */ 8096 #ifdef GDB_5_3 8097 extern char *readline(char *); 8098 #else 8099 extern char *readline(const char *); 8100 #endif 8101 extern int rl_editing_mode; 8102 8103 /* 8104 * readline/history.c 8105 */ 8106 extern int history_offset; 8107 8108 /* 8109 * external gdb routines 8110 */ 8111 extern int gdb_main_entry(int, char **); 8112 #ifdef GDB_5_3 8113 extern unsigned long calc_crc32(unsigned long, unsigned char *, size_t); 8114 #else 8115 extern unsigned long gnu_debuglink_crc32 (unsigned long, unsigned char *, size_t); 8116 #endif 8117 extern int have_partial_symbols(void *); 8118 extern int have_full_symbols(void *); 8119 8120 #if defined(X86) || defined(X86_64) || defined(IA64) 8121 #define XEN_HYPERVISOR_ARCH 8122 #endif 8123 8124 #ifndef offsetof 8125 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 8126 #endif 8127 #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 8128 #define REG_SEQ(TYPE, MEMBER) \ 8129 (offsetof(struct TYPE, MEMBER) / FIELD_SIZEOF(struct TYPE, MEMBER)) 8130 8131 /* 8132 * Register numbers must be in sync with gdb/features/i386/64bit-core.c 8133 * to make crash_target->fetch_registers() ---> machdep->get_current_task_reg() 8134 * working properly. 8135 */ 8136 enum x86_64_regnum { 8137 RAX_REGNUM, 8138 RBX_REGNUM, 8139 RCX_REGNUM, 8140 RDX_REGNUM, 8141 RSI_REGNUM, 8142 RDI_REGNUM, 8143 RBP_REGNUM, 8144 RSP_REGNUM, 8145 R8_REGNUM, 8146 R9_REGNUM, 8147 R10_REGNUM, 8148 R11_REGNUM, 8149 R12_REGNUM, 8150 R13_REGNUM, 8151 R14_REGNUM, 8152 R15_REGNUM, 8153 RIP_REGNUM, 8154 EFLAGS_REGNUM, 8155 CS_REGNUM, 8156 SS_REGNUM, 8157 DS_REGNUM, 8158 ES_REGNUM, 8159 FS_REGNUM, 8160 GS_REGNUM, 8161 ST0_REGNUM, 8162 ST1_REGNUM, 8163 ST2_REGNUM, 8164 ST3_REGNUM, 8165 ST4_REGNUM, 8166 ST5_REGNUM, 8167 ST6_REGNUM, 8168 ST7_REGNUM, 8169 FCTRL_REGNUM, 8170 FSTAT_REGNUM, 8171 FTAG_REGNUM, 8172 FISEG_REGNUM, 8173 FIOFF_REGNUM, 8174 FOSEG_REGNUM, 8175 FOOFF_REGNUM, 8176 FOP_REGNUM, 8177 FS_BASE_REGNUM = 152, 8178 GS_BASE_REGNUM, 8179 ORIG_RAX_REGNUM, 8180 LAST_REGNUM 8181 }; 8182 8183 enum arm64_regnum { 8184 X0_REGNUM, 8185 X1_REGNUM, 8186 X2_REGNUM, 8187 X3_REGNUM, 8188 X4_REGNUM, 8189 X5_REGNUM, 8190 X6_REGNUM, 8191 X7_REGNUM, 8192 X8_REGNUM, 8193 X9_REGNUM, 8194 X10_REGNUM, 8195 X11_REGNUM, 8196 X12_REGNUM, 8197 X13_REGNUM, 8198 X14_REGNUM, 8199 X15_REGNUM, 8200 X16_REGNUM, 8201 X17_REGNUM, 8202 X18_REGNUM, 8203 X19_REGNUM, 8204 X20_REGNUM, 8205 X21_REGNUM, 8206 X22_REGNUM, 8207 X23_REGNUM, 8208 X24_REGNUM, 8209 X25_REGNUM, 8210 X26_REGNUM, 8211 X27_REGNUM, 8212 X28_REGNUM, 8213 X29_REGNUM, 8214 X30_REGNUM, 8215 SP_REGNUM, 8216 PC_REGNUM, 8217 }; 8218 8219 /* 8220 * Register numbers to make crash_target->fetch_registers() 8221 * ---> machdep->get_current_task_reg() work properly. 8222 * 8223 * These register numbers and names are given according to output of 8224 * `rs6000_register_name`, because that is what was being used by 8225 * crash_target::fetch_registers in case of PPC64 8226 */ 8227 enum ppc64_regnum { 8228 PPC64_R0_REGNUM = 0, 8229 PPC64_R1_REGNUM, 8230 PPC64_R2_REGNUM, 8231 PPC64_R3_REGNUM, 8232 PPC64_R4_REGNUM, 8233 PPC64_R5_REGNUM, 8234 PPC64_R6_REGNUM, 8235 PPC64_R7_REGNUM, 8236 PPC64_R8_REGNUM, 8237 PPC64_R9_REGNUM, 8238 PPC64_R10_REGNUM, 8239 PPC64_R11_REGNUM, 8240 PPC64_R12_REGNUM, 8241 PPC64_R13_REGNUM, 8242 PPC64_R14_REGNUM, 8243 PPC64_R15_REGNUM, 8244 PPC64_R16_REGNUM, 8245 PPC64_R17_REGNUM, 8246 PPC64_R18_REGNUM, 8247 PPC64_R19_REGNUM, 8248 PPC64_R20_REGNUM, 8249 PPC64_R21_REGNUM, 8250 PPC64_R22_REGNUM, 8251 PPC64_R23_REGNUM, 8252 PPC64_R24_REGNUM, 8253 PPC64_R25_REGNUM, 8254 PPC64_R26_REGNUM, 8255 PPC64_R27_REGNUM, 8256 PPC64_R28_REGNUM, 8257 PPC64_R29_REGNUM, 8258 PPC64_R30_REGNUM, 8259 PPC64_R31_REGNUM, 8260 8261 PPC64_F0_REGNUM = 32, 8262 PPC64_F1_REGNUM, 8263 PPC64_F2_REGNUM, 8264 PPC64_F3_REGNUM, 8265 PPC64_F4_REGNUM, 8266 PPC64_F5_REGNUM, 8267 PPC64_F6_REGNUM, 8268 PPC64_F7_REGNUM, 8269 PPC64_F8_REGNUM, 8270 PPC64_F9_REGNUM, 8271 PPC64_F10_REGNUM, 8272 PPC64_F11_REGNUM, 8273 PPC64_F12_REGNUM, 8274 PPC64_F13_REGNUM, 8275 PPC64_F14_REGNUM, 8276 PPC64_F15_REGNUM, 8277 PPC64_F16_REGNUM, 8278 PPC64_F17_REGNUM, 8279 PPC64_F18_REGNUM, 8280 PPC64_F19_REGNUM, 8281 PPC64_F20_REGNUM, 8282 PPC64_F21_REGNUM, 8283 PPC64_F22_REGNUM, 8284 PPC64_F23_REGNUM, 8285 PPC64_F24_REGNUM, 8286 PPC64_F25_REGNUM, 8287 PPC64_F26_REGNUM, 8288 PPC64_F27_REGNUM, 8289 PPC64_F28_REGNUM, 8290 PPC64_F29_REGNUM, 8291 PPC64_F30_REGNUM, 8292 PPC64_F31_REGNUM, 8293 8294 PPC64_PC_REGNUM = 64, 8295 PPC64_MSR_REGNUM = 65, 8296 PPC64_CR_REGNUM = 66, 8297 PPC64_LR_REGNUM = 67, 8298 PPC64_CTR_REGNUM = 68, 8299 PPC64_XER_REGNUM = 69, 8300 PPC64_FPSCR_REGNUM = 70, 8301 8302 PPC64_VR0_REGNUM = 106, 8303 PPC64_VR1_REGNUM, 8304 PPC64_VR2_REGNUM, 8305 PPC64_VR3_REGNUM, 8306 PPC64_VR4_REGNUM, 8307 PPC64_VR5_REGNUM, 8308 PPC64_VR6_REGNUM, 8309 PPC64_VR7_REGNUM, 8310 PPC64_VR8_REGNUM, 8311 PPC64_VR9_REGNUM, 8312 PPC64_VR10_REGNUM, 8313 PPC64_VR11_REGNUM, 8314 PPC64_VR12_REGNUM, 8315 PPC64_VR13_REGNUM, 8316 PPC64_VR14_REGNUM, 8317 PPC64_VR15_REGNUM, 8318 PPC64_VR16_REGNUM, 8319 PPC64_VR17_REGNUM, 8320 PPC64_VR18_REGNUM, 8321 PPC64_VR19_REGNUM, 8322 PPC64_VR20_REGNUM, 8323 PPC64_VR21_REGNUM, 8324 PPC64_VR22_REGNUM, 8325 PPC64_VR23_REGNUM, 8326 PPC64_VR24_REGNUM, 8327 PPC64_VR25_REGNUM, 8328 PPC64_VR26_REGNUM, 8329 PPC64_VR27_REGNUM, 8330 PPC64_VR28_REGNUM, 8331 PPC64_VR29_REGNUM, 8332 PPC64_VR30_REGNUM, 8333 PPC64_VR31_REGNUM, 8334 8335 PPC64_VSCR_REGNUM = 138, 8336 PPC64_VRSAVE_REGNU = 139 8337 }; 8338 8339 /* crash_target.c */ 8340 extern int gdb_change_thread_context (void); 8341 extern int gdb_add_substack (int); 8342 8343 #endif /* !GDB_COMMON */