mirror of
				https://gitlab.com/sortix/sortix.git
				synced 2023-02-13 20:55:38 -05:00 
			
		
		
		
	Retire calltrace support in favor of the kernel debugger.
This commit is contained in:
		
							parent
							
								
									c24b5ee5a4
								
							
						
					
					
						commit
						35708fa900
					
				
					 14 changed files with 0 additions and 429 deletions
				
			
		| 
						 | 
				
			
			@ -5,7 +5,6 @@ include ../dirs.mak
 | 
			
		|||
 | 
			
		||||
# Default values in case the user doesn't override these variables.
 | 
			
		||||
OPTLEVEL?=$(DEFAULT_HOST_OPTLEVEL)
 | 
			
		||||
CALLTRACE?=0
 | 
			
		||||
DISKWRITE?=1
 | 
			
		||||
CPPFLAGS?=
 | 
			
		||||
CXXFLAGS?=$(OPTLEVEL)
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +19,6 @@ ifeq ($(PANIC_SHORT),1)
 | 
			
		|||
    CPPFLAGS:=$(CPPFLAGS) -DPANIC_SHORT
 | 
			
		||||
endif
 | 
			
		||||
CPPFLAGS:=$(CPPFLAGS) -DENABLE_DISKWRITE=$(DISKWRITE)
 | 
			
		||||
CPPFLAGS:=$(CPPFLAGS) -DENABLE_CALLTRACE=$(CALLTRACE)
 | 
			
		||||
ifdef VERSION
 | 
			
		||||
    CPPFLAGS:=$(CPPFLAGS) -DVERSIONSTR=\"$(VERSION)\"
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -75,11 +73,9 @@ $(CPUOBJS) \
 | 
			
		|||
addralloc.o \
 | 
			
		||||
alarm.o \
 | 
			
		||||
ata.o \
 | 
			
		||||
calltrace.o \
 | 
			
		||||
clock.o \
 | 
			
		||||
com.o \
 | 
			
		||||
copy.o \
 | 
			
		||||
$(CPU)/calltrace.o \
 | 
			
		||||
$(CPU)/kthread.o \
 | 
			
		||||
crc32.o \
 | 
			
		||||
debugger.o \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2012, 2013.
 | 
			
		||||
 | 
			
		||||
    This file is part of Sortix.
 | 
			
		||||
 | 
			
		||||
    Sortix is free software: you can redistribute it and/or modify it under the
 | 
			
		||||
    terms of the GNU General Public License as published by the Free Software
 | 
			
		||||
    Foundation, either version 3 of the License, or (at your option) any later
 | 
			
		||||
    version.
 | 
			
		||||
 | 
			
		||||
    Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
			
		||||
    details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License along with
 | 
			
		||||
    Sortix. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    calltrace.cpp
 | 
			
		||||
    Traverses the stack and prints the callstack, which aids debugging.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <sortix/kernel/calltrace.h>
 | 
			
		||||
#include <sortix/kernel/kernel.h>
 | 
			
		||||
 | 
			
		||||
namespace Sortix {
 | 
			
		||||
namespace Calltrace {
 | 
			
		||||
 | 
			
		||||
extern "C" void calltrace(unsigned long ptr);
 | 
			
		||||
extern "C" void calltrace_print_function(size_t index, addr_t ip)
 | 
			
