summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authorMatt Wilson <msw@redhat.com>1999-09-09 22:34:50 +0000
committerMatt Wilson <msw@redhat.com>1999-09-09 22:34:50 +0000
commitf4e486de50f4144573d6e80c3535172dc613fc88 (patch)
treee83b53e9b1b9ff92cd3231479bcde2529595a05e /loader
parent36feb8dc820dd9292dd11ebec0a17e457ee71ed7 (diff)
downloadanaconda-f4e486de50f4144573d6e80c3535172dc613fc88.tar.gz
anaconda-f4e486de50f4144573d6e80c3535172dc613fc88.tar.xz
anaconda-f4e486de50f4144573d6e80c3535172dc613fc88.zip
patches from jj
Diffstat (limited to 'loader')
-rw-r--r--loader/Makefile43
-rw-r--r--loader/loader.c6
-rw-r--r--loader/minilibc.h23
-rw-r--r--loader/stubs.c6
4 files changed, 65 insertions, 13 deletions
diff --git a/loader/Makefile b/loader/Makefile
index 56d49d1bb..7da19cd0f 100644
--- a/loader/Makefile
+++ b/loader/Makefile
@@ -3,7 +3,7 @@ DESTDIR = ../../trees/initrd
ARCH := $(patsubst i%86,i386,$(shell uname -m))
ARCH := $(patsubst sparc%,sparc,$(ARCH))
-OBJS = log.o windows.o modules.o devices.o cdrom.o urls.o kickstart.o
+OBJS = stubs.o log.o windows.o modules.o devices.o cdrom.o urls.o kickstart.o
LOADEROBJS = loader.o loader-pcmcia.o popen.o
SOURCES = $(subst .o,.c,$(OBJS) $(LOADEROBJS))
BINS = init
@@ -16,15 +16,14 @@ ALLOBJS = $(OBJS) $(PCMCIAOBJS)
ifeq (i386, $(ARCH))
BINS += loader-local loader-network loader-pcmcia
DIRS += pcmcia-install
-OBJS += stubs.o
endif
ifeq (alpha, $(ARCH))
-BINS += loader-network
+BINS += loader
endif
ifeq (sparc, $(ARCH))
-BINS += loader-network
+BINS += loader
endif
ifeq (.depend,$(wildcard .depend))
@@ -39,15 +38,22 @@ CFLAGS = $(DEBUG) $(OPTS) -Wall -D_GNU_SOURCE=1 -I/usr/include/rpm -I.. -DUSE_AL
STATIC = -static
-ifeq (i386,$(ARCH))
+ifeq (i386, $(ARCH))
MINILIBC=minilibc.o
CFLAGS+=-DUSE_MINILIBC=1 -DUSE_LOGDEV
LDFLAGS = -nostdlib /usr/lib/crt1.o
STATIC=-static
else
+ifeq (sparc, $(ARCH))
+MINILIBC=minilibc.o /usr/lib/libc.a
+CFLAGS+=-DUSE_MINILIBC=1 -DUSE_LOGDEV
+LDFLAGS = -nostdlib /usr/lib/crt1.o
+STATIC=-static
+else
CFLAGS+=-DUSE_MINILIBC=0
STATIC=-static
endif
+endif
VERSION = 6.0
@@ -59,13 +65,21 @@ dirs:
done
install: all
- #mkdir -p $(DESTDIR)/sbin
- #mkdir -p $(DESTDIR)/etc
- #rm -f $(DESTDIR)/sbin/loader
- #rm -f $(DESTDIR)/sbin/init
- #install -s loader $(DESTDIR)/sbin/loader
- #install -s init $(DESTDIR)/sbin/init
- #install -m 755 ../kudzu/pcitable $(DESTDIR)/etc
+# mkdir -p $(DESTDIR)/sbin
+# mkdir -p $(DESTDIR)/etc
+# rm -f $(DESTDIR)/sbin/loader
+# rm -f $(DESTDIR)/sbin/init
+# install -s loader $(DESTDIR)/sbin/loader
+# install -s init $(DESTDIR)/sbin/init
+# install -m 755 ../kudzu/pcitable $(DESTDIR)/etc
+
+loader: loader.o $(OBJS) $(NETOBJS)
+ $(CC) -g $(STATIC) -o $@ $^ -lpopt \
+ ../kudzu/libkudzu.a ../isys/libisys.a ../balkan/libbalkan.a \
+ ../isys/modutils/insmod/libmodutils.a \
+ ../isys/modutils/util/libutil.a \
+ ../isys/modutils/obj/libobj.a \
+ -L../pump -lpump -lrpm -lbz2 -lz -lresolv -lnewt -lslang -lpci
loader-local: loader-local.o $(OBJS)
$(CC) -g $(STATIC) -o $@ $^ -lpopt \
@@ -73,7 +87,7 @@ loader-local: loader-local.o $(OBJS)
../isys/modutils/insmod/libmodutils.a \
../isys/modutils/util/libutil.a \
../isys/modutils/obj/libobj.a \
- -L../pump -lpump -lrpm -lz -lresolv -lnewt -lslang -lpci
+ -L../pump -lpump -lrpm -lbz2 -lz -lresolv -lnewt -lslang -lpci
loader-network: loader-net.o $(OBJS) $(NETOBJS)
$(CC) -g $(STATIC) -o $@ $^ -lpopt \
@@ -93,6 +107,9 @@ loader-pcmcia: loader-pcmcia.o pcmcia.o popen.o $(OBJS) $(PCMCIAOBJS)
../isys/modutils/obj/libobj.a \
-L../pump -lpump -lrpm -lbz2 -lz -lresolv -lnewt -lslang -lpci
+loader.o: loader.c
+ $(CC) -DINCLUDE_LOCAL -DINCLUDE_NETWORK $(CFLAGS) -o $@ -c $^
+
loader-local.o: loader.c
$(CC) -DINCLUDE_LOCAL $(CFLAGS) -o $@ -c $^
diff --git a/loader/loader.c b/loader/loader.c
index 7bfec22fd..5f9d6f912 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1427,6 +1427,12 @@ int main(int argc, char ** argv) {
logMessage("Flags are 0x%x\n", flags);
+#ifdef __sparc__
+ /* XXX: sparc -BOOT kernels should compile openprom in. */
+ if (!FL_TESTING(flags))
+ insmod ("openprom", NULL);
+#endif
+
if (FL_KSFLOPPY(flags)) {
ksFile = "/tmp/ks.cfg";
kickstartFromFloppy(ksFile, modLoaded, modDeps, flags);
diff --git a/loader/minilibc.h b/loader/minilibc.h
index fac68f2a4..c620be241 100644
--- a/loader/minilibc.h
+++ b/loader/minilibc.h
@@ -50,7 +50,30 @@ static inline _syscall1(int,unlink,const char *,fn)
static inline _syscall1(int,close,int,fd)
static inline _syscall0(int,getpid)
static inline _syscall0(int,sync)
+#ifdef __sparc__
+/* Nonstandard fork calling convention :( */
+static inline int fork(void) {
+ int __res;
+ __asm__ __volatile__ (
+ "mov %0, %%g1\n\t"
+ "t 0x10\n\t"
+ "bcc 1f\n\t"
+ "dec %%o1\n\t"
+ "sethi %%hi(%2), %%g1\n\t"
+ "st %%o0, [%%g1 + %%lo(%2)]\n\t"
+ "b 2f\n\t"
+ "mov -1, %0\n\t"
+ "1:\n\t"
+ "and %%o0, %%o1, %0\n\t"
+ "2:\n\t"
+ : "=r" (__res)
+ : "0" (__NR_fork), "i" (&errno)
+ : "g1", "o0", "cc");
+ return __res;
+}
+#else
static inline _syscall0(int,fork)
+#endif
static inline _syscall0(pid_t,setsid)
static inline _syscall1(int,exit,int,exitcode)
static inline _syscall3(int,syslog,int, type, char *, buf, int, len);
diff --git a/loader/stubs.c b/loader/stubs.c
index 55d9ba1bf..b1fb30430 100644
--- a/loader/stubs.c
+++ b/loader/stubs.c
@@ -1,4 +1,10 @@
#include <gconv.h>
+
+#if !defined(UNKNOWN_10646_CHAR) && defined(__UNKNOWN_10646_CHAR)
+/* Newer glibcs use underscores in gconv.h */
+#define GCONV_OK __GCONV_OK
+#define GCONV_NOCONV __GCONV_NOCONV
+#endif
#define ASM_GLOBAL_DIRECTIVE .globl
#define __SYMBOL_PREFIX