From owner-p4-projects@FreeBSD.ORG Fri Aug 11 22:47:25 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3A12616A4E2; Fri, 11 Aug 2006 22:47:25 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EFE6216A4E0 for ; Fri, 11 Aug 2006 22:47:24 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1CF0743D69 for ; Fri, 11 Aug 2006 22:47:15 +0000 (GMT) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k7BMlFHq041236 for ; Fri, 11 Aug 2006 22:47:15 GMT (envelope-from imp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k7BMlEHm041233 for perforce@freebsd.org; Fri, 11 Aug 2006 22:47:14 GMT (envelope-from imp@freebsd.org) Date: Fri, 11 Aug 2006 22:47:14 GMT Message-Id: <200608112247.k7BMlEHm041233@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to imp@freebsd.org using -f From: Warner Losh To: Perforce Change Reviews Cc: Subject: PERFORCE change 103669 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Aug 2006 22:47:25 -0000 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 ==== //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 ' > ${.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 ==== //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 +#ifndef CROSS_DEBUGGER #include #include +#include +#endif #include #include #include @@ -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); }