[fpc-devel] DIFF patch for changing to table driven processor definitions for ARM
David Welch
dwelch at dwelch.com
Sat Aug 27 05:06:36 CEST 2011
when building for SUBARCH=cortexm3, fails with:
make[3]: *** No rule to make target `thumb2_bare.ppu', needed by
`fpc_units'. Stop.
On 08/26/2011 05:09 PM, David Welch wrote:
> Another diff to be considered.
>
>
> Index: rtl/embedded/arm/arm_bare_ram.pp
> ===================================================================
> --- rtl/embedded/arm/arm_bare_ram.pp (revision 0)
> +++ rtl/embedded/arm/arm_bare_ram.pp (revision 0)
> @@ -0,0 +1,63 @@
> +{
> +Startup code for a simple ram-only ARM
> +David Welch 2011 08 26 (dwelch at dwelch com)
> +based on lpc21x4 created by Sten Larsson (sten_larsson at yahoo com)
> +}
> +
> +unit arm_bare_ram;
> +
> +{$goto on}
> +
> + interface
> +
> + implementation
> +
> + procedure PASCALMAIN; external name 'PASCALMAIN';
> +
> + procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
> + asm
> + .Lhalt:
> + b .Lhalt
> + end;
> +
> + var
> + _stack_top: record end; external name '_stack_top';
> + _bss_start: record end; external name '_bss_start';
> + _bss_end: record end; external name '_bss_end';
> +
> + procedure _FPC_start; assembler; nostackframe;
> + label
> + _start;
> + asm
> + .init
> + .align 16
> + .globl _start
> + _start:
> + ldr sp,.L_stack_top
> + // clear onboard ram
> + ldr r1,.L_bss_start
> + ldr r2,.L_bss_end
> + mov r0,#0
> +.Lzeroloop:
> + cmp r1,r2
> + strls r0,[r1],#4
> + bls .Lzeroloop
> +
> + bl PASCALMAIN
> + bl _FPC_haltproc
> + .L_hang:
> + b .L_hang
> +.L_bss_start:
> + .long _bss_start
> +.L_bss_end:
> + .long _bss_end
> +
> +
> +
> +.L_stack_top:
> + .long _stack_top
> + .text
> + end;
> +
> +end.
> +
> Index: rtl/embedded/Makefile.fpc
> ===================================================================
> --- rtl/embedded/Makefile.fpc (revision 18855)
> +++ rtl/embedded/Makefile.fpc (working copy)
> @@ -53,7 +53,7 @@
> endif
>
> ifeq ($(SUBARCH),armv7)
> -CPU_UNITS=lpc21x4 at91sam7x256
> +CPU_UNITS=lpc21x4 at91sam7x256 arm_bare_ram
> endif
> endif
>
> Index: rtl/embedded/Makefile
> ===================================================================
> --- rtl/embedded/Makefile (revision 18855)
> +++ rtl/embedded/Makefile (working copy)
> @@ -317,8 +317,8 @@
> ifeq ($(SUBARCH),cortexm3)
> CPU_UNITS=lm3fury lm3tempest thumb2_bare stm32f103
> endif
> -ifeq ($(SUBARCH),armv7)
> -CPU_UNITS=lpc21x4 at91sam7x256
> +ifeq ($(SUBARCH),armv4)
> +CPU_UNITS=lpc21x4 at91sam7x256 arm_bare_ram
> endif
> endif
> ifeq ($(ARCH),avr)
> Index: compiler/arm/cpuinfo.pas
> ===================================================================
> --- compiler/arm/cpuinfo.pas (revision 18855)
> +++ compiler/arm/cpuinfo.pas (working copy)
> @@ -61,6 +61,8 @@
> tcontrollertype =
> (ct_none,
>
> + ct_arm_bare_ram,
> +
> { Phillips }
> ct_lpc2114,
> ct_lpc2124,
> @@ -212,7 +214,19 @@
> sramsize:0
> ),
>
> +
> (
> + controllertypestr:'ARM_BARE_RAM';
> + controllerunitstr:'ARM_BARE_RAM';
> + interruptvectors:8;
> + flashbase:$00000000;
> + flashsize:$00000000;
> + srambase:$D6000000;
> + sramsize:$0000C000
> + ),
> +
> +
> + (
> controllertypestr:'LPC2114';
> controllerunitstr:'LPC21x4';
> interruptvectors:8;
> Index: compiler/systems/t_embed.pas
> ===================================================================
> --- compiler/systems/t_embed.pas (revision 18855)
> +++ compiler/systems/t_embed.pas (working copy)
> @@ -220,6 +220,7 @@
> ct_none:
> begin
> end;
> + ct_arm_bare_ram,
> ct_lpc2114,
> ct_lpc2124,
> ct_lpc2194,
> @@ -312,16 +313,19 @@
> Add('MEMORY');
> Add('{');
>
> - LinkStr := ' flash : ORIGIN = 0x' + IntToHex(flashbase,8)
> - + ', LENGTH = ' + IntToStr(flashsize div 1024)+'K';
> - Add(LinkStr);
> + if(flashsize<>0) then
> + begin
> + LinkStr := ' flash : ORIGIN = 0x' + IntToHex(flashbase,8)
> + + ', LENGTH = ' + IntToStr(flashsize div 1024)+'K';
> + Add(LinkStr);
> + end;
>
> LinkStr := ' ram : ORIGIN = 0x' + IntToHex(srambase,8)
> + ', LENGTH = ' + IntToStr(sramsize div 1024)+'K';
> Add(LinkStr);
>
> Add('}');
> - Add('_stack_top = 0x' + IntToHex(sramsize+srambase-4,8) + ';');
> + Add('_stack_top = 0x' + IntToHex(sramsize+srambase,8) + ';');
> end;
> end
> else
> @@ -329,6 +333,8 @@
> internalerror(200902011);
> end;
>
> +
> + with embedded_controllers[current_settings.controllertype] do
> with linkres do
> begin
> Add('SECTIONS');
> @@ -341,14 +347,28 @@
> Add(' *(.rodata, .rodata.*)');
> Add(' *(.comment)');
> Add(' _etext = .;');
> - Add(' }>flash');
> + if(flashsize<>0) then
> + begin
> + Add(' }>flash');
> + end
> + else
> + begin
> + Add(' }>ram');
> + end;
> Add(' .data :');
> Add(' {');
> Add(' _data = .;');
> Add(' *(.data, .data.*)');
> Add(' KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
> Add(' _edata = .;');
> - Add(' }>ram AT>flash');
> + if(flashsize<>0) then
> + begin
> + Add(' }>ram AT>flash');
> + end
> + else
> + begin
> + Add(' }>ram');
> + end;
> Add(' .bss :');
> Add(' {');
> Add(' _bss_start = .;');
> @@ -360,6 +380,7 @@
> Add('}');
> Add('_end = .;');
> end;
> +
> {$endif ARM}
>
> {$ifdef i386}
>
> On Fri, Aug 26, 2011 at 10:53 AM, David Welch<dwelch at dwelch.com> wrote:
>> need to apply this patch, like the wiki thing maybe there is a place I
>> have to sign up to be able to check in to svn, otherwise. The lpc and
>> sam7 parts are ARM7TDMI which is an armv4t not remotely able to
>> support the armv7 instructions. the correction also needs to be made
>> to allow armv7m or cortexm3. If we are going to mix the architecture
>> (armv7m) and marketings name for the core (cortexm3) we should be
>> consistent and start doing things like provide an arm7tdmi for the
>> other two families. LIkewise anywhere it says if cortexm3 it should
>> say if cortexm3 or armv7m then. if armv4 or if armv4t or if arm7tdmi
>> then... Ideally not use the name cortexm3 and instead only use
>> armv7m. Have a wiki page or readme that says if stellaris or stm32 or
>> lpc1xxx then armv7m if lpc2xxx or sam7 or generic arm then armv4...
>>
>>
>> Index: rtl/embedded/Makefile
>> ===================================================================
>> --- rtl/embedded/Makefile (revision 18854)
>> +++ rtl/embedded/Makefile (working copy)
>> @@ -317,7 +317,7 @@
>> ifeq ($(SUBARCH),cortexm3)
>> CPU_UNITS=lm3fury lm3tempest thumb2_bare stm32f103
>> endif
>> -ifeq ($(SUBARCH),armv7)
>> +ifeq ($(SUBARCH),armv4)
>> CPU_UNITS=lpc21x4 at91sam7x256
>> endif
>> endif
>>
>>
>> On Fri, Aug 26, 2011 at 5:17 AM, John Clymer<john at johnclymer.net> wrote:
>>> Part of what I submitted was 2 batch files in the root directory -
>>> buildarm.bat and buildthumb2.bat - that was my attempt to provide an example
>>> with the BINUTILS equates spelled out.
>>>
>>> John
>>>
>>>
>>> ________________________________
>>> From: David Welch<dwelch at dwelch.com>
>>> To: FPC developers' list<fpc-devel at lists.freepascal.org>
>>> Sent: Fri, August 26, 2011 6:17:43 AM
>>> Subject: Re: [fpc-devel] DIFF patch for changing to table driven processor
>>> definitions for ARM
>>>
>>>
>>> Can someone with the power to update the wiki (maybe we all do I dont know)
>>> change the target embedded page to reflect the SUBARCH thing?
>>>
>>> Also either put a link to
>>>
>>> http://wiki.lazarus.freepascal.org/Binutils
>>>
>>> or spell out something like this:
>>>
>>> ./configure --target=arm-linux --prefix=/something/something/
>>> --program-prefix=arm-embedded- --disable-werror
>>>
>>> For the non-windows folks so we can play too. Too me a while to figure out
>>> why I was not even able to build per the target embedded instructions.
>>>
>>> Thanks,
>>> David
>>>
>>> On 08/25/2011 10:13 PM, David Welch wrote:
>>>> cpuinfo.pas(156,2) Fatal: Can't open include file "controllerunit.inc"
>>>>
>>>> On 08/25/2011 05:50 PM, Florian Klämpfl wrote:
>>>>> OS_TARGET=embedded CPU_TARGET=arm SUBARCH=cortexm3
>>>
>>> _______________________________________________
>>> fpc-devel maillist - fpc-devel at lists.freepascal.org
>>> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>>>
>>> _______________________________________________
>>> fpc-devel maillist - fpc-devel at lists.freepascal.org
>>> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>>>
>>>
>>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
> .
More information about the fpc-devel
mailing list