linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Dave.Martin@arm.com (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] ARM: signal: fix armv7-m build issue in sigreturn_codes.S
Date: Fri, 15 Nov 2013 19:03:30 +0000	[thread overview]
Message-ID: <20131115190330.GD4028@e103592.cambridge.arm.com> (raw)
In-Reply-To: <1384325867-5140-1-git-send-email-victor.kamensky@linaro.org>

On Tue, Nov 12, 2013 at 10:57:46PM -0800, Victor Kamensky wrote:
> Hi,
> 
> Here is version 2 of fix to armv7-m build failure in sigreturn_codes.S.
> It is based on Dave's suggestion on [1]. Basically it set
> arch to arm4t explicitly if CONFIG_CPU_THUMBONLY is set.
> That enables both arm and thumb opcodes and code merged with
> the rest of image.
> 
> Version 1 [2] used conditional compilation.
> 
> Fix was tested
>    linux-next with efm32_defconfig build (along with few other fixes)
>    rmk-next BE/LE arndale build/boot and LTP rt_sigaction0? tests run
> 
> Dave, I've added your name with Suggested-by tag, please
> let me know if it is not OK with you, I'll remove it then.
> 
> Uwe, is it possible for you to test that this fix runs on 
> efm32? Sorry, for multiple requests.
> 
> To address concern about fragility of proposed solution
> I looked binutils bfd/elf32-arm.c
> 
>   https://sourceware.org/git/?p=binutils.git;a=blob;f=bfd/elf32-arm.c;h=5af1643bf506870e741ee4da7bd645083619e16d;hb=HEAD
> 
> Attributes merge deals with couple things:
> 
> Tag_CPU_arch: tag_cpu_arch_combine function deals with it
> and from its tables it seems that v4t is compatible with
> any latter version and resulting value will come from 
> latter version. I.e v4t and v7 (v7m) would merge fine.
> 
> Tag_CPU_arch_profile: since in case of '.arch armv4t' 
> profile attribute is not generated it is merged fine
> with any other profile. Unlike in case of 
> '.arch armv7a' and '.arch armv7m' profile values would
> be 'Application' and 'Microcontroller' and those 
> conflict.
> 
> Above logic seems to be universal, so other linkers
> may follow it too. So it seems it is good to use 
> '.arch armv4t' with armv7m code.

[Apologies if you already saw a reply to this.  I was writing one
previously, but I think I never finished it.  Anyway, here it is...]

After thinking about this, I'm not sure that this logic is really sound.

By allowing v7M objects to be linked together with ARM objects, ld
creates objects with nonsensical attributes:

File Attributes
  Tag_CPU_name: "7-M"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Microcontroller
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2

i.e., a object cannot really be compatible with the microcontroller
profile and also contain ARM instructions.  v7-M is absolutely not a
superset of v4T.


So, I think we are getting lucky here, and there's no real reason why
a different linker (or future versions of GNU ld) should allow this.

The alternative is to use #ifdefs, and replace the ARM instructions and
associates directives with suitable .space directives or nops in the ARM
case.

This brings us back closer to your original suggestion, I guess.


Cheers
---Dave

  parent reply	other threads:[~2013-11-15 19:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-13  6:57 [PATCH v2] ARM: signal: fix armv7-m build issue in sigreturn_codes.S Victor Kamensky
2013-11-13  6:57 ` Victor Kamensky
2013-11-15 19:03 ` Dave Martin [this message]
2013-11-15 19:24   ` Victor Kamensky
2013-11-18 13:44     ` Dave Martin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131115190330.GD4028@e103592.cambridge.arm.com \
    --to=dave.martin@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).