1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
##
## Linux Loader for SPARC
##
##
VERSION=0.98
CC=gcc
LD=ld
AS=as
RM=/bin/rm -f
NM=nm
DD=dd
AWK=awk
LS=ls
ELFTOAOUT=elftoaout
STRIP=strip
GZIP=gzip
GDB=gdb
ECHO=echo
GREP=grep
SED=sed
CP=cp
CFLAGS = -I../include -O2 -I. -Wall
# Relocate to 2.5MB. The Hitchhiker's Guide to Open Boot Rev 3 claims
# that 3MB are guaranteed to be mapped.
LDFLAGS=-N -Ttext 0x280000
LDFLAGS2=-N -Ttext 0x380000
.c.o:
$(CC) $(CFLAGS) -c $*.c
.S.o:
$(CC) $(CFLAGS) -c $*.S
# The ordering here is very significant. Please add new object files to OBJS5 only.
OBJS1 = crt0.o
OBJS2 = decomp.o
OBJS2N = decompnet.o
OBJS3 = console.o printf.o malloc.o jmp.o prom.o tree.o urem.o udiv.o stringops1.o
OBJS4 = main.o
OBJS4N = mainnet.o
OBJS5 = cmdline.o disk.o file.o misc.o cfg.o strtol.o ranges.o timer.o memory.o ufs.o romfs.o 9660.o divdi3.o \
mul.o rem.o sdiv.o umul.o stringops2.o ls.o muldi3.o
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) bmark.o $(OBJS4) $(OBJS5)
OBJSNET = $(OBJS1) $(OBJS2N) $(OBJS3) bmark.o $(OBJS4N) $(OBJS5)
ifeq (Linux,$(shell uname))
ifeq (sparc,$(subst sparc64,sparc,$(shell uname -m)))
# Should really switch to autoconf...
LIBINC=$(shell if [ ! -f /lib/ld-linux.so.2 -o ! -f /usr/lib/libext2fs.so ]; then echo -L../include; fi)
all: second.b silotftp.b
else
all:
@$(ECHO) Second stage bootloader should be build under Linux/Sparc only
endif
else
all:
@$(ECHO) Second stage bootloader should be build under Linux/Sparc only
endif
second: $(OBJS) mark.o
$(LD) $(LDFLAGS) -Bstatic -o second $(OBJS) $(LIBINC) -lext2fs mark.o
$(LD) $(LDFLAGS2) -Bstatic -o second2 $(OBJS) $(LIBINC) -lext2fs mark.o
$(NM) second | grep -v '*ABS*' | sort > second.map
silotftp: $(OBJSNET) mark.o
$(LD) $(LDFLAGS) -Bstatic -o silotftp $(OBJSNET) $(LIBINC) -lext2fs mark.o
$(LD) $(LDFLAGS2) -Bstatic -o silotftp2 $(OBJSNET) $(LIBINC) -lext2fs mark.o
$(NM) silotftp | grep -v '*ABS*' | sort > silotftp.map
second.l: second
( $(ECHO) 'disassemble 0x280000 '`$(GREP) '_etext' second.map | $(SED) 's/ .*$$//' | $(SED) 's/^00/0x/'`; $(ECHO) quit ) | $(GDB) second | $(SED) '1,/^(gdb)/d;/^End /,$$d' > second.l
main.o: main.c silo.h
ls.o: ls.c silo.h
malloc.o: malloc.c silo.h
printf.o: printf.c silo.h
cmdline.o: cmdline.c silo.h
console.o: console.c silo.h
misc.o: misc.c silo.h
disk.o: disk.c silo.h
file.o: file.c silo.h ufs.h
cfg.o: cfg.c silo.h
ranges.o: ranges.c silo.h
tree.o: tree.c silo.h
timer.o: timer.c silo.h
decomp.o: decomp.c inflate.c silo.h
mark.o: mark.S
bmark.o: bmark.S
mul.o: mul.S
umul.o: umul.S
sdiv.o: sdiv.S
udiv.o: udiv.S
rem.o: rem.S
urem.o: urem.S
ufs.o: ufs.c silo.h ufs.h
romfs.o: romfs.c silo.h
memory.o: memory.c silo.h
jmp.o: jmp.S
divdi3.o: divdi3.S
prom.o: prom.c promlib.h
decompnet.o: decomp.c inflate.c silo.h
$(CC) $(CFLAGS) -DTFTP -c -o decompnet.o decomp.c
mainnet.o: main.c silo.h
$(CC) $(CFLAGS) -DTFTP -c -o mainnet.o main.c
util: util.c
$(CC) -o util util.c
clean:
$(RM) $(OBJS) *.o second second2 second.b silotftp silotftp2 silotftp.b second.l *.map core *~ util second.b second.image.tmp *.s
crt0.o: crt0.S
$(CC) $(CFLAGS) -E -o crt0.s -DVERSION='"SILO$(VERSION)"' crt0.S
$(AS) -Av9 -o crt0.o crt0.s
$(RM) crt0.s
prom.o: prom.c
$(CC) $(CFLAGS) -S -o prom.s prom.c
$(AS) -Av9 -o prom.o prom.s
$(RM) prom.s
memory.o: memory.c
$(CC) $(CFLAGS) -S -o memory.s memory.c
$(AS) -Av9 -o memory.o memory.s
$(RM) memory.s
timer.o: timer.c
$(CC) $(CFLAGS) -S -o timer.s timer.c
$(AS) -Av9a -o timer.o timer.s
$(RM) timer.s
second.b: second util
$(CP) second second.tmp
$(CP) second2 second2.tmp
$(STRIP) second.tmp
$(STRIP) second2.tmp
$(ELFTOAOUT) -o second.image.tmp second.tmp
$(ELFTOAOUT) -o second2.image.tmp second2.tmp
./util -z second.map second.image.tmp second2.image.tmp second.b second.b2
$(GZIP) -9cfn second.b2 >> second.b
$(DD) if=/dev/zero bs=1 count=`$(LS) -l second.b | $(AWK) '{len=$$5%512;if(len!=0)len=512-len;print len}'` >> second.b
$(LS) -l second.b | $(AWK) '{printf "%c%c%c%c",0,$$5/65536,($$5%65536)/256,0}' | $(DD) of=second.b bs=4 count=1 seek=581 conv=notrunc
$(RM) second.tmp second.image.tmp second2.tmp second2.image.tmp second.b2
ln -f second.b ../boot/second.b
silotftp.b: silotftp util
$(CP) silotftp silotftp.tmp
$(CP) silotftp2 silotftp2.tmp
$(STRIP) silotftp.tmp
$(STRIP) silotftp2.tmp
$(ELFTOAOUT) -o silotftp.image.tmp silotftp.tmp
$(ELFTOAOUT) -o silotftp2.image.tmp silotftp2.tmp
./util -a silotftp.map silotftp.image.tmp silotftp2.image.tmp silotftp.b silotftp.b2
$(GZIP) -9cfn silotftp.b2 >> silotftp.b
$(RM) silotftp.tmp silotftp.image.tmp silotftp2.tmp silotftp2.image.tmp silotftp.b2
ln -f silotftp.b ../boot/silotftp.b
|