示例#1
0
文件: interrupt.c 项目: drewt/Telos
void exn_page_fault(void)
{
	void *addr;
	struct vma *vma;
	unsigned long error;

	error = get_error_code(current->esp);
	MOV("cr2", addr);

	// address not mapped in process address space
	if (!(vma = vma_get(&current->mm, addr))) {
		segfault(SEGV_MAPERR, error, addr);
		return;
	}
	// page not present (demand paging)
	if (!(error & PGF_PERM)) {
		if (vm_map_page(vma, addr) < 0)
			// FIXME: stall until memory available?
			segfault(SEGV_MAPERR, error, addr);
		return;
	}
	// write permission
	if (error & PGF_WRITE) {
		if (vm_write_perm(vma, addr) < 0)
			segfault(SEGV_ACCERR, error, addr);
		return;
	}
	// read permission
	if (vm_read_perm(vma, addr) < 0)
		segfault(SEGV_ACCERR, error, addr);
}
示例#2
0
void memory_manager::__register_pointer(void * p, size_t size, const std::type_info & t) {
	if (m_pointers.count(p) != 0) {
		log_error() << "Trying to register pointer " << p << " of size " 
					<< size << " which is already registered" << std::endl;
		segfault();
	}
	m_pointers[p] = std::make_pair(size, &t);;
}
示例#3
0
文件: bugging.c 项目: whdcumt/GdbNote
int main(void)
{
    segfault();
 /*   char buf[1]="a";
      buf[10003]='A'
     printf("%c\n",buf[10003]);
  */
     return 0;
}
示例#4
0
void memory_manager::__unregister_pointer(void * p, size_t size, const std::type_info & t) {
	auto  i=m_pointers.find(p);
	if (i == m_pointers.end()) {
		log_error() << "Trying to deregister pointer " << p << " of size "
					<< size << " which was never registered" << std::endl;
		segfault();
	} else {
		if (i->second.first != size) {
			log_error() << "Trying to deregister pointer " << p << " of size "
						<< size << " which was registered with size " << i->second.first << std::endl;
			segfault();
		}
		if (*i->second.second != t) {
			log_error() << "Trying to deregister pointer " << p << " of type "
						<< t.name() << " which was registered with size " << i->second.second->name() << std::endl;
			segfault();
		}
		m_pointers.erase(i);
	}
}
示例#5
0
void memory_manager::register_deallocation(size_t bytes) {
#ifndef TPIE_NDEBUG
	size_t usage = m_used.fetch_sub(bytes);
	if (bytes > usage) {
		log_error() << "Error in deallocation, trying to deallocate " << bytes << " bytes, while only " <<
			usage << " were allocated" << std::endl;
		segfault();
	}
#else
	m_used.fetch_sub(bytes);
#endif
}
示例#6
0
void op_call(void)
{
  char flag;

  flag = *(core.memory.vmem + core.memory.pc + 1);
  if (flag == OP_FLAG_REG)
    op_call_reg();
  else if (flag == OP_FLAG_DIRECT16)
    op_call_dir16();
  else
    segfault(2); /* flag unknow */
}
示例#7
0
int main(int argc, char **argd){

	segfault();

	return 0;
}
示例#8
0
static void handle_fault_store(trapframe_t* tf)
{
  if (handle_page_fault(tf->badvaddr, PROT_WRITE) != 0)
    segfault(tf, tf->badvaddr, "store");
}
示例#9
0
static void handle_fault_load(trapframe_t* tf)
{
  if (handle_page_fault(tf->badvaddr, PROT_READ) != 0)
    segfault(tf, tf->badvaddr, "load");
}
示例#10
0
static void handle_fault_fetch(trapframe_t* tf)
{
  if (handle_page_fault(tf->badvaddr, PROT_EXEC) != 0)
    segfault(tf, tf->badvaddr, "fetch");
}
示例#11
0
void memory_manager::__assert_tpie_ptr(void * p) {
	if (!p || m_pointers.count(p)) return;
	log_error() << p << " has not been allocated with tpie_new" << std::endl;
	segfault();
}
示例#12
0
文件: fail.cpp 项目: ronj/invent
TEST(Fail, _unexpected_segfault)
{
  segfault ();
}
示例#13
0
void handle_fault_store(trapframe_t* tf)
{
  tf->badvaddr = read_csr(sbadaddr);
  if (handle_page_fault(tf->badvaddr, PROT_WRITE) != 0)
    segfault(tf, tf->badvaddr, "store");
}
示例#14
0
void handle_fault_load(trapframe_t* tf)
{
  tf->badvaddr = read_csr(sbadaddr);
  if (handle_page_fault(tf->badvaddr, PROT_READ) != 0)
    segfault(tf, tf->badvaddr, "load");
}