Skip to contentSkip to conversation

ia64 fixes

PATCH New Arnd Bergmann 3 participants 5 messages Nov 24, 2003

lore
Share & tools
lore
#0 lore raw
Quoted 2 lines · Martin Hicks

My makefile-foo is probably sub-par.  If someone could figure out a good way to get things right for 64bit platforms, then that would be good.

This patch works for s390x and should be architecture-independent. Unfortunately, I have found that both the s390 and x86-64 kernel headers have trivial bugs that prevent building klibc against them.

Quoted 9 lines

I'm not entirely sure why I had to change $(GCC) to $(LD) in the link step.  If I don't I get a warning:

/usr/bin/ld: Warning: type of symbol 'errno' changed from 1 to 6 in /usr/lib/gcc-lib/ia64-linux/3.3.2/../../../libc.a(errno.o)

Maybe we're missing a flag on the final link, while using $(GCC)?  The old Makefile.klibc used $(LD), which allowed me to track down this problem.

Hmm, it does sound like a real problem. If you are using a glibc with tls enabled, simply using 'extern int errno;' is guaranteed to fail. Does 'find -name \*.o | xargs readelf -a | grep errno' reveal anything interesting?

Review

Quoted 8 lines
(quoted diff) +0 -0
@@ -93,6 +96,10 @@

        CFLAGS+=-pipe
 endif

(quoted diff) +4 -0
+ifeq ($(strip $(ARCH)),ia64)
+       BITSd
+endif
+

The information can be taken from klibc/arch/${ARCH}/MCONFIG.

Review

Quoted 2 lines
(quoted diff) +1 -1
-       $(CC) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
+       $(LD) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)

Using ld instead of gcc breaks 32 bit platforms, unless you manually add libgcc like we do for the klibc build (64 bit division is a library function). I've also added a definition for LD, so it becomes usable for cross-compiling.

	Arnd <><

=== Makefile 1.37 vs edited ==--- 1.37/Makefile Mon Nov 24 06:38:00 2003
+++ edited/Makefile Mon Nov 24 04:38:01 2003
@@ -55,6 +55,7 @@

 # to compile vs uClibc, that can be done here as well.
 CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
 CC = $(CROSS)gcc
+LD = $(CROSS)gcc
 AR = $(CROSS)ar
 STRIP = $(CROSS)strip
 RANLIB = $(CROSS)ranlib
@@ -109,6 +110,7 @@
 ifeq ($(strip $(KLIBC)),true)
 	KLIBC_DIR	= klibc/klibc
 	INCLUDE_DIR	:= $(KLIBC_DIR)/include
+	include $(KLIBC_DIR)/arch/$(ARCH)/MCONFIG
 	# arch specific objects
 	LIBGCC		= $(shell $(CC) --print-libgcc)
 	ARCH_LIB_OBJS =	\
@@ -117,8 +119,10 @@

CRT0 = $(KLIBC_DIR)/crt0.o
- LIBC = $(ARCH_LIB_OBJS) $(LIB_OBJS)
- CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/bits32 -I$(GCCINCDIR) -Iklibc/linux/include -D__KLIBC__
+ LIBC = $(ARCH_LIB_OBJS) $(LIB_OBJS) $(CRT0)
+ CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(KLIBC_DIR)/arch/$(ARCH)/include \
+ -I$(INCLUDE_DIR)/bits$(BITSIZE) -I$(GCCINCDIR) -Iklibc/linux/include \
+ -D__KLIBC__
LIB_OBJS LDFLAGS = --static --nostdlib -nostartfiles
else
@@ -169,7 +173,7 @@

$(ROOT): $(GEN_HEADERS) $(OBJS)
- $(CC) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
+ $(LD) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
$(STRIPCMD) $(ROOT)

