Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Aug 2006 22:47:14 GMT
From:      Warner Losh <imp@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 103669 for review
Message-ID:  <200608112247.k7BMlEHm041233@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=103669

Change 103669 by imp@imp_lighthouse on 2006/08/11 22:47:10

	Apply the gnu-arm.diff patch to the arm-devel tree, so that it works
	out of the box!

Affected files ...

.. //depot/projects/arm/src/gnu/lib/libgcc/Makefile#2 edit
.. //depot/projects/arm/src/gnu/lib/libstdc++/Makefile#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/Makefile#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/binutils/as/Makefile#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/binutils/as/arm-freebsd/targ-cpu.h#1 add
.. //depot/projects/arm/src/gnu/usr.bin/binutils/ld/Makefile.arm#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/binutils/ld/armelf_fbsd.sh#1 add
.. //depot/projects/arm/src/gnu/usr.bin/binutils/ld/armelfb_fbsd.sh#1 add
.. //depot/projects/arm/src/gnu/usr.bin/binutils/ld/genscripts.sh#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/binutils/libbfd/Makefile.arm#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/binutils/libiberty/Makefile#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/binutils/libiberty/config.h#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/cc/Makefile.inc#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/cc/arm.md.diff#1 add
.. //depot/projects/arm/src/gnu/usr.bin/cc/cc_int/Makefile#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/cc/cc_tools/Makefile#2 edit
.. //depot/projects/arm/src/gnu/usr.bin/cc/cc_tools/arm-freebsd.h.diff#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/Makefile#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/armfbsd-nat.c#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/armfbsd-tdep.c#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/config.h#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/init.c#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/nm-fbsd.h#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/tm-fbsd.h#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/arch/arm/xm-fbsd.h#1 add
.. //depot/projects/arm/src/gnu/usr.bin/gdb/kgdb/trgt_arm.c#2 edit

Differences ...

==== //depot/projects/arm/src/gnu/lib/libgcc/Makefile#2 (text+ko) ====

@@ -98,8 +98,11 @@
 #	from config/arm/t-strongarm-elf
 CFLAGS+=	-Dinhibit_libc -fno-inline
 LIB1ASMSRC =	lib1funcs.asm
-LIB1ASMFUNCS =	_udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func
-OBJS+=	dp-bit.o fp-bit.o
+#LIB1ASMFUNCS =	_dvmd_tls _bb_init_func _fixunsdfsi _addsubsf3 _addsubdf3 \
+#	       _truncdfsf2 _fixdfsi _extendsfdf2 _fixsfsi _cmpdf2 _cmpsf2 \
+#	       _muldivdf3 _muldivsf3
+#XXX
+LIB1ASMFUNCS = _dvmd_tls _bb_init_func 
 # We want fine grained libraries, so use the new code to build the
 # floating point emulation libraries.
 XXX fix this: NEED_FP_EMULATION set to "yes" with different rules per platform
@@ -169,7 +172,7 @@
 
 SYMS=		${LIB2FUNCS}		\
 		${LIB2_DIVMOD_FUNCS}
-.if ${TARGET_ARCH} == "arm" || ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "sparc64"
+.if ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "sparc64"
 SYMS+=		${FPBIT_FUNCS} ${DPBIT_FUNCS}
 .endif
 SYMS_ST=	${LIB2FUNCS_ST}		\

==== //depot/projects/arm/src/gnu/lib/libstdc++/Makefile#2 (text+ko) ====

@@ -174,6 +174,10 @@
 TARGETHDRSNAME_new_allocator_base.h= c++allocator.h
 TARGETHDRSDIR=	${CXXINCLUDEDIR}/bits
 
+.if ${MACHINE_ARCH} == "arm"
+CFLAGS+=	-D_GLIBCXX_SJLJ_EXCEPTIONS=1
+.endif
+
 MARCHHDRS=	atomic_word.h
 .for h in ${MARCHHDRS}
 .if exists(${SRCDIR}/config/cpu/${MARCHDIR}/${h})

==== //depot/projects/arm/src/gnu/usr.bin/Makefile#2 (text+ko) ====

@@ -24,7 +24,7 @@
 	sort \
 	${_texinfo}
  
-.if ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "powerpc"
+.if ${MACHINE_ARCH} == "powerpc"
 MK_GDB=	no	# not yet
 .endif
 

==== //depot/projects/arm/src/gnu/usr.bin/binutils/as/Makefile#2 (text+ko) ====

@@ -35,6 +35,11 @@
 .else
 CFLAGS+= -DDEFAULT_ARCH=\"${BINUTILS_ARCH}\"
 .endif
+
+.if ${TARGET_ARCH} == "arm" && defined(ARM_BIG_ENDIAN)
+CFLAGS+= -DTARGET_BYTES_BIG_ENDIAN=1
+.endif
+
 CFLAGS+= -DTARGET_CPU=\"${BINUTILS_ARCH}\"
 CFLAGS+= -DTARGET_CANONICAL=\"${TARGET_TUPLE}\"
 CFLAGS+= -DTARGET_ALIAS=\"${TARGET_TUPLE}\"

==== //depot/projects/arm/src/gnu/usr.bin/binutils/ld/Makefile.arm#2 (text+ko) ====

@@ -1,12 +1,17 @@
 # $FreeBSD: src/gnu/usr.bin/binutils/ld/Makefile.arm,v 1.1 2006/07/22 14:36:15 obrien Exp $
 
-NATIVE_EMULATION=	armelf_fbsd
+.if defined(ARM_BIG_ENDIAN)
+NATIVE_EMULATION= armelfb_fbsd
+.else
+NATIVE_EMULATION= armelf_fbsd
+.endif
 
 SRCS+=		e${NATIVE_EMULATION}.c
 CLEANFILES+=	e${NATIVE_EMULATION}.c
-e${NATIVE_EMULATION}.c: emulparams/${NATIVE_EMULATION}.sh emultempl/elf32.em \
+e${NATIVE_EMULATION}.c: ${.CURDIR}/${NATIVE_EMULATION}.sh emultempl/elf32.em \
     scripttempl/elf.sc genscripts.sh stringify.sed
 	sh ${.CURDIR}/genscripts.sh ${SRCDIR}/ld ${LIBSERACHPATH} \
 	    ${TOOLS_PREFIX}/usr \
 	    ${HOST} ${TARGET_TUPLE} ${TARGET_TUPLE} \
-	    ${NATIVE_EMULATION} "" no ${NATIVE_EMULATION} ${TARGET_TUPLE}
+	    ${NATIVE_EMULATION} "" no ${NATIVE_EMULATION} ${TARGET_TUPLE} \
+	    ${.CURDIR}/${NATIVE_EMULATION}.sh

==== //depot/projects/arm/src/gnu/usr.bin/binutils/ld/genscripts.sh#2 (text+ko) ====

@@ -37,7 +37,12 @@
 # FSF BU ver 2.15 which allows for a more generic emulparams processing.
 # To reduce the diff, I also include the ${EMULATION_NAME} parameter in uses
 # of 'CUSTOMIZER_SCRIPT'.
+
+# XXX: arm hack : until those file are merged back into the FSF repo, just
+# use the version in this directory.
+if !(test -f ${CUSTOMIZER_SCRIPT}"";) then
 CUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh"
+fi
 
 # Include the emulation-specific parameters:
 . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}

==== //depot/projects/arm/src/gnu/usr.bin/binutils/libbfd/Makefile.arm#2 (text+ko) ====

@@ -1,14 +1,52 @@
 # $FreeBSD: src/gnu/usr.bin/binutils/libbfd/Makefile.arm,v 1.2 2006/07/22 14:55:55 obrien Exp $
 
+.if defined(ARM_BIG_ENDIAN)
+DEFAULT_VECTOR= bfd_elf32_bigarm_vec
+ADDITIONAL_VECTOR= bfd_elf32_littlearm_vec
+.else
 DEFAULT_VECTOR=	bfd_elf32_littlearm_vec
+ADDITIONAL_VECTOR= bfd_elf32_bigarm_vec
+.endif
 
-SRCS+=	cpu-arm.c \
-	elf32.c	 \
+SRCS+=	\
+	cpu-arm.c	\
+	elf32.c		\
 	elf32-arm-fbsd.c \
