Re: [PATCHv1 01/12] unicore32 core architecture: build infrastructure
From: Paul Mundt <hidden>
Date: 2011-01-06 07:57:54
Also in:
lkml
On Sun, Dec 26, 2010 at 02:41:58AM +0800, Guan Xuetao wrote:
quoted hunk ↗ jump to hunk
diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig new file mode 100644 index 0000000..da59420 --- /dev/null +++ b/arch/unicore32/Kconfig@@ -0,0 +1,258 @@ +config UNICORE32 + bool + default y + select HAVE_MEMBLOCK + select HAVE_GENERIC_DMA_COHERENT + select HAVE_DMA_ATTRS + select HAVE_KERNEL_GZIP + select HAVE_KERNEL_BZIP2 + select HAVE_KERNEL_LZO + select HAVE_KERNEL_LZMA + select GENERIC_FIND_FIRST_BIT + select ARCH_WANT_FRAME_POINTERS
You want to select HAVE_GENERIC_HARDIRQS here.
+config GENERIC_HARDIRQS + bool + default y + +config GENERIC_HARDIRQS_NO__DO_IRQ + def_bool y +
Then you can get rid of these, and source kernel/irq/Kconfig.
+# arch/unicore32/Makefile +# +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (C) 2002~2010 by Guan Xue-tao +LOCALVERSION := -uc32 + +CROSS_COMPILE := /usr/unicore/gnu-toolchain-unicore/uc4/bin/unicore32-linux- +
This isn't terribly portable. You can elect to tie in cc-cross-prefix like other architectures, or just drop it entirely and store it in your .config (see the top-level Makefile for generic CROSS_COMPILE handling options).
+INSTALL_MOD_PATH := $(obj)/usr +
This and the LOCALVERSION specifications are pretty nasty surprises for users. This is all handled generically for a reason, so please kill off of this off.
+LDFLAGS_vmlinux :=-p --no-undefined -X + +OBJCOPYFLAGS :=-O binary -R .note -R .note.gnu.build-id -R .comment -S +GZFLAGS :=-9 +#KBUILD_CFLAGS +=-pipe +# Explicitly specifiy 32-bit UniCore ISA: +KBUILD_CFLAGS +=$(call cc-option,-municore,) + +# Never generate .eh_frame +KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) + +ifeq ($(CONFIG_FRAME_POINTER),y) +KBUILD_CFLAGS +=-fno-omit-frame-pointer -mno-sched-prolog +endif +
-fno-omit-frame-pointer is handled generically, so there is no need for it here.
+KBUILD_CPPFLAGS += -mlittle-endian +AS += -EL +LD += -EL +
No. If you need to set AS and LD flags for endianness, then do so explicitly. See how every other architecture is doing this. You may also wish to read through Documentation/kbuild/makefiles.txt carefully.
+comma = , +
This is unused?
+# Need -Uunicore32 for gcc < 3.x +# delete -mstructure-size-boundary=32, and default being 8 +# delete -funsigned-char, and default being signed-char +KBUILD_CFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uunicore32 +KBUILD_AFLAGS +=-msoft-float +
Is it realistic to even support gcc 2.x versions on a recent kernel?
+drivers-$(CONFIG_ARCH_PUV3) += drivers/staging/puv3/ + +libs-y += arch/unicore32/lib/ +libs-y += $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libc.a) +libs-y += $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a) +
The libgcc thing is not too surprising, but you do have -print-libgcc-file-name for this. That libc.a thing however needs some explaining.
quoted hunk ↗ jump to hunk
diff --git a/arch/unicore32/kernel/asm-offsets.c b/arch/unicore32/kernel/asm-offsets.c new file mode 100644 index 0000000..ffcbe75 --- /dev/null +++ b/arch/unicore32/kernel/asm-offsets.c +/* + * GCC 3.0, 3.1: general bad code generation. + * GCC 3.2.0: incorrect function argument offset calculation. + * GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c + * (http://gcc.gnu.org/PR8896) and incorrect structure + * initialisation in fs/jffs2/erase.c + */ +#if (__GNUC__ < 4) +#error Your compiler should upgrade to uc4 +#error Known good compilers: 4.2.2 +#endif +
If your compiler situation is this screwed up, then you need to be erroring out in the Makefile, and you can most certainly kill off that gcc 2.x cruft.
quoted hunk ↗ jump to hunk
+++ b/arch/unicore32/kernel/vmlinux.lds.S@@ -0,0 +1,120 @@ +/* + * linux/arch/unicore32/kernel/vmlinux.lds.S + * + * Code specific to PKUnity SoC and UniCore ISA + * + * Copyright (C) 2001-2010 GUAN Xue-tao + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <asm-generic/vmlinux.lds.h> +#include <asm/thread_info.h> +#include <asm/memory.h> +#include <asm/page.h> + +OUTPUT_ARCH(unicore32) +ENTRY(stext) + +jiffies = jiffies_64; + +SECTIONS +{ + . = PAGE_OFFSET + TEXT_OFFSET; + + .init : { /* Init code and data */ + _stext = .; + _sinittext = .; + HEAD_TEXT + INIT_TEXT + _einittext = .; + + INIT_SETUP(16) + + INIT_CALLS + CON_INITCALL + SECURITY_INITCALL + INIT_RAM_FS + + __init_begin = _stext; + INIT_DATA + } +
This looks really broken, please take a look at asm-generic/vmlinux.lds.h and use that as a model. Any reasons you have for needing to deviate from that should be thoroughly explained.