PERFORCE change 103669 for review
Warner Losh
imp at FreeBSD.org
Fri Aug 11 22:47:25 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=103669
Change 103669 by imp at 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 *)®);
}
+#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);
}
More information about the p4-projects
mailing list