		||||
{
 | 
			
		||||
	Log::PrintF("%zu: 0x%zx\n", index, ip);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Perform(unsigned long ptr)
 | 
			
		||||
{
 | 
			
		||||
	Log::PrintF("Calltrace:\n");
 | 
			
		||||
	calltrace(ptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Calltrace
 | 
			
		||||
} // namespace Sortix
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2012, 2013.
 | 
			
		||||
 | 
			
		||||
    This file is part of Sortix.
 | 
			
		||||
 | 
			
		||||
    Sortix is free software: you can redistribute it and/or modify it under the
 | 
			
		||||
    terms of the GNU General Public License as published by the Free Software
 | 
			
		||||
    Foundation, either version 3 of the License, or (at your option) any later
 | 
			
		||||
    version.
 | 
			
		||||
 | 
			
		||||
    Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
			
		||||
    details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License along with
 | 
			
		||||
    Sortix. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    sortix/kernel/calltrace.h
 | 
			
		||||
    Traverses the stack and prints the callstack, which aids debugging.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef INCLUDE_SORTIX_KERNEL_CALLTRACE_H
 | 
			
		||||
#define INCLUDE_SORTIX_KERNEL_CALLTRACE_H
 | 
			
		||||
 | 
			
		||||
namespace Sortix {
 | 
			
		||||
namespace Calltrace {
 | 
			
		||||
 | 
			
		||||
void Perform(unsigned long ptr = 0);
 | 
			
		||||
 | 
			
		||||
} // namespace Calltrace
 | 
			
		||||
} // namespace Sortix
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,6 @@
 | 
			
		|||
#include <errno.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <sortix/kernel/calltrace.h>
 | 
			
		||||
#include <sortix/kernel/cpu.h>
 | 
			
		||||
#include <sortix/kernel/debugger.h>
 | 
			
		||||
#include <sortix/kernel/interrupt.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,6 @@
 | 
			
		|||
#include <brand.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <sortix/kernel/calltrace.h>
 | 
			
		||||
#include <sortix/kernel/interrupt.h>
 | 
			
		||||
#include <sortix/kernel/kernel.h>
 | 
			
		||||
#include <sortix/kernel/log.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -116,18 +115,10 @@ void PanicInit()
 | 
			
		|||
	longpanic ? PanicLogoLong() : PanicLogoShort();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void PanicCalltrace()
 | 
			
		||||
{
 | 
			
		||||
	Log::Print("\n");
 | 
			
		||||
	Calltrace::Perform();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void PanicHooks()
 | 
			
		||||
{
 | 
			
		||||
	if ( doublepanic )
 | 
			
		||||
		return;
 | 
			
		||||
	if ( ENABLE_CALLTRACE )
 | 
			
		||||
		PanicCalltrace();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" __attribute__((noreturn)) void Panic(const char* error)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,57 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2012, 2013.
 | 
			
		||||
 | 
			
		||||
    This file is part of Sortix.
 | 
			
		||||
 | 
			
		||||
    Sortix is free software: you can redistribute it and/or modify it under the
 | 
			
		||||
    terms of the GNU General Public License as published by the Free Software
 | 
			
		||||
    Foundation, either version 3 of the License, or (at your option) any later
 | 
			
		||||
    version.
 | 
			
		||||
 | 
			
		||||
    Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
			
		||||
    details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License along with
 | 
			
		||||
    Sortix. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    x64/calltrace.S
 | 
			
		||||
    Attempts to unwind the stack and prints the code locations where functions
 | 
			
		||||
    were called. This greatly aids debugging.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
.section .text
 | 
			
		||||
 | 
			
		||||
.global calltrace
 | 
			
		||||
.type calltrace, @function
 | 
			
		||||
calltrace:
 | 
			
		||||
	push %rbp
 | 
			
		||||
	push %rbx
 | 
			
		||||
	movq %rsp, %rbp
 | 
			
		||||
	push %rbx
 | 
			
		||||
	movq %rdi, %rbx
 | 
			
		||||
	testq %rbx, %rbx
 | 
			
		||||
	jnz 1f
 | 
			
		||||
	movq %rbp, %rbx
 | 
			
		||||
1:
 | 
			
		||||
	xorl %edi, %edi
 | 
			
		||||
 | 
			
		||||
calltrace_unwind:
 | 
			
		||||
	testq %rbx, %rbx
 | 
			
		||||
	jz calltrace_done
 | 
			
		||||
	movq 8(%rbx), %rsi # Previous RIP
 | 
			
		||||
	movq 0(%rbx), %rbx # Previous RBP
 | 
			
		||||
	pushq %rdi
 | 
			
		||||
	call calltrace_print_function
 | 
			
		||||
	popq %rdi
 | 
			
		||||
	incq %rdi
 | 
			
		||||
	jmp calltrace_unwind
 | 
			
		||||
 | 
			
		||||
calltrace_done:
 | 
			
		||||
	popq %rbx
 | 
			
		||||
	popq %rbp
 | 
			
		||||
	retq
 | 
			
		||||
.size calltrace, . - calltrace
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,6 @@
 | 
			
		|||
#include <stdint.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <sortix/kernel/calltrace.h>
 | 
			
		||||
#include <sortix/kernel/cpu.h>
 | 
			
		||||
#include <sortix/kernel/debugger.h>
 | 
			
		||||
#include <sortix/kernel/interrupt.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -104,8 +103,6 @@ namespace Interrupt {
 | 
			
		|||
 | 
			
		||||
extern "C" { unsigned long asm_is_cpu_interrupted = 0; }
 | 
			
		||||
 | 
			
		||||
const bool CALLTRACE_KERNEL = false;
 | 
			
		||||
const bool CALLTRACE_USER = false;
 | 
			
		||||
const bool RUN_DEBUGGER_ON_KERNEL_CRASH = false;
 | 
			
		||||
const bool RUN_DEBUGGER_ON_USER_CRASH = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -260,26 +257,11 @@ uintptr_t ExceptionLocation(const struct interrupt_context* intctx)
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CrashCalltrace(const struct interrupt_context* intctx)
 | 
			
		||||
{
 | 
			
		||||
#if defined(__x86_64__)
 | 
			
		||||
	Calltrace::Perform(intctx->rbp);
 | 
			
		||||
#elif defined(__i386__)
 | 
			
		||||
	Calltrace::Perform(intctx->ebp);
 | 
			
		||||
#else
 | 
			
		||||
	#warning "Please provide a calltrace implementation for your CPU."
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__((noreturn))
 | 
			
		||||
void KernelCrashHandler(struct interrupt_context* intctx)
 | 
			
		||||
{
 | 
			
		||||
	Scheduler::SaveInterruptedContext(intctx, &CurrentThread()->registers);
 | 
			
		||||
 | 
			
		||||
	// Walk and print the stack frames if this is a debug build.
 | 
			
		||||
	if ( CALLTRACE_KERNEL )
 | 
			
		||||
		CrashCalltrace(intctx);
 | 
			
		||||
 | 
			
		||||
	// Possibly switch to the kernel debugger in event of a crash.
 | 
			
		||||
	if ( RUN_DEBUGGER_ON_KERNEL_CRASH )
 | 
			
		||||
		Debugger::Run(false);
 | 
			
		||||
| 
						 | 
				
			
			@ -310,10 +292,6 @@ void UserCrashHandler(struct interrupt_context* intctx)
 | 
			
		|||
			return Signal::DispatchHandler(intctx, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Walk and print the stack frames if this is a debug build.
 | 
			
		||||
	if ( CALLTRACE_USER )
 | 
			
		||||
		CrashCalltrace(intctx);
 | 
			
		||||
 | 
			
		||||
	// Possibly switch to the kernel debugger in event of a crash.
 | 
			
		||||
	if ( RUN_DEBUGGER_ON_USER_CRASH )
 | 
			
		||||
		Debugger::Run(false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,59 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2012, 2013.
 | 
			
		||||
 | 
			
		||||
    This file is part of Sortix.
 | 
			
		||||
 | 
			
		||||
    Sortix is free software: you can redistribute it and/or modify it under the
 | 
			
		||||
    terms of the GNU General Public License as published by the Free Software
 | 
			
		||||
    Foundation, either version 3 of the License, or (at your option) any later
 | 
			
		||||
    version.
 | 
			
		||||
 | 
			
		||||
    Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
			
		||||
    details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License along with
 | 
			
		||||
    Sortix. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    x86/calltrace.S
 | 
			
		||||
    Attempts to unwind the stack and prints the code locations where functions
 | 
			
		||||
    were called. This greatly aids debugging.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
.section .text
 | 
			
		||||
 | 
			
		||||
.global calltrace
 | 
			
		||||
.type calltrace, @function
 | 
			
		||||
calltrace:
 | 
			
		||||
	push %ebp
 | 
			
		||||
	push %ebx
 | 
			
		||||
	movl %esp, %ebp
 | 
			
		||||
	push %ebx
 | 
			
		||||
	movl 8(%ebp), %ebx
 | 
			
		||||
	testl %ebx, %ebx
 | 
			
		||||
	jnz 1f
 | 
			
		||||
	movl %ebp, %ebx
 | 
			
		||||
1:
 | 
			
		||||
	xorl %edi, %edi
 | 
			
		||||
 | 
			
		||||
calltrace_unwind:
 | 
			
		||||
	testl %ebx, %ebx
 | 
			
		||||
	jz calltrace_done
 | 
			
		||||
	movl 4(%ebx), %esi # Previous EIP
 | 
			
		||||
	movl 0(%ebx), %ebx # Previous EBP
 | 
			
		||||
	pushl %esi
 | 
			
		||||
	pushl %edi
 | 
			
		||||
	call calltrace_print_function
 | 
			
		||||
	popl %edi
 | 
			
		||||
	addl $4, %esp
 | 
			
		||||
	incl %edi
 | 
			
		||||
	jmp calltrace_unwind
 | 
			
		||||
 | 
			
		||||
calltrace_done:
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	popl %ebp
 | 
			
		||||
	retl
 | 
			
		||||
.size calltrace, . - calltrace
 | 
			
		||||
| 
						 | 
				
			
			@ -313,8 +313,6 @@ arpa/inet/inet_addr.o \
 | 
			
		|||
arpa/inet/inet_ntoa.o \
 | 
			
		||||
arpa/inet/inet_ntop.o \
 | 
			
		||||
arpa/inet/inet_pton.o \
 | 
			
		||||
calltrace/calltrace.o \
 | 
			
		||||
$(CPUDIR)/calltrace.o \
 | 
			
		||||
$(CPUDIR)/fork.o \
 | 
			
		||||
$(CPUDIR)/setjmp.o \
 | 
			
		||||
$(CPUDIR)/signal.o \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2012.
 | 
			
		||||
 | 
			
		||||
    This file is part of the Sortix C Library.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is free software: you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
    the Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
    option) any later version.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is distributed in the hope that it will be useful, but
 | 
			
		||||
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
			
		||||
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
 | 
			
		||||
    License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
    along with the Sortix C Library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    calltrace/calltrace.cpp
 | 
			
		||||
    Traverses the stack and prints the callstack.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <calltrace.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
extern "C" void asm_calltrace();
 | 
			
		||||
 | 
			
		||||
extern "C" void calltrace_print_function(size_t index, unsigned long ip)
 | 
			
		||||
{
 | 
			
		||||
	fprintf(stdout, "[pid=%ji %s] %zu: 0x%lx\n", (intmax_t) getpid(),
 | 
			
		||||
	        program_invocation_short_name, index, ip);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" void calltrace()
 | 
			
		||||
{
 | 
			
		||||
	fprintf(stdout, "[pid=%ji %s] Calltrace: (%s)\n", (intmax_t) getpid(),
 | 
			
		||||
	        program_invocation_short_name, program_invocation_name);
 | 
			
		||||
	asm_calltrace();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2012.
 | 
			
		||||
 | 
			
		||||
    This file is part of the Sortix C Library.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is free software: you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
    the Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
    option) any later version.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is distributed in the hope that it will be useful, but
 | 
			
		||||
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
			
		||||
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
 | 
			
		||||
    License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
    along with the Sortix C Library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    calltrace.h
 | 
			
		||||
    Traverses the stack and prints the callstack.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef _CALLTRACE_H
 | 
			
		||||
#define _CALLTRACE_H 1
 | 
			
		||||
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
void calltrace();
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,6 @@
 | 
			
		|||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
 | 
			
		||||
#include <calltrace.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,12 +43,6 @@ extern "C" void abort(void)
 | 
			
		|||
 | 
			
		||||
extern "C" void abort(void)
 | 
			
		||||
{
 | 
			
		||||
	struct stat st;
 | 
			
		||||
	if ( stat("/etc/calltrace", &st) == 0 )
 | 
			
		||||
		calltrace();
 | 
			
		||||
	if ( stat("/etc/calltrace_loop", &st) == 0 )
 | 
			
		||||
		while ( true );
 | 
			
		||||
 | 
			
		||||
	sigset_t set_of_sigabrt;
 | 
			
		||||
	sigemptyset(&set_of_sigabrt);
 | 
			
		||||
	sigaddset(&set_of_sigabrt, SIGABRT);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,53 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013.
 | 
			
		||||
 | 
			
		||||
    This file is part of the Sortix C Library.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is free software: you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
    the Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
    option) any later version.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is distributed in the hope that it will be useful, but
 | 
			
		||||
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
			
		||||
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
 | 
			
		||||
    License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
    along with the Sortix C Library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    x64/calltrace.S
 | 
			
		||||
    Attempts to unwind the stack and prints the code locations where functions
 | 
			
		||||
    were called. This greatly aids debugging.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
.global asm_calltrace
 | 
			
		||||
.type asm_calltrace, @function
 | 
			
		||||
asm_calltrace:
 | 
			
		||||
	push %rbp
 | 
			
		||||
	mov %rsp, %rbp
 | 
			
		||||
	push %rbx
 | 
			
		||||
	push %r12
 | 
			
		||||
	xor %r12, %r12
 | 
			
		||||
	mov %rbp, %rbx
 | 
			
		||||
 | 
			
		||||
.Lasm_calltrace_unwind:
 | 
			
		||||
	test %rbx, %rbx
 | 
			
		||||
	jz .Lasm_calltrace_done
 | 
			
		||||
	mov 8(%rbx), %rsi # Previous RIP
 | 
			
		||||
	mov 0(%rbx), %rbx # Previous RBP
 | 
			
		||||
	test %rsi, %rsi
 | 
			
		||||
	jz .Lasm_calltrace_done
 | 
			
		||||
	mov %r12, %rdi
 | 
			
		||||
	call calltrace_print_function
 | 
			
		||||
	inc %r12
 | 
			
		||||
	jmp .Lasm_calltrace_unwind
 | 
			
		||||
 | 
			
		||||
.Lasm_calltrace_done:
 | 
			
		||||
	pop %r12
 | 
			
		||||
	pop %rbx
 | 
			
		||||
	pop %rbp
 | 
			
		||||
	ret
 | 
			
		||||
.size asm_calltrace, . - asm_calltrace
 | 
			
		||||
| 
						 | 
				
			
			@ -1,55 +0,0 @@
 | 
			
		|||
/*******************************************************************************
 | 
			
		||||
 | 
			
		||||
    Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013.
 | 
			
		||||
 | 
			
		||||
    This file is part of the Sortix C Library.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is free software: you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
    the Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
    option) any later version.
 | 
			
		||||
 | 
			
		||||
    The Sortix C Library is distributed in the hope that it will be useful, but
 | 
			
		||||
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
			
		||||
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
 | 
			
		||||
    License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
    along with the Sortix C Library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
    x86/calltrace.S
 | 
			
		||||
    Attempts to unwind the stack and prints the code locations where functions
 | 
			
		||||
    were called. This greatly aids debugging.
 | 
			
		||||
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
.global asm_calltrace
 | 
			
		||||
.type asm_calltrace, @function
 | 
			
		||||
asm_calltrace:
 | 
			
		||||
	push %ebp
 | 
			
		||||
	mov %esp, %ebp
 | 
			
		||||
	push %ebx
 | 
			
		||||
	push %esi
 | 
			
		||||
	xor %esi, %esi
 | 
			
		||||
	mov %ebp, %ebx
 | 
			
		||||
 | 
			
		||||
.Lasm_calltrace_unwind:
 | 
			
		||||
	test %ebx, %ebx
 | 
			
		||||
	jz .Lasm_calltrace_done
 | 
			
		||||
	mov 4(%ebx), %ecx # Previous EIP
 | 
			
		||||
	mov 0(%ebx), %ebx # Previous EBP
 | 
			
		||||
	test %ecx, %ecx
 | 
			
		||||
	jz .Lasm_calltrace_done
 | 
			
		||||
	push %ecx
 | 
			
		||||
	push %esi
 | 
			
		||||
	call calltrace_print_function
 | 
			
		||||
	add $8, %esp
 | 
			
		||||
	inc %esi
 | 
			
		||||
	jmp .Lasm_calltrace_unwind
 | 
			
		||||
 | 
			
		||||
.Lasm_calltrace_done:
 | 
			
		||||
	pop %esi
 | 
			
		||||
	pop %ebx
 | 
			
		||||
	pop %ebp
 | 
			
		||||
	ret
 | 
			
		||||
.size asm_calltrace, . - asm_calltrace
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue