#if 0
/*─────────────────────────────────────────────────────────────────╗
│ To the extent possible under law, Justine Tunney has waived      │
│ all copyright and related or neighboring rights to this file,    │
│ as it is written in the following disclaimers:                   │
│   • http://unlicense.org/                                        │
│   • http://creativecommons.org/publicdomain/zero/1.0/            │
╚─────────────────────────────────────────────────────────────────*/
#endif
#include "libc/calls/calls.h"
#include "libc/intrin/kprintf.h"
#include "libc/math.h"
#include "libc/runtime/runtime.h"
#include "libc/runtime/symbols.internal.h"
#include "libc/stdio/stdio.h"

/**
 * @fileoverview How to print backtraces and cpu state on crash.
 *
 *     make -j8 -O o//examples/crashreport.com
 *     o//examples/crashreport.com
 *
 * To prevent the GDB GUI from popping up:
 *
 *     export GDB=
 *     make -j8 -O o//examples/crashreport.com
 *     o//examples/crashreport.com
 */

int Divide(int x, int y) {
  volatile int z = 0;  // force creation of stack frame
  return x / y + z;
}

int (*pDivide)(int, int) = Divide;

dontubsan int main(int argc, char *argv[]) {
  kprintf("----------------\n");
  kprintf(" THIS IS A TEST \n");
  kprintf("SIMULATING CRASH\n");
  kprintf("----------------\n");

  ShowCrashReports();

  pDivide(1, 0);
  pDivide(2, 0);
  pDivide(3, 0);
}