summaryrefslogtreecommitdiff
path: root/ldso
diff options
context:
space:
mode:
Diffstat (limited to 'ldso')
-rw-r--r--ldso/ldso/boot1.c3
-rw-r--r--ldso/ldso/dl-elf.c3
-rw-r--r--ldso/ldso/ld-uClibc.c3
-rw-r--r--ldso/ldso/ldso.c3
-rw-r--r--ldso/ldso/readelflib1.c3
-rw-r--r--ldso/util/.cvsignore1
-rw-r--r--ldso/util/Makefile22
-rw-r--r--ldso/util/ldconfig.c3
-rw-r--r--ldso/util/ldd.c5
-rw-r--r--ldso/util/readsoname.c61
-rw-r--r--ldso/util/readsoname.h (renamed from ldso/util/readelf.h)0
-rw-r--r--ldso/util/readsoname2.c (renamed from ldso/util/readelf2.c)0
12 files changed, 89 insertions, 18 deletions
diff --git a/ldso/ldso/boot1.c b/ldso/ldso/boot1.c
index 771dca6a4..2c7092756 100644
--- a/ldso/ldso/boot1.c
+++ b/ldso/ldso/boot1.c
@@ -92,7 +92,8 @@
*/
#include <stdarg.h>
-#include "elf.h"
+#include <elf.h>
+#include "linuxelf.h"
#include "link.h"
#include "sysdep.h"
#include "hash.h"
diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
index a80aa0579..0241b5f9d 100644
--- a/ldso/ldso/dl-elf.c
+++ b/ldso/ldso/dl-elf.c
@@ -22,7 +22,8 @@
library into memory and add the symbol table info to the chain. */
#include <asm/mman.h>
-#include "elf.h"
+#include <elf.h>
+#include "linuxelf.h"
#include "string.h"
#include "hash.h"
#include "sysdep.h"
diff --git a/ldso/ldso/ld-uClibc.c b/ldso/ldso/ld-uClibc.c
index 771dca6a4..2c7092756 100644
--- a/ldso/ldso/ld-uClibc.c
+++ b/ldso/ldso/ld-uClibc.c
@@ -92,7 +92,8 @@
*/
#include <stdarg.h>
-#include "elf.h"
+#include <elf.h>
+#include "linuxelf.h"
#include "link.h"
#include "sysdep.h"
#include "hash.h"
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
index 771dca6a4..2c7092756 100644
--- a/ldso/ldso/ldso.c
+++ b/ldso/ldso/ldso.c
@@ -92,7 +92,8 @@
*/
#include <stdarg.h>
-#include "elf.h"
+#include <elf.h>
+#include "linuxelf.h"
#include "link.h"
#include "sysdep.h"
#include "hash.h"
diff --git a/ldso/ldso/readelflib1.c b/ldso/ldso/readelflib1.c
index a80aa0579..0241b5f9d 100644
--- a/ldso/ldso/readelflib1.c
+++ b/ldso/ldso/readelflib1.c
@@ -22,7 +22,8 @@
library into memory and add the symbol table info to the chain. */
#include <asm/mman.h>
-#include "elf.h"
+#include <elf.h>
+#include "linuxelf.h"
#include "string.h"
#include "hash.h"
#include "sysdep.h"
diff --git a/ldso/util/.cvsignore b/ldso/util/.cvsignore
index 65cb593d4..8d9e73db5 100644
--- a/ldso/util/.cvsignore
+++ b/ldso/util/.cvsignore
@@ -1,2 +1,3 @@
ldd
ldconfig
+readelf
diff --git a/ldso/util/Makefile b/ldso/util/Makefile
index a8f482f20..8fe733eb9 100644
--- a/ldso/util/Makefile
+++ b/ldso/util/Makefile
@@ -2,14 +2,15 @@ TOPDIR=../../
include $(TOPDIR)/ldso/Rules.mak
CFLAGS += -DLDSO_ADDR="0x62f00020" # needed by ldd.o
-CFLAGS += -I./ -I../../include/
-LDFLAGS += -nostdlib $(TOPDIR)lib/libc.a $(TOPDIR)lib/crt0.o $(GCCINCDIR)/../libgcc.a
+#CFLAGS += -I./ -I../../include/
+#LDFLAGS += -nostdlib $(TOPDIR)lib/libc.a $(TOPDIR)lib/crt0.o $(GCCINCDIR)/../libgcc.a
+LDFLAGS += $(TOPDIR)lib/libc.a $(TOPDIR)lib/crt0.o $(GCCINCDIR)/../libgcc.a
-ALL = ldconfig ldd # lddstub
+ALL = ldconfig ldd readelf # lddstub
all: $(ALL)
-CSRC= readelf.c ldconfig.c ldd.c
+CSRC= readelf.c ldconfig.c ldd.c readsoname.c
COBJS=$(patsubst %.c,%.o, $(CSRC))
OBJS=$(COBJS)
@@ -17,13 +18,16 @@ $(COBJS): %.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
$(STRIPTOOL) -x -R .note -R .comment $*.o
-readelf.o: readelf.c readelf2.c
+readsoname.o: readsoname.c readsoname2.c
-ldconfig: ldconfig.o readelf.o
- $(CC) -static $(CFLAGS) $^ $(LDFLAGS) -o $@
+readelf: readelf.o
+ $(CC) $(CFLAGS) $^ -o $@
-ldd: ldd.o readelf.o
- $(CC) -static $(CFLAGS) $^ $(LDFLAGS) -o $@
+ldconfig: ldconfig.o readsoname.o
+ $(CC) $(CFLAGS) $^ -o $@
+
+ldd: ldd.o readsoname.o
+ $(CC) $(CFLAGS) $^ -o $@
#ifeq ($(DEBUG),true)
#STUBFLAGS = -Wl,-dynamic-linker,../d-link/ld-linux.so
diff --git a/ldso/util/ldconfig.c b/ldso/util/ldconfig.c
index 55f79f773..58f9cb10b 100644
--- a/ldso/util/ldconfig.c
+++ b/ldso/util/ldconfig.c
@@ -38,9 +38,8 @@
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
-
#include "../config.h"
-#include "readelf.h"
+#include "readsoname.h"
struct exec
{
diff --git a/ldso/util/ldd.c b/ldso/util/ldd.c
index ea4f1f5ef..dcf895d19 100644
--- a/ldso/util/ldd.c
+++ b/ldso/util/ldd.c
@@ -23,9 +23,10 @@
#include <unistd.h>
#include <errno.h>
#include <sys/wait.h>
-#include "../d-link/elf.h"
+#include <elf.h>
+#include "../d-link/linuxelf.h"
#include "../config.h"
-#include "readelf.h"
+#include "readsoname.h"
struct exec
{
diff --git a/ldso/util/readsoname.c b/ldso/util/readsoname.c
new file mode 100644
index 000000000..db772f0ae
--- /dev/null
+++ b/ldso/util/readsoname.c
@@ -0,0 +1,61 @@
+/* adapted from Eric Youngdale's readelf program */
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <link.h>
+#include <elf.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include "../config.h"
+#include "readsoname.h"
+
+void warn(char *fmt, ...);
+char *xstrdup(char *);
+
+struct needed_tab
+{
+ char *soname;
+ int type;
+};
+
+struct needed_tab needed_tab[] = {
+ { "libc.so.5", LIB_ELF_LIBC5 },
+ { "libm.so.5", LIB_ELF_LIBC5 },
+ { "libdl.so.1", LIB_ELF_LIBC5 },
+ { "libc.so.6", LIB_ELF_LIBC6 },
+ { "libm.so.6", LIB_ELF_LIBC6 },
+ { "libdl.so.2", LIB_ELF_LIBC6 },
+ { NULL, LIB_ELF }
+};
+
+char *readsoname(char *name, FILE *infile, int expected_type,
+ int *type, int elfclass)
+{
+ char *res;
+
+ if (elfclass == ELFCLASS32)
+ res = readsoname32(name, infile, expected_type, type);
+ else
+ {
+ res = readsoname64(name, infile, expected_type, type);
+#if 0
+ *type |= LIB_ELF64;
+#endif
+ }
+
+ return res;
+}
+
+#undef __ELF_NATIVE_CLASS
+#undef readsonameXX
+#define readsonameXX readsoname32
+#define __ELF_NATIVE_CLASS 32
+#include "readsoname2.c"
+
+#undef __ELF_NATIVE_CLASS
+#undef readsonameXX
+#define readsonameXX readsoname64
+#define __ELF_NATIVE_CLASS 64
+#include "readsoname2.c"
diff --git a/ldso/util/readelf.h b/ldso/util/readsoname.h
index 78d2216e0..78d2216e0 100644
--- a/ldso/util/readelf.h
+++ b/ldso/util/readsoname.h
diff --git a/ldso/util/readelf2.c b/ldso/util/readsoname2.c
index 1bf47b7c6..1bf47b7c6 100644
--- a/ldso/util/readelf2.c
+++ b/ldso/util/readsoname2.c