Home | History | Annotate | Line # | Download | only in include
      1 /*	$NetBSD: netbsd.h,v 1.2 2013/06/20 13:36:48 kiyohara Exp $	*/
      2 /*
      3  * Copyright (c) 2012 KIYOHARA Takashi
      4  * All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     18  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
     19  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     23  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     24  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25  * POSSIBILITY OF SUCH DAMAGE.
     26  */
     27 
     28 #include "elf.h"
     29 
     30 #define PAGE_SIZE		4096
     31 #define ALIGN_SAFE_PAGE_SIZE	(PAGE_SIZE * 2)
     32 #define PAGE_ALIGN(p)	((int)((char *)(p) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
     33 
     34 /* Load kernel to PA==VA area. */
     35 #define VTOP(addr)	(addr)
     36 
     37 struct loaddesc {
     38 	Elf32_Addr addr;
     39 	Elf32_Off offset;
     40 	TUint size;
     41 };
     42 
     43 class NetBSD {
     44 public:
     45 	static NetBSD *New(const TDesC &);
     46 	static NetBSD *New(const TDesC &, const TDesC &);
     47 
     48 	virtual void ParseHeader(void);
     49 	TUint8 *GetBuffer(void) { return Buffer; };
     50 	Elf32_Off GetEntryPoint(void) { return EntryPoint; };
     51 	struct loaddesc *GetLoadDescriptor(void) { return LoadDescriptor; };
     52 	const TDesC *GetArgs(void) { return Args; };
     53 
     54 protected:
     55 	TUint8 *Buffer;
     56 	struct loaddesc *LoadDescriptor;	/* Must page aligned */
     57 	Elf32_Off EntryPoint;
     58 
     59 	const TDesC *Args;
     60 };
     61 
     62 class ELF : public NetBSD {
     63 public:
     64 	ELF(TInt size) { Buffer = new TUint8[size]; };
     65 
     66 	void ParseHeader(void);
     67 };
     68