diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/lilo-sh/files/lilo-sh-linux.patch | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/lilo-sh/files/lilo-sh-linux.patch')
-rw-r--r-- | packages/lilo-sh/files/lilo-sh-linux.patch | 1971 |
1 files changed, 0 insertions, 1971 deletions
diff --git a/packages/lilo-sh/files/lilo-sh-linux.patch b/packages/lilo-sh/files/lilo-sh-linux.patch deleted file mode 100644 index 0eadf26cff..0000000000 --- a/packages/lilo-sh/files/lilo-sh-linux.patch +++ /dev/null @@ -1,1971 +0,0 @@ -This is the patch that upgrade lilo to match the version included in -the old lilosh CVS. - -diff -ruN lilo.orig/ChangeLog lilo/ChangeLog ---- lilo.orig/ChangeLog Thu Jan 1 09:00:00 1970 -+++ lilo/ChangeLog Thu Dec 7 16:17:10 2000 -@@ -0,0 +1,44 @@ -+2000-11-26 NIIBE Yutaka <gniibe@m17n.org> -+ -+ * first.S (done): Flush the cache. -+ * second.c (start): Call cache_flush. -+ (cache_flush): New function. -+ -+2000-11-25 NIIBE Yutaka <gniibe@m17n.org> -+ -+ * first.S: Don't put '$' for register spec. -+ * second.c (start): Don't put '$' for register spec. -+ (machine_type, memory_size, io_base, put_string_1, read_sectors): -+ Likewise. -+ * second.lds: Use new tool chain's ldscript. -+ * defs.h: Add declaration of memcpy. -+ -+2000-09-09 NIIBE Yutaka <gniibe@m17n.org> -+ -+ * first.S (real_start): Set argument 0 for cache enable call. -+ -+2000-08-19 NIIBE Yutaka <gniibe@m17n.org> -+ -+ * second.c (get_sector_address): Bug fix for # of sector == 0. -+ (start): Support machine types of CqREEK and SolutionEngine. -+ -+ * first.S (load_sector_address): Bug fix for checking LBA. -+ (real_start): Call "enable cache" BIOS feature. -+ -+2000-08-05 NIIBE Yutaka <gniibe@m17n.org> -+ -+ * Makefile (first.o): Added -traditional for "'" in comments. -+ -+ * second.c (machine_type, serial_type, memory_size, io_base): New -+ functions. -+ (start): Implement kernel command line handling a bit. -+ (read_sectors): Emit error message. -+ (get_sector_address): Emit error message. -+ -+ * first.S (read_a_sector): Implement error handling. -+ (load_sector_address): Check if it's LBA. -+ -+2000-07-22 NIIBE Yutaka <gniibe@m17n.org> -+ -+ * second.c (start): Don't load two magic sectors at the memory -+ of executable image. -diff -ruN lilo.orig/Makefile lilo/Makefile ---- lilo.orig/Makefile Fri Dec 8 10:10:02 2000 -+++ lilo/Makefile Fri Dec 8 11:46:04 2000 -@@ -39,76 +39,55 @@ - GO=-DGO=0x`sed '/go/s/^.*go 0 \(....\) A.*$$/\1/p;d' first.lis` - - SHELL=/bin/sh --CC=cc --CPP=$(CC) -E --AS86=as86 -0 -a --LD86=ld86 -0 - --CFLAGS=-Wall -g $(PCONFIG) --LDFLAGS=#-Xlinker -qmagic -+CROSS_COMPILE = sh3-linux- -+CC =$(CROSS_COMPILE)gcc -+LD =$(CROSS_COMPILE)ld -+OBJCOPY =$(CROSS_COMPILE)objcopy -+STRIP =$(CROSS_COMPILE)strip -+ -+CFLAGS = -O2 -I. -pipe -fPIC $(CONFIG) -DPATH_MAX=255 -+CPP=$(CC) -E -traditional -+ -+#CFLAGS=-Wall -g $(PCONFIG) -+#LDFLAGS=#-Xlinker -qmagic - - OBJS=lilo.o map.o geometry.o boot.o device.o common.o bsect.o cfg.o temp.o \ - partition.o identify.o - --.SUFFIXES: .img .b -+.SUFFIXES: .b - --all: check-config lilo boot.b dump.b os2_d.b chain.b dparam.com \ -- activate -- --check-config: -- $(CPP) check-config.cpp $(PCONFIG) >/dev/null -+all: lilo boot.b - - .c.o: - $(CC) -c $(CFLAGS) $*.c - --.s.o: -- $(AS86) -w -o $*.o $*.s -- --.o.img: -- $(LD86) -s -o $*.img $*.o -+boot.b: first.bin second.bin -+ cat first.bin second.bin >boot.b - --.img.b: -- dd if=$*.img of=$*.b bs=32 skip=1 -+first.bin: first.exe -+ $(OBJCOPY) -S first.exe -O binary first.bin - --activate: activate.c -- $(CC) -Wall -s -O -o activate activate.c $(LDFLAGS) -- --dparam.com: dparam.img -- dd if=dparam.img of=dparam.com bs=288 skip=1 -- --lilo: $(OBJS) -- $(CC) -o lilo $(LDFLAGS) $(OBJS) -+second.bin: second.exe -+ $(OBJCOPY) -R .comment -S second.exe -O binary second.bin - --boot.b: first.b second.b -- (dd if=first.b bs=512 conv=sync; dd if=second.b) >boot.b -+first.exe: first.o -+ $(LD) -EL -e start first.o -o first.exe -Ttext 0x8c200000 - --first.s: first.S lilo.h lilo -- $(CPP) $(PCONFIG) `./lilo -X` first.S -o first.s -+second.exe: second.o string.o -+ $(LD) -T second.lds -EL second.o string.o -o second.exe -Ttext 0x8c201000 - --second.s: second.S lilo.h lilo -- $(CPP) $(PCONFIG) $(GO) `./lilo -X` second.S -o second.s -+first.o: first.S -+ $(CC) $(CFLAGS) -c first.S - --chain.s: chain.S lilo.h -- $(CPP) $(PCONFIG) $(GO) chain.S -o chain.s -+second.o: second.c -+ $(CC) $(CFLAGS) -c second.c - --os2_d.s: chain.S lilo.h -- $(CPP) $(PCONFIG) $(GO) chain.S -DDOS_D -o os2_d.s -+string.o: string.c -+ $(CC) $(CFLAGS) -c string.c - --#dos_d.s: chain.S lilo.h first.lis --# $(CPP) $(PCONFIG) $(GO) chain.S -DDOS_D -o dos_d.s -- --dump.s: dump.S lilo.h first.lis -- $(CPP) $(PCONFIG) `./lilo -X` dump.S -DDOS_D -o dump.s \ -- -DGO=0x`sed '/go/s/^.*go 0 \(....\) A.*$$/\1/p;d' first.lis` -- --xxx.s: chain.S lilo.h -- $(CPP) chain.S -DXXX -o xxx.s -- --first.o first.lis: first.s -- $(AS86) -w -o first.o -l first.lis first.s -- --second.lis: second.s -- $(AS86) -w -l second.lis second.s -+lilo: $(OBJS) -+ $(CC) -o lilo $(LDFLAGS) $(OBJS) - - install: all - if [ ! -d $$ROOT$(SBIN_DIR) ]; then mkdir $$ROOT$(SBIN_DIR); fi -@@ -118,13 +97,9 @@ - mkdir $$ROOT$(USRSBIN_DIR); fi - if [ -f $$ROOT$(BOOT_DIR)/boot.b ]; then \ - mv $$ROOT$(BOOT_DIR)/boot.b $$ROOT$(BOOT_DIR)/boot.old; fi -- if [ -f $$ROOT$(BOOT_DIR)/chain.b ]; then \ -- mv $$ROOT$(BOOT_DIR)/chain.b $$ROOT$(BOOT_DIR)/chain.old; fi -- if [ -f $$ROOT$(BOOT_DIR)/os2_d.b ]; then \ -- mv $$ROOT$(BOOT_DIR)/os2_d.b $$ROOT$(BOOT_DIR)/os2_d.old; fi -- cp boot.b chain.b os2_d.b $$ROOT$(BOOT_DIR) -+ cp boot.b $$ROOT$(BOOT_DIR) - cp lilo $$ROOT$(SBIN_DIR) -- strip $$ROOT$(SBIN_DIR)/lilo -+ $(STRIP) $$ROOT$(SBIN_DIR)/lilo - cp keytab-lilo.pl $$ROOT$(USRSBIN_DIR) - @if [ -e $$ROOT/etc/lilo/install ]; then echo; \ - echo -n "$$ROOT/etc/lilo/install is obsolete. LILO is now ";\ -@@ -142,11 +117,8 @@ - && mv ../lilo ../lilo-`cat VERSION` - - clean: -- rm -f *.o *.img *.lis first.s second.s chain.s \ -- os2_d.s dump.s tmp_make first.b second.b -- --spotless: clean -- rm -f lilo activate boot.b chain.b os2_d.b dump.b dparam.com -+ rm -f *.o *.exe *.bin tmp_make -+ rm -f lilo boot.b - - ### Dependencies - activate.o : activate.c -diff -ruN lilo.orig/chain.S lilo/chain.S ---- lilo.orig/chain.S Thu Oct 15 05:14:25 1998 -+++ lilo/chain.S Thu Jan 1 09:00:00 1970 -@@ -1,255 +0,0 @@ --/* chain.S - LILO boot chainer */ -- --/* Copyright 1992-1998 Werner Almesberger. See file COPYING for details. */ -- -- --#define LILO_ASM --#include "lilo.h" -- -- -- .text -- -- .globl _main -- .org 0 -- --_main: jmp start -- -- .org 6 -- -- .ascii "LILO" -- .word STAGE_CHAIN -- .word VERSION -- --offset: .word 0 --drive: .byte 0 -- .byte 0 ! head, always zero -- --hint: .word drvmap ! pointer to drive map -- --ptable: .blkw 0x20 ! partition table to preload -- --start: cli ! set SS:SP to 0:7C00 -- xor ax,ax -- mov ss,ax -- mov ax,#0x7c00 -- mov sp,ax -- sti -- mov ax,#SETUPSEG ! move boot sector to default location -- mov ds,ax -- xor ax,ax -- mov es,ax -- mov cx,#256 --mtmp = SETUPSECS-1 ! broken math ... -- mov si,#mtmp*512 -- mov di,#BOOTSEG*16 -- rep -- movsw --#ifdef DOS_D --dos4: seg es -- mov byte ptr BOOTSEG*16+0x24,#0x81 --#endif -- mov cx,#0x20 ! move partition table -- mov si,#ptable -- mov di,#PART_TABLE -- rep -- movsw -- ! mess with the partition table --#if defined(LCF_REWRITE_TABLE) || defined(LCF_READONLY) -- mov si,#prtmap ! get partition table change rules --prtclp: lodsw ! bios == 0 indicates end -- or al,al -- jz pmend ! at end -> quit -- cmp al,cache ! already in cache ? -- je incache ! yes -> no loading required -- push ax ! save table data -- call flush ! flush the cache -- pop ax -- push ax -- mov cache,al ! remember drive in cache -- cmp al,drive ! boot drive ? -- jne noc ! no -> load into scratch area -- xor ax,ax ! load at 0000:0600 -- mov bx,#PARTS_LOAD -- jmp loadit --noc: mov ax,ds -- mov bx,#PARTS_SCR ! scratch area --loadit: mov es,ax ! set up pointers and remember them -- mov ces,ax -- mov cbx,bx -- mov ax,#0x201 ! load partition table, one sector -- mov dx,cache ! drive from cache (DH = 0) -- mov cx,#1 -- int 0x13 ! load it -- jc wrfail ! error -> abort -- pop ax ! get BIOS and offset --incache:les bx,cbx ! load pointer -- add bx,#PART_TABLE_OFFSET ! move to partition table -- add bl,ah ! offset is always in [0x1be,0x1fd] -- lodsw ! see what we need to do -- seg es ! match ? -- cmp byte ptr (bx),al -- jne nocng ! no -> do not change -- seg es ! change -- mov byte ptr (bx),ah -- mov byte ptr dirty,#1 ! mark as dirty --nocng: br prtclp ! next one -- --flush: test byte ptr dirty,#1 ! dirty ? -- jz noflush ! no -> do not write -- mov ax,#0x301 ! write one sector -- mov dx,cache ! get the drive -- or dl,dl ! nothing cached ? -- jz noflush ! no -> do not flush -- les bx,cbx ! reload pointer -- int 0x13 ! write ... -- jc wrfail ! argl --noflush:ret --pmend: call flush ! flush table -- br nopp ! and proceed --wrfail: mov si,#failmsg ! complain -- call say -- mov ax,#FIRSTSEG ! try to restart LILO -- jmpi #GO,FIRSTSEG -- --cache: .byte 0 ! drive, 0 means not cached -- .byte 0 ! head, always 0 --cbx: .blkw 1 --ces: .blkw 1 --dirty: .byte 0 -- --#endif -- --nopp: -- mov ax,drvmap ! need to install mapper ? -- or ax,ax -- jz noimap ! no -> go on -- call swap13 --noimap: -- -- mov si,offset ! DS:SI and ES:SI point to the partition -- add si,#PART_TABLE -- mov dx,drive ! initialize DX (drive and head) -- xor ax,ax ! set DS and ES to zero --#ifdef XXX -- mov ax,ds -- mov es,ax -- mov si,#lilosig -- mov bx,#cmd -- mov dl,#0xfe --#else -- mov ds,ax -- mov es,ax --#endif -- mov bp,#0 ! might help some boot problems -- mov ax,#0xaa55 ! boot signature (just in case ...) -- jmpi #BOOTSEG*16,0 ! start boot sector -- --#ifdef XXX --lilosig:.ascii "LILO" --cmd: .ascii "98" -- .byte 0 --#endif -- --#if defined(LCF_REWRITE_TABLE) -- --! Display a NUL-terminated string on the console -- --say: lodsb ! get byte -- or al,al ! NUL ? -- jz aret ! yes -> done -- mov ah,#14 ! display, tty-style -- xor bh,bh -- int 0x10 -- jmp say ! next one --aret: ret ! done -- --failmsg:.ascii "Rewrite error." -- .byte 13,10,0 -- --#endif -- --swap13: seg es ! allocate 1 kB -- dec word ptr [0x413] -- int 0x12 ! get start segment -- mov cl,#6 -- shl ax,cl -- cli ! disable interrupts -- xor bx,bx ! zero a few registers -- mov di,bx -- seg es ! change offset -- xchg bx,[0x4c] -- mov old13of,bx -- mov bx,ax ! change segment -- seg es -- xchg bx,[0x4e] -- mov old13sg,bx -- mov es,ax ! move drive swapper -- mov si,#new13 -- mov cx,#new13end-new13 -- rep -- movsb -- sti ! enable interrupts -- ret ! done -- --new13: push ax ! save AX (contains function code in AH) -- push bp ! need BP to mess with stack -- mov bp,sp -- ! Stack layout: -- ! -- ! +8 INT flags -- ! +6 INT CS -- ! +4 INT IP -- ! +2 AX -- ! BP+0 BP -- pushf ! push flags (to act like interrupt) -- push si -- mov si,#drvmap-new13 --mapfl: seg cs ! get next entry -- lodsw -- or ax,ax ! at end ? -- jz nomap ! yes -> do not map -- cmp dl,al ! match ? -- jne mapfl ! no -> continue -- mov dl,ah ! map drive --nomap: pop si ! restore SI -- mov 8(bp),ax ! overwrite old flags (to remember mapping) -- mov ax,2(bp) ! restore AX -- mov bp,(bp) ! restore BP -- .byte 0x9a ! CALL FAR --old13of:.word 0 --old13sg:.word 0 -- push bp ! save BP again -- mov bp,sp -- ! New stack layout: -- ! -- ! +10 mapping (was flags) -- ! +8 INT CS -- ! +6 INT IP -- ! +4 AX -- ! +2 obsolete BP -- ! BP+0 BP -- xchg ax,4(bp) ! save AX and get command -- pushf ! fix driver number, if necessary -- cmp ah,#8 ! do not fix -- je done13 -- cmp ah,#0x15 ! do not fix -- je done13 -- mov ax,10(bp) ! no mapping ? -- or ax,ax -- jz done13 -- mov dl,al ! fix mapping --done13: mov ax,4(bp) ! restore AX -- pop 10(bp) ! restore flags -- pop bp ! get BP -- add sp,#4 ! fix SP -- iret ! done -- --drvmap: .blkw DRVMAP_SIZE+1 -- --new13end: -- --#if defined(LCF_REWRITE_TABLE) --prtmap: .blkw PRTMAP_SIZE*2+1 ! only first word of last entry is read --#endif -- --theend: -diff -ruN lilo.orig/chain.old.S lilo/chain.old.S ---- lilo.orig/chain.old.S Wed Jun 18 16:42:15 1997 -+++ lilo/chain.old.S Thu Jan 1 09:00:00 1970 -@@ -1,260 +0,0 @@ --/* chain.S - LILO boot chainer */ -- --/* Copyright 1992-1997 Werner Almesberger. See file COPYING for details. */ -- -- --#define LILO_ASM --#include "lilo.h" -- -- -- .text -- -- .globl _main -- .org 0 -- --_main: jmp start -- -- .org 2 -- -- .ascii "LILO" -- .word STAGE_CHAIN -- .word VERSION -- --offset: .word 0 --drive: .byte 0 -- .byte 0 ! head, always zero -- --start: cli ! set SS:SP to 0:7C00 -- xor ax,ax -- mov ss,ax -- mov ax,#0x7c00 -- mov sp,ax -- sti -- mov ax,#SETUPSEG ! move boot sector to default location -- mov ds,ax -- xor ax,ax -- mov es,ax -- mov cx,#256 -- mov si,#512 -- mov di,#BOOTSEG*16 -- rep -- movsw -- push bx ! save secret message --#ifdef DOS_D --#if 0 -- seg es -- cmp byte ptr BOOTSEG*16+0x26,#0x29 -- je dos4 -- mov bx,#baddos ! complain -- call say -- mov ax,#FIRSTSEG ! restart LILO -- jmpi #GO,FIRSTSEG --#endif --dos4: seg es -- mov byte ptr BOOTSEG*16+0x24,#0x81 --#endif -- mov cx,#0x20 ! move partition table -- mov si,#PART_TABLE_OFFSET -- mov di,#PART_TABLE -- rep -- movsw --#if defined(SWAP_HD) || defined(SWAP_FD) -- call swap13 --#endif -- ! table entry -- pop bx ! get secret message (active partition) --#ifdef LCF_REWRITE_TABLE -- or bl,bl ! none set ? -- jz tonopp ! yes -> do not patch --br tonopp -- cmp bx,#0x81 ! valid code ? -- jb towrfail ! no -> abort -- cmp bx,#0x84 -- jna wrokay ! yes -> continue --towrfail:br wrfail --tonopp: br nopp --wrokay: push bx ! save BX -- xor ax,ax ! ES becomes 0 -- mov es,ax -- mov ax,#0x201 ! load partition table, one sector -- mov dx,#0x80 ! first drive -- mov cx,#1 -- mov bx,#PARTS_LOAD -- int 0x13 ! load it -- jc wrfail ! error -> abort -- mov cx,#4 ! process all four entries -- mov bx,#PART_TABLE --ptchpt: seg es ! clear all active flags -- mov byte ptr (bx),#0 --#if defined(LCF_FIX_TYPE) && defined(LCF_HIDE_DOS) -- seg es -- mov al,(bx+4) ! get partition type -- cmp al,#PART_DOS12 ! hidden ? -- je hideme ! no -> hide it -- cmp al,#PART_DOS16 -- je hideme -- cmp al,#PART_DOS32 -- jne nonrel ! already hidden -> continue --hideme: add al,#HIDDEN_OFF ! write back corrected value -- seg es -- mov (bx+4),al --#endif --nonrel: add bx,#16 ! next entry -- loop ptchpt -- pop bx ! compute active flag position -- dec bx -- shl bl,1 -- shl bx,1 -- shl bx,1 -- shl bx,1 -- cmp bx,offset ! right ? -- jne wrfail ! no -> abort -- seg es ! set active flag -- mov byte ptr (bx+PART_TABLE),#0x80 --#ifdef LCF_FIX_TYPE -- seg es ! is this a -- mov al,byte ptr (bx+PART_TABLE+4) -- cmp al,#PART_HDOS12 ! hidden ? -- je unhideme ! yes -> unhide it -- cmp al,#PART_HDOS16 -- je unhideme -- cmp al,#PART_HDOS32 -- jne nounhid ! not hidden -> continue --unhideme:sub al,#HIDDEN_OFF ! write back corrected value -- seg es -- mov (bx+PART_TABLE+4),al --#endif --nounhid:mov ax,#0x301 ! save it (restore all registers for -- mov dx,#0x80 ! paranoia) -- mov cx,#1 -- mov bx,#0x600 -- int 0x13 ! write ... -- jc wrfail ! argl -- mov bx,#passmsg ! confirm modification -- call say -- jmp nopp --wrfail: mov bx,#failmsg ! complain -- call say -- mov ax,#FIRSTSEG ! restart LILO -- jmpi #GO,FIRSTSEG --#endif --nopp: mov si,offset ! DS:SI and ES:SI point to the partition -- add si,#PART_TABLE -- mov dx,drive ! initialize DX (drive and head) -- xor ax,ax ! set DS and ES to zero --#ifdef XXX -- mov ax,ds -- mov es,ax -- mov si,#lilosig -- mov bx,#cmd -- mov dl,#0xfe --#else -- mov ds,ax -- mov es,ax --#endif -- mov bp,#0 ! might help some boot problems -- mov ax,#0xaa55 ! boot signature (just in case ...) -- jmpi #BOOTSEG*16,0 ! start boot sector -- --#ifdef XXX --lilosig:.ascii "LILO" --cmd: .ascii "98" -- .byte 0 --#endif -- --#if defined(DOS_D) || defined(LCF_REWRITE_TABLE) -- --! Display a NUL-terminated string on the console -- --say: mov al,(bx) ! get byte -- or al,al ! NUL ? -- jz aret ! yes -> done -- push bx ! save pointer -- mov ah,#14 ! display, tty-style -- xor bh,bh -- int 0x10 -- pop bx -- inc bx ! next one -- jmp say --aret: ret ! done -- --#ifdef DOS_D --baddos: .ascii "Need DOS version 4 or newer." -- .byte 13,10,0 --#endif -- --failmsg:.ascii "Rewrite error." -- .byte 13,10,0 -- --passmsg:.ascii "Rewrote the partition table." -- .byte 13,10,0 -- --#endif -- --#if defined(SWAP_HD) || defined(SWAP_FD) -- --swap13: seg es ! allocate 1 kB -- dec word ptr [0x413] -- int 0x12 ! get start segment -- mov cl,#6 -- shl ax,cl -- cli ! disable interrupts -- xor bx,bx ! zero a few registers -- mov di,bx -- seg es ! change offset -- xchg bx,[0x4c] -- mov old13of,bx -- mov bx,ax ! change segment -- seg es -- xchg bx,[0x4e] -- mov old13sg,bx -- mov es,ax ! move drive swapper -- mov si,#new13 -- mov cx,#new13end-new13 -- rep -- movsb -- sti ! enable interrupts -- ret ! done -- --new13: seg cs ! save function code -- mov fcode-new13,ah -- test dl,#0x80 ! hard disk drive ? --#ifdef SWAP_FD -- jnz noswap ! yes -> go on --#else -- jz noswap ! no -> go on --#endif -- xor dl,#1 ! swap drive 0 and 1 --noswap: pushf -- .byte 0x9a ! CALL FAR --old13of:.word 0 --old13sg:.word 0 -- pushf ! fix driver number, if necessary -- seg cs -- cmp byte ptr fcode-new13,#8 ! do not fix -- je done13 -- seg cs -- cmp byte ptr fcode-new13,#0x15 ! do not fix -- je done13 -- test dl,#0x80 ! hard disk drive ? --#ifdef SWAP_FD -- jnz done13 ! yes -> go on --#else -- jz done13 ! no -> go on --#endif -- xor dl,#1 ! fix it --done13: seg cs -- mov tmpbx-new13,bx ! restore flags -- mov bx,sp -- seg ss -- pop 6(bx) -- seg cs -- mov bx,tmpbx-new13 -- iret ! done --new13end: --fcode: .byte 0 ! function code --tmpbx: .word 0 -- --#endif -- --theend: -diff -ruN lilo.orig/defs.h lilo/defs.h ---- lilo.orig/defs.h Thu Jan 1 09:00:00 1970 -+++ lilo/defs.h Thu Dec 7 16:17:10 2000 -@@ -0,0 +1,2 @@ -+extern void *memcpy (void *__dest, const void *__src, unsigned int __n); -+extern int strlen (__const char *__s); -diff -ruN lilo.orig/dump.S lilo/dump.S ---- lilo.orig/dump.S Wed Jun 18 16:42:22 1997 -+++ lilo/dump.S Thu Jan 1 09:00:00 1970 -@@ -1,131 +0,0 @@ --/* dump.S - LILO register dumper */ -- --/* Copyright 1995-1997 Werner Almesberger. See file COPYING for details. */ -- -- --#define LILO_ASM --#include "lilo.h" -- -- -- .text -- -- .globl _main -- .org 0 -- --_main: push sp ! push all registers -- push ss -- pushf -- push es -- push ds -- push cs -- push bp -- push di -- push si -- push dx -- push cx -- push bx -- push ax -- mov ax,#BOOTSEG ! let DS point to where we really are -- mov ds,ax -- mov bx,#msgs ! set up loop --l: call say ! output message -- cmp byte ptr (bx),#0 ! at end ? -- je back ! yes -> back to LILO -- pop ax ! get next data word -- push bx -- call wout ! output data word -- pop bx -- jmp l ! next round -- --#if 0 --back: mov ax,#FIRSTSEG -- mov ds,ax -- mov word ptr (CODE_START_1),#CODE_START_1+8 -- mov word ptr (CODE_START_1+2),#FIRSTSEG -- mov word ptr (CODE_START_1+4),#CODE_START_1+12 -- mov byte ptr (CODE_START_1+6),#0xfe -- mov es,ax ! adjust segments -- mov ax,#BOOTSEG -- mov ds,ax -- mov word ptr (10),#0xffff ! no timeout -- mov si,#haltnow ! copy string data -- mov di,#CODE_START_1+8 -- mov cx,#6 -- rep -- movsb -- mov ax,#FIRSTSEG ! restart LILO -- jmpi #GO,FIRSTSEG --#else --back: hlt ! stay here -- jmp back --#endif -- --! Display a NUL-terminated string on the console -- --say: mov al,(bx) ! get byte -- inc bx ! move pointer -- or al,al ! NUL ? -- jz aret ! yes -> done -- push bx ! save pointer -- mov ah,#14 ! display, tty-style -- xor bh,bh -- int 0x10 -- pop bx -- jmp say ! next one -- --wout: push ax ! display one word -- mov al,ah -- call bout -- pop ax --bout: push ax ! display one byte -- shr al,#4 -- call nout -- pop ax --nout: and al,#15 ! display one nibble -- add al,#48 -- cmp al,#58 -- jb nokay -- add al,#7 --nokay: xor bh,bh ! display on screen -- mov ah,#14 -- int 0x10 --aret: ret -- --msgs: .byte 13,10 -- .ascii "Register dump:" -- .byte 13,10,10 -- .ascii "AX=" -- .byte 0 -- .ascii " BX=" -- .byte 0 -- .ascii " CX=" -- .byte 0 -- .ascii " DX=" -- .byte 0,13,10 -- .ascii "SI=" -- .byte 0 -- .ascii " DI=" -- .byte 0 -- .ascii " BP=" -- .byte 0,13,10 -- .ascii "CS=" -- .byte 0 -- .ascii " DS=" -- .byte 0 -- .ascii " ES=" -- .byte 0,13,10 -- .ascii "F=" -- .byte 0,13,10 -- .ascii "SS:SP=" -- .byte 0 -- .ascii ":" -- .byte 0,13,10,10 --#if 0 -- .ascii "Restarting LILO ..." --#else -- .ascii "System halted." --#endif -- .byte 13,10,10,0,0 -- --haltnow:.ascii "LILO" ! prevent automatic reboot -- .byte 0 -diff -ruN lilo.orig/first.S lilo/first.S ---- lilo.orig/first.S Sat Dec 5 08:20:12 1998 -+++ lilo/first.S Thu Dec 7 16:17:10 2000 -@@ -1,226 +1,257 @@ --/* first.S - LILO first stage boot loader */ -- --/* Copyright 1992-1998 Werner Almesberger. See file COPYING for details. */ -- -- --#define LILO_ASM --#include "lilo.h" -- --#ifndef LCF_NO1STDIAG --#define CYL_CHECK --#endif -- -- -- .text -- -- .globl _main -- -- .org 0 -- --_main: cli ! NT 4 blows up if this is missing -- jmp start -- -- .org 6 -- --! Boot device parameters. They are set by the installer. -- -+/* $Id: first.S,v 1.16 2000/11/26 07:11:58 gniibe Exp $ -+ * -+ * Primary boot loader -+ * -+ * lilo/arch/sh/first.S -+ * -+ * Copyright (C) 2000 Niibe Yutaka -+ * -+ * This file is subject to the terms and conditions of the GNU General -+ * Public License. -+ * -+ */ -+ -+/* -+ * NOTE: Keep this code "position independent", so that this works well -+ * among machines with different memory map. -+ * -+ * Some machine starts its memmory at 0x08000000 (Area2), -+ * while others starts at 0x0c000000 (Area3). -+ */ -+ -+/* -+ * Memory map: -+ * [ First Loader ] 512 -+ * [ Stack ] 4096-512 -+ * [ Second Loader ] 4KB -+ * [ Reserved ] 4KB -+ * [ MAP load area ] 512 -+ * [ Descriptor table 1/2 ] 512 -+ * [ Descriptor table 2/2 ] 512 -+ * [ Default Command Line ] 512 -+ * [ Keyboard Translation ] 512 -+ * [ Greeting Message ] 512 -+ * [ Reserved ] -+ * [ Reserved ] -+ * -+ */ -+ .global start -+start: -+ bra real_start -+ .byte 3 ! This becomes "mov r0, r12" with next "l" -+ ! -+ .ascii "lba" ! special marker for LBA32 -+ ! - .ascii "LILO" -- .word STAGE_FIRST -- .word VERSION -+ .word 1 -+#if 1 -+ /* EDIT HERE ! */ -+ ! Depends LILOs version -+ .word 20 -+#else -+ /* v--- Major Version */ -+ .word 4*256 + 21 -+ ! /* ^--- Minor Version*/ -+#endif - -+/* x86 LILO parameters (Not used for SuperH... yet) */ - timeout:.word 0 ! input timeout - delay: .word 0 ! boot delay - port: .byte 0 ! COM port (0 = unused, 1 = COM1, etc.) - sparam: .byte 0 ! serial port parameters (0 = unused) - --tstamp: .long 0 ! timestamp -+/* Timestamp (Filled by LILO command) */ -+tstamp: .long 0 - --d1_cx: .word 0 ! first descriptor sector address -+/* First descripter sector (Filled by LILO command) */ -+d1_cx: .word 0 - d1_dx: .word 0 --d1_al: .byte 0 ! (unused) -+d1_al: .byte 0 - --d2_cx: .word 0 ! second descriptor sector address -+/* Second descripter sector (Filled by LILO command) */ -+d2_cx: .word 0 - d2_dx: .word 0 --d2_al: .byte 0 ! (unused) -+d2_al: .byte 0 - --dc_cx: .word 0 ! default command-line sector address -+/* Default command-line sector (Filled by LILO command) */ -+dc_cx: .word 0 - dc_dx: .word 0 --dc_al: .byte 0 ! (unused) -+dc_al: .byte 0 - -+/* Prompt? (Filled by LILO command) */ - prompt: .byte 0 ! indicates whether to always enter prompt - ! (also used as alignment byte) - -+/* Greeting message length & sector (Filled by LILO command) */ - ms_len: .word 0 ! initial greeting message - ms_cx: .word 0 - ms_dx: .word 0 --ms_al: .byte 0 ! (unused) -+ms_al: .byte 0 - -+/* Second descripter sector (Filled by LILO command) */ - kt_cx: .word 0 ! keyboard translation table - kt_dx: .word 0 - kt_al: .byte 0 - - d_addr: ! second stage sector addresses - -- .org CODE_START_1 -- --ext_si: .word 0 ! external interface --ext_es: .word 0 --ext_bx: .word 0 --ext_dl: .byte 0 -- --start: mov ax,#BOOTSEG ! set DS -- mov ds,ax -- mov ext_es,es ! copy possible external parameters -- mov ext_si,si -- mov ext_bx,bx -- mov ext_dl,dl -- mov ax,#FIRSTSEG ! beam us up ... -- mov es,ax -- mov cx,#256 -- sub si,si -- sub di,di -- cld -- rep -- movsw -- jmpi go,FIRSTSEG -- --go: cli ! no interrupts -- mov ds,ax ! AX is already set -- mov es,ax ! (ES may be wrong when restarting) -- mov sp,#STACK ! set the stack -- mov ax,#STACKSEG -- mov ss,ax -- sti ! now it is safe -- -- mov al,#0x0d ! gimme a CR ... -- call display -- mov al,#0x0a ! ... an LF ... -- call display -- mov al,#0x4c ! ... an 'L' ... -- call display -- --lagain: mov si,#d_addr ! ready to load the second stage loader -- mov bx,#SECOND -- cld --sload: lodsw ! get CX -- mov cx,ax -- lodsw ! get DX -- mov dx,ax -- or ax,cx ! at EOF ? -- jz done ! yes -> start it -- inc si ! skip the length byte -- call cread -- jc error ! error -> start over again -- add bx,#512 ! next sector -- jmp sload --error: --#ifndef LCF_NO1STDIAG -- push ax ! display a space -- mov al,#32 -- call display -- pop ax -- mov al,ah ! display error code -- call bout --#endif -- xor ax,ax ! reset the FDC -- mov dl,al -- int 0x13 -- jmp lagain ! redo from start --done: mov al,#0x49 ! display an 'I' -- call display -- jmpi 0,SECONDSEG ! start the second stage loader -- --#ifndef LCF_NO1STDIAG --bout: push ax ! display one byte -- shr al,#4 -- call nout -- pop ax --nout: and al,#15 ! display one nibble -- add al,#48 -- cmp al,#58 -- jb nokay -- add al,#7 --nokay: ! fall through --#endif -- --display:xor bh,bh ! display on screen -- mov ah,#14 -- int 0x10 -- ret -- --linerr: pop dx ! discard stack contents -- pop cx -- pop bx -- ret ! (carry is already set) -- --cread: test dl,#LINEAR_FLAG ! linear address ? -- jz readsect ! no -> go on -- and dl,#0xff-LINEAR_FLAG ! remove flag -- --! --! Translate the linear address into a sector/track/cylinder address --! -- push bx ! BX is used as scratch -- push cx ! LSW -- push dx ! MSW with drive -- mov ah,#8 ! get drive geometry (do not clobber ES:DI) -- int 0x13 -- jc linerr ! error -> quit -- mov al,dh ! AL <- #heads-1 -- pop dx ! get MSW -- mov t_drive,dl ! save drive -- mov dl,dh ! linear address (high) into DX -- xor dh,dh --#ifdef CYL_CHECK -- push cx ! compute #cyls-1 -- xchg ch,cl -- rol ch,1 -- rol ch,1 -- and ch,#3 -- mov n_cyl,cx ! save #cyls-1 -- pop cx --#endif -- and cx,#0x3f ! CX <- #secs -- mul cl ! AX <- #secs/cyl -- add ax,cx -- xchg ax,bx -- pop ax ! linear address (low) into AX -- div bx ! DX <- cylinder, AX <- remaining secs -- xchg ax,dx -- div cl ! AL <- track, AH <- sector -- inc ah -- mov t_sector,ah -- xchg ax,dx ! AX <- cylinder, DL <- track -- mov dh,dl ! set up DX (head:drive) -- mov dl,t_drive --#ifdef CYL_CHECK -- cmp ax,n_cyl ! valid cylinder number ? -- ja linerr3 ! no -> error --#endif -- xchg ah,al ! build cylinder number -- ror al,1 -- ror al,1 -- or al,t_sector -- mov cx,ax -- pop bx ! restore BX --readsect: -- mov ax,#0x201 ! read one sector -- int 0x13 -- ret ! quit, possibly with errors -- --#ifdef CYL_CHECK --linerr3:pop bx ! pop BX and linear address -- xor ax,ax ! zero indicates internal error -- stc ! error -- ret -- --n_cyl: .word 0 ! temporary space --#endif --t_drive:.byte 0 --t_sector:.byte 0 -- -- --/* Here are at least 66 bytes of free space. This is reserved for the -- partition table and the boot signature. */ -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ .long 0xffffffff -+ -+ .word 0xffff -+ -+ .align 2 -+real_start: -+ /* Get base pointer, to be position independent */ -+ mova next, r0 -+ mov #0x02, r1 -+ shll8 r1 -+ sub r1, r0 -+ mov r0, r12 ! Base pointer -+ ! -+ mov #0x10, r1 -+ shll8 r1 -+ mov r12, r15 -+ add r1, r15 ! Setup stack pointer -+ ! -+ mov #0x10, r13 ! buffer number -+ ! -+ /* Enable cache */ -+ mov #6, r0 ! Cache "on" -+ mov #0, r4 -+ trapa #0x3f -+ ! -+ /* Output message "L" */ -+ mova message, r0 -+ mov r0, r4 -+ mov #1, r5 -+ mov #0, r0 ! Serial Output -+ trapa #0x3f -+ ! -+ /* Load second stage loader */ -+ mov #52, r11 ! #52: desc# of second stage loader -+loop: mov r11, r4 -+ bsr load_sector_address ! get r4 (=dev) and r5 (=lba) -+ add r12, r4 ! desc# --> address of descriptor -+ bt done -+ ! -+ mov r13, r6 -+ shll8 r6 -+ bsr read_a_sector -+ add r12, r6 ! buffer number -> buffer address -+ ! -+ add #2, r13 ! buffer # += 2 -+ bra loop -+ add #5, r11 ! next desc# is +5 -+ -+done: -+ /* Flush cache */ -+ mov #6, r0 ! Cache "on" -+ mov #0, r4 -+ trapa #0x3f -+ -+ /* Jump to the second loader */ -+ mov #0x10, r0 -+ shll8 r0 -+ add r12, r0 ! Get the address into r0 -+ jmp @r0 -+ mov r12, r4 ! First argument is base pointer -+ -+ .align 2 -+message: -+ .string "L" -+ -+ .align 2 -+/* -+ * LOAD_SECTOR_ADDRESS: -+ * Read the sector descripter (5-byte tuple), and translate -+ * it as device number and lba. Set T flag if its NULL. -+ * -+ * INPUT: r4 (pointer to descripter (5-byte long, not aligned) -+ * OUTPUT: r4 (DEVICE #), r5 (LBA) and T register (T when done) -+ * Clobbers: r0, r1, r2, r3 -+ */ -+load_sector_address: -+ mov.b @r4+, r0 -+ extu.b r0, r0 -+ mov.b @r4+, r1 -+ extu.b r1, r1 -+ mov.b @r4+, r2 -+ extu.b r2, r2 -+ mov.b @r4+, r3 -+ extu.b r3, r3 -+ ! -+ shll8 r3 -+ or r3, r1 -+ shll8 r1 -+ or r0, r1 -+ mov r1, r5 -+ mov.b @r4, r0 -+ cmp/eq #0, r0 -+ bt 1f ! NULL (end of descriptor) -+ ! -+ /* Check if its really LBA... */ -+ mov r2, r0 -+ and #0x0F, r0 ! Get device number -+ mov #0xc0, r3 -+ extu.b r3, r3 -+ cmp/hi r2, r3 -+ bf 1f ! Unset T -+ ! -+ /* Its not LBA!! */ -+ mova not_lba_message, r0 -+ mov r0, r4 -+ mov #36, r5 -+ mov #0, r0 ! Serial Output -+ trapa #0x3f -+ sett ! End of descriptor -+ ! -+1: rts -+ mov r0, r4 ! device number -+ -+/* -+ * READ a sector -+ * INPUT: r4 (DEVICE #), r5 (LBA), r6 (BUFFER ADDRESS) -+ * OUTPUT: r0 (RESULT) -+ * -+ * Invoke BIOS call READ_SECTORS with number_of_sectors=1. -+ */ -+read_a_sector: -+ mov #2, r0 ! READ SECTORS -+ mov #1, r7 ! number of sectors -+ trapa #0x3f -+ ! -+ tst r0, r0 -+ bt 1f -+ ! /* ERROR */ -+ mova read_error_message, r0 -+ mov r0, r4 -+ mov #19, r5 -+ mov #0, r0 ! Serial Output -+ trapa #0x3f -+ ! /* Go to the monitor */ -+ mov #0, r0 -+ jmp @r0 -+ nop -+ ! -+1: rts -+ nop -+ -+ .align 2 -+not_lba_message: -+ .string "ERROR: Sector address is not in LBA\n" -+ .align 2 -+read_error_message: -+ .string "ERROR: Sector read\n" - --theend: -+ .align 9 -+next: ---- lilo.orig/second.c Thu Jan 1 09:00:00 1970 -+++ lilo/second.c Thu Dec 7 21:03:56 2000 -@@ -0,0 +1,411 @@ -+/* $Id: second.c,v 1.22 2000/11/26 07:11:16 gniibe Exp $ -+ * -+ * Secondary boot loader -+ * -+ * lilo/arch/sh/second.c -+ * -+ * Copyright (C) 2000 Niibe Yutaka -+ * -+ * This file is subject to the terms and conditions of the GNU General -+ * Public License. -+ * -+ */ -+ -+#include "defs.h" -+ -+static void put_string (unsigned char *); -+static int get_sector_address (unsigned long, int *, unsigned long *); -+static int load_sectors (unsigned long, unsigned long); -+static int read_sectors (int, unsigned long, unsigned char *, int); -+static int load_sectors_with_maps (int, int, unsigned long *); -+ -+static int machine_type (void); -+static int serial_type (void); -+static int memory_size (void); -+static int io_base (void); -+static void cache_flush (void); -+ -+static const char hexchars[] = "0123456789abcdef"; -+#define digits hexchars /* 10base is same for 16base (up to 10) */ -+static inline char highhex (int x) { return hexchars[(x >> 4) & 0xf]; } -+static inline char lowhex (int x) { return hexchars[x & 0xf]; } -+static void printouthex (int); -+ -+static unsigned long base_pointer = 0; /* Avoid BSS */ -+static unsigned long kernel_image = 0; /* Avoid BSS */ -+ -+/* Sector descriptor */ -+#define SD_DESCR1 24 -+#define SD_DESCR2 29 -+#define SD_DEFCMD 34 -+/* 39 prompt (byte) */ -+/* 40 length (word) */ -+#define SD_MSG 42 -+#define SD_KBDTBL 47 -+ -+static inline char *string_set (char *dest, const char *str) -+{ -+ int len = strlen (str); -+ memcpy (dest, str, len); -+ return dest + len; -+} -+ -+void -+start (unsigned long base) -+{ -+ base_pointer = base; -+ -+ put_string ("I"); -+ load_sectors (SD_DESCR1, 0x3200); -+ load_sectors (SD_DESCR2, 0x3400); -+ put_string ("L"); -+ /* XXX: checksum */ -+ -+ load_sectors (SD_DEFCMD, 0x3600); -+ load_sectors (SD_KBDTBL, 0x3800); -+ put_string ("O "); -+ -+#if 0 -+ load_sectors (SD_MSG, 0x3a00); -+#endif -+ /* XXX: delay, key check... */ -+ /* XXX: list up images */ -+ /* XXX: check signature */ -+ /* Input command line */ -+ /* XXX: Is there default command line? Use it! */ -+ put_string ("boot: "); -+ put_string ("first-image\n"); /* XXX: should handle input commandline... */ -+ -+ /* Structure of descriptor -+ [ checksum 2byte ] -+ [ DESCR_SIZE:52-byte -+ (image-name (16-byte) -+ passwd (16-byte) -+ rd_size (4-byte) -+ initrd (5-byte sector desc) -+ start (5-byte sector desc) -+ start_page (16-bit) -+ flags (16-bit) -+ vga_mode (16-bit) -+ ) -+ ] * 19 -+ */ -+ -+ put_string ("Loading "); -+ put_string ((char *)(base_pointer+0x3200+2)); /* Image name */ -+ -+ kernel_image = base_pointer + 0x10000 - 0x400; -+ { -+ int desc = 0x3200+2+16+16+4+5; /* kernel image */ -+ -+ /* Skip two sectors: Fallback command line and options */ -+ desc = load_sectors_with_maps (desc, 0, &kernel_image); -+ put_string ("."); -+ -+ while (desc != 0) -+ { -+ desc = load_sectors_with_maps (desc, 0, &kernel_image); -+ put_string ("."); -+ } -+ } -+ put_string ("done.\n"); -+ -+#if 0 -+ { -+ int i; -+ -+ put_string ("DUMP: "); -+ for (i=0; i<16; i++) -+ printouthex (*(unsigned char *)(base_pointer+0x10000+i)); -+ put_string ("\n"); -+ } -+#endif -+ -+ /* XXX: kernel paramerter setting */ -+ { -+ unsigned long parm = base_pointer - 0x200000 + 0x1000; -+ char *cmdline = (char *)(parm+256); -+ int mem_size; -+ unsigned char *p; -+ -+ *(long *)parm = 1; /* Read only mount? */ -+ *(long *)(parm+4) = 0; /* RAMDISK Flags */ -+ *(long *)(parm+8) = 0x0301; /* Root device: XXX should get from cls.. */ -+ *(long *)(parm+12) = 1; /* Loader type (LILO = 1) */ -+ *(long *)(parm+16) = 0; /* Initrd start */ -+ *(long *)(parm+20) = 0; /* Initrd size */ -+ *(long *)(parm+24) = 0; /* Not defined yet */ -+ -+ /* XXX: Should take the line from command line sector... */ -+#define DC_MAGIC 0xf4f2 /* magic number of default cmd. line sector */ -+ p = (unsigned char *)(base_pointer+0x3600); -+ if(p[0] == (DC_MAGIC & 0xff) && p[1] == (DC_MAGIC >> 8)) -+ cmdline = string_set(cmdline, p+2); -+ cmdline = string_set(cmdline, (char *)(base_pointer + 0x10000 - 0x200)); -+ -+#if 0 -+ /* Query to BIOS and build the command line string */ -+ /* Build string "mem=XXM" */ -+ mem_size = memory_size (); -+ mem_size >>= 20; /* In Mega-byte */ -+ cmdline = string_set (cmdline, "mem="); -+ if (mem_size >= 100) -+ { -+ *cmdline++ = digits[mem_size/100]; -+ mem_size = mem_size % 100; -+ } -+ if (mem_size >= 10) -+ { -+ *cmdline++ = digits[mem_size/10]; -+ mem_size = mem_size % 10; -+ } -+ *cmdline++ = digits[mem_size]; -+ *cmdline++ = 'M'; -+ *cmdline++ = ' '; -+ -+ switch (machine_type ()) -+ { -+ case 0: /* Unknown board */ -+ { /* Build string "sh_mv=unknown,0xXXXXXX,1" */ -+ unsigned int io = io_base (); -+ int b31_24, b23_16, b15_08, b07_00; -+ -+ b31_24 = (io>>24)&0xff; -+ b23_16 = (io>>16)&0xff; -+ b15_08 = (io>>8)&0xff; -+ b07_00 = (io>>0)&0xff; -+ -+ cmdline = string_set (cmdline, "sh_mv=unknown,0x"); -+ *cmdline++ = highhex (b31_24); *cmdline++ = lowhex (b31_24); -+ *cmdline++ = highhex (b23_16); *cmdline++ = lowhex (b23_16); -+ *cmdline++ = highhex (b15_08); *cmdline++ = lowhex (b15_08); -+ *cmdline++ = highhex (b07_00); *cmdline++ = lowhex (b07_00); -+ cmdline = string_set (cmdline, ",1 "); -+ break; -+ } -+ -+ case 1: -+ cmdline = string_set (cmdline, "sh_mv=CqREEK "); -+ break; -+ -+ case 3: -+ cmdline = string_set (cmdline, "sh_mv=SolutionEngine "); -+ break; -+ } -+ -+ if (serial_type () == 0) -+ cmdline = string_set (cmdline, "console=ttySC0,115200"); -+ else -+ cmdline = string_set (cmdline, "console=ttySC1,115200"); -+#endif -+ -+ *cmdline = '\0'; /* Terminate the string */ -+ } -+ -+ cache_flush (); -+ asm volatile ("jmp @r0; nop" -+ : /* no output */ -+ : "z" (base_pointer + 0x10000)); -+} -+ -+static int -+load_sectors_with_maps (int desc, int offset, unsigned long *buf_p) -+{ -+ int dev; -+ unsigned long lba; -+ int i, count; -+ -+ /* Load the map at 0x3000 */ -+ if (load_sectors (desc, 0x3000) < 0) -+ return 0; -+ -+ for (i = offset*5; i<505; i+=5) -+ { -+ if ((count = get_sector_address (0x3000+i, &dev, &lba)) == 0) -+ return 0; -+ -+ read_sectors (dev, lba, (unsigned char *)*buf_p, count); -+ *buf_p += count*512; -+ } -+ -+ /* There's next map */ -+ return 0x3000+505; -+} -+ -+static int -+machine_type (void) -+{ -+ register long __sc0 __asm__ ("r0") = 3; /* FEATURE QUERY */ -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0) -+ : "memory"); -+ -+ return (__sc0 >> 8); -+} -+ -+static int -+serial_type (void) -+{ -+ register long __sc0 __asm__ ("r0") = 3; /* FEATURE QUERY */ -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0) -+ : "memory"); -+ -+ return (__sc0 & 0x07); -+} -+ -+static int -+memory_size (void) -+{ -+ register long __sc0 __asm__ ("r0") = 4; /* MEMORY SIZE */ -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0) -+ : "memory"); -+ -+ return (__sc0); -+} -+ -+static int -+io_base (void) -+{ -+ register long __sc0 __asm__ ("r0") = 5; /* IO BASE */ -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0) -+ : "memory"); -+ -+ return (__sc0); -+} -+ -+static void -+cache_flush (void) -+{ -+ register long __sc0 __asm__ ("r0") = 6; /* CACHE_CONTROL */ -+ register long __sc4 __asm__ ("r4") = 0; /* ENABLE */ -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0), "r" (__sc4) -+ : "memory"); -+} -+ -+static void inline -+put_string_1 (unsigned char *str, long len) -+{ -+ register long __sc0 __asm__ ("r0") = 0; /* OUTPUT */ -+ register long __sc4 __asm__ ("r4") = (long) str; -+ register long __sc5 __asm__ ("r5") = (long) len; /* For New BIOS */ -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0), "r" (__sc4), "r" (__sc5) -+ : "memory"); -+} -+ -+static void -+put_string (unsigned char *str) -+{ -+ int len = strlen (str); -+ put_string_1 (str, len); -+} -+ -+static int -+read_sectors (int dev, unsigned long lba, unsigned char *buf, int count) -+{ -+ register long __sc0 __asm__ ("r0") = 2; /* READ SECTORS */ -+ register long __sc4 __asm__ ("r4") = (long) dev; -+ register long __sc5 __asm__ ("r5") = (long) lba; -+ register long __sc6 __asm__ ("r6") = (long) buf; -+ register long __sc7 __asm__ ("r7") = (long) count; -+ -+ asm volatile ("trapa #0x3F" -+ : "=z" (__sc0) -+ : "0" (__sc0), "r" (__sc4), "r" (__sc5), -+ "r" (__sc6), "r" (__sc7) -+ : "memory"); -+ -+ if (__sc0 < 0) -+ put_string ("ERROR: Sector read\n"); -+ -+ return __sc0; -+} -+ -+static int -+get_sector_address (unsigned long sector_desc, int *devp, unsigned long *lbap) -+{ -+ unsigned long s; -+ unsigned char *p = (unsigned char *)(sector_desc+base_pointer); -+ int len; -+ -+ /* Number of sectors */ -+ len = (int)p[4]; -+ if (len == 0) -+ return 0; -+ -+ /* p[2]: drive number */ -+ if ((int)p[2] < 0xc0) -+ /* XXX: should return error */ -+ put_string ("ERROR: Sector address is not in LBA\n"); -+ -+ *devp = (int)p[2] & 0x0f; -+ -+ s = p[0] + (p[1]<<8) + (p[3]<<16); -+ -+ *lbap = s; -+ -+#if 0 -+ { -+ unsigned long lba = *lbap; -+ -+ put_string ("DEV= "); -+ printouthex ((*devp)&0xff); -+ put_string ("\n"); -+ put_string ("LBA= "); -+ printouthex ((lba>>24)&0xff); -+ printouthex ((lba>>16)&0xff); -+ printouthex ((lba>>8)&0xff); -+ printouthex (lba&0xff); -+ put_string ("\n"); -+ } -+#endif -+ -+ return len; -+} -+ -+static int -+load_sectors (unsigned long sector_desc, unsigned long mem) -+{ -+ int dev; -+ unsigned long lba; -+ int count; -+ unsigned char *buf = (unsigned char *)(mem+base_pointer); -+ -+ count = get_sector_address (sector_desc, &dev, &lba); -+ -+ if (count) -+ return read_sectors (dev, lba, buf, count); -+ -+ return -1; -+} -+ -+#if 0 -+static void -+printouthex(int x) -+{ -+ char z[4]; -+ -+ z[0] = highhex (x); -+ z[1] = lowhex (x); -+ z[2] = ' '; -+ z[3] = '\0'; -+ -+ put_string (z); -+} -+#endif -diff -ruN lilo.orig/second.lds lilo/second.lds ---- lilo.orig/second.lds Thu Jan 1 09:00:00 1970 -+++ lilo/second.lds Fri Dec 8 11:13:20 2000 -@@ -0,0 +1,212 @@ -+OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") -+OUTPUT_ARCH(sh) -+ENTRY(start) -+SECTIONS -+{ -+ /* Read-only sections, merged into text segment: */ -+ . = 0x400000 + SIZEOF_HEADERS; -+ .interp : { *(.interp) } -+ .hash : { *(.hash) } -+ .dynsym : { *(.dynsym) } -+ .dynstr : { *(.dynstr) } -+ .gnu.version : { *(.gnu.version) } -+ .gnu.version_d : { *(.gnu.version_d) } -+ .gnu.version_r : { *(.gnu.version_r) } -+ .rel.init : { *(.rel.init) } -+ .rela.init : { *(.rela.init) } -+ .rel.text : -+ { -+ *(.rel.text) -+ *(.rel.text.*) -+ *(.rel.gnu.linkonce.t*) -+ } -+ .rela.text : -+ { -+ *(.rela.text) -+ *(.rela.text.*) -+ *(.rela.gnu.linkonce.t*) -+ } -+ .rel.fini : { *(.rel.fini) } -+ .rela.fini : { *(.rela.fini) } -+ .rel.rodata : -+ { -+ *(.rel.rodata) -+ *(.rel.rodata.*) -+ *(.rel.gnu.linkonce.r*) -+ } -+ .rela.rodata : -+ { -+ *(.rela.rodata) -+ *(.rela.rodata.*) -+ *(.rela.gnu.linkonce.r*) -+ } -+ .rel.data : -+ { -+ *(.rel.data) -+ *(.rel.data.*) -+ *(.rel.gnu.linkonce.d*) -+ } -+ .rela.data : -+ { -+ *(.rela.data) -+ *(.rela.data.*) -+ *(.rela.gnu.linkonce.d*) -+ } -+ .rel.ctors : { *(.rel.ctors) } -+ .rela.ctors : { *(.rela.ctors) } -+ .rel.dtors : { *(.rel.dtors) } -+ .rela.dtors : { *(.rela.dtors) } -+ .rel.got : { *(.rel.got) } -+ .rela.got : { *(.rela.got) } -+ .rel.sdata : -+ { -+ *(.rel.sdata) -+ *(.rel.sdata.*) -+ *(.rel.gnu.linkonce.s*) -+ } -+ .rela.sdata : -+ { -+ *(.rela.sdata) -+ *(.rela.sdata.*) -+ *(.rela.gnu.linkonce.s*) -+ } -+ .rel.sbss : { *(.rel.sbss) } -+ .rela.sbss : { *(.rela.sbss) } -+ .rel.bss : { *(.rel.bss) } -+ .rela.bss : { *(.rela.bss) } -+ .rel.plt : { *(.rel.plt) } -+ .rela.plt : { *(.rela.plt) } -+ .init : -+ { -+ KEEP (*(.init)) -+ } =0 -+ .plt : { *(.plt) } -+ .text : -+ { -+ *(.text) -+ *(.text.*) -+ *(.stub) -+ /* .gnu.warning sections are handled specially by elf32.em. */ -+ *(.gnu.warning) -+ *(.gnu.linkonce.t*) -+ } =0 -+ _etext = .; -+ PROVIDE (etext = .); -+ .fini : -+ { -+ KEEP (*(.fini)) -+ } =0 -+ .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) } -+ .rodata1 : { *(.rodata1) } -+ /* Adjust the address for the data segment. We want to adjust up to -+ the same address within the page on the next page up. */ -+/* . = ALIGN(0x10000) + (. & (0x10000 - 1)); */ -+ .data : -+ { -+ __data_start = . ; -+ *(.data) -+ *(.data.*) -+ *(.gnu.linkonce.d*) -+ SORT(CONSTRUCTORS) -+ } -+ .data1 : { *(.data1) } -+ .eh_frame : { *(.eh_frame) } -+ .gcc_except_table : { *(.gcc_except_table) } -+ .note.ABI-tag : { *(.note.ABI-tag) } -+ .ctors : -+ { -+ /* gcc uses crtbegin.o to find the start of -+ the constructors, so we make sure it is -+ first. Because this is a wildcard, it -+ doesn't matter if the user does not -+ actually link against crtbegin.o; the -+ linker won't look for a file to match a -+ wildcard. The wildcard also means that it -+ doesn't matter which directory crtbegin.o -+ is in. */ -+ KEEP (*crtbegin.o(.ctors)) -+ /* We don't want to include the .ctor section from -+ from the crtend.o file until after the sorted ctors. -+ The .ctor section from the crtend file contains the -+ end of ctors marker and it must be last */ -+ KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) -+ KEEP (*(SORT(.ctors.*))) -+ KEEP (*(.ctors)) -+ } -+ .dtors : -+ { -+ KEEP (*crtbegin.o(.dtors)) -+ KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) -+ KEEP (*(SORT(.dtors.*))) -+ KEEP (*(.dtors)) -+ } -+ .got : { *(.got.plt) *(.got) } -+ .dynamic : { *(.dynamic) } -+ /* We want the small data sections together, so single-instruction offsets -+ can access them all, and initialized data all before uninitialized, so -+ we can shorten the on-disk segment size. */ -+ .sdata : -+ { -+ *(.sdata) -+ *(.sdata.*) -+ *(.gnu.linkonce.s.*) -+ } -+ _edata = .; -+ PROVIDE (edata = .); -+ __bss_start = .; -+ .sbss : -+ { -+ *(.dynsbss) -+ *(.sbss) -+ *(.sbss.*) -+ *(.scommon) -+ } -+ .bss : -+ { -+ *(.dynbss) -+ *(.bss) -+ *(.bss.*) -+ *(COMMON) -+ /* Align here to ensure that the .bss section occupies space up to -+ _end. Align after .bss to ensure correct alignment even if the -+ .bss section disappears because there are no input sections. */ -+ . = ALIGN(32 / 8); -+ } -+ . = ALIGN(32 / 8); -+ _end = .; -+ PROVIDE (end = .); -+ /* Stabs debugging sections. */ -+ .stab 0 : { *(.stab) } -+ .stabstr 0 : { *(.stabstr) } -+ .stab.excl 0 : { *(.stab.excl) } -+ .stab.exclstr 0 : { *(.stab.exclstr) } -+ .stab.index 0 : { *(.stab.index) } -+ .stab.indexstr 0 : { *(.stab.indexstr) } -+ .comment 0 : { *(.comment) } -+ /* DWARF debug sections. -+ Symbols in the DWARF debugging sections are relative to the beginning -+ of the section so we begin them at 0. */ -+ /* DWARF 1 */ -+ .debug 0 : { *(.debug) } -+ .line 0 : { *(.line) } -+ /* GNU DWARF 1 extensions */ -+ .debug_srcinfo 0 : { *(.debug_srcinfo) } -+ .debug_sfnames 0 : { *(.debug_sfnames) } -+ /* DWARF 1.1 and DWARF 2 */ -+ .debug_aranges 0 : { *(.debug_aranges) } -+ .debug_pubnames 0 : { *(.debug_pubnames) } -+ /* DWARF 2 */ -+ .debug_info 0 : { *(.debug_info) } -+ .debug_abbrev 0 : { *(.debug_abbrev) } -+ .debug_line 0 : { *(.debug_line) } -+ .debug_frame 0 : { *(.debug_frame) } -+ .debug_str 0 : { *(.debug_str) } -+ .debug_loc 0 : { *(.debug_loc) } -+ .debug_macinfo 0 : { *(.debug_macinfo) } -+ /* SGI/MIPS DWARF 2 extensions */ -+ .debug_weaknames 0 : { *(.debug_weaknames) } -+ .debug_funcnames 0 : { *(.debug_funcnames) } -+ .debug_typenames 0 : { *(.debug_typenames) } -+ .debug_varnames 0 : { *(.debug_varnames) } -+ /* These must appear regardless of . */ -+} -diff -ruN lilo.orig/string.c lilo/string.c ---- lilo.orig/string.c Thu Jan 1 09:00:00 1970 -+++ lilo/string.c Thu Dec 7 16:17:10 2000 -@@ -0,0 +1,22 @@ -+#include <stddef.h> -+ -+/* Implementation taken from Linux kernel (linux/lib/string.c) */ -+ -+size_t strlen(const char * s) -+{ -+ const char *sc; -+ -+ for (sc = s; *sc != '\0'; ++sc) -+ /* nothing */; -+ return sc - s; -+} -+ -+void * memcpy(void * dest,const void *src,size_t count) -+{ -+ char *tmp = (char *) dest, *s = (char *) src; -+ -+ while (count--) -+ *tmp++ = *s++; -+ -+ return dest; -+} |