-	elf32-gen.c \
-	elf32-target.h
-	elfarm-nabi.c \
-	elflink.c
+	elf32-gen.c	\
+	elf32-target.h \
+	elflink.c	
+VECS+=	${DEFAULT_VECTOR}  \
+	${ADDITIONAL_VECTOR}
+
+.if ${TARGET_ARCH} == "arm"
+CFLAGS+= -DDEFAULT_VECTOR=${DEFAULT_VECTOR}
+.endif
+
+CLEANFILES+=	elf32-arm-fbsd.c
+
+#
+# XXX: We should really add the FreeBSD case in elf32_arm_nabi_grok_prstatus
+# instead of defining our own elf32_fbsd_arm_grok_prstatus.
+#
+elf32-arm-fbsd.c: elfarm-nabi.c
+	cat ${.ALLSRC} | sed -e s/ELFOSABI_ARM/ELFOSABI_FREEBSD/g \
+	-e "s/\(.*#define.*\)elf32_arm_nabi_grok_prstatus/\1elf32_fbsd_arm_grok_prstatus/" -e s/"#include.*elf32-arm.h.*//" >${.TARGET}; \
+	echo '\
+	static bfd_boolean elf32_fbsd_arm_grok_prstatus(bfd *abfd, Elf_Internal_Note *note) \
+	{ \
+	size_t raw_size; \
+	int offset; \
+	if (note->descsz != 96) \
+		return (FALSE); \
+	offset = 28; \
+	raw_size = 68; \
+	if (elf_tdata(abfd)->core_signal == 0) \
+		elf_tdata (abfd)->core_signal = ((int *)(note->descdata))[5]; \
+	elf_tdata (abfd)->core_pid = ((int *)(note->descdata))[6]; \
+	/* Make a ".reg/999" section.  */ \
+  	return _bfd_elfcore_make_pseudosection (abfd, ".reg", \
+					  raw_size, note->descpos + offset); \
+}' >> ${.TARGET}; \
+	echo '#include "elf32-arm.h"' >> ${.TARGET}
 
-VECS=	${DEFAULT_VECTOR} \
-	bfd_elf32_bigarm_vec
+	

==== //depot/projects/arm/src/gnu/usr.bin/binutils/libiberty/Makefile#2 (text+ko) ====

@@ -18,4 +18,8 @@
 CFLAGS+=	-DHAVE_CONFIG_H
 INTERNALLIB=
 
+.if ${TARGET_ARCH} == "arm" && defined(ARM_BIG_ENDIAN)
+CFLAGS+= -DARM_BIG_ENDIAN
+.endif
+
 .include <bsd.lib.mk>

==== //depot/projects/arm/src/gnu/usr.bin/binutils/libiberty/config.h#2 (text+ko) ====

@@ -7,7 +7,7 @@
 
 
 /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
-#ifdef __sparc64__
+#if defined(__sparc64__) || defined(__ARMEB__)
 #define BYTEORDER 4321
 #else
 #define BYTEORDER 1234
@@ -325,7 +325,7 @@
 
 /* Define if the host machine stores words of multi-word integers in
    big-endian order. */
-#ifdef __sparc64__
+#if defined(__sparc64__) || defined(__ARMEB__)
 #define HOST_WORDS_BIG_ENDIAN 1
 #endif
 

==== //depot/projects/arm/src/gnu/usr.bin/cc/Makefile.inc#2 (text+ko) ====

@@ -11,7 +11,11 @@
 .include "Makefile.tgt"
 
 # Machine description.
+.if ${TARGET_ARCH} == "arm"
+MD_FILE=	${.OBJDIR}/arm-diked.md
+.else
 MD_FILE=	${GCCDIR}/config/${GCC_CPU}/${GCC_CPU}.md
+.endif
 target=		${TARGET_ARCH}-undermydesk-freebsd
 
 CFLAGS+=	-DIN_GCC -DHAVE_CONFIG_H
@@ -47,3 +51,17 @@
 .endif
 
 .endif # !__CC_MAKEFILE_INC__
+.if ${TARGET_ARCH} == "arm"
+CLEANFILES+=	arm-diked.md ${GCC_CPU}.md.orig fpa.md cirrus.md iwmmxt.md
+.endif
+
+.if ${TARGET_ARCH} == "arm"
+${.OBJDIR}/arm-diked.md:
+	cp ${GCCDIR}/config/${GCC_CPU}/${GCC_CPU}.md .
+#XXX: Those are not patched but are included by arm.md
+	cp ${GCCDIR}/config/${GCC_CPU}/fpa.md .
+	cp ${GCCDIR}/config/${GCC_CPU}/cirrus.md .
+	cp ${GCCDIR}/config/${GCC_CPU}/iwmmxt.md .
+	patch ${GCC_CPU}.md ${.CURDIR}/../arm.md.diff
+	mv ${GCC_CPU}.md ${.TARGET}
+.endif

