OSDN Git Service

This patch allows powerpc to compile again. It also checks if we
authorEric Andersen <andersen@codepoet.org>
Fri, 4 May 2001 22:29:43 +0000 (22:29 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 4 May 2001 22:29:43 +0000 (22:29 -0000)
are compiling for an arch for which uClibc has an ld.so or not,
and otherwise sets things up to use the system ld.so.
 -Erik

Makefile
Rules.mak
extra/gcc-uClibc/Makefile
ldso/Makefile
libc/sysdeps/linux/common/statfix.h
libc/sysdeps/linux/powerpc/bits/errno.h [new file with mode: 0644]
libc/sysdeps/linux/powerpc/bits/sem.h [new file with mode: 0644]

index 667c961..82aa64a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,7 @@
 #
 #--------------------------------------------------------
 
+TOPDIR=./
 include Rules.mak
 
 DIRS = extra misc pwd_grp stdio string termios inet signal stdlib sysdeps unistd crypt
@@ -42,23 +43,24 @@ $(LIBNAME): subdirs
 shared: $(LIBNAME)
        @rm -rf tmp
        @mkdir tmp
-       @$(MAKE) -C ld.so-1/d-link
+       @$(MAKE) -C ld.so-1 d-link
        @(cd tmp; CC=$(CC) /bin/sh ../extra/scripts/get-needed-libgcc-objects.sh)
        if [ -s ./tmp/libgcc-need.a ] ; then \
                $(CC) -g $(LDFLAGS) -shared -o $(SHARED_FULLNAME) \
                    -Wl,-soname,$(SHARED_MAJORNAME) -Wl,--whole-archive \
                    ./$(LIBNAME) ./tmp/libgcc-need.a \
-                   ld.so-1/d-link/ld-linux-uclibc.so.0; \
+                   $(LDSO) ; \
        else \
                $(CC) -g $(LDFLAGS) -shared -o $(SHARED_FULLNAME) \
                    -Wl,-soname,$(SHARED_MAJORNAME) -Wl,--whole-archive \
-                   ./$(LIBNAME) ld.so-1/d-link/ld-linux-uclibc.so.0; \
+                   ./$(LIBNAME) $(LDSO) ; \
        fi
        @rm -rf tmp
        ln -sf $(SHARED_FULLNAME) $(SHARED_MAJORNAME)
        ln -sf $(SHARED_MAJORNAME) libc.so
        @$(MAKE) -C crypt shared
        @$(MAKE) -C ld.so-1
+       echo "Using $(LDSO) for the shared library loader"
 
 done: $(LIBNAME) $(DO_SHARED)
        @echo
index 17d7eb1..273e45d 100644 (file)
--- a/Rules.mak
+++ b/Rules.mak
@@ -30,6 +30,7 @@ MINOR_VERSION=9.5
 LIBNAME=libc.a
 SHARED_FULLNAME=uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).so
 SHARED_MAJORNAME=libc.so.$(MAJOR_VERSION)
+UCLIBC_LDSO=ld-linux-uclibc.so.$(MAJOR_VERSION)
 
 BUILDTIME = $(shell TZ=UTC date --utc "+%Y.%m.%d-%H:%M%z")
 
@@ -60,7 +61,23 @@ ifndef $(PREFIX)
     PREFIX = `pwd`/_install
 endif
 
