Page cover

Symbols & Debugging

Debug symbols, objdump usage, and kernel debugging for NØNOS.


Build Artifacts

Release Build

target/
├── x86_64-nonos/release/
│   └── nonos_kernel          # 221 KB, stripped
├── x86_64-unknown-uefi/release/
│   ├── nonos_boot.efi        # 300 KB, UEFI bootloader
│   └── nonos_boot.pdb        # 92 KB, debug symbols
└── esp/
    └── EFI/
        ├── Boot/BOOTX64.EFI  # Bootloader copy
        └── nonos/kernel.bin   # Kernel copy

Debug Build

make debug
# or
cargo build  # (without --release)

Debug builds include full symbols and are larger.


Using objdump

View Kernel Sections

Expected output:

Disassemble Entry Point

View Symbols

View All Symbols


Key Symbols

Symbol
Description

kernel_main

Kernel entry point

__bss_start

BSS section start

__bss_end

BSS section end

__nonos_manifest_start

Manifest section start

__nonos_manifest_end

Manifest section end

__nonos_signature_start

Signature start (64 bytes)

__nonos_signature_end

Signature end

__stack_bottom

Stack bottom

__stack_top

Stack top

GDB Debugging

Start Debug Session


Common GDB Commands


Debug Build with Symbols

For better debugging, use debug build:


Serial Output

Enable Serial Debugging

Serial output appears in terminal. Useful for:

  • Boot messages

  • Kernel panics

  • Debug print statements


Serial Port Configuration

Parameter
Value

Port

COM1 (0x3F8)

Baud

115200

Data bits

8

Parity

None

Stop bits

1


Kernel Panic Information

On panic, NØNOS prints:

  • Panic message

  • Source file and line

  • Stack trace (if available)

  • Register dump

Example:


Inspecting the Manifest


Inspecting the Signature


Verifying Kernel Hash


Memory Debugging

View Page Tables

In GDB:

Check Memory Mapping


Performance Profiling

Boot Timing

Serial output includes timing:

Instruction Counting

In QEMU:


Common Issues

No Symbols in Release Build

Release builds strip symbols. Use debug build:

GDB Won't Connect

  1. Ensure QEMU started with -s -S

  2. Check port 1234 is free

  3. Try localhost:1234 instead of :1234

Kernel Doesn't Boot

  1. Use serial mode: make run-serial

  2. Check for panic messages

  3. Verify signature with objdump

Last updated

Was this helpful?