==== //depot/projects/arm/src/gnu/usr.bin/cc/cc_int/Makefile#2 (text+ko) ====

@@ -80,6 +80,10 @@
 CFLAGS+=	-DHAVE_CONFIG_H
 CFLAGS+=	-DTARGET_NAME=\"${target}\" -DIN_GCC
 
+.if ${TARGET_ARCH} == "arm" && defined(ARM_BIG_ENDIAN)
+CFLAGS += -DTARGET_ENDIAN_DEFAULT=ARM_FLAG_BIG_END
+.endif
+
 # c-pch.o needs extra defines. Replicate the rule here rather than
 # pollute compiler command line for all other files.
 c-pch.o: c-pch.c

==== //depot/projects/arm/src/gnu/usr.bin/cc/cc_tools/Makefile#2 (text+ko) ====

@@ -216,7 +216,9 @@
 .if ${TARGET_ARCH} == "amd64"
 TARGET_INC=	i386/biarch64.h
 .endif
+.if ${TARGET_ARCH} != "arm"
 TARGET_INC+=	${GCC_CPU}/${GCC_CPU}.h
+.endif
 .if ${TARGET_ARCH} == "i386" || ${TARGET_ARCH} == "amd64"
 TARGET_INC+=	${GCC_CPU}/unix.h
 TARGET_INC+=	${GCC_CPU}/att.h
@@ -236,7 +238,19 @@
 TARGET_INC+=	${GCC_CPU}/sysv4.h
 .endif
 .endif
+.if ${TARGET_ARCH} == "arm"
+TARGET_INC+=	${GCC_CPU}/elf.h
+TARGET_INC+=	${GCC_CPU}/aout.h
+TARGET_INC+=	${GCC_CPU}/${GCC_CPU}.h
+. if defined(ARM_BIG_ENDIAN)
+CFLAGS+= -DTARGET_ENDIAN_DEFAULT=ARM_FLAG_BIG_END
+. endif
+.endif
+.if ${TARGET_ARCH} == "arm"
+TARGET_INC+=	freebsd-diked.h
+.else
 TARGET_INC+=	${GCC_CPU}/freebsd.h
+.endif
 .if ${TARGET_ARCH} == "amd64"
 TARGET_INC+=	${GCC_CPU}/x86-64.h
 TARGET_INC+=	${GCC_CPU}/freebsd64.h
@@ -334,6 +348,10 @@
 		gtyp-gen.h
 GENSRCS+=	${COMMONHDRS}
 
+.if ${TARGET_ARCH} == "arm"
+GENSRCS+=	freebsd-diked.h
+.endif
+
 MFILE?=	${.CURDIR}/Makefile
 ${COMMONHDRS}: ${MFILE}
 
@@ -389,7 +407,11 @@
 config.h: bconfig.h
 	echo '#include <bconfig.h>'			> ${.TARGET}
 
+.if ${TARGET_ARCH} == "arm"
+tm.h:	freebsd-diked.h
+.else
 tm.h:
+.endif
 	echo '#ifndef GCC_TM_H'				> ${.TARGET}
 	echo '#define GCC_TM_H'				>> ${.TARGET}
 .if defined(TARGET_CPU_DEFAULT)
@@ -458,12 +480,23 @@
 gcov-iov.h:
 	echo "#define GCOV_VERSION ((gcov_unsigned_t)0x33303470)" >> ${.TARGET}
 
+.if ${TARGET_ARCH} == "arm"
+freebsd-diked.h:
+	cp ${GCCDIR}/config/arm/freebsd.h freebsd.h
+	patch freebsd.h ${GCCDIR}/../../gnu/usr.bin/cc/cc_tools/arm-freebsd.h.diff
+	mv freebsd.h ${.TARGET}
+.endif
+
 #-----------------------------------------------------------------------
 # General things.
 
 SRCS+=		${GENSRCS}
 CLEANFILES+=	${GENSRCS}
 
+.if ${TARGET_ARCH} == "arm"
+CLEANFILES+=	freebsd.h.orig
+.endif
+
 all:		${SRCS}
 
 .include <bsd.prog.mk>

