FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Ubuntu > Ubuntu Mobile and Embedded

 
 
LinkBack Thread Tools
 
Old 02-15-2010, 10:57 AM
"Dave P. Martin"
 
Default Thumb2PortingHowto wiki page question

Hi there, thanks for your questions.

> -----Original Message-----
> From: John Tytgat [mailto:John.Tytgat@aaug.net]

[...]

> I've read with interest the
> https://wiki.ubuntu.com/ARM/Thumb2PortingHowto page and I'm
> wondering about the following : in the "Quick Reference"
> section it is mentioned that "bx lr" is a no go for ARMv4 and earlier.

The Thumb instruction set did not exist at all before ARMv4T, and so in
ARMv4 and earlier architectures do not understand the BX instruction which
is used to switch to and from Thumb.

> But further on we have:
>
> #ifdef (___ARM_ARCH_4T__) || defined (__ARM_ARCH_4__)
> "mov pc, lr"
> #else
> "bx lr"
> #endif
>
> Why do we have the __ARM_ARCH_4T__ test ? ARMv4T happily
> groks "bx lr", no ?

You are right, but to minimise any impact on Debian (who build for ARMv4T
but do not make use of Thumb) I count ARMv4T as a non-Thumb architecture.

As things stand Debian should work on ARMv4 (non-T) platforms, and it's
possible some are still in use; if so, I don't want to break these with our
updates.

ARMv4T has some particular limitations which require less efficient
interworking return sequences for Thumb functions compared with the newer
architectures, so Thumb is less likely to be used for general userspace code
in Debian (unless they migrate completely to a higher architecture baseline
at some point in the future).


Strictly speaking, the test could be

#if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_3__) ||
defined(__ARM_ARCH_3M__) ||
defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)

However, this is verbose and easy to get wrong; and ARMv4 is about the
oldest baseline used by anyone at present.

Reversing the sense of the #if (to detect any compatible architecture, as
opposed to rejecting incompatible ones) is difficult to do in an
upwards-compatible way because of the way GCC describes the architecture in
its predefines.


I'll poke the wiki to clarify the rationale here (though discussion is still
welcome).

Cheers
---Dave



--
Ubuntu-mobile mailing list
Ubuntu-mobile@lists.ubuntu.com
Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-mobile
 

Thread Tools




All times are GMT. The time now is 10:47 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org