-NATIVE_ARCH = $(shell uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/' -e 's/arm.*/arm/g' -e 's/m68k.*/m68k/')
+NATIVE_ARCH = $(shell uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/' -e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/ppc/powerpc/g')
+
+LDSO_PRESENT=$(strip $(shell cd $(TOPDIR)/ld.so-1/d-link; ls -d $(TARGET_ARCH) 2>/dev/null))
+
+ifeq ($(NATIVE_ARCH), $(TARGET_ARCH))
+       SYSTEM_LDSO=$(shell ldd `which $(CC)` | sed -ne /ld/p | sed -e s/\ =.*//g)
+else
+       SYSTEM_LDSO=/lib/ld-linux.so.2
+endif
+
+ifeq ($(LDSO_PRESENT), $(TARGET_ARCH))
+       LDSO=ld.so-1/d-link/$(UCLIBC_LDSO)
+else
+       LDSO=$(SYSTEM_LDSO)
+endif
+       
+
 
 # It turns out the currently, function-sections causes ldelf2flt to segfault.
 # So till further notice, this is disabled by default....
index 75c8230..d28ab8c 100644 (file)
@@ -2,7 +2,12 @@ TOPDIR = ../../
 include $(TOPDIR)Rules.mak
 
 # NOTE: This may need to be modified for your system
-DYNAMIC_LINKER = $(INSTALL_DIR)/lib/ld-linux-uclibc.so.$(MAJOR_VERSION)
+ifeq ($(LDSO_PRESENT), $(TARGET_ARCH))
+       DYNAMIC_LINKER = $(INSTALL_DIR)/lib/ld-linux-uclibc.so.$(MAJOR_VERSION)
+else
+       DYNAMIC_LINKER=$(SYSTEM_LDSO)
+endif
+
 
 UCLIBC_DIR = $(shell (cd ../.. ; /bin/pwd))
 GCC_BIN = $(shell which $(CC))
index a93c6f5..314d225 100644 (file)
@@ -5,15 +5,23 @@ SUBDIRS = util d-link libdl # man
 
 
 all:
-       set -e ; for d in $(SUBDIRS) ; do $(MAKE) -C $$d ; done
+       @if [ -d d-link/$(TARGET_ARCH) ] ; then \
+               set -e ; for d in $(SUBDIRS) ; do $(MAKE) -C $$d ; done \
+       fi;
 
 install: all
-       install -d $(INSTALL_DIR)/lib
-       install -d $(INSTALL_DIR)/etc
-       install -m 755 ./d-link/$(DLINKER).$(LDSO_VMAJOR) $(INSTALL_DIR)/lib/
-       install -m 644 ./libdl/$(LIBDL).$(LDSO_VMAJOR) $(INSTALL_DIR)/lib/
-       (cd $(INSTALL_DIR)/lib/;ln -sf $(DLINKER).$(LDSO_VMAJOR) $(DLINKER))
-       (cd $(INSTALL_DIR)/lib/;ln -sf $(LIBDL).$(LDSO_VMAJOR) $(LIBDL))
+       @if [ -d d-link/$(TARGET_ARCH) ] ; then \
+               install -d $(INSTALL_DIR)/lib
+               install -d $(INSTALL_DIR)/etc
+               install -m 755 ./d-link/$(DLINKER).$(LDSO_VMAJOR) $(INSTALL_DIR)/lib/
+               install -m 644 ./libdl/$(LIBDL).$(LDSO_VMAJOR) $(INSTALL_DIR)/lib/
+               (cd $(INSTALL_DIR)/lib/;ln -sf $(DLINKER).$(LDSO_VMAJOR) $(DLINKER))
+               (cd $(INSTALL_DIR)/lib/;ln -sf $(LIBDL).$(LDSO_VMAJOR) $(LIBDL))
+       fi;
+d-link:
+       @if [ -d d-link/$(TARGET_ARCH) ] ; then \
+               do $(MAKE) -C d-link ; done \
+       fi;
 
 clean:
        set -e ; for d in $(SUBDIRS) ; do $(MAKE) -C $$d $@ ; done
index 6dad72d..eaf623b 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef STATFIX_H
 #define STATFIX_H
 
+#include <sys/types.h>
+
 /* Pull in whatever this particular arch's kernel thinks the kernel version of
  * struct stat should look like.  It turns out that each arch has a different
  * opinion on the subject, and different kernel revs use different names... */
diff --git a/libc/sysdeps/linux/powerpc/bits/errno.h b/libc/sysdeps/linux/powerpc/bits/errno.h
new file mode 100644 (file)
index 0000000..7da7daf
--- /dev/null
@@ -0,0 +1,60 @@
+/* Error constants.  Linux specific version.
+   Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifdef _ERRNO_H
+
+# undef EDOM
+# undef EILSEQ
+# undef ERANGE
+# include <linux/errno.h>
+
+/* Linux has no ENOTSUP error code.  */
+# define ENOTSUP EOPNOTSUPP
+
+/* Linux also has no ECANCELED error code.  Since it is not used here
+   we define it to an invalid value.  */
+# define ECANCELED     125
+
+# ifndef __ASSEMBLER__
+/* We now need a declaration of the `errno' variable.  */
+extern int errno;
+
+/* Function to get address of global `errno' variable.  */
+extern int *__errno_location (void);
+
+#  if defined _LIBC
+/* We wouldn't need a special macro anymore but it is history.  */
+#   define __set_errno(val) (*__errno_location ()) = (val)
+#  endif /* _LIBC */
+
+#  if !defined _LIBC || defined _LIBC_REENTRANT
+/* When using threads, errno is a per-thread value.  */
+#   define errno (*__errno_location ())
+#  endif
+# endif /* !__ASSEMBLER__ */
+#endif /* _ERRNO_H */
+
+#if !defined _ERRNO_H && defined __need_Emath
+/* This is ugly but the kernel header is not clean enough.  We must
+   define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
+   defined.  */
+# define EDOM  33      /* Math argument out of domain of function.  */
+# define EILSEQ        84      /* Illegal byte sequence.  */
+# define ERANGE        34      /* Math result not representable.  */
+#endif /* !_ERRNO_H && __need_Emath */
diff --git a/libc/sysdeps/linux/powerpc/bits/sem.h b/libc/sysdeps/linux/powerpc/bits/sem.h
new file mode 100644 (file)
index 0000000..18a9ff4
--- /dev/null
@@ -0,0 +1,87 @@
+/* Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO       0x1000          /* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID         11              /* get sempid */
+#define GETVAL         12              /* get semval */
+#define GETALL         13              /* get all semval's */
+#define GETNCNT                14              /* get semncnt */
+#define GETZCNT                15              /* get semzcnt */
+#define SETVAL         16              /* set semval */
+#define SETALL         17              /* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;            /* operation permission struct */
+  unsigned int __unused1;
+  __time_t sem_otime;                  /* last semop() time */
+  unsigned int __unused2;
+  __time_t sem_ctime;                  /* last time changed by semctl() */
+  unsigned long int sem_nsems;         /* number of semaphores in set */
+  unsigned long __unused3;
+  unsigned long __unused4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;                          <= value for SETVAL
+     struct semid_ds *buf;             <= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;                <= array for GETALL & SETALL
+     struct seminfo *__buf;            <= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED   1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct  seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */