mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:42:44 +00:00 
			
		
		
		
	 0f2e18403c
			
		
	
	
		0f2e18403c
		
	
	
	
	
		
			
			We now pass along the toolchain type to all subcommands. This ensures that gdb will load the correct debug information for kernels compiled with Clang, and the following warning won't appear with the GNU toolchain: > WARNING: unknown toolchain 'gdb'. Defaulting to GNU. > Valid values are 'Clang', 'GNU' (default)
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| SCRIPT_DIR="$(dirname "${0}")"
 | |
| 
 | |
| if [ -z "$SERENITY_ARCH" ]; then
 | |
|     SERENITY_ARCH="i686"
 | |
| fi
 | |
| 
 | |
| # Set this environment variable to override the default debugger.
 | |
| #
 | |
| if [ -z "$SERENITY_KERNEL_DEBUGGER" ]; then
 | |
|     if [ "$SERENITY_ARCH" = "aarch64" ]; then
 | |
|         # Prepend the toolchain aarch64 bin directory so we pick up GDB from there
 | |
|         PATH="$SCRIPT_DIR/../Toolchain/Local/aarch64/bin:$PATH"
 | |
|         SERENITY_KERNEL_DEBUGGER="aarch64-pc-serenity-gdb"
 | |
|     else
 | |
|         SERENITY_KERNEL_DEBUGGER="gdb"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| toolchain_suffix=
 | |
| if [ "$SERENITY_TOOLCHAIN" = "Clang" ]; then
 | |
|     toolchain_suffix="clang"
 | |
| fi
 | |
| 
 | |
| # The QEMU -s option (enabled by default in ./run) sets up a debugger
 | |
| # remote on localhost:1234. So point our debugger there, and inform
 | |
| # the debugger which binary to load symbols, etc from.
 | |
| #
 | |
| if [ "$SERENITY_ARCH" = "x86_64" ]; then
 | |
|     gdb_arch=i386:x86-64
 | |
|     prekernel_image=Prekernel64
 | |
|     kernel_base=0x2000200000
 | |
| elif [ "$SERENITY_ARCH" = "i686" ]; then
 | |
|     gdb_arch=i386:intel
 | |
|     prekernel_image=Prekernel32
 | |
|     kernel_base=0xc0200000
 | |
| elif [ "$SERENITY_ARCH" = "aarch64" ]; then
 | |
|     gdb_arch=aarch64:armv8-r
 | |
|     prekernel_image=Prekernel
 | |
|     kernel_base=0xc0000000 # FIXME
 | |
| fi
 | |
| 
 | |
| # FIXME: This doesn't work when running QEMU inside the WSL2 VM
 | |
| if command -v wslpath >/dev/null; then
 | |
|     gdb_host=$(powershell.exe "(Test-Connection -ComputerName (hostname) -Count 1).IPV4Address.IPAddressToString" | tr -d '\r\n')
 | |
| else
 | |
|     gdb_host=localhost
 | |
| fi
 | |
| 
 | |
| 
 | |
| exec $SERENITY_KERNEL_DEBUGGER \
 | |
|     -ex "file $SCRIPT_DIR/../Build/${SERENITY_ARCH:-i686}$toolchain_suffix/Kernel/Prekernel/$prekernel_image" \
 | |
|     -ex "set confirm off" \
 | |
|     -ex "directory $SCRIPT_DIR/../Build/${SERENITY_ARCH:-i686}$toolchain_suffix/" \
 | |
|     -ex "add-symbol-file $SCRIPT_DIR/../Build/${SERENITY_ARCH:-i686}$toolchain_suffix/Kernel/Kernel -o $kernel_base" \
 | |
|     -ex "set confirm on" \
 | |
|     -ex "set arch $gdb_arch" \
 | |
|     -ex "set print frame-arguments none" \
 | |
|     -ex "target remote ${gdb_host}:1234" \
 | |
|     -ex "source $SCRIPT_DIR/serenity_gdb.py" \
 | |
|     -ex "layout asm" \
 | |
|     -ex "fs next" \
 | |
|     "$@"
 |