From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.24) id 1AM1Ul-0004ya-2g for qemu-devel@nongnu.org; Tue, 18 Nov 2003 03:45:59 -0500 Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.24) id 1AM1U3-0003sv-47 for qemu-devel@nongnu.org; Tue, 18 Nov 2003 03:45:46 -0500 Received: from [62.210.158.41] (helo=moscou.magic.fr) by monty-python.gnu.org with esmtp (Exim 4.24) id 1AM1Tj-0003KF-Rb for qemu-devel@nongnu.org; Tue, 18 Nov 2003 03:44:55 -0500 Received: from 10.0.0.2 (ppp-181.net-555.magic.fr [62.210.255.181]) by moscou.magic.fr (8.11.6/8.10.1) with ESMTP id hAI7hSO03265 for ; Tue, 18 Nov 2003 08:43:28 +0100 (CET) Subject: Re: [Qemu-devel] [ADD] PPC processor emulation From: "J. Mayer" In-Reply-To: <1069140512.14646.2174.camel@rapid> References: <20031117105133.7e856e56.Jens.Arm@gmx.de> <1069140512.14646.2174.camel@rapid> Content-Type: text/plain Message-Id: <1069141692.13658.2220.camel@rapid> Mime-Version: 1.0 Date: 18 Nov 2003 08:48:12 +0100 Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org elfload.c.diff Make it able to load PPC ELF executables. At least for static ones and a few dynamic ones. diff -urNbB -x CVS qemu-current/elfload.c qemu/elfload.c --- qemu-current/elfload.c Tue Nov 18 06:51:07 2003 +++ qemu/elfload.c Tue Nov 11 00:30:10 2003 @@ -104,6 +104,46 @@ #endif +#ifdef TARGET_PPC + +#define ELF_START_MMAP 0x80000000 + +#define elf_check_arch(x) ( (x) == EM_PPC ) + +#define ELF_CLASS ELFCLASS32 +#ifdef TARGET_WORDS_BIGENDIAN +#define ELF_DATA ELFDATA2MSB +#else +#define ELF_DATA ELFDATA2LSB +#endif +#define ELF_ARCH EM_PPC + +/* Note that isn't exactly what regular kernel does + * but this is what the ABI wants and is needed to allow + * execution of PPC BSD programs. + */ +#define ELF_PLAT_INIT(_r) \ +do { \ + unsigned long *pos = (unsigned long *)bprm->p, tmp = 1; \ + _r->gpr[3] = bprm->argc; \ + _r->gpr[4] = (unsigned long)++pos; \ + for (; tmp != 0; pos++) \ + tmp = *pos; \ + _r->gpr[5] = (unsigned long)pos; \ +} while (0) + +static inline void init_thread(struct target_pt_regs *_regs, struct image_info *infop) +{ + _regs->msr = 1 << MSR_PR; /* Set user mode */ + _regs->gpr[1] = infop->start_stack; + _regs->nip = infop->entry; +} + +#define USE_ELF_CORE_DUMP +#define ELF_EXEC_PAGESIZE 4096 + +#endif + #include "elf.h" /*