<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt">Yes, I'm somewhat familiar with mixing Thumb and Arm in C.<br><br>However, I believe the intent is to target FPC for the newbie market (that's what I'm getting from wanting all the hardware peripheral registers installed in the controller unit file...)  A newbie is NOT going to have any luck intermixing the two.<br><br>That also doesn't solve the problem of the SYSTEM unit.  As the compiler is laid out now - the system unit sits in a directory of the name <ARCH>-<SYSTEM>.  So, to support BOTH ARM and THUMB (i.e. Cortex and native ARM7TDMI) SYSTEM files, 2 different builds are needed.  However - they can't both sit in the same directory (not with the current setup of Makefiles and code.)<br><br>I've seen where the compiler inserts the system unit and controller units,
 so supporting both would only be a few lines of code there.  I've also seen when running the compiler in verbose mode (-Va) that the -Cp processor switch is getting defined to a constant - so one could possibly massage the makefiles into supporting <ARCH>-<CPUTYPE>-<SYSTEM> directories to seperate the two system units.<br><div><br>Otherwise, one has the following problem:<br>1) building for ARM - all the controllerunits compile (because the assembler can assemble the thumb startup code into arm startup code).  However, when one builds a program with the resulting SYSTEM and controllerunit file, the startup will be in ARM mode and cause the program not to run.)<br>2) building in THUMB - the ARM startup code in the lpc and sam7 controllerunit files fail to build - as they have ARM specific assembly code in them.<br><br>However, if you are claiming that an ARM binary can be linked against a THUMB SYSTEM unit, then only the
 startup code remains to get fixed - and things aren't as messy as I'm perceiving them. <br><br>John<br></div><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><br><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><font face="Tahoma" size="2"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> David Welch <dwelch@dwelch.com><br><b><span style="font-weight: bold;">To:</span></b> FPC developers' list <fpc-devel@lists.freepascal.org><br><b><span style="font-weight: bold;">Sent:</span></b> Mon, August 22, 2011 6:00:29 AM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [fpc-devel] ARM vs Thumb2 - can't have both<br></font><br>
<br>except for a few older ARM's both platforms support thumb code, so anything that is shared could be compiled for thumb with some target specific trampolines to get there<br><br>ARM:<br><br>0x00000:  b _pre_start<br>...<br><br>_pre_start:<br>    ldr r0,_start<br>    bx r0<br>    .pool<br><br><br>cortex-m3:<br>0x0000:  _stac_top<br>0x0004:  .word _start<br><br><br>.thumb_func<br>_start:<br>    limit to thumb instructions (no thumb2)<br><br>same works for interrupts as well...<br><br>If everything is written in an thumb interwork fashion then you can jump around from target specific block to target specific block,  PASCALMAIN can be arm for the arm target and thumb2 for the cortex-m3 target for example and it all works.<br><br>BTW if you add .thumb_func<br><br>         .thumb_func<br>    .globl _start<br>    .text<br>_start:<br><br><br>you dont
 have to do this:<br>    .long _start+1<br>you can do this instead:<br>    .long _start<br><br>at least for gnu as, not sure if this code is targeted at different assemblers.<br><br><br>On 08/21/2011 05:58 PM, John Clymer wrote:<br>> Been playing with the ARM / Thumb2 part - specifically for the Thumb2<br>> line-up.<br>> <br>> The compiler proper can be built to switch between the two with a<br>> command line switch. However, the RTL gets called as <ARCH>-<SYSTEM>,<br>> this only allows the RTL to compiled for one or the other.<br>> <br>> This may be by design - in which case there should be a big BOLD note<br>> added to the Arm port page. Or it may be unintentional - in which case<br>> it should be switched to <ARCH>-<CPU>-<SYSTEM> OR Thumb2 should get<br>> rolled out as a separate <ARCH>.<br>> <br>> Not sure I will have time to get into changing
 <ARCH>, but if there is a<br>> [somewhat] easy fix to add <CPU> to the RTL path for architectures that<br>> support it, I may have time to dig into that.<br>> <br>> John<br>> <br>> <br>> <br>> _______________________________________________<br>> fpc-devel maillist  -  <a ymailto="mailto:fpc-devel@lists.freepascal.org" href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a><br><span>> <a target="_blank" href="http://lists.freepascal.org/mailman/listinfo/fpc-devel">http://lists.freepascal.org/mailman/listinfo/fpc-devel</a></span><br><br>_______________________________________________<br>fpc-devel maillist  -  <a ymailto="mailto:fpc-devel@lists.freepascal.org" href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a><br><a href="http://lists.freepascal.org/mailman/listinfo/fpc-devel"
 target="_blank">http://lists.freepascal.org/mailman/listinfo/fpc-devel</a><br></div></div>



</div></body></html>