Commit 309bcdbf authored by Linus Torvalds's avatar Linus Torvalds

Import pre2.0.8

parent fca3cf3a
......@@ -163,6 +163,12 @@ S: Bessemerstraat 21
S: Amsterdam
S: The Netherlands
N: Ray Burr
E: ryb@nightmare.com
D: Original author of Amiga FFS filesystem
S: Orlando, Florida
S: USA
N: Michael Callahan
E: callahan@maths.ox.ac.uk
D: PPP for Linux
......@@ -518,7 +524,8 @@ E: ajh@primag.co.uk
D: Selection mechanism
N: Jochen Hein
E: Hein@Informatik.TU-Clausthal.de
E: jochen.hein@informatik.tu-clausthal.de
P: 1024/4A27F015 25 72 FB E3 85 9F DE 3B CB 0A DA DA 40 77 05 6C
D: National Language Support
D: German Support-Disks for SLS/Slackware called SLT
D: Linux Internationalization Project
......@@ -830,7 +837,7 @@ D: Credit file compilator
N: Kevin E. Martin
E: martin@cs.unc.edu
D: Developed original accelerated X servers included in XFree86
D: XF86_Mach64 (forthcoming -- please don't ask when)
D: XF86_Mach64
D: XF86_Mach32
D: XF86_Mach8
D: XF86_8514
......
......@@ -373,12 +373,12 @@ to me.
nfsd daemon doesn't work anymore
================================
The RedHat distribution 2.x and 3.x have a bug that they do
route add -net 127.0.0.1 at startup. That is wrong. Correct is
route add -net 127.0.0.0.
The Red Hat distributions 2.x, 3.x and Caldera 1.0 have a bug where
they do "route add -net 127.0.0.1" at startup. That is wrong. The
correct command is "route add -net 127.0.0.0".
Workaround: Change in /etc/sysconfig/network-scripts/ifcup-lo
the "route add -net ${IPADDR}" into "route add -net 127.0.0.0"
Workaround: Change in "/etc/sysconfig/network-scripts/ifup-lo" the
"route add -net ${IPADDR}" into "route add -net 127.0.0.0".
How to know the version of the installed programs
*************************************************
......
......@@ -1086,7 +1086,7 @@ CONFIG_AX25
use a low speed TNC (a Terminal Node Controller acts as a kind of
modem connecting your computer's serial port to your radio's
microphone input and speaker output) supporting the KISS protocol or
the various SCC cards that are supported by the Ottowa PI, the
the various SCC cards that are supported by the Ottawa PI, the
Gracilis Packetwin and the generic Z8530 driver. Another option are
the Baycom modem serial and parallel port hacks (supported by their
own driver) and the other baycom cards (SCC) (supported by the Z8530
......@@ -3511,7 +3511,7 @@ CONFIG_CS4232
/dev/dsp and /dev/audio support
CONFIG_AUDIO
Answering N disables /dev/dsp and /dev/audio, the A/D and D/A
converter devices. Answer Y only if you know you will not need
converter devices. Answer N only if you know you will not need
the option. They are usually required. Answer Y.
MIDI interface support
......
......@@ -55,13 +55,8 @@ included and seems to be working fine!
Where do I discuss these drivers?
---------------------------------
HEY!! - the linux-arcnet@807-city.on.ca mailing list is now so unstable
that I can't recommend people even bother with it. I no longer have an
account on 807-CITY (though they still graciously forward my mail to me) so
there's not much I can do.
However, Tomasz Motylewski has been so kind as to set up a new and improved
mailing list; subscribe by sending a message with the BODY "subscribe
Tomasz Motylewski has been so kind as to set up a new and improved
mailing list. Subscribe by sending a message with the BODY "subscribe
linux-arcnet YOUR REAL NAME" to listserv@tichy.ch.uj.edu.pl. Then, to
submit messages to the list, mail to linux-arcnet@tichy.ch.uj.edu.pl.
......@@ -208,16 +203,19 @@ Windows 95: Tools are included with Win95 that let you use either the LANMAN
you're completely insane, and/or you need to build some kind of
hybrid network that uses both encapsulation types.
OS2: Has not been tested. The "correct" solution would be to buy either of
IBM's "TCP/IP for OS/2" or "Warp Connect" packages. However,
ftp.microsoft.com also has a freeware Lan Manager for OS/2 client
OS2: I've been told it works under Warp Connect with an ARCnet driver from
SMC. You need to use the 'arc0e' interface for this. If you get
the SMC driver to work with the TCP/IP stuff included in the
"normal" Warp Bonus Pack, let me know.
ftp.microsoft.com also has a freeware "Lan Manager for OS/2" client
which should use the same protocol as WfWg does. I had no luck
installing it under Warp, however. Please mail me with any results.
NetBSD/AmiTCP: These use an old version of the Internet standard ARCnet
protocol (RFC1051) which is compatible with the Linux driver v2.10
ALPHA and above using the arc0s device. (See "Multiprotocol ARCnet"
below.)
below.) ** Newer versions of NetBSD apparently support RFC1201.
Using Multiprotocol ARCnet
......@@ -281,14 +279,14 @@ can set up your network then:
If you need only arc0, then the following commands should get you going:
ifconfig arc0 MY.IP.ADD.RESS
route add MY.IP.ADD.RESS arc0
route add SUB.NET.ADD.RESS arc0
route add -net SUB.NET.ADD.RESS arc0
[add other local routes here]
If you need arc0e (and only arc0e), it's a little different:
ifconfig arc0 MY.IP.ADD.RESS
ifconfig arc0e MY.IP.ADD.RESS
route add MY.IP.ADD.RESS arc0e
route add SUB.NET.ADD.RESS arc0e
route add -net SUB.NET.ADD.RESS arc0e
arc0s works much the same way as arc0e.
......
VERSION = 1
PATCHLEVEL = 99
SUBLEVEL = 7
SUBLEVEL = 8
ARCH = i386
......@@ -225,7 +225,7 @@ include/linux/compile.h: $(CONFIGURATION) include/linux/version.h newversion
else \
echo \#define LINUX_COMPILE_DOMAIN ; \
fi >> .ver
@echo \#define LINUX_COMPILER \"`$(HOSTCC) -v 2>&1 | tail -1`\" >> .ver
@echo \#define LINUX_COMPILER \"`$(CC) -v 2>&1 | tail -1`\" >> .ver
@mv -f .ver $@
include/linux/version.h: ./Makefile
......
......@@ -565,7 +565,7 @@ return (0);
/*
* (Unb)Blank the screen
* (Un)Blank the screen
*/
void Cyber_blank(int blank)
......@@ -663,7 +663,7 @@ Cyber_WaitQueue (0x8000);
}
/**************************************************************
* Rectange Fill Solid
* Rectangle Fill Solid
*/
void Cyber_RectFill (u_short x, u_short y, u_short width, u_short height,
u_short mode, u_short color)
......
......@@ -12,28 +12,29 @@
#
# Copyright (C) 1994 by Linus Torvalds
# Changes for PPC by Gary Thomas
# Modified by Cort Dougan
#
# PowerPC (cross) tools
AS = /usr/local/bin/as.ppc
ASFLAGS =
LD = /u/cort/ppc-gcc/bin/ld.ppc
AS = as.ppc
ASFLAGS =
LD = ld.ppc
#LINKFLAGS = -T arch/ppc/ld.script -Ttext 0x90000000 -Map vmlinux.map
LINKFLAGS = -T arch/ppc/ld.script -Ttext 0x90000000
LINKFLAGS = -T arch/ppc/ld.script -Ttext 0x90000000
HOSTCC = gcc
CC = /usr/local/bin/gcc.ppc
CC = cc.ppc
CFLAGS = -D__KERNEL__ -I$(TOPDIR)/include \
-Wstrict-prototypes \
-Wall -Wstrict-prototypes \
-msoft-float \
-fomit-frame-pointer \
-fno-builtin \
-finhibit-size-directive \
-O2 -pipe
#-Wall
-fsigned-char \
-O2
CPP = $(CC) -E $(CFLAGS)
AR = /u/cort/ppc-gcc/bin/ar.ppc
RANLIB = /u/cort/ppc-gcc/bin/ranlib.ppc
STRIP = /u/cort/ppc-gcc/bin/strip.ppc
NM = /u/cort/ppc-gcc/bin/nm.ppc
AR = ar.ppc
RANLIB = ranlib.ppc
STRIP = strip.ppc
NM = nm.ppc
#
# Set these to indicate how to link it..
......@@ -61,19 +62,11 @@ NM = /u/cort/ppc-gcc/bin/nm.ppc
HEAD := arch/ppc/kernel/head.o
ARCH_SUBDIRS = arch/ppc/kernel arch/ppc/mm
ARCH_SUBDIRS = arch/ppc/kernel arch/ppc/mm arch/ppc/lib
SUBDIRS := $(SUBDIRS) $(ARCH_SUBDIRS)
ARCHIVES := arch/ppc/kernel/kernel.o arch/ppc/mm/mm.o $(ARCHIVES)
## ifdef CONFIG_IBCS
## SUBDIRS := $(SUBDIRS) arch/ppc/ibcs
## DRIVERS := $(DRIVERS) arch/ppc/ibcs/ibcs.o
## endif
## ifdef CONFIG_MATH_EMULATION
## SUBDIRS := $(SUBDIRS) arch/ppc/math-emu
## DRIVERS := $(DRIVERS) arch/ppc/math-emu/math.a
## endif
ARCHIVES := arch/ppc/kernel/kernel.o arch/ppc/mm/mm.o arch/ppc/lib/lib.o $(ARCHIVES)
NO_RD_ARCHIVES := arch/ppc/kernel/no_ramdisk.o $(ARCHIVES)
ARCHIVES := arch/ppc/kernel/ramdisk.o $(ARCHIVES)
arch/ppc/kernel: dummy
$(MAKE) linuxsubdirs SUBDIRS=arch/ppc/kernel
......@@ -81,28 +74,44 @@ arch/ppc/kernel: dummy
arch/ppc/mm: dummy
$(MAKE) linuxsubdirs SUBDIRS=arch/ppc/mm
## MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
##
## zImage: vmlinux
## @$(MAKEBOOT) zImage
arch/ppc/lib: dummy
$(MAKE) linuxsubdirs SUBDIRS=arch/ppc/lib
MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
vmlinux.no_ramdisk: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o \
$(NO_RD_ARCHIVES) \
$(FILESYSTEMS) \
$(DRIVERS) \
$(LIBS) -o vmlinux.no_ramdisk
##
zImage: vmlinux
@$(MAKEBOOT) zImage
tImage: vmlinux
@$(MAKEBOOT) tImage
bImage: vmlinux.no_ramdisk
@$(MAKEBOOT) bImage
bdisk: vmlinux.no_ramdisk
@$(MAKEBOOT) bdisk
## compressed: zImage
##
## zlilo: vmlinux
## @$(MAKEBOOT) zlilo
##
## zdisk: vmlinux
## @$(MAKEBOOT) zdisk
##
zdisk: vmlinux
@$(MAKEBOOT) zdisk
## install: vmlinux
## @$(MAKEBOOT) install
archclean:
# @$(MAKEBOOT) clean
/bin/rm -f arch/ppc/kernel/*.o arch/ppc/kernel/mk_defs arch/ppc/kernel/ppc_defs.h mm/*.o
/bin/rm -f arch/ppc/kernel/*~ arch/ppc/kernel/*~
@$(MAKEBOOT) clean
archdep:
# @$(MAKEBOOT) dep
......@@ -24,14 +24,48 @@ OBJECTS = head.o main.o
all: linux.boot
linux.boot: $(TOPDIR)/vmlinux mkboot
mkboot $(TOPDIR)/vmlinux /u/cort/bootpd/vmlinux
#zImage: $(CONFIGURE) bootsect setup compressed/vmlinux tools/build
zImage: compressed/vmlinux mk_type41
mkboot compressed/vmlinux vmlinux 0
mk_type41 vmlinux zImage
cp compressed/vmlinux zBoot
rm -f vmlinux compressed/vmlinux
mkboot : cortstrip.c
$(HOSTCC) -o mkboot cortstrip.c
zdisk: zImage
dd if=zImage of=/dev/fd0 bs=36b
compressed/vmlinux: $(TOPDIR)/vmlinux
@$(MAKE) -C compressed vmlinux
tImage: mk_type41 $(TOPDIR)/vmlinux
mkboot $(TOPDIR)/vmlinux vmlinux 0
mk_type41 vmlinux tImage
rm -f vmlinux
bImage: mk_type41 $(TOPDIR)/vmlinux.no_ramdisk
mkboot $(TOPDIR)/vmlinux.no_ramdisk vmlinux 0
mk_type41 vmlinux bImage
rm -f vmlinux
xImage: compressed/vmlinux.no_ramdisk
mkboot compressed/vmlinux.no_ramdisk vmlinux 0
mk_type41 vmlinux xImage
rm -f vmlinux compressed/vmlinux.no_ramdisk
compressed/vmlinux.no_ramdisk: $(TOPDIR)/vmlinux.no_ramdisk
@$(MAKE) -C compressed vmlinux.no_ramdisk
bdisk: xImage
dd if=xImage of=/dev/fd0 bs=36b
linux.boot: $(TOPDIR)/vmlinux
mkboot $(TOPDIR)/vmlinux $@ 0
mk_type41: mk_type41.c
cc -o mk_type41 mk_type41.c
clean:
rm -f linux.boot
dep:
fastdep:
#
# linux/arch/i386/boot/compressed/Makefile
#
# create a compressed vmlinux image from the original vmlinux
#
TOPDIR = ../../../..
CC = cc.ppc
AS = as.ppc
LD = ld.ppc
ZLINKFLAGS = -T ../../ld.script -Ttext 0x00400000
HOSTCC = cc
#GZIP_FLAGS = -9
GZIP_FLAGS =
HEAD = head.o
SYSTEM = $(TOPDIR)/vmlinux
OBJECTS = $(HEAD) inflate.o unzip.o misc.o
CFLAGS = -O2 -DSTDC_HEADERS
.c.s:
$(CC) $(CFLAGS) -S $<
.s.o:
$(AS) -o $*.o $<
.c.o:
$(CC) $(CFLAGS) -c $<
all: vmlinux
vmlinux: $(OBJECTS) $(SYSTEM) piggyback
mkboot $(TOPDIR)/vmlinux xx_boot 0
gzip ${GZIP_FLAGS} <xx_boot | ./piggyback | $(AS) -o piggy.o
$(LD) $(ZLINKFLAGS) -o vmlinux $(OBJECTS) piggy.o
rm -f piggy.o xx_boot
vmlinux.no_ramdisk: $(OBJECTS) piggyback
mkboot $(TOPDIR)/vmlinux.no_ramdisk xx_boot 0
gzip ${GZIP_FLAGS} <xx_boot | ./piggyback | $(AS) -o piggy.o
$(LD) $(ZLINKFLAGS) -o vmlinux.no_ramdisk $(OBJECTS) piggy.o
rm -f piggy.o xx_boot
head.o: head.s
head.s: head.S $(TOPDIR)/include/linux/tasks.h
$(CPP) -traditional head.S -o head.s
piggyback: piggyback.c
$(HOSTCC) $(CFLAGS) -o piggyback piggyback.c
clean:
rm -f piggyback vmlinux
/* crypt.h (dummy version) -- do not perform encryption
* Hardly worth copyrighting :-)
*/
#ifdef CRYPT
# undef CRYPT /* dummy version */
#endif
#define RAND_HEAD_LEN 12 /* length of encryption random header */
#define zencode
#define zdecode
/* gzip.h -- common declarations for all gzip modules
* Copyright (C) 1992-1993 Jean-loup Gailly.
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, see the file COPYING.
*/
#if defined(__STDC__) || defined(PROTO)
# define OF(args) args
#else
# define OF(args) ()
#endif
#ifdef __STDC__
typedef void *voidp;
#else
typedef char *voidp;
#endif
/* I don't like nested includes, but the string functions are used too often */
#if defined(HAVE_STRING_H) || defined(STDC_HEADERS)
# include <string.h>
# define memzero(s, n) memset ((s), 0, (n))
#else
# include <strings.h>
# define strchr index
# define strrchr rindex
# define memcpy(d, s, n) bcopy((s), (d), (n))
# define memcmp(s1, s2, n) bcmp((s1), (s2), (n))
# define memzero(s, n) bzero((s), (n))
#endif
#if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
# include <memory.h>
#endif
#ifndef RETSIGTYPE
# define RETSIGTYPE void
#endif
#define local static
typedef unsigned char uch;
typedef unsigned short ush;
typedef unsigned long ulg;
/* Return codes from gzip */
#define OK 0
#define ERROR 1
#define WARNING 2
/* Compression methods (see algorithm.doc) */
#define STORED 0
#define COMPRESSED 1
#define PACKED 2
/* methods 3 to 7 reserved */
#define DEFLATED 8
extern int method; /* compression method */
/* To save memory for 16 bit systems, some arrays are overlayed between
* the various modules:
* deflate: prev+head window d_buf l_buf outbuf
* unlzw: tab_prefix tab_suffix stack inbuf outbuf
* inflate: window inbuf
* unpack: window inbuf
* For compression, input is done in window[]. For decompression, output
* is done in window except for unlzw.
*/
#ifndef INBUFSIZ
# define INBUFSIZ 0x8000 /* input buffer size */
#endif
#define INBUF_EXTRA 64 /* required by unlzw() */
#ifndef OUTBUFSIZ
# define OUTBUFSIZ 16384 /* output buffer size */
#endif
#define OUTBUF_EXTRA 2048 /* required by unlzw() */
#define DIST_BUFSIZE 0x8000 /* buffer for distances, see trees.c */
#ifdef DYN_ALLOC
# define EXTERN(type, array) extern type * near array
# define DECLARE(type, array, size) type * near array
# define ALLOC(type, array, size) { \
array = (type*)fcalloc((unsigned)(((size)+1L)/2), 2*sizeof(type)); \
if (array == NULL) error("insufficient memory"); \
}
# define FREE(array) {if (array != NULL) fcfree(array), array=NULL;}
#else
# define EXTERN(type, array) extern type array[]
# define DECLARE(type, array, size) type array[size]
# define ALLOC(type, array, size)
# define FREE(array)
#endif
EXTERN(uch, inbuf); /* input buffer */
EXTERN(uch, outbuf); /* output buffer */
EXTERN(ush, d_buf); /* buffer for distances, see trees.c */
EXTERN(uch, window); /* Sliding window and suffix table (unlzw) */
#define tab_suffix window
#ifndef MAXSEG_64K
# define tab_prefix prev /* hash link (see deflate.c) */
# define head (prev+WSIZE) /* hash head (see deflate.c) */
EXTERN(ush, tab_prefix); /* prefix code (see unlzw.c) */
#else
# define tab_prefix0 prev
# define head tab_prefix1
EXTERN(ush, tab_prefix0); /* prefix for even codes */
EXTERN(ush, tab_prefix1); /* prefix for odd codes */
#endif
extern unsigned insize; /* valid bytes in inbuf */
extern unsigned inptr; /* index of next byte to be processed in inbuf */
extern unsigned outcnt; /* bytes in output buffer */
extern long bytes_in; /* number of input bytes */
extern long bytes_out; /* number of output bytes */
extern long overhead; /* number of bytes in gzip header */
#define isize bytes_in
/* for compatibility with old zip sources (to be cleaned) */
extern int ifd; /* input file descriptor */
extern int ofd; /* output file descriptor */
extern char ifname[]; /* input filename or "stdin" */
extern char ofname[]; /* output filename or "stdout" */
extern ulg time_stamp; /* original time stamp (modification time) */
extern long ifile_size; /* input file size, -1 for devices (debug only) */
extern int exit_code; /* program exit code */
typedef int file_t; /* Do not use stdio */
#define NO_FILE (-1) /* in memory compression */
#define GZIP_MAGIC "\037\213" /* Magic header for gzip files, 1F 8B */
#define OLD_GZIP_MAGIC "\037\236" /* Magic header for gzip 0.5 = freeze 1.x */
#define PKZIP_MAGIC "PK\003\004" /* Magic header for pkzip files */
#define PACK_MAGIC "\037\036" /* Magic header for packed files */
/* gzip flag byte */
#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
#define COMMENT 0x10 /* bit 4 set: file comment present */
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
#define RESERVED 0xC0 /* bit 6,7: reserved */
/* internal file attribute */
#define UNKNOWN (-1)
#define BINARY 0
#define ASCII 1
#ifndef WSIZE
# define WSIZE 0x8000 /* window size--must be a power of two, and */
#endif /* at least 32K for zip's deflate method */
#define MIN_MATCH 3
#define MAX_MATCH 258
/* The minimum and maximum match lengths */
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
/* Minimum amount of lookahead, except at the end of the input file.
* See deflate.c for comments about the MIN_MATCH+1.
*/
#define MAX_DIST (WSIZE-MIN_LOOKAHEAD)
/* In order to simplify the code, particularly on 16 bit machines, match
* distances are limited to MAX_DIST instead of WSIZE.
*/
extern int decrypt; /* flag to turn on decryption */
extern int save_orig_name; /* set if original name must be saved */
extern int verbose; /* be verbose (-v) */
extern int level; /* compression level */
extern int test; /* check .z file integrity */
extern int to_stdout; /* output to stdout (-c) */
#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf())
/* put_byte is used for the compressed output, put_char for the
* uncompressed output. However unlzw() uses window for its
* suffix table instead of its output buffer, so it does not use put_char.
* (to be cleaned up).
*/
#define put_byte(c) {outbuf[outcnt++]=(uch)(c); if (outcnt==OUTBUFSIZ)\
flush_outbuf();}
#define put_char(c) {window[outcnt++]=(uch)(c); if (outcnt==WSIZE)\
flush_window();}
/* Output a 16 bit value, lsb first */
#define put_short(w) \
{ if (outcnt < OUTBUFSIZ-2) { \
outbuf[outcnt++] = (uch) ((w) & 0xff); \
outbuf[outcnt++] = (uch) ((ush)(w) >> 8); \
} else { \
put_byte((uch)((w) & 0xff)); \
put_byte((uch)((ush)(w) >> 8)); \
} \
}
/* Output a 32 bit value to the bit stream, lsb first */
#define put_long(n) { \
put_short((n) & 0xffff); \
put_short(((ulg)(n)) >> 16); \
}
#define seekable() 0 /* force sequential output */
#define translate_eol 0 /* no option -a yet */
#define tolow(c) (isupper(c) ? (c)-'A'+'a' : (c)) /* force to lower case */
/* Macros for getting two-byte and four-byte header values */
#define SH(p) ((ush)(uch)((p)[0]) | ((ush)(uch)((p)[1]) << 8))
#define LG(p) ((ulg)(SH(p)) | ((ulg)(SH((p)+2)) << 16))
/* Diagnostic functions */
#ifdef DEBUG
# define Assert(cond,msg) {if(!(cond)) error(msg);}
# define Trace(x) fprintf x
# define Tracev(x) {if (verbose) fprintf x ;}
# define Tracevv(x) {if (verbose>1) fprintf x ;}
# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
#else
# define Assert(cond,msg)
# define Trace(x)
# define Tracev(x)
# define Tracevv(x)
# define Tracec(c,x)
# define Tracecv(c,x)
#endif
/* in zip.c: */
extern void zip OF((int in, int out));
extern int file_read OF((char *buf, unsigned size));
/* in unzip.c */
extern void unzip OF((int in, int out));
extern int check_zipfile OF((int in));
/* in unpack.c */
extern void unpack OF((int in, int out));
/* in gzip.c */
RETSIGTYPE abort_gzip OF((void));
/* in deflate.c */
void lm_init OF((int pack_level, ush *flags));
ulg deflate OF((void));
/* in trees.c */
void ct_init OF((ush *attr, int *method));
int ct_tally OF((int dist, int lc));
ulg flush_block OF((char *buf, ulg stored_len, int eof));
/* in bits.c */
void bi_init OF((file_t zipfile));
void send_bits OF((int value, int length));
unsigned bi_reverse OF((unsigned value, int length));
void bi_windup OF((void));
void copy_block OF((char *buf, unsigned len, int header));
extern int (*read_buf) OF((char *buf, unsigned size));
/* in util.c: */
extern ulg updcrc OF((uch *s, unsigned n));
extern void clear_bufs OF((void));
extern int fill_inbuf OF((void));
extern void flush_outbuf OF((void));
extern void flush_window OF((void));
extern char *strlwr OF((char *s));
extern char *basename OF((char *fname));
extern char *add_envopt OF((int *argcp, char ***argvp, char *env));
extern void error OF((char *m));
extern void warn OF((char *a, char *b));
extern void read_error OF((void));
extern void write_error OF((void));
extern void display_ratio OF((long num, long den));
extern voidp xmalloc OF((unsigned int size));
/* in inflate.c */
extern int inflate OF((void));
#include "ppc_defs.h"
.text
/*
* This code may be executed by a bootstrap process. If so, the
* purpose is to relocate the loaded image to it's final location
* in memory.
* R3: End of image
* R4: Start of image - 0x400
*
*/
.globl start
start:
addi r4,r4,0x400 /* Point at start of image */
lis r5,start@h /* Load address */
ori r5,r5,start@l
subi r4,r4,4 /* Adjust for auto-increment */
subi r5,r5,4
subi r3,r3,4
00: lwzu r0,4(r4) /* Fast move */
stwu r0,4(r5)
cmp 0,r3,r4
bne 00b
lis r5,continue@h /* Actual code starts here */
ori r5,r5,continue@l
mtlr r5
blr
continue:
bl decompress_kernel
li r5,0x100 /* Kernel code starts here */
mtlr r5
blr
This diff is collapsed.
/* lzw.h -- define the lzw functions.
* Copyright (C) 1992-1993 Jean-loup Gailly.
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, see the file COPYING.
*/
#if !defined(OF) && defined(lint)
# include "gzip.h"
#endif
#ifndef BITS
# define BITS 16
#endif
#define INIT_BITS 9 /* Initial number of bits per code */
#define LZW_MAGIC "\037\235" /* Magic header for lzw files, 1F 9D */
#define BIT_MASK 0x1f /* Mask for 'number of compression bits' */
/* Mask 0x20 is reserved to mean a fourth header byte, and 0x40 is free.
* It's a pity that old uncompress does not check bit 0x20. That makes
* extension of the format actually undesirable because old compress
* would just crash on the new format instead of giving a meaningful
* error message. It does check the number of bits, but it's more
* helpful to say "unsupported format, get a new version" than
* "can only handle 16 bits".
*/
#define BLOCK_MODE 0x80
/* Block compression: if table is full and compression rate is dropping,
* clear the dictionary.
*/
#define LZW_RESERVED 0x60 /* reserved bits */
#define CLEAR 256 /* flush the dictionary */
#define FIRST (CLEAR+1) /* first free entry */
extern int maxbits; /* max bits per code for LZW */
extern int block_mode; /* block compress mode -C compatible with 2.0 */
extern void lzw OF((int in, int out));
extern void unlzw OF((int in, int out));
/*
* misc.c
*
* This is a collection of several routines from gzip-1.0.3
* adapted for Linux.
*
* malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
* puts by Nick Holloway 1993
*/
#include "gzip.h"
#include "lzw.h"
#define EOF -1
DECLARE(uch, inbuf, INBUFSIZ);
DECLARE(uch, outbuf, OUTBUFSIZ+OUTBUF_EXTRA);
DECLARE(uch, window, WSIZE);
unsigned outcnt;
unsigned insize;
unsigned inptr;
extern char input_data[];
extern int input_len;
int input_ptr;
int method, exit_code, part_nb, last_member;
int test = 0;
int force = 0;
int verbose = 1;
long bytes_in, bytes_out;
char *output_data;
unsigned long output_ptr;
extern int end;
long free_mem_ptr = (long)&end;
int to_stdout = 0;
int hard_math = 0;
void (*work)(int inf, int outf);
void makecrc(void);
local int get_method(int);
char *vidmem = (char *)0xC00B8000;
int lines, cols;
int orig_x, orig_y;
void puts(const char *);
void *malloc(int size)
{
void *p;
if (size <0) error("Malloc error\n");
if (free_mem_ptr <= 0) error("Memory error\n");
while(1) {
free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
p = (void *)free_mem_ptr;
free_mem_ptr += size;
/*
* The part of the compressed kernel which has already been expanded
* is no longer needed. Therefore we can reuse it for malloc.
* With bigger kernels, this is necessary.
*/
if (free_mem_ptr < (long)&end) {
if (free_mem_ptr > (long)&input_data[input_ptr])
error("\nOut of memory\n");
return p;
}
#if 0
if (free_mem_ptr < 0x90000)
#endif
return p;
puts("large kernel, low 1M tight...");
free_mem_ptr = (long)input_data;
}
}
void free(void *where)
{ /* Don't care */
}
static void scroll()
{
int i;
memcpy ( vidmem, vidmem + cols * 2, ( lines - 1 ) * cols * 2 );
for ( i = ( lines - 1 ) * cols * 2; i < lines * cols * 2; i += 2 )
vidmem[i] = ' ';
}
void puts(const char *s)
{
int x,y;
char c;
#if 0
x = SCREEN_INFO.orig_x;
y = SCREEN_INFO.orig_y;
#else
x = orig_x;
y = orig_y;
#endif
while ( ( c = *s++ ) != '\0' ) {
if ( c == '\n' ) {
x = 0;
if ( ++y >= lines ) {
scroll();
y--;
}
} else {
vidmem [ ( x + cols * y ) * 2 ] = c;
if ( ++x >= cols ) {
x = 0;
if ( ++y >= lines ) {
scroll();
y--;
}
}
}
}
#if 0
SCREEN_INFO.orig_x = x;
SCREEN_INFO.orig_y = y;
#else
orig_x = x;
orig_y = y;
#endif
}
__ptr_t memset(__ptr_t s, int c, size_t n)
{
int i;
char *ss = (char*)s;
for (i=0;i<n;i++) ss[i] = c;
}
__ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,
size_t __n)
{
int i;
char *d = (char *)__dest, *s = (char *)__src;
for (i=0;i<__n;i++) d[i] = s[i];
}
int memcmp(__ptr_t __dest, __const __ptr_t __src,
size_t __n)
{
int i;
char *d = (char *)__dest, *s = (char *)__src;
for (i=0;i<__n;i++, d++, s++)
{
if (*d != *s)
{
return (*s - *d);
}
}
return (0);
}
extern ulg crc_32_tab[]; /* crc table, defined below */
/* ===========================================================================
* Run a set of bytes through the crc shift register. If s is a NULL
* pointer, then initialize the crc shift register contents instead.
* Return the current crc in either case.
*/
ulg updcrc(s, n)
uch *s; /* pointer to bytes to pump through */
unsigned n; /* number of bytes in s[] */
{
register ulg c; /* temporary variable */
static ulg crc = (ulg)0xffffffffL; /* shift register contents */
if (s == NULL) {
c = 0xffffffffL;
} else {
c = crc;
while (n--) {
c = crc_32_tab[((int)c ^ (*s++)) & 0xff] ^ (c >> 8);
}
}
crc = c;
return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */
}
/* ===========================================================================
* Clear input and output buffers
*/
void clear_bufs()
{
outcnt = 0;
insize = inptr = 0;
bytes_in = bytes_out = 0L;
}
/* ===========================================================================
* Fill the input buffer. This is called only when the buffer is empty
* and at least one byte is really needed.
*/
int fill_inbuf()
{
int len, i;
/* Read as much as possible */
puts("*");
insize = 0;
do {
len = INBUFSIZ-insize;
if (len > (input_len-input_ptr+1)) len=input_len-input_ptr+1;
if (len == 0 || len == EOF) break;
for (i=0;i<len;i++) inbuf[insize+i] = input_data[input_ptr+i];
insize += len;
input_ptr += len;
} while (insize < INBUFSIZ);
if (insize == 0) {
error("unable to fill buffer\n");
}
bytes_in += (ulg)insize;
inptr = 1;
return inbuf[0];
}
/* ===========================================================================
* Write the output window window[0..outcnt-1] and update crc and bytes_out.
* (Used for the decompressed data only.)
*/
void flush_window()
{
if (outcnt == 0) return;
updcrc(window, outcnt);
memcpy(&output_data[output_ptr], (char *)window, outcnt);
bytes_out += (ulg)outcnt;
output_ptr += (ulg)outcnt;
outcnt = 0;
}
/*
* Code to compute the CRC-32 table. Borrowed from
* gzip-1.0.3/makecrc.c.
*/
ulg crc_32_tab[256];
void
makecrc(void)
{
/* Not copyrighted 1990 Mark Adler */
unsigned long c; /* crc shift register */
unsigned long e; /* polynomial exclusive-or pattern */
int i; /* counter for all possible eight bit values */
int k; /* byte being shifted into crc apparatus */
/* terms of polynomial defining this crc (except x^32): */
static int p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
/* Make exclusive-or pattern from polynomial */
e = 0;
for (i = 0; i < sizeof(p)/sizeof(int); i++)
e |= 1L << (31 - p[i]);
crc_32_tab[0] = 0;
for (i = 1; i < 256; i++)
{
c = 0;
for (k = i | 256; k != 1; k >>= 1)
{
c = c & 1 ? (c >> 1) ^ e : c >> 1;
if (k & 1)
c ^= e;
}
crc_32_tab[i] = c;
}
}
void error(char *x)
{
puts("\n\n");
puts(x);
puts("\n\n -- System halted");
while(1); /* Halt */
}
#if 0
#define STACK_SIZE (4096)
long user_stack [STACK_SIZE];
struct {
long * a;
short b;
} stack_start = { & user_stack [STACK_SIZE] , KERNEL_DS };
#endif
void decompress_kernel()
{
#if 0
if (SCREEN_INFO.orig_video_mode == 7)
vidmem = (char *) 0xb0000;
else
vidmem = (char *) 0xb8000;
lines = SCREEN_INFO.orig_video_lines;
cols = SCREEN_INFO.orig_video_cols;
if (EXT_MEM_K < 1024) error("<2M of mem\n");
output_data = (char *)0x100000; /* Points to 1M */
#else
output_data = (char *)0x0; /* Points to 0 */
lines = 25;
cols = 80;
orig_x = 0;
orig_y = 24;
#endif
output_ptr = 0;
exit_code = 0;
test = 0;
input_ptr = 0;
part_nb = 0;
clear_bufs();
makecrc();
puts("Uncompressing Linux...");
method = get_method(0);
work(0, 0);
puts("done.\n");
puts("Now booting the kernel\n");
}
/* ========================================================================
* Check the magic number of the input file and update ofname if an
* original name was given and to_stdout is not set.
* Return the compression method, -1 for error, -2 for warning.
* Set inptr to the offset of the next byte to be processed.
* This function may be called repeatedly for an input file consisting
* of several contiguous gzip'ed members.
* IN assertions: there is at least one remaining compressed member.
* If the member is a zip file, it must be the only one.
*/
local int get_method(in)
int in; /* input file descriptor */
{
uch flags;
char magic[2]; /* magic header */
magic[0] = (char)get_byte();
magic[1] = (char)get_byte();
method = -1; /* unknown yet */
part_nb++; /* number of parts in gzip file */
last_member = 0;
/* assume multiple members in gzip file except for record oriented I/O */
if (memcmp(magic, GZIP_MAGIC, 2) == 0
|| memcmp(magic, OLD_GZIP_MAGIC, 2) == 0) {
work = unzip;
method = (int)get_byte();
flags = (uch)get_byte();
if ((flags & ENCRYPTED) != 0)
error("Input is encrypted\n");
if ((flags & CONTINUATION) != 0)
error("Multi part input\n");
if ((flags & RESERVED) != 0) {
error("Input has invalid flags\n");
exit_code = ERROR;
if (force <= 1) return -1;
}
(ulg)get_byte(); /* Get timestamp */
((ulg)get_byte()) << 8;
((ulg)get_byte()) << 16;
((ulg)get_byte()) << 24;
(void)get_byte(); /* Ignore extra flags for the moment */
(void)get_byte(); /* Ignore OS type for the moment */
if ((flags & EXTRA_FIELD) != 0) {
unsigned len = (unsigned)get_byte();
len |= ((unsigned)get_byte())<<8;
while (len--) (void)get_byte();
}
/* Get original file name if it was truncated */
if ((flags & ORIG_NAME) != 0) {
if (to_stdout || part_nb > 1) {
/* Discard the old name */
while (get_byte() != 0) /* null */ ;
} else {
} /* to_stdout */
} /* orig_name */
/* Discard file comment if any */
if ((flags & COMMENT) != 0) {
while (get_byte() != 0) /* null */ ;
}
} else
error("unknown compression method");
return method;
}
#include <stdio.h>
extern long ce_exec_config[];
main(int argc, char *argv[])
{
int i, cnt, pos, len;
unsigned char *lp;
unsigned char buf[8192];
if (argc != 1)
{
fprintf(stderr, "usage: %s <in-file >out-file\n", argv[0]);
exit(1);
}
fprintf(stdout, "#\n");
fprintf(stdout, "# Miscellaneous data structures:\n");
fprintf(stdout, "# WARNING - this file is automatically generated!\n");
fprintf(stdout, "#\n");
fprintf(stdout, "\n");
fprintf(stdout, "\t.data\n");
fprintf(stdout, "\t.globl input_data\n");
fprintf(stdout, "input_data:\n");
pos = 0;
while ((len = read(0, buf, sizeof(buf))) > 0)
{
cnt = 0;
lp = (unsigned char *)buf;
len = (len + 3) & ~3; /* Round up to longwords */
for (i = 0; i < len; i += 4)
{
if (cnt == 0)
{
fprintf(stdout, "\t.long\t");
}
fprintf(stdout, "0x%02X%02X%02X%02X", lp[0], lp[1], lp[2], lp[3]);
lp += 4;
if (++cnt == 4)
{
cnt = 0;
fprintf(stdout, " # %x \n", pos+i-12);
fflush(stdout);
} else
{
fprintf(stdout, ",");
}
}
if (cnt)
{
fprintf(stdout, "0\n");
}
pos += len;
}
fprintf(stdout, "\t.globl input_len\n");
fprintf(stdout, "input_len:\t.long\t0x%x\n", pos);
fflush(stdout);
fclose(stdout);
exit(0);
}
#define r0 0
#define r1 1
#define r2 2
#define r3 3
#define r4 4
#define r5 5
/* unzip.c -- decompress files in gzip or pkzip format.
* Copyright (C) 1992-1993 Jean-loup Gailly
*
* Adapted for Linux booting by Hannu Savolainen 1993
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, see the file COPYING.
*
* The code in this file is derived from the file funzip.c written
* and put in the public domain by Mark Adler.
*/
/*
This version can extract files in gzip or pkzip format.
For the latter, only the first entry is extracted, and it has to be
either deflated or stored.
*/
#ifndef lint
static char rcsid[] = "$Id: unzip.c,v 0.9 1993/02/10 16:07:22 jloup Exp $";
#endif
#include "gzip.h"
#include "crypt.h"
#include <stdio.h>
/* PKZIP header definitions */
#define LOCSIG 0x04034b50L /* four-byte lead-in (lsb first) */
#define LOCFLG 6 /* offset of bit flag */
#define CRPFLG 1 /* bit for encrypted entry */
#define EXTFLG 8 /* bit for extended local header */
#define LOCHOW 8 /* offset of compression method */
#define LOCTIM 10 /* file mod time (for decryption) */
#define LOCCRC 14 /* offset of crc */
#define LOCSIZ 18 /* offset of compressed size */
#define LOCLEN 22 /* offset of uncompressed length */
#define LOCFIL 26 /* offset of file name field length */
#define LOCEXT 28 /* offset of extra field length */
#define LOCHDR 30 /* size of local header, including sig */
#define EXTHDR 16 /* size of extended local header, inc sig */
/* Globals */
int decrypt; /* flag to turn on decryption */
char *key; /* not used--needed to link crypt.c */
int pkzip = 0; /* set for a pkzip file */
int extended = 0; /* set if extended local header */
/* ===========================================================================
* Check zip file and advance inptr to the start of the compressed data.
* Get ofname from the local header if necessary.
*/
int check_zipfile(in)
int in; /* input file descriptors */
{
uch *h = inbuf + inptr; /* first local header */
/* ifd = in; */
/* Check validity of local header, and skip name and extra fields */
inptr += LOCHDR + SH(h + LOCFIL) + SH(h + LOCEXT);
if (inptr > insize || LG(h) != LOCSIG) {
error("input not a zip");
}
method = h[LOCHOW];
if (method != STORED && method != DEFLATED) {
error("first entry not deflated or stored--can't extract");
}
/* If entry encrypted, decrypt and validate encryption header */
if ((decrypt = h[LOCFLG] & CRPFLG) != 0) {
error("encrypted file\n");
exit_code = ERROR;
return -1;
}
/* Save flags for unzip() */
extended = (h[LOCFLG] & EXTFLG) != 0;
pkzip = 1;
/* Get ofname and time stamp from local header (to be done) */
return 0;
}
/* ===========================================================================
* Unzip in to out. This routine works on both gzip and pkzip files.
*
* IN assertions: the buffer inbuf contains already the beginning of
* the compressed data, from offsets inptr to insize-1 included.
* The magic header has already been checked. The output buffer is cleared.
*/
void unzip(in, out)
int in, out; /* input and output file descriptors */
{
ulg orig_crc = 0; /* original crc */
ulg orig_len = 0; /* original uncompressed length */
int n;
uch buf[EXTHDR]; /* extended local header */
/* ifd = in;
ofd = out; */
updcrc(NULL, 0); /* initialize crc */
if (pkzip && !extended) { /* crc and length at the end otherwise */
orig_crc = LG(inbuf + LOCCRC);
orig_len = LG(inbuf + LOCLEN);
}
/* Decompress */
if (method == DEFLATED) {
int res = inflate();
if (res == 3) {
error("out of memory");
} else if (res != 0) {
error("invalid compressed format");
}
} else if (pkzip && method == STORED) {
register ulg n = LG(inbuf + LOCLEN);
if (n != LG(inbuf + LOCSIZ) - (decrypt ? RAND_HEAD_LEN : 0)) {
error("length mismatch");
}
while (n--) {
uch c = (uch)get_byte();
#ifdef CRYPT
if (decrypt) zdecode(c);
#endif
if (!test) put_char(c);
}
} else {
error("internal error, invalid method");
}
/* Get the crc and original length */
if (!pkzip) {
/* crc32 (see algorithm.doc)
* uncompressed input size modulo 2^32
*/
for (n = 0; n < 8; n++) {
buf[n] = (uch)get_byte(); /* may cause an error if EOF */
}
orig_crc = LG(buf);
orig_len = LG(buf+4);
} else if (extended) { /* If extended header, check it */
/* signature - 4bytes: 0x50 0x4b 0x07 0x08
* CRC-32 value
* compressed size 4-bytes
* uncompressed size 4-bytes
*/
for (n = 0; n < EXTHDR; n++) {
buf[n] = (uch)get_byte(); /* may cause an error if EOF */
}
orig_crc = LG(buf+4);
orig_len = LG(buf+12);
}
/* Validate decompression */
if (orig_crc != updcrc(outbuf, 0)) {
error("crc error");
}
if (orig_len != bytes_out) {
error("length error");
}
/* Check if there are more entries in a pkzip file */
if (pkzip && inptr + 4 < insize && LG(inbuf+inptr) == LOCSIG) {
error("zip file has more than one entry");
}
extended = pkzip = 0; /* for next file */
}
/*
* This program will make a type 0x41 load image from an
* executable file. Note: assumes that the executable has
* already been "flattened" by 'mkboot'.
*
* usage: mk_type41 flat-file image
*/
#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
_LE(long val, unsigned char *le)
{
le[0] = val;
le[1] = val >> 8;
le[2] = val >> 16;
le[3] = val >> 24;
}
main(int argc, char *argv[])
{
int in_fd, out_fd, len, size;
struct stat info;
char buf[8192];
struct hdr
{
unsigned long entry_point;
unsigned long image_length;
} hdr;
if (argc != 3)
{
fprintf(stderr, "usage: mk_type41 <boot-file> <image>\n");
exit(1);
}
if ((in_fd = open(argv[1], 0)) < 0)
{
fprintf(stderr, "Can't open input file: '%s': %s\n", argv[1], strerror(errno));
exit(2);
}
if ((out_fd = creat(argv[2], 0666)) < 0)
{
fprintf(stderr, "Can't create outpue file: '%s': %s\n", argv[2], strerror(errno));
exit(2);
}
if (fstat(in_fd, &info) < 0)
{
fprintf(stderr, "Can't get info on input file: %s\n", strerror(errno));
exit(4);
}
write_prep_boot_partition(out_fd);
_LE(0x400, &hdr.entry_point);
_LE(info.st_size+0x400, &hdr.image_length);
lseek(out_fd, 0x200, 0);
if (write(out_fd, &hdr, sizeof(hdr)) != sizeof(hdr))
{
fprintf(stderr, "Can't write output file: %s\n", strerror(errno));
exit(5);
}
lseek(out_fd, 0x400, 0);
while ((len = read(in_fd, buf, sizeof(buf))) > 0)
{
if (write(out_fd, buf, len) != len)
{
fprintf(stderr, "Can't write output file: %s\n", strerror(errno));
exit(5);
}
}
if (len < 0)
{
fprintf(stderr, "Can't read input file: %s\n", strerror(errno));
exit(6);
}
close(in_fd);
close(out_fd);
}
/* Adapted from IBM Naked Application Package (NAP) */
#define Align(value,boundary) \
(((value) + (boundary) - 1) & ~((boundary) - 1))
#define HiByte(word) ((word_t)(word) >> 8)
#define LoByte(word) ((word_t)(word) & 0xFF)
#define HiWord(dword) ((dword_t)(dword) >> 16)
#define LoWord(dword) ((dword_t)(dword) & 0xFFFF)
/*
* Little-endian stuff
*/
#define LeWord(word) \
(((word_t)(word) >> 8) | ((word_t)(word) << 8))
#define LeDword(dword) \
(LeWord(LoWord(dword)) << 16) | LeWord(HiWord(dword))
#define PcDword(dword) \
(LeWord(LoWord(dword)) << 16) | LeWord(HiWord(dword))
typedef unsigned long dword_t;
typedef unsigned short word_t;
typedef unsigned char byte_t;
typedef byte_t block_t[512];
typedef byte_t page_t[4096];
/*
* Partition table entry
* - from the PReP spec
*/
typedef struct partition_entry {
byte_t boot_indicator;
byte_t starting_head;
byte_t starting_sector;
byte_t starting_cylinder;
byte_t system_indicator;
byte_t ending_head;
byte_t ending_sector;
byte_t ending_cylinder;
dword_t beginning_sector;
dword_t number_of_sectors;
} partition_entry_t;
#define BootActive 0x80
#define SystemPrep 0x41
/*
* Writes the "boot record", which contains the partition table, to the
* diskette, followed by the dummy PC boot block and load image descriptor
* block. It returns the number of bytes it has written to the load
* image.
*
* The boot record is the first block of the diskette and identifies the
* "PReP" partition. The "PReP" partition contains the "load image" starting
* at offset zero within the partition. The first block of the load image is
* a dummy PC boot block. The second block is the "load image descriptor"
* which contains the size of the load image and the entry point into the
* image. The actual boot image starts at offset 1024 bytes (third sector)
* in the partition.
*/
void
write_prep_boot_partition(int out_fd)
{
block_t block;
partition_entry_t *pe = (partition_entry_t *)&block[0x1BE];
dword_t *entry = (dword_t *)&block[0];
dword_t *length = (dword_t *)&block[4];
bzero( &block, sizeof block );
/*
* Magic marker
*/
block[510] = 0x55;
block[511] = 0xAA;
/*
* Build a "PReP" partition table entry in the boot record
* - "PReP" may only look at the system_indicator
*/
pe->boot_indicator = BootActive;
pe->system_indicator = SystemPrep;
/*
* The first block of the diskette is used by this "boot record" which
* actually contains the partition table. (The first block of the
* partition contains the boot image, but I digress...) We'll set up
* one partition on the diskette and it shall contain the rest of the
* diskette.
*/
pe->starting_head = 0; /* zero-based */
pe->starting_sector = 2; /* one-based */
pe->starting_cylinder = 0; /* zero-based */
pe->ending_head = 1; /* assumes two heads */
pe->ending_sector = 18; /* assumes 18 sectors/track */
pe->ending_cylinder = 79; /* assumes 80 cylinders/diskette */
/*
* The "PReP" software ignores the above fields and just looks at
* the next two.
* - size of the diskette is (assumed to be)
* (2 tracks/cylinder)(18 sectors/tracks)(80 cylinders/diskette)
* - unlike the above sector nunbers, the beginning sector is zero-based!
*/
#if 0
pe->beginning_sector = LeDword(1);
#else
/* This has to be 0 on the PowerStack? */
pe->beginning_sector = LeDword(0);
#endif
pe->number_of_sectors = LeDword(2*18*80-1);
/*
* Write the partition table
*/
lseek( out_fd, 0, 0 );
write( out_fd, block, sizeof block );
}
This diff is collapsed.
......@@ -6,10 +6,6 @@
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definitions are now in the main makefile...
#
#
# Modified by Cort Dougan
#
.c.s:
$(CC) $(CFLAGS) -S $<
......@@ -24,54 +20,49 @@
# $(CC) -D__ASSEMBLY__ -traditional -c $< -o $*.o
$(CPP) $(CFLAGS) -D__ASSEMBLY__ $< -o $*.s
$(AS) $(ASFLAGS) -o $*.o $*.s
rm $*.s
HOST_CC = gcc
OBJS = misc.o setup.o port_io.o irq.o pci.o traps.o stubs.o process.o \
signal.o raw_printf.o ramdisk.o
signal.o raw_printf.o ksyms.o time.o ramdisk_drvr.o syscalls.o \
support.o ptrace.o
all: head.o kernel.o
all: head.o kernel.o no_ramdisk.o ramdisk.o
head.o: head.s
head.s: head.S $(TOPDIR)/include/linux/tasks.h ppc_defs.h
ppc_defs.h: mk_defs $(TOPDIR)/include/asm/mmu.h $(TOPDIR)/include/asm/processor.h $(TOPDIR)/include/asm/pgtable.h $(TOPDIR)/include/asm/ptrace.h
ppc_defs.h: mk_defs
# simppc mk_defs -- $@
mk_defs ppc_defs.h
mk_defs $@
ramdisk.o: ramdisk.s
no_ramdisk.o: no_ramdisk.S
ramdisk.s: ramdisk.image mk_ramdisk
mk_ramdisk ramdisk.image ramdisk.s
ramdisk.o: ramdisk.image mk_ramdisk
mk_ramdisk ramdisk.image $*.s
$(AS) -o $@ $*.s
rm $*.s
mk_ramdisk: mk_ramdisk.c
$(HOST_CC) -o mk_ramdisk mk_ramdisk.c
cortstrip : cortstrip.c
${HOST_CC} -o cortstrip cortstrip.c
mkboot : mkboot.c
${HOST_CC} -o mkboot mkboot.c
${HOST_CC} -o mk_ramdisk mk_ramdisk.c
mk_defs: mk_defs.c $(TOPDIR)/include/asm/mmu.h $(TOPDIR)/include/asm/processor.h $(TOPDIR)/include/asm/pgtable.h $(TOPDIR)/include/asm/ptrace.h
# $(CC) ${CFLAGS} -c mk_defs -T ld.script-user -Ttext 0x1000 mk_defs.c
# $(LD) -T ld.script-user -Ttext 0x1000 -o mk_defs mk_defs.o
$(HOST_CC) -DMKDEFS ${CFLAGS} -o mk_defs mk_defs.c
# cc.ppc ${CFLAGS} -o mk_defs -T ld.script-user -Ttext 0x1000 mk_defs.c
cc.ppc ${CFLAGS} -o mk_defs mk_defs.c
kernel.o: $(OBJS)
$(LD) -r -o kernel.o $(OBJS)
sync
mkboot: mkboot.c
${HOST_CC} -o $@ -Iinclude mkboot.c
dep:
$(CPP) -M *.c > .depend
fastdep:
$(CPP) -M *.c > .depend
modules:
......
This diff is collapsed.
Tue Jun 20 10:18:28 1995 Jeff Law (law@snake.cs.utah.edu)
* hppa.h (CPU_PA_RISC1_0): Protect from redefinitions.
(CPU_PA_RISC1_1): Likewise.
Wed Mar 8 18:14:37 1995 Michael Meissner <meissner@tiktok.cygnus.com>
* ppc.h: New file for PowerPC support.
Tue Feb 14 13:59:13 1995 Michael Meissner <meissner@tiktok.cygnus.com>
* common.h (EM_PPC): Use offical value of 20, not 17.
(EM_PPC_OLD): Define this to be the old value of EM_PPC.
Tue Jan 24 09:40:59 1995 Michael Meissner <meissner@tiktok.cygnus.com>
* common.h (EM_PPC): New macro, PowerPC machine id.
Tue Jan 17 10:51:38 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
* mips.h (SHT_MIPS_MSYM, SHT_MIPS_DWARF, SHT_MIPS_EVENTS): Define.
Mon Oct 17 13:43:59 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
* internal.h (Elf_Internal_Shdr): Remove rawdata and size fields.
Add bfd_section field.
Tue May 24 16:11:50 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* mips.h (Elf32_External_gptab): Define.
Mon May 16 13:22:04 1994 Jeff Law (law@snake.cs.utah.edu)
* common.h (EM_HPPA): Delete.
(EM_PARISC): Add.
* hppa.h: New file.
Mon May 9 13:27:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* common.h (SHN_LORESERVE): Rename from SHN_LORESERV.
(ELF32_R_TYPE, ELF32_R_INFO): Don't rely on size of unsigned char.
(ELF64_R_TYPE): Don't rely on size of unsigned long.
Mon Apr 25 15:53:09 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* internal.h (Elf_Internal_Shdr): Use PTR, not void *.
Fri Mar 11 00:34:59 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* mips.h (SHN_MIPS_TEXT, SHN_MIPS_DATA): Define.
Sat Mar 5 14:08:54 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* internal.h: Remove Elf32_*, Elf64_* typedefs. These names
cause conflicts with system headers, e.g. link.h in gdb/solib.c.
Combine 32- and 64-bit versions of *_Internal_Dyn.
* common.h: Replace uses of Elf64_Word, Elf64_Xword typedefs
by their expansion.
* mips.h: Replace uses of Elf32_Word, Elf32_Sword, Elf32_Addr
typedefs by their expansion. Add DT_MIPS_RLD_MAP definition.
Fri Feb 18 10:39:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* common.h (EM_CYGNUS_POWERPC): Define. This may be temporary,
depending upon how quickly I can find a real PowerPC ABI.
Mon Feb 7 08:27:13 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
* internal.h: Change HOST_64_BIT to BFD_HOST_64_BIT.
Wed Feb 2 14:12:18 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
* common.h: Add comments regarding value of EM_HPPA and how to
pick an unofficial value.
Wed Nov 17 17:14:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* mips.h (SHT_MIPS_OPTIONS): Define.
Mon Nov 8 17:57:00 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* mips.h: Added some more MIPS ABI macro definitions.
Wed Nov 3 22:07:17 1993 Ken Raeburn (raeburn@rtl.cygnus.com)
* common.h (EM_MIPS_RS4_BE): New macro.
Tue Oct 12 07:28:18 1993 Ian Lance Taylor (ian@cygnus.com)
* mips.h: New file. MIPS ABI specific information.
Mon Jun 21 13:13:43 1993 Ken Raeburn (raeburn@poseidon.cygnus.com)
* internal.h: Combined 32- and 64-bit versions of all structures
except *_Internal_Dyn. This will simply the assembler interface,
and some bfd code.
Tue May 25 02:00:16 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
* external.h, internal.h, common.h: Added 64-bit versions of some
structures and macros. Renamed old versions to put "32" in the
name. Some are unchanged.
Thu Apr 29 12:12:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
* common.h (EM_HPPA, NT_VERSION, STN_UNDEF, DT_*): New macros.
* external.h (Elf_External_Dyn): New type.
* internal.h (Elf_Intenral_Shdr): New field `size'.
(Elf_Internal_Dyn): New type.
Tue Apr 20 16:03:45 1993 Fred Fish (fnf@cygnus.com)
* dwarf.h (LANG_CHILL): Change value to one randomly picked in
the user defined range, to reduce probability of collisions.
Sun Nov 15 09:34:02 1992 Fred Fish (fnf@cygnus.com)
* dwarf.h (AT_src_coords): Whitespace change only.
* dwarf.h (AT_body_begin, AT_body_end, LANG_MODULA2):
Add from latest gcc.
* dwarf.h (LANG_CHILL): Add as GNU extension.
Sat Aug 1 13:46:53 1992 Fred Fish (fnf@cygnus.com)
* dwarf.h: Replace with current version from gcc distribution.
Fri Jun 19 19:05:09 1992 John Gilmore (gnu at cygnus.com)
* internal.h: Add real struct tags to all the Type_Defs, so they
can be used in prototypes where the Type_Defs are not known.
Fri Apr 3 20:58:58 1992 Mark Eichin (eichin at cygnus.com)
* common.h: added ELF_R_{SYM,TYPE,INFO} for handling relocation
info
added EM_MIPS, and corrected value of EM_860 based on System V ABI
manual.
* external.h: added Elf_External_{Rel,Rela}.
* internal.h: added Elf_Internal_{Rel,Rela}.
added rawdata to Elf_Internal_Shdr.
Sat Nov 30 20:43:59 1991 Steve Chamberlain (sac at rtl.cygnus.com)
* common.h, dwarf.h, external.h, internal.h, ChangeLog; moved from
../elf-<foo>
Local Variables:
version-control: never
End:
/* ELF support for BFD.
Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, from information published
in "UNIX System V Release 4, Programmers Guide: ANSI C and
Programming Support Tools".
This file is part of BFD, the Binary File Descriptor library.
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This file is part of ELF support for BFD, and contains the portions
that are common to both the internal and external representations.
For example, ELFMAG0 is the byte 0x7F in both the internal (in-memory)
and external (in-file) representations. */
/* Fields in e_ident[] */
#define EI_MAG0 0 /* File identification byte 0 index */
#define ELFMAG0 0x7F /* Magic number byte 0 */
#define EI_MAG1 1 /* File identification byte 1 index */
#define ELFMAG1 'E' /* Magic number byte 1 */
#define EI_MAG2 2 /* File identification byte 2 index */
#define ELFMAG2 'L' /* Magic number byte 2 */
#define EI_MAG3 3 /* File identification byte 3 index */
#define ELFMAG3 'F' /* Magic number byte 3 */
#define EI_CLASS 4 /* File class */
#define ELFCLASSNONE 0 /* Invalid class */
#define ELFCLASS32 1 /* 32-bit objects */
#define ELFCLASS64 2 /* 64-bit objects */
#define EI_DATA 5 /* Data encoding */
#define ELFDATANONE 0 /* Invalid data encoding */
#define ELFDATA2LSB 1 /* 2's complement, little endian */
#define ELFDATA2MSB 2 /* 2's complement, big endian */
#define EI_VERSION 6 /* File version */
#define EI_PAD 7 /* Start of padding bytes */
/* Values for e_type, which identifies the object file type */
#define ET_NONE 0 /* No file type */
#define ET_REL 1 /* Relocatable file */
#define ET_EXEC 2 /* Executable file */
#define ET_DYN 3 /* Shared object file */
#define ET_CORE 4 /* Core file */
#define ET_LOPROC 0xFF00 /* Processor-specific */
#define ET_HIPROC 0xFFFF /* Processor-specific */
/* Values for e_machine, which identifies the architecture */
#define EM_NONE 0 /* No machine */
#define EM_M32 1 /* AT&T WE 32100 */
#define EM_SPARC 2 /* SUN SPARC */
#define EM_386 3 /* Intel 80386 */
#define EM_68K 4 /* Motorola m68k family */
#define EM_88K 5 /* Motorola m88k family */
#define EM_860 7 /* Intel 80860 */
#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
#define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
#define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */
#define EM_PARISC 15 /* HPPA */
#define EM_PPC 20 /* PowerPC */
/* If it is necessary to assign new unofficial EM_* values, please pick large
random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
with official or non-GNU unofficial values. */
/* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */
#define EM_CYGNUS_POWERPC 0x9025
/* Old version of PowerPC, this should be removed shortly. */
#define EM_PPC_OLD 17
/* Values for e_version */
#define EV_NONE 0 /* Invalid ELF version */
#define EV_CURRENT 1 /* Current version */
/* Values for program header, p_type field */
#define PT_NULL 0 /* Program header table entry unused */
#define PT_LOAD 1 /* Loadable program segment */
#define PT_DYNAMIC 2 /* Dynamic linking information */
#define PT_INTERP 3 /* Program interpreter */
#define PT_NOTE 4 /* Auxiliary information */
#define PT_SHLIB 5 /* Reserved, unspecified semantics */
#define PT_PHDR 6 /* Entry for header table itself */
#define PT_LOPROC 0x70000000 /* Processor-specific */
#define PT_HIPROC 0x7FFFFFFF /* Processor-specific */
/* Program segment permissions, in program header p_flags field */
#define PF_X (1 << 0) /* Segment is executable */
#define PF_W (1 << 1) /* Segment is writable */
#define PF_R (1 << 2) /* Segment is readable */
#define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits */
/* Values for section header, sh_type field */
#define SHT_NULL 0 /* Section header table entry unused */
#define SHT_PROGBITS 1 /* Program specific (private) data */
#define SHT_SYMTAB 2 /* Link editing symbol table */
#define SHT_STRTAB 3 /* A string table */
#define SHT_RELA 4 /* Relocation entries with addends */
#define SHT_HASH 5 /* A symbol hash table */
#define SHT_DYNAMIC 6 /* Information for dynamic linking */
#define SHT_NOTE 7 /* Information that marks file */
#define SHT_NOBITS 8 /* Section occupies no space in file */
#define SHT_REL 9 /* Relocation entries, no addends */
#define SHT_SHLIB 10 /* Reserved, unspecified semantics */
#define SHT_DYNSYM 11 /* Dynamic linking symbol table */
#define SHT_LOPROC 0x70000000 /* Processor-specific semantics, lo */
#define SHT_HIPROC 0x7FFFFFFF /* Processor-specific semantics, hi */
#define SHT_LOUSER 0x80000000 /* Application-specific semantics */
#define SHT_HIUSER 0x8FFFFFFF /* Application-specific semantics */
/* Values for section header, sh_flags field */
#define SHF_WRITE (1 << 0) /* Writable data during execution */
#define SHF_ALLOC (1 << 1) /* Occupies memory during execution */
#define SHF_EXECINSTR (1 << 2) /* Executable machine instructions */
#define SHF_MASKPROC 0xF0000000 /* Processor-specific semantics */
/* Values of note segment descriptor types for core files. */
#define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
#define NT_FPREGSET 2 /* Contains copy of fpregset struct */
#define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
/* Values of note segment descriptor types for object files. */
/* (Only for hppa right now. Should this be moved elsewhere?) */
#define NT_VERSION 1 /* Contains a version string. */
/* These three macros disassemble and assemble a symbol table st_info field,
which contains the symbol binding and symbol type. The STB_ and STT_
defines identify the binding and type. */
#define ELF_ST_BIND(val) (((unsigned int)(val)) >> 4)
#define ELF_ST_TYPE(val) ((val) & 0xF)
#define ELF_ST_INFO(bind,type) (((bind) << 4) + ((type) & 0xF))
#define STN_UNDEF 0 /* undefined symbol index */
#define STB_LOCAL 0 /* Symbol not visible outside obj */
#define STB_GLOBAL 1 /* Symbol visible outside obj */
#define STB_WEAK 2 /* Like globals, lower precedence */
#define STB_LOPROC 13 /* Application-specific semantics */
#define STB_HIPROC 15 /* Application-specific semantics */
#define STT_NOTYPE 0 /* Symbol type is unspecified */
#define STT_OBJECT 1 /* Symbol is a data object */
#define STT_FUNC 2 /* Symbol is a code object */
#define STT_SECTION 3 /* Symbol associated with a section */
#define STT_FILE 4 /* Symbol gives a file name */
#define STT_LOPROC 13 /* Application-specific semantics */
#define STT_HIPROC 15 /* Application-specific semantics */
/* Special section indices, which may show up in st_shndx fields, among
other places. */
#define SHN_UNDEF 0 /* Undefined section reference */
#define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
#define SHN_LOPROC 0xFF00 /* Begin range of appl-specific */
#define SHN_HIPROC 0xFF1F /* End range of appl-specific */
#define SHN_ABS 0xFFF1 /* Associated symbol is absolute */
#define SHN_COMMON 0xFFF2 /* Associated symbol is in common */
#define SHN_HIRESERVE 0xFFFF /* End range of reserved indices */
/* relocation info handling macros */
#define ELF32_R_SYM(i) ((i) >> 8)
#define ELF32_R_TYPE(i) ((i) & 0xff)
#define ELF32_R_INFO(s,t) (((s) << 8) + ((t) & 0xff))
#define ELF64_R_SYM(i) ((i) >> 32)
#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
#define ELF64_R_INFO(s,t) (((bfd_vma) (s) << 32) + (bfd_vma) (t))
/* Dynamic section tags */
#define DT_NULL 0
#define DT_NEEDED 1
#define DT_PLTRELSZ 2
#define DT_PLTGOT 3
#define DT_HASH 4
#define DT_STRTAB 5
#define DT_SYMTAB 6
#define DT_RELA 7
#define DT_RELASZ 8
#define DT_RELAENT 9
#define DT_STRSZ 10
#define DT_SYMENT 11
#define DT_INIT 12
#define DT_FINI 13
#define DT_SONAME 14
#define DT_RPATH 15
#define DT_SYMBOLIC 16
#define DT_REL 17
#define DT_RELSZ 18
#define DT_RELENT 19
#define DT_PLTREL 20
#define DT_DEBUG 21
#define DT_TEXTREL 22
#define DT_JMPREL 23
#define DT_LOPROC 0x70000000
#define DT_HIPROC 0x7fffffff
This diff is collapsed.
/* ELF support for BFD.
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, from information published
in "UNIX System V Release 4, Programmers Guide: ANSI C and
Programming Support Tools".
This file is part of BFD, the Binary File Descriptor library.
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This file is part of ELF support for BFD, and contains the portions
that describe how ELF is represented externally by the BFD library.
I.E. it describes the in-file representation of ELF. It requires
the elf-common.h file which contains the portions that are common to
both the internal and external representations. */
/* The 64-bit stuff is kind of random. Perhaps someone will publish a
spec someday. */
/* ELF Header (32-bit implementations) */
typedef struct {
unsigned char e_ident[16]; /* ELF "magic number" */
unsigned char e_type[2]; /* Identifies object file type */
unsigned char e_machine[2]; /* Specifies required architecture */
unsigned char e_version[4]; /* Identifies object file version */
unsigned char e_entry[4]; /* Entry point virtual address */
unsigned char e_phoff[4]; /* Program header table file offset */
unsigned char e_shoff[4]; /* Section header table file offset */
unsigned char e_flags[4]; /* Processor-specific flags */
unsigned char e_ehsize[2]; /* ELF header size in bytes */
unsigned char e_phentsize[2]; /* Program header table entry size */
unsigned char e_phnum[2]; /* Program header table entry count */
unsigned char e_shentsize[2]; /* Section header table entry size */
unsigned char e_shnum[2]; /* Section header table entry count */
unsigned char e_shstrndx[2]; /* Section header string table index */
} Elf32_External_Ehdr;
typedef struct {
unsigned char e_ident[16]; /* ELF "magic number" */
unsigned char e_type[2]; /* Identifies object file type */
unsigned char e_machine[2]; /* Specifies required architecture */
unsigned char e_version[4]; /* Identifies object file version */
unsigned char e_entry[8]; /* Entry point virtual address */
unsigned char e_phoff[8]; /* Program header table file offset */
unsigned char e_shoff[8]; /* Section header table file offset */
unsigned char e_flags[4]; /* Processor-specific flags */
unsigned char e_ehsize[2]; /* ELF header size in bytes */
unsigned char e_phentsize[2]; /* Program header table entry size */
unsigned char e_phnum[2]; /* Program header table entry count */
unsigned char e_shentsize[2]; /* Section header table entry size */
unsigned char e_shnum[2]; /* Section header table entry count */
unsigned char e_shstrndx[2]; /* Section header string table index */
} Elf64_External_Ehdr;
/* Program header */
typedef struct {
unsigned char p_type[4]; /* Identifies program segment type */
unsigned char p_offset[4]; /* Segment file offset */
unsigned char p_vaddr[4]; /* Segment virtual address */
unsigned char p_paddr[4]; /* Segment physical address */
unsigned char p_filesz[4]; /* Segment size in file */
unsigned char p_memsz[4]; /* Segment size in memory */
unsigned char p_flags[4]; /* Segment flags */
unsigned char p_align[4]; /* Segment alignment, file & memory */
} Elf32_External_Phdr;
typedef struct {
unsigned char p_type[4]; /* Identifies program segment type */
unsigned char p_flags[4]; /* Segment flags */
unsigned char p_offset[8]; /* Segment file offset */
unsigned char p_vaddr[8]; /* Segment virtual address */
unsigned char p_paddr[8]; /* Segment physical address */
unsigned char p_filesz[8]; /* Segment size in file */
unsigned char p_memsz[8]; /* Segment size in memory */
unsigned char p_align[8]; /* Segment alignment, file & memory */
} Elf64_External_Phdr;
/* Section header */
typedef struct {
unsigned char sh_name[4]; /* Section name, index in string tbl */
unsigned char sh_type[4]; /* Type of section */
unsigned char sh_flags[4]; /* Miscellaneous section attributes */
unsigned char sh_addr[4]; /* Section virtual addr at execution */
unsigned char sh_offset[4]; /* Section file offset */
unsigned char sh_size[4]; /* Size of section in bytes */
unsigned char sh_link[4]; /* Index of another section */
unsigned char sh_info[4]; /* Additional section information */
unsigned char sh_addralign[4]; /* Section alignment */
unsigned char sh_entsize[4]; /* Entry size if section holds table */
} Elf32_External_Shdr;
typedef struct {
unsigned char sh_name[4]; /* Section name, index in string tbl */
unsigned char sh_type[4]; /* Type of section */
unsigned char sh_flags[8]; /* Miscellaneous section attributes */
unsigned char sh_addr[8]; /* Section virtual addr at execution */
unsigned char sh_offset[8]; /* Section file offset */
unsigned char sh_size[8]; /* Size of section in bytes */
unsigned char sh_link[4]; /* Index of another section */
unsigned char sh_info[4]; /* Additional section information */
unsigned char sh_addralign[8]; /* Section alignment */
unsigned char sh_entsize[8]; /* Entry size if section holds table */
} Elf64_External_Shdr;
/* Symbol table entry */
typedef struct {
unsigned char st_name[4]; /* Symbol name, index in string tbl */
unsigned char st_value[4]; /* Value of the symbol */
unsigned char st_size[4]; /* Associated symbol size */
unsigned char st_info[1]; /* Type and binding attributes */
unsigned char st_other[1]; /* No defined meaning, 0 */
unsigned char st_shndx[2]; /* Associated section index */
} Elf32_External_Sym;
typedef struct {
unsigned char st_name[4]; /* Symbol name, index in string tbl */
unsigned char st_info[1]; /* Type and binding attributes */
unsigned char st_other[1]; /* No defined meaning, 0 */
unsigned char st_shndx[2]; /* Associated section index */
unsigned char st_value[8]; /* Value of the symbol */
unsigned char st_size[8]; /* Associated symbol size */
} Elf64_External_Sym;
/* Note segments */
typedef struct {
unsigned char namesz[4]; /* Size of entry's owner string */
unsigned char descsz[4]; /* Size of the note descriptor */
unsigned char type[4]; /* Interpretation of the descriptor */
char name[1]; /* Start of the name+desc data */
} Elf_External_Note;
/* Relocation Entries */
typedef struct {
unsigned char r_offset[4]; /* Location at which to apply the action */
unsigned char r_info[4]; /* index and type of relocation */
} Elf32_External_Rel;
typedef struct {
unsigned char r_offset[4]; /* Location at which to apply the action */
unsigned char r_info[4]; /* index and type of relocation */
unsigned char r_addend[4]; /* Constant addend used to compute value */
} Elf32_External_Rela;
typedef struct {
unsigned char r_offset[8]; /* Location at which to apply the action */
unsigned char r_info[8]; /* index and type of relocation */
} Elf64_External_Rel;
typedef struct {
unsigned char r_offset[8]; /* Location at which to apply the action */
unsigned char r_info[8]; /* index and type of relocation */
unsigned char r_addend[8]; /* Constant addend used to compute value */
} Elf64_External_Rela;
/* dynamic section structure */
typedef struct {
unsigned char d_tag[4]; /* entry tag value */
union {
unsigned char d_val[4];
unsigned char d_ptr[4];
} d_un;
} Elf32_External_Dyn;
typedef struct {
unsigned char d_tag[8]; /* entry tag value */
union {
unsigned char d_val[8];
unsigned char d_ptr[8];
} d_un;
} Elf64_External_Dyn;
/* HPPA ELF support for BFD.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This file holds definitions specific to the HPPA ELF ABI. Note
that most of this is not actually implemented by BFD. */
/* Processor specific flags for the ELF header e_flags field. */
/* Target processor IDs to be placed in the low 16 bits of the flags
field. Note these names are shared with SOM, and therefore do not
follow ELF naming conventions. */
/* PA 1.0 big endian. */
#ifndef CPU_PA_RISC1_0
#define CPU_PA_RISC1_0 0x0000020b
#endif
/* PA 1.1 big endian. */
#ifndef CPU_PA_RISC1_1
#define CPU_PA_RISC1_1 0x00000210
#endif
/* PA 1.0 little endian (unsupported) is 0x0000028b. */
/* PA 1.1 little endian (unsupported) is 0x00000290. */
/* Trap null address dereferences. */
#define ELF_PARISC_TRAPNIL 0x00010000
/* .PARISC.archext section is present. */
#define EF_PARISC_EXT 0x00020000
/* Processor specific section types. */
/* Holds the global offset table, a table of pointers to external
data. */
#define SHT_PARISC_GOT SHT_LOPROC+0
/* Nonloadable section containing information in architecture
extensions used by the code. */
#define SHT_PARISC_ARCH SHT_LOPROC+1
/* Section in which $global$ is defined. */
#define SHT_PARISC_GLOBAL SHT_LOPROC+2
/* Section holding millicode routines (mul, div, rem, dyncall, etc. */
#define SHT_PARISC_MILLI SHT_LOPROC+3
/* Section holding unwind information for use by debuggers. */
#define SHT_PARISC_UNWIND SHT_LOPROC+4
/* Section holding the procedure linkage table. */
#define SHT_PARISC_PLT SHT_LOPROC+5
/* Short initialized and uninitialized data. */
#define SHT_PARISC_SDATA SHT_LOPROC+6
#define SHT_PARISC_SBSS SHT_LOPROC+7
/* Optional section holding argument location/relocation info. */
#define SHT_PARISC_SYMEXTN SHT_LOPROC+8
/* Option section for linker stubs. */
#define SHT_PARISC_STUBS SHT_LOPROC+9
/* Processor specific section flags. */
/* This section is near the global data pointer and thus allows short
addressing modes to be used. */
#define SHF_PARISC_SHORT 0x20000000
/* Processor specific symbol types. */
/* Millicode function entry point. */
#define STT_PARISC_MILLICODE STT_LOPROC+0
/* ELF support for BFD.
Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, from information published
in "UNIX System V Release 4, Programmers Guide: ANSI C and
Programming Support Tools".
This file is part of BFD, the Binary File Descriptor library.
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This file is part of ELF support for BFD, and contains the portions
that describe how ELF is represented internally in the BFD library.
I.E. it describes the in-memory representation of ELF. It requires
the elf-common.h file which contains the portions that are common to
both the internal and external representations. */
/* NOTE that these structures are not kept in the same order as they appear
in the object file. In some cases they've been reordered for more optimal
packing under various circumstances. */
/* ELF Header */
#define EI_NIDENT 16 /* Size of e_ident[] */
typedef struct elf_internal_ehdr {
unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */
bfd_vma e_entry; /* Entry point virtual address */
bfd_signed_vma e_phoff; /* Program header table file offset */
bfd_signed_vma e_shoff; /* Section header table file offset */
unsigned long e_version; /* Identifies object file version */
unsigned long e_flags; /* Processor-specific flags */
unsigned short e_type; /* Identifies object file type */
unsigned short e_machine; /* Specifies required architecture */
unsigned short e_ehsize; /* ELF header size in bytes */
unsigned short e_phentsize; /* Program header table entry size */
unsigned short e_phnum; /* Program header table entry count */
unsigned short e_shentsize; /* Section header table entry size */
unsigned short e_shnum; /* Section header table entry count */
unsigned short e_shstrndx; /* Section header string table index */
} Elf_Internal_Ehdr;
#define elf32_internal_ehdr elf_internal_ehdr
#define Elf32_Internal_Ehdr Elf_Internal_Ehdr
#define elf64_internal_ehdr elf_internal_ehdr
#define Elf64_Internal_Ehdr Elf_Internal_Ehdr
/* Program header */
struct elf_internal_phdr {
unsigned long p_type; /* Identifies program segment type */
unsigned long p_flags; /* Segment flags */
bfd_vma p_offset; /* Segment file offset */
bfd_vma p_vaddr; /* Segment virtual address */
bfd_vma p_paddr; /* Segment physical address */
bfd_vma p_filesz; /* Segment size in file */
bfd_vma p_memsz; /* Segment size in memory */
bfd_vma p_align; /* Segment alignment, file & memory */
};
typedef struct elf_internal_phdr Elf_Internal_Phdr;
#define elf32_internal_phdr elf_internal_phdr
#define Elf32_Internal_Phdr Elf_Internal_Phdr
#define elf64_internal_phdr elf_internal_phdr
#define Elf64_Internal_Phdr Elf_Internal_Phdr
/* Section header */
typedef struct elf_internal_shdr {
unsigned int sh_name; /* Section name, index in string tbl */
unsigned int sh_type; /* Type of section */
bfd_vma sh_flags; /* Miscellaneous section attributes */
bfd_vma sh_addr; /* Section virtual addr at execution */
bfd_size_type sh_size; /* Size of section in bytes */
bfd_size_type sh_entsize; /* Entry size if section holds table */
unsigned long sh_link; /* Index of another section */
unsigned long sh_info; /* Additional section information */
file_ptr sh_offset; /* Section file offset */
unsigned int sh_addralign; /* Section alignment */
/* The internal rep also has some cached info associated with it. */
asection * bfd_section; /* Associated BFD section. */
PTR contents; /* Section contents. */
} Elf_Internal_Shdr;
#define elf32_internal_shdr elf_internal_shdr
#define Elf32_Internal_Shdr Elf_Internal_Shdr
#define elf64_internal_shdr elf_internal_shdr
#define Elf64_Internal_Shdr Elf_Internal_Shdr
/* Symbol table entry */
struct elf_internal_sym {
bfd_vma st_value; /* Value of the symbol */
bfd_vma st_size; /* Associated symbol size */
unsigned long st_name; /* Symbol name, index in string tbl */
unsigned char st_info; /* Type and binding attributes */
unsigned char st_other; /* No defined meaning, 0 */
unsigned short st_shndx; /* Associated section index */
};
typedef struct elf_internal_sym Elf_Internal_Sym;
#define elf32_internal_sym elf_internal_sym
#define elf64_internal_sym elf_internal_sym
#define Elf32_Internal_Sym Elf_Internal_Sym
#define Elf64_Internal_Sym Elf_Internal_Sym
/* Note segments */
typedef struct elf_internal_note {
unsigned long namesz; /* Size of entry's owner string */
unsigned long descsz; /* Size of the note descriptor */
unsigned long type; /* Interpretation of the descriptor */
char name[1]; /* Start of the name+desc data */
} Elf_Internal_Note;
#define Elf32_Internal_Note Elf_Internal_Note
#define elf32_internal_note elf_internal_note
/* Relocation Entries */
typedef struct elf_internal_rel {
bfd_vma r_offset; /* Location at which to apply the action */
/* This needs to support 64-bit values in elf64. */
bfd_vma r_info; /* index and type of relocation */
} Elf_Internal_Rel;
#define elf32_internal_rel elf_internal_rel
#define Elf32_Internal_Rel Elf_Internal_Rel
#define elf64_internal_rel elf_internal_rel
#define Elf64_Internal_Rel Elf_Internal_Rel
typedef struct elf_internal_rela {
bfd_vma r_offset; /* Location at which to apply the action */
bfd_vma r_info; /* Index and Type of relocation */
bfd_signed_vma r_addend; /* Constant addend used to compute value */
} Elf_Internal_Rela;
#define elf32_internal_rela elf_internal_rela
#define elf64_internal_rela elf_internal_rela
#define Elf32_Internal_Rela Elf_Internal_Rela
#define Elf64_Internal_Rela Elf_Internal_Rela
/* dynamic section structure */
typedef struct elf_internal_dyn {
/* This needs to support 64-bit values in elf64. */
bfd_vma d_tag; /* entry tag value */
union {
/* This needs to support 64-bit values in elf64. */
bfd_vma d_val;
bfd_vma d_ptr;
} d_un;
} Elf_Internal_Dyn;
#define elf32_internal_dyn elf_internal_dyn
#define elf64_internal_dyn elf_internal_dyn
#define Elf32_Internal_Dyn Elf_Internal_Dyn
#define Elf64_Internal_Dyn Elf_Internal_Dyn
/* MIPS ELF support for BFD.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
By Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>, from
information in the System V Application Binary Interface, MIPS
Processor Supplement.
This file is part of BFD, the Binary File Descriptor library.
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This file holds definitions specific to the MIPS ELF ABI. Note
that most of this is not actually implemented by BFD. */
/* Processor specific flags for the ELF header e_flags field. */
/* At least one .noreorder directive appears in the source. */
#define EF_MIPS_NOREORDER 0x00000001
/* File contains position independent code. */
#define EF_MIPS_PIC 0x00000002
/* Code in file uses the standard calling sequence for calling
position independent code. */
#define EF_MIPS_CPIC 0x00000004
/* Four bit MIPS architecture field. */
#define EF_MIPS_ARCH 0xf0000000
/* -mips1 code. */
#define E_MIPS_ARCH_1 0x00000000
/* -mips2 code. */
#define E_MIPS_ARCH_2 0x10000000
/* -mips3 code. */
#define E_MIPS_ARCH_3 0x20000000
/* Processor specific section indices. These sections do not actually
exist. Symbols with a st_shndx field corresponding to one of these
values have a special meaning. */
/* Defined and allocated common symbol. Value is virtual address. If
relocated, alignment must be preserved. */
#define SHN_MIPS_ACOMMON 0xff00
/* Defined and allocated text symbol. Value is virtual address.
Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */
#define SHN_MIPS_TEXT 0xff01
/* Defined and allocated data symbol. Value is virtual address.
Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */
#define SHN_MIPS_DATA 0xff02
/* Small common symbol. */
#define SHN_MIPS_SCOMMON 0xff03
/* Small undefined symbol. */
#define SHN_MIPS_SUNDEFINED 0xff04
/* Processor specific section types. */
/* Section contains the set of dynamic shared objects used when
statically linking. */
#define SHT_MIPS_LIBLIST 0x70000000
/* I'm not sure what this is, but it's used on Irix 5. */
#define SHT_MIPS_MSYM 0x70000001
/* Section contains list of symbols whose definitions conflict with
symbols defined in shared objects. */
#define SHT_MIPS_CONFLICT 0x70000002
/* Section contains the global pointer table. */
#define SHT_MIPS_GPTAB 0x70000003
/* Section contains microcode information. The exact format is
unspecified. */
#define SHT_MIPS_UCODE 0x70000004
/* Section contains some sort of debugging information. The exact
format is unspecified. It's probably ECOFF symbols. */
#define SHT_MIPS_DEBUG 0x70000005
/* Section contains register usage information. */
#define SHT_MIPS_REGINFO 0x70000006
/* Section contains miscellaneous options (used on Irix). */
#define SHT_MIPS_OPTIONS 0x7000000d
/* DWARF debugging section (used on Irix 6). */
#define SHT_MIPS_DWARF 0x7000001e
/* Events section. This appears on Irix 6. I don't know what it
means. */
#define SHT_MIPS_EVENTS 0x70000021
/* A section of type SHT_MIPS_LIBLIST contains an array of the
following structure. The sh_link field is the section index of the
string table. The sh_info field is the number of entries in the
section. */
typedef struct
{
/* String table index for name of shared object. */
unsigned long l_name;
/* Time stamp. */
unsigned long l_time_stamp;
/* Checksum of symbol names and common sizes. */
unsigned long l_checksum;
/* String table index for version. */
unsigned long l_version;
/* Flags. */
unsigned long l_flags;
} Elf32_Lib;
/* The l_flags field of an Elf32_Lib structure may contain the
following flags. */
/* Require an exact match at runtime. */
#define LL_EXACT_MATCH 0x00000001
/* Ignore version incompatibilities at runtime. */
#define LL_IGNORE_INT_VER 0x00000002
/* A section of type SHT_MIPS_CONFLICT is an array of indices into the
.dynsym section. Each element has the following type. */
typedef unsigned long Elf32_Conflict;
/* A section of type SHT_MIPS_GPTAB contains information about how
much GP space would be required for different -G arguments. This
information is only used so that the linker can provide informative
suggestions as to the best -G value to use. The sh_info field is
the index of the section for which this information applies. The
contents of the section are an array of the following union. The
first element uses the gt_header field. The remaining elements use
the gt_entry field. */
typedef union
{
struct
{
/* -G value actually used for this object file. */
unsigned long gt_current_g_value;
/* Unused. */
unsigned long gt_unused;
} gt_header;
struct
{
/* If this -G argument has been used... */
unsigned long gt_g_value;
/* ...this many GP section bytes would be required. */
unsigned long gt_bytes;
} gt_entry;
} Elf32_gptab;
/* The external version of Elf32_gptab. */
typedef union
{
struct
{
unsigned char gt_current_g_value[4];
unsigned char gt_unused[4];
} gt_header;
struct
{
unsigned char gt_g_value[4];
unsigned char gt_bytes[4];
} gt_entry;
} Elf32_External_gptab;
/* A section of type SHT_MIPS_REGINFO contains the following
structure. */
typedef struct
{
/* Mask of general purpose registers used. */
unsigned long ri_gprmask;
/* Mask of co-processor registers used. */
unsigned long ri_cprmask[4];
/* GP register value for this object file. */
long ri_gp_value;
} Elf32_RegInfo;
/* The external version of the Elf_RegInfo structure. */
typedef struct
{
unsigned char ri_gprmask[4];
unsigned char ri_cprmask[4][4];
unsigned char ri_gp_value[4];
} Elf32_External_RegInfo;
/* MIPS ELF .reginfo swapping routines. */
extern void bfd_mips_elf32_swap_reginfo_in
PARAMS ((bfd *, const Elf32_External_RegInfo *, Elf32_RegInfo *));
extern void bfd_mips_elf32_swap_reginfo_out
PARAMS ((bfd *, const Elf32_RegInfo *, Elf32_External_RegInfo *));
/* Processor specific section flags. */
/* This section must be in the global data area. */
#define SHF_MIPS_GPREL 0x10000000
/* Processor specific program header types. */
/* Register usage information. Identifies one .reginfo section. */
#define PT_MIPS_REGINFO 0x70000000
/* Processor specific dynamic array tags. */
/* 32 bit version number for runtime linker interface. */
#define DT_MIPS_RLD_VERSION 0x70000001
/* Time stamp. */
#define DT_MIPS_TIME_STAMP 0x70000002
/* Checksum of external strings and common sizes. */
#define DT_MIPS_ICHECKSUM 0x70000003
/* Index of version string in string table. */
#define DT_MIPS_IVERSION 0x70000004
/* 32 bits of flags. */
#define DT_MIPS_FLAGS 0x70000005
/* Base address of the segment. */
#define DT_MIPS_BASE_ADDRESS 0x70000006
/* Address of .conflict section. */
#define DT_MIPS_CONFLICT 0x70000008
/* Address of .liblist section. */
#define DT_MIPS_LIBLIST 0x70000009
/* Number of local global offset table entries. */
#define DT_MIPS_LOCAL_GOTNO 0x7000000a
/* Number of entries in the .conflict section. */
#define DT_MIPS_CONFLICTNO 0x7000000b
/* Number of entries in the .liblist section. */
#define DT_MIPS_LIBLISTNO 0x70000010
/* Number of entries in the .dynsym section. */
#define DT_MIPS_SYMTABNO 0x70000011
/* Index of first external dynamic symbol not referenced locally. */
#define DT_MIPS_UNREFEXTNO 0x70000012
/* Index of first dynamic symbol in global offset table. */
#define DT_MIPS_GOTSYM 0x70000013
/* Number of page table entries in global offset table. */
#define DT_MIPS_HIPAGENO 0x70000014
/* Address of run time loader map, used for debugging. */
#define DT_MIPS_RLD_MAP 0x70000016
/* MIPS PPC support for BFD.
Copyright (C) 1995 Free Software Foundation, Inc.
By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information
in the System V Application Binary Interface, PowerPC Processor Supplement
and the PowerPC Embedded Application Binary Interface (eabi).
This file is part of BFD, the Binary File Descriptor library.
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This file holds definitions specific to the PPC ELF ABI. Note
that most of this is not actually implemented by BFD. */
/* Processor specific flags for the ELF header e_flags field. */
#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */
/* CYGNUS local bits below */
#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag */
This diff is collapsed.
#include <linux/module.h>
#include <linux/smp.h>
static struct symbol_table arch_symbol_table = {
#include <linux/symtab_begin.h>
/* platform dependent support */
#include <linux/symtab_end.h>
};
void arch_syms_export(void)
{
register_symtab(&arch_symbol_table);
}
OUTPUT_ARCH(powerpc)
SEARCH_DIR(/usr/local/lib/gcc-lib/powerpc-linux-elf/2.7.0/);
SEARCH_DIR(libc); SEARCH_DIR(../sa_test/libc);
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
/* Do we need any of these for elf?
__DYNAMIC = 0; */
SECTIONS
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment