Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751299AbcCXTsu (ORCPT ); Thu, 24 Mar 2016 15:48:50 -0400 Received: from mout.kundenserver.de ([217.72.192.74]:59601 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750775AbcCXTss (ORCPT ); Thu, 24 Mar 2016 15:48:48 -0400 From: Arnd Bergmann To: linux-arm-kernel@lists.infradead.org Cc: Jonas Rabenstein , linux-kernel@vger.kernel.org, linux@arm.linux.org.uk, ard.biesheuvel@linaro.org Subject: Re: [PATCH] arm: remove dead blocks in XIP_KERNEL link script Date: Thu, 24 Mar 2016 20:48:13 +0100 Message-ID: <6088475.92CyWnYOvj@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) In-Reply-To: <1458845920-14922-1-git-send-email-jonas.rabenstein@studium.uni-erlangen.de> References: <1458845920-14922-1-git-send-email-jonas.rabenstein@studium.uni-erlangen.de> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:rU8yBklipdA4oeRW2f6dtM7rkZv87nGEux8+EW+hXGY8rN7XeDL auPi0PAwAvvbTKkMFui+esJzUOFCKEeUrlq2VeSbFQrn90Zzk/1xoGgLhffwS9VQXeTnh18 pq+zktKfMfQyW0WYRVd95wT1W4eZaeVCwq23Ire1apX2kwB77ECUcRiyQ41QuKvpdYotIOv +vgFhue6PasmOqjTb8OHw== X-UI-Out-Filterresults: notjunk:1;V01:K0:H9DbNdCh2ic=:eIVgbRyAEsjgQTJI0PLQ49 gOTlHYXqXm3/cKdnaPgOHWZiiFRKW37kzXorNxAbs5/02QVaq6cM/fPIV1jbVZo5rqoHP/F/S 8AhpDa4PpKtDtq3YXGcWFl4v7O2lGUf1pvZzCyAM/EPNwfok4lsMhJV4PfIzwv+k2Dr0JtR3H g0An1WLCUCB8vGEQSRyo/Piu+vuK5GcHn62nuAh5Qlg5TdZ9l4rOHQhGJ9SJBLGx+1d4pAFP/ d/eFuP8AQjuISOwe3cHDX5XCK6mKW+Q7fLnpS2/nXIYmj3CwBmoRhMu15FogoY//YMLu+0iQz PTZj0WyMEj8rzBnA4YqdNIPebmGmmpLQDxMgs68dloyNS+s8pfjqT6N6TkmkCwg1BpGQHG6hj C9EK7FoYuCBj+iGMwxeuliwdunZrwIn2jnondeCaYT2y6+P97EEZio2YS3l2Q9ogNZTBgVbrT R15hI3tUo/l3xBc4ybz3fa2aE6+VqlqMyYqbMNhkDz/+SFwC6/6aqxFDGv38W9XkIuZqKXmO4 8Pb8ib3DMiwL4VRSn9FM8ZyCks+HG12pYIyqyWqeo9Mz+G5fMIqGK97AKmLWUOCCVAbw5N+hu ZZZDp+O62qLgZfh4SWOTp5vdR64gpWDz2y/EsA75pIP76gvgUNJ8o2f3CUQxD4kKDW3RXxx5E F8hS4+UW3gAM7Js9ar/CDNs+y35C7FQ3w+xnUxOoAWwu9YKjpA1TNtuHyhDlVRZo35aqitVxw +4DLF1Jlvm8uh7bl Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4425 Lines: 148 On Thursday 24 March 2016 19:58:40 Jonas Rabenstein wrote: > Commit 538bf4694898 ("ARM: 8513/1: xip: Move XIP linking to a separate > file") separated all CONFIG_XIP_KERNEL related portions of the linker > script into a separate file. The copied parts depending on CONFIG_SMP > may be removed, as CONFIG_SMP (and related options) can never be > selected together with CONFIG_XIP_KERNEL. CONFIG_SMP_ON_UP has a direct > dependency on !CONFIG_XIP_KERNEL. CONFIG_XIP_KERNEL itself depends on > !ARCH_MULTIPLATFORM, but all devices specifying HAVE_SMP are also some > kind of multiplatform devices. Finally, HAVE_TCM is also only selected > by multiplatform devices and may not selected for the same reasons. > > Signed-off-by: Jonas Rabenstein > --- > I detected the issue with chimaera, a tool I currently develop for my bachelor > thesis extending the undertaker tool suite (https://undertaker.cs.fau.de). Your analysis of the existing dependencies sounds correct to me. We clearly cannot have SMP_ON_UP, and it may make sense to drop the TCM section as it is very unlikely to get used here (it's already basically unused on the non-XIP kernel, but should remain there). Regarding SMP and HOTPLUG_CPU, I think it makes sense to leave the support in this file, because it's possible that we will need that in the foreseeable future. Arnd > arch/arm/kernel/vmlinux-xip.lds.S | 75 --------------------------------------- > 1 file changed, 75 deletions(-) > > diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S > index cba1ec8..7da95f8 100644 > --- a/arch/arm/kernel/vmlinux-xip.lds.S > +++ b/arch/arm/kernel/vmlinux-xip.lds.S > @@ -25,13 +25,8 @@ > *(.hyp.idmap.text) \ > VMLINUX_SYMBOL(__hyp_idmap_text_end) = .; > > -#ifdef CONFIG_HOTPLUG_CPU > -#define ARM_CPU_DISCARD(x) > -#define ARM_CPU_KEEP(x) x > -#else > #define ARM_CPU_DISCARD(x) x > #define ARM_CPU_KEEP(x) > -#endif > > #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \ > defined(CONFIG_GENERIC_BUG) > @@ -74,9 +69,7 @@ SECTIONS > *(.text.fixup) > *(__ex_table) > #endif > -#ifndef CONFIG_SMP_ON_UP > *(.alt.smp.init) > -#endif > *(.discard) > *(.discard.*) > } > @@ -177,13 +170,6 @@ SECTIONS > *(.taglist.init) > __tagtable_end = .; > } > -#ifdef CONFIG_SMP_ON_UP > - .init.smpalt : { > - __smpalt_begin = .; > - *(.alt.smp.init) > - __smpalt_end = .; > - } > -#endif > .init.pv_table : { > __pv_table_begin = .; > *(.pv_table) > @@ -197,10 +183,6 @@ SECTIONS > INIT_RAM_FS > } > > -#ifdef CONFIG_SMP > - PERCPU_SECTION(L1_CACHE_BYTES) > -#endif > - > _exiprom = .; /* End of XIP ROM area */ > __data_loc = ALIGN(4); /* location in binary */ > . = PAGE_OFFSET + TEXT_OFFSET; > @@ -236,63 +218,6 @@ SECTIONS > } > _edata_loc = __data_loc + SIZEOF(.data); > > -#ifdef CONFIG_HAVE_TCM > - /* > - * We align everything to a page boundary so we can > - * free it after init has commenced and TCM contents have > - * been copied to its destination. > - */ > - .tcm_start : { > - . = ALIGN(PAGE_SIZE); > - __tcm_start = .; > - __itcm_start = .; > - } > - > - /* > - * Link these to the ITCM RAM > - * Put VMA to the TCM address and LMA to the common RAM > - * and we'll upload the contents from RAM to TCM and free > - * the used RAM after that. > - */ > - .text_itcm ITCM_OFFSET : AT(__itcm_start) > - { > - __sitcm_text = .; > - *(.tcm.text) > - *(.tcm.rodata) > - . = ALIGN(4); > - __eitcm_text = .; > - } > - > - /* > - * Reset the dot pointer, this is needed to create the > - * relative __dtcm_start below (to be used as extern in code). > - */ > - . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm); > - > - .dtcm_start : { > - __dtcm_start = .; > - } > - > - /* TODO: add remainder of ITCM as well, that can be used for data! */ > - .data_dtcm DTCM_OFFSET : AT(__dtcm_start) > - { > - . = ALIGN(4); > - __sdtcm_data = .; > - *(.tcm.data) > - . = ALIGN(4); > - __edtcm_data = .; > - } > - > - /* Reset the dot pointer or the linker gets confused */ > - . = ADDR(.dtcm_start) + SIZEOF(.data_dtcm); > - > - /* End marker for freeing TCM copy in linked object */ > - .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){ > - . = ALIGN(PAGE_SIZE); > - __tcm_end = .; > - } > -#endif > - > BSS_SECTION(0, 0, 0) > _end = .; > >