==== //depot/projects/arm/src/gnu/usr.bin/gdb/kgdb/trgt_arm.c#2 (text+ko) ====

@@ -28,8 +28,11 @@
 __FBSDID("$FreeBSD: src/gnu/usr.bin/gdb/kgdb/trgt_arm.c,v 1.1 2006/07/22 15:27:18 obrien Exp $");
 
 #include <sys/types.h>
+#ifndef CROSS_DEBUGGER
 #include <machine/pcb.h>
 #include <machine/frame.h>
+#include <machine/armreg.h>
+#endif
 #include <err.h>
 #include <kvm.h>
 #include <string.h>
@@ -47,6 +50,7 @@
 void
 kgdb_trgt_fetch_registers(int regno __unused)
 {
+#ifndef CROSS_DEBUGGER
 	struct kthr *kt;
 	struct pcb pcb;
 	int i, reg;
@@ -76,6 +80,7 @@
 		else
 			supply_register(ARM_PC_REGNUM, (char *)&reg);
 	}
+#endif
 }
 
 void
@@ -84,6 +89,7 @@
 	fprintf_unfiltered(gdb_stderr, "XXX: %s\n", __func__);
 }
 
+#ifndef CROSS_DEBUGGER
 struct kgdb_frame_cache {
 	CORE_ADDR	fp;
 	CORE_ADDR	sp;
@@ -130,6 +136,8 @@
 	return (cache);
 }
 
+static int is_undef;
+
 static void
 kgdb_trgt_trapframe_this_id(struct frame_info *next_frame, void **this_cache,
     struct frame_id *this_id)
@@ -148,6 +156,7 @@
 	char dummy_valuep[MAX_REGISTER_SIZE];
 	struct kgdb_frame_cache *cache;
 	int ofs, regsz;
+	int is_undefined = 0;
 
 	regsz = register_size(current_gdbarch, regnum);
 
@@ -165,9 +174,24 @@
 		return;
 
 	cache = kgdb_trgt_frame_cache(next_frame, this_cache);
+			
+	if (is_undef && (regnum == ARM_SP_REGNUM || regnum == ARM_PC_REGNUM)) {
+		*addrp = cache->sp + offsetof(struct trapframe, tf_spsr);
+		target_read_memory(*addrp, valuep, regsz);
+		is_undefined = 1;
+		ofs = kgdb_trgt_frame_offset[ARM_SP_REGNUM];
+
+	}
 	*addrp = cache->sp + ofs;
 	*lvalp = lval_memory;
 	target_read_memory(*addrp, valuep, regsz);
+
+	if (is_undefined) {
+		*addrp = *(unsigned int *)valuep + (regnum == ARM_SP_REGNUM ?
+		    0 : 8);
+		target_read_memory(*addrp, valuep, regsz);
+
+	}
 }
 
 static const struct frame_unwind kgdb_trgt_trapframe_unwind = {
@@ -175,22 +199,34 @@
         &kgdb_trgt_trapframe_this_id,
         &kgdb_trgt_trapframe_prev_register
 };
+#endif
 
 const struct frame_unwind *
 kgdb_trgt_trapframe_sniffer(struct frame_info *next_frame)
 {
+#ifndef CROSS_DEBUGGER
 	char *pname;
 	CORE_ADDR pc;
 
 	pc = frame_pc_unwind(next_frame);
 	pname = NULL;
 	find_pc_partial_function(pc, &pname, NULL, NULL);
-	if (pname == NULL)
+	if (pname == NULL) {
+		is_undef = 0;
 		return (NULL);
+	}
+	if (!strcmp(pname, "undefinedinstruction"))
+		is_undef = 1;
 	if (strcmp(pname, "Laddress_exception_entry") == 0 ||
 	    strcmp(pname, "undefined_entry") == 0 ||
 	    strcmp(pname, "exception_exit") == 0 ||
+	    strcmp(pname, "Laddress_exception_msg") == 0 ||
 	    strcmp(pname, "irq_entry") == 0)
 		return (&kgdb_trgt_trapframe_unwind);
+	if (!strcmp(pname, "undefinedinstruction"))
+		is_undef = 1;
+	else
+		is_undef = 0;
+#endif
 	return (NULL);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200608112247.k7BMlEHm041233>