/* * Copyright (c) 2011 Jiri Svoboda * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @addtogroup libcia32 * @{ */ /** @file Definitions needed to write core files in Linux-ELF format. */ #ifndef _LIBC_ia32_ELF_LINUX_H_ #define _LIBC_ia32_ELF_LINUX_H_ #include <libarch/istate.h> #include <stdint.h> /** Linux kernel struct pt_regs structure. * * We need this to save register state to a core file in Linux format * (readable by GDB configured for Linux target). */ typedef struct { uint32_t ebx; uint32_t ecx; uint32_t edx; uint32_t esi; uint32_t edi; uint32_t ebp; uint32_t eax; uint32_t ds; uint32_t es; uint32_t fs; uint32_t gs; uint32_t old_eax; uint32_t eip; uint32_t cs; uint32_t eflags; uint32_t esp; uint32_t ss; } elf_regs_t; /** Convert istate_t to elf_regs_t. */ static inline void istate_to_elf_regs(istate_t *istate, elf_regs_t *elf_regs) { elf_regs->ebx = istate->ebx; elf_regs->ecx = istate->ecx; elf_regs->edx = istate->edx; elf_regs->esi = istate->esi; elf_regs->edi = istate->edi; elf_regs->ebp = istate->ebp; elf_regs->eax = istate->eax; elf_regs->ds = istate->ds; elf_regs->es = istate->es; elf_regs->fs = istate->fs; elf_regs->gs = istate->gs; elf_regs->old_eax = 0; elf_regs->eip = istate->eip; elf_regs->cs = istate->cs; elf_regs->eflags = istate->eflags; elf_regs->esp = istate->esp; elf_regs->ss = istate->ss; } #endif /** @} */