clean:
=== tdb/tdb.h 1.1 vs edited ==--- 1.1/tdb/tdb.h Tue Aug 5 02:26:58 2003
+++ edited/tdb/tdb.h Mon Nov 24 04:29:13 2003
@@ -25,6 +25,7 @@
extern "C" {
#endif

+#include <signal.h>

/* flags to tdb_store() */
#define TDB_REPLACE 1

	Arnd <><

-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#1 lore raw

PATCH 1/1 ia64 fixes

Hi Greg,

I currently need the attached patch to get udev to even compile againt klibc. I think there are still problems with the CALLOUT pipe failing. It's likely klibc's fault. I'll investigate that this afternoon.

My makefile-foo is probably sub-par. If someone could figure out a good way to get things right for 64bit platforms, then that would be good.

I'm not entirely sure why I had to change $(GCC) to $(LD) in the link step. If I don't I get a warning:

/usr/bin/ld: Warning: type of symbol 'errno' changed from 1 to 6 in /usr/lib/gcc-lib/ia64-linux/3.3.2/../../../libc.a(errno.o)

Maybe we're missing a flag on the final link, while using $(GCC)? The old Makefile.klibc used $(LD), which allowed me to track down this problem.

thanks,
mh

Signature · 76 lines
Martin Hicks || [email protected] || PGP/GnuPG: 0x4C7F2BEE

# This is a BitKeeper generated patch for the following project:
# Project Name: udev
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.199   -> 1.200  
#	            Makefile	1.34    -> 1.35   
#	           tdb/tdb.h	1.1     -> 1.2    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/11/24	[email protected]	1.200
# -Fixes for 64 bit platform.
# -I also had to change the makefile to use the linker on the final step to avoid
#  an error on ia64.
# -Included signal.h in tdb/tdb.h to fix a compile problem for ia64.
# --------------------------------------------
#
diff -Nru a/Makefile b/Makefile
--- a/Makefile	Mon Nov 24 12:03:31 2003
+++ b/Makefile	Mon Nov 24 12:03:31 2003
@@ -65,6 +65,9 @@
 ARCH := ${shell $(CC) -dumpmachine | sed -e s'/-.*//' -e 's/i.86/i386/' -e 's/sparc.*/sparc/' \
 	-e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/ppc/powerpc/g'}
 
+# Defaults to 32-bit.
+BITS := 32
+
 # code taken from uClibc to determine the gcc include dir
 GCCINCDIR := ${shell $(CC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp"}
 
@@ -93,6 +96,10 @@
 	CFLAGS+=-pipe
 endif
 
+ifeq ($(strip $(ARCH)),ia64)
+	BITS=64
+endif
+
 # if DEBUG is enabled, then we do not strip or optimize
 ifeq ($(strip $(DEBUG)),true)
 	CFLAGS  += $(WARNINGS) -O1 -g -DDEBUG -D_GNU_SOURCE
@@ -117,8 +124,10 @@
 
 
 	CRT0 = $(KLIBC_DIR)/crt0.o
-	LIBC =	$(ARCH_LIB_OBJS) $(LIB_OBJS)
-	CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/bits32 -I$(GCCINCDIR) -Iklibc/linux/include -D__KLIBC__
+	LIBC =	$(ARCH_LIB_OBJS) $(LIB_OBJS) $(CRT0)
+	CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(KLIBC_DIR)/arch/$(ARCH)/include \
+		-I$(INCLUDE_DIR)/bits$(BITS) -I$(GCCINCDIR) -Iklibc/linux/include \
+		-D__KLIBC__
 	LIB_OBJS =
 	LDFLAGS = --static --nostdlib -nostartfiles
 else
@@ -166,7 +175,7 @@
 
 
 $(ROOT): $(GEN_HEADERS) $(OBJS)
-	$(CC) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
+	$(LD) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
 	$(STRIPCMD) $(ROOT)
 
 clean:
diff -Nru a/tdb/tdb.h b/tdb/tdb.h
--- a/tdb/tdb.h	Mon Nov 24 12:03:31 2003
+++ b/tdb/tdb.h	Mon Nov 24 12:03:31 2003
@@ -25,6 +25,7 @@
 extern "C" {
 #endif
 
+#include <signal.h>
 
 /* flags to tdb_store() */
 #define TDB_REPLACE 1
#2 lore raw
In reply to Arnd Bergmann
Quoted 2 lines · Martin Hicks

Hi Greg,

Grr...
I'm not having a good patch day. Here's one that isn't mangled by pgp.

mh

Signature · 88 lines
Martin Hicks || [email protected] || PGP/GnuPG: 0x4C7F2BEE

# This is a BitKeeper generated patch for the following project:
# Project Name: udev
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.199   -> 1.200  
#	            Makefile	1.34    -> 1.35   
#	           tdb/tdb.h	1.1     -> 1.2    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/11/24	[email protected]	1.200
# -Fixes for 64 bit platform.
# -I also had to change the makefile to use the linker on the final step to avoid
#  an error on ia64.
# -Included signal.h in tdb/tdb.h to fix a compile problem for ia64.
# --------------------------------------------
#
diff -Nru a/Makefile b/Makefile
--- a/Makefile	Mon Nov 24 12:03:31 2003
+++ b/Makefile	Mon Nov 24 12:03:31 2003
@@ -65,6 +65,9 @@
 ARCH := ${shell $(CC) -dumpmachine | sed -e s'/-.*//' -e 's/i.86/i386/' -e 's/sparc.*/sparc/' \
 	-e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/ppc/powerpc/g'}
 
+# Defaults to 32-bit.
+BITS := 32
+
 # code taken from uClibc to determine the gcc include dir
 GCCINCDIR := ${shell $(CC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp"}
 
@@ -93,6 +96,10 @@
 	CFLAGS+=-pipe
 endif
 
+ifeq ($(strip $(ARCH)),ia64)
+	BITSd
+endif
+
 # if DEBUG is enabled, then we do not strip or optimize
 ifeq ($(strip $(DEBUG)),true)
 	CFLAGS  += $(WARNINGS) -O1 -g -DDEBUG -D_GNU_SOURCE
@@ -117,8 +124,10 @@
 
 
 	CRT0 = $(KLIBC_DIR)/crt0.o
-	LIBC =	$(ARCH_LIB_OBJS) $(LIB_OBJS)
-	CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/bits32 -I$(GCCINCDIR) -Iklibc/linux/include -D__KLIBC__
+	LIBC =	$(ARCH_LIB_OBJS) $(LIB_OBJS) $(CRT0)
+	CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(KLIBC_DIR)/arch/$(ARCH)/include \
+		-I$(INCLUDE_DIR)/bits$(BITS) -I$(GCCINCDIR) -Iklibc/linux/include \
+		-D__KLIBC__
 	LIB_OBJS  	LDFLAGS = --static --nostdlib -nostartfiles
 else
@@ -166,7 +175,7 @@
 
 
 $(ROOT): $(GEN_HEADERS) $(OBJS)
-	$(CC) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
+	$(LD) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
 	$(STRIPCMD) $(ROOT)
 
 clean:
diff -Nru a/tdb/tdb.h b/tdb/tdb.h
--- a/tdb/tdb.h	Mon Nov 24 12:03:31 2003
+++ b/tdb/tdb.h	Mon Nov 24 12:03:31 2003
@@ -25,6 +25,7 @@
 extern "C" {
 #endif
 
+#include <signal.h>
 
 /* flags to tdb_store() */
 #define TDB_REPLACE 1




-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
#3 lore raw
In reply to Arnd Bergmann
Quoted 8 lines · Arnd Bergmann
Quoted 6 lines · Martin Hicks

I'm not entirely sure why I had to change $(GCC) to $(LD) in the link step. If I don't I get a warning:

/usr/bin/ld: Warning: type of symbol 'errno' changed from 1 to 6 in /usr/lib/gcc-lib/ia64-linux/3.3.2/../../../libc.a(errno.o)

Quoted 8 lines
Quoted 3 lines

Maybe we're missing a flag on the final link, while using $(GCC)? The old Makefile.klibc used $(LD), which allowed me to track down this problem.

Hmm, it does sound like a real problem. If you are using a glibc with tls enabled, simply using 'extern int errno;' is guaranteed to fail. Does 'find -name \*.o | xargs readelf -a | grep errno' reveal anything interesting?

Nothing interesting to me, although I'm not sure what I'm looking for.

Quoted 5 lines
Quoted 5 lines
(quoted diff) +0 -0
@@ -93,6 +96,10 @@
        CFLAGS+=-pipe
 endif
 
Quoted 9 lines

Review line 102

Quoted 4 lines
(quoted diff) +4 -0
+ifeq ($(strip $(ARCH)),ia64)
+       BITS=64
+endif
+

The information can be taken from klibc/arch/${ARCH}/MCONFIG.

Quoted 2 lines
(quoted diff) +1 -1
-       $(CC) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
+       $(LD) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)

This is a good idea. I forgot about that file.

Quoted 4 lines

Using ld instead of gcc breaks 32 bit platforms, unless you manually add libgcc like we do for the klibc build (64 bit division is a library function). I've also added a definition for LD, so it becomes usable for cross-compiling.

Maybe I'll ask on the ia64 list about the errno thing. mh

Signature · 1 line
Martin Hicks || [email protected] || PGP/GnuPG: 0x4C7F2BEE
#4 lore raw
In reply to Arnd Bergmann
Quoted 7 lines · Arnd Bergmann
Quoted 2 lines · Martin Hicks

My makefile-foo is probably sub-par.  If someone could figure out a good way to get things right for 64bit platforms, then that would be good.

This patch works for s390x and should be architecture-independent. Unfortunately, I have found that both the s390 and x86-64 kernel headers have trivial bugs that prevent building klibc against them.

Looks good, I've applied this and updated the version of klibc in the udev release to the latest klibc release (which required this patch).

thanks,

greg k-h

-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel