subrepo:
  subdir:   "libopencm3"
  merged:   "f5813a54"
upstream:
  origin:   "https://github.com/libopencm3/libopencm3"
  branch:   "master"
  commit:   "f5813a54"
git-subrepo:
  version:  "0.4.3"
  origin:   "???"
  commit:   "???"
This commit is contained in:
2021-09-30 16:34:10 +03:00
parent 1a441e5806
commit 244fdbc35c
1125 changed files with 185440 additions and 0 deletions

144
libopencm3/ld/README Normal file
View File

@@ -0,0 +1,144 @@
------------------------------------------------------------------------------
README
------------------------------------------------------------------------------
LIBOPENCM3 LINKER SCRIPT GENERATOR
----------------------------------
This folder contains files needed for the automatic linker script generation
mechanism developed for libopencm3 library.
File contents
-------------
* {ROOT}/ld/tests/* - Prepared tests for the testing of the script
* {ROOT}/ld/devices.data - Device database file
* {ROOT}/ld/linker.ld.S - Linker script template
* {ROOT}/scripts/genlink.py - Device database file search script
* {ROOT}/scripts/genlinktest.sh - Device database file search test script
Principle of operation
----------------------
The user specifies in the project Makefile the device part name the project is
using, in the variable DEVICE. Note that full device part name must be
specified, because the device specific features is usually dependent on the
last characters of device name string. Note that the device name string search
is case insensitive.
DEVICE=stm32f407vgt6
Device database contains definitions of common sections and its origins for
the linker preprocessor. Every definition is interpreted in the linker script
template as a macro, and it can be used for conditional insertion of the device
dependent stuff.
The search in the device database is pattern-based, and using python script
genlink.py. The python script traverses the file as a tree, joining the options
for the preprocessor together by single space. The python script adds -D to
each parameter for you.
Testing
-------
The testing of feature is done by executing in the root of libopencm3 library.
make genlinktests
The test cases are defined in subdirectory {ROOT}/ld/tests/. Each test contains
two files, the database file *.data and the expected result *.result file. If
the particular test fails, the file *.out containing output of the script is
not deleted to help resolving problem with the script.
The search pattern for the test is the base filename of particular test.
The testing stops after all test cases are valid, or at first error found.
Example of use
--------------
* Check the documentation for the genlink module in /mk/README.
Device database file structure
------------------------------
Line description:
<pattern> <parent> (<data> ...)
<pattern>: is the pattern for the chip description to be searched for.
The case of the pattern string is ignored.
Pattern match symbols:
? - matches exactly one character
* - matches none or more characters
+ - matches single or more characters
<parent>: is the parent group name, where the search will continue.
There are special parents names that controls traversing:
"END" - Exit traversal.
"+" - Don't change the parent. Use for split long line to two.
<data>: space-separated list of preprocessor symbols supplied to the linker.
-D option name with single underscore is automatically prepended to each
symbol definition
if the symbol starts with dash "-", it is interpreted as parameter to
linker, and no -D or underscore is generated.
All lines starting with # symbol are treated as Comments
Recommended tree hierarchy:
<device name> <family group> <device specific params>
+- <family group> <family> <family group specific params>
+- <family> <architecture> <device family specific params>
+- <architecture> END <architecture specific params>
You can split the long line into two or more by using "+" in the parent field,
and defining same regex with appropriate parent on the next line. Example:
device + PARAM1=aaa PARAM2=bbbb PARAM3=ccc PARAM4=dddd PARAM5=eeee
device parent PARAM6=ffff PARAM7=gggg PARAM8=hhhh
parent END
The order of the lines is important. After the regex match, its parent will
be used for match on the next line. If two regexp lines matches input, only
the first will be evaluated, except special group definition "+"
The regex matches entire sym
Example:
--- devices.data file ---
stm32f05[01]?4* stm32f0 ROM=16K RAM=4K
stm32f0 stm32 ROM_OFF=0x08000000 RAM_OFF=0x20000000 -mcpu=cortex-m0 -mthumb
stm32 END
--- queried chip name ---
stm32f051c4t6
--- output of the python script ---
-D_ROM=16K -D_RAM=4K -D_ROM_OFF=0x08000000 -D_RAM_OFF=0x20000000
The generated linker script file will contain sections rom and ram with
appropriate initialization code, specified in linker file source linker.ld.S
Copyright
---------
This file is part of the libopencm3 project.
Copyright (C) 2013 Frantisek Burian <Bufran@seznam.cz>
Copyright (C) 2013 Werner Almesberger <wpwrak>
This library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this library. If not, see <http://www.gnu.org/licenses/>.

593
libopencm3/ld/devices.data Normal file
View File

@@ -0,0 +1,593 @@
################################################################################
#
# Device chip tree definition file.
#
# Copyright (c) 2013 Frantisek Burian <Bufran@seznam.cz>
# Copyright (C) 2013 Werner Almesberger <wpwrak>
#
# Line description:
# <pattern> <parent> (<data> ...)
#
# <pattern>: is the pattern for the chip description to be searched for.
# The case of the pattern string is ignored.
# Pattern match symbols:
# ? - matches exactly one character
# * - matches none or more characters
# + - matches single or more characters
#
# <parent>: is the parent group name, where the search will continue.
# There are special parents names that controls traversing:
# "END" - Exit traversal.
# "+" - Don't change the parent. Use for split long line to two.
#
# <data>: space-separated list of preprocessor symbols supplied to the linker.
# -D option name is automatically prepended to each symbol definition
#
# All lines starting with # symbol are treated as Comments
#
# Recommended tree hierarchy:
#
# <device name> <family group> <device specific params>
# +- <family group> <family> <family group specific params>
# +- <family> <architecture> <device family specific params>
# +- <architecture> END <architecture specific params>
#
# You can split the long line into two or more by using "+" in the parent field,
# and defining same regex with appropriate parent on the next line. Example:
#
# device + PARAM1=aaa PARAM2=bbbb PARAM3=ccc PARAM4=dddd PARAM5=eeee
# device parent PARAM6=ffff PARAM7=gggg PARAM8=hhhh
# parent END
#
# The order of the lines is important. After the regex match, its parent will
# be used for match on the next line. If two regexp lines matches input, only
# the first will be evaluated, except special group definition "+"
#
# The regex matches entire sym
#
# Example:
#
# --- devices.data file ---
# stm32f05[01]?4* stm32f0 ROM=16K RAM=4K
# stm32f0 stm32 ROM_OFF=0x08000000 RAM_OFF=0x20000000
# stm32 END
#
# --- queried chip name ---
# stm32f051c8t6
#
# --- output of the python script ---
# -DROM=16K -DRAM=4K -DROM_OFF=0x08000000 -DRAM_OFF=0x20000000
#
# The generated linker script file will contain sections rom and ram with
# appropriate initialization code, specified in linker file source linker.ld.S
#
################################################################################
# the STM32 chips
stm32f03[01]?4* stm32f0 ROM=16K RAM=4K
stm32f03[01]?6* stm32f0 ROM=32K RAM=4K
stm32f030?8* stm32f0 ROM=64K RAM=8K
stm32f030?c* stm32f0 ROM=256K RAM=32K
stm32f042?4* stm32f0 ROM=16K RAM=6K
stm32f042?6* stm32f0 ROM=32K RAM=6K
stm32f050?4* stm32f0 ROM=16K RAM=4K
stm32f050?6* stm32f0 ROM=32K RAM=4K
stm32f051?4* stm32f0 ROM=16K RAM=8K
stm32f051?6* stm32f0 ROM=32K RAM=8K
stm32f051?8* stm32f0 ROM=64K RAM=8K
stm32f070?6* stm32f0 ROM=32K RAM=6K
stm32f07[12]?8* stm32f0 ROM=64K RAM=16K
stm32f07[012]?b* stm32f0 ROM=128K RAM=16K
stm32f091?b* stm32f0 ROM=128K RAM=32K
stm32f091?c* stm32f0 ROM=256K RAM=32K
stm32f10[012]?4* stm32f1 ROM=16K RAM=4K
stm32f103?4* stm32f1 ROM=16K RAM=6K
stm32f100?6* stm32f1 ROM=32K RAM=4K
stm32f103?6* stm32f1 ROM=32K RAM=10K
stm32f10[12]?6* stm32f1 ROM=32K RAM=6K
stm32f100?8* stm32f1 ROM=64K RAM=8K
stm32f10[12]?8* stm32f1 ROM=64K RAM=10K
stm32f103?8* stm32f1 ROM=64K RAM=20K
stm32f105?8* stm32f1 ROM=64K RAM=64K
stm32f100?b* stm32f1 ROM=128K RAM=8K
stm32f10[12]?b* stm32f1 ROM=128K RAM=16K
stm32f103?b* stm32f1 ROM=128K RAM=20K
stm32f10[57]?b* stm32f1 ROM=128K RAM=64K
stm32f100?c* stm32f1 ROM=256K RAM=24K
stm32f101?c* stm32f1 ROM=256K RAM=32K
stm32f103?c* stm32f1 ROM=256K RAM=48K
stm32f10[57]?c* stm32f1 ROM=256K RAM=64K
stm32f100?d* stm32f1 ROM=384K RAM=32K
stm32f101?d* stm32f1 ROM=384K RAM=48K
stm32f103?d* stm32f1 ROM=384K RAM=64K
stm32f100?e* stm32f1 ROM=512K RAM=32K
stm32f101?e* stm32f1 ROM=512K RAM=48K
stm32f103?e* stm32f1 ROM=512K RAM=64K
stm32f100?f* stm32f1 ROM=768K RAM=80K
stm32f103?f* stm32f1 ROM=768K RAM=96K
stm32f100?g* stm32f1 ROM=1024K RAM=80K
stm32f103?g* stm32f1 ROM=1024K RAM=96K
stm32f205?b* stm32f2 ROM=128K RAM=64K
stm32f205?c* stm32f2 ROM=256K RAM=96K
stm32f207?c* stm32f2 ROM=256K RAM=128K
stm32f2[01][57]?e* stm32f2 ROM=512K RAM=128K
stm32f20[57]?f* stm32f2 ROM=768K RAM=128K
stm32f2[01][57]?g* stm32f2 ROM=1024K RAM=128K
stm32f30[12]?6* stm32f3 ROM=32K RAM=16K
stm32f30[12]?8* stm32f3 ROM=64K RAM=16K
stm32f302?b* stm32f3 ROM=128K RAM=32K
stm32f302?c* stm32f3 ROM=256K RAM=40K
stm32f302?d* stm32f3 ROM=384K RAM=64K
stm32f302?e* stm32f3 ROM=512K RAM=64K
stm32f303?6* stm32f3ccm ROM=32K RAM=12K CCM=4K
stm32f303?8* stm32f3ccm ROM=64K RAM=12K CCM=4K
stm32f303?b* stm32f3ccm ROM=128K RAM=32K CCM=8K
stm32f3[01]3?c* stm32f3ccm ROM=256K RAM=40K CCM=8K
stm32f3[01]3?d* stm32f3ccm ROM=384K RAM=64K CCM=16K
stm32f3[01]3?e* stm32f3ccm ROM=512K RAM=64K CCM=16K
stm32f334?3* stm32f3ccm ROM=16K RAM=12K CCM=4K
stm32f334?6* stm32f3ccm ROM=32K RAM=12K CCM=4K
stm32f334?8* stm32f3ccm ROM=64K RAM=12K CCM=4K
stm32f318?8* stm32f3 ROM=64K RAM=16K
stm32f328?8* stm32f3ccm ROM=64K RAM=12K CCM=4K
stm32f358?c* stm32f3ccm ROM=256K RAM=40K CCM=8K
stm32f378?c* stm32f3 ROM=256K RAM=32K
stm32f398?e* stm32f3ccm ROM=512K RAM=64K CCM=16K
stm32f373?8* stm32f3 ROM=64K RAM=16K
stm32f373?b* stm32f3 ROM=128K RAM=24K
stm32f373?c* stm32f3 ROM=256K RAM=32K
stm32f3[78]3?8* stm32f3 ROM=64K RAM=16K
stm32f3[78]3?b* stm32f3 ROM=128K RAM=24K
stm32f3[78]3?c* stm32f3 ROM=256K RAM=32K
stm32f401?b* stm32f4 ROM=128K RAM=64K
stm32f401?c* stm32f4 ROM=256K RAM=64K
stm32f401?d* stm32f4 ROM=384K RAM=96K
stm32f401?e* stm32f4 ROM=512K RAM=96K
stm32f4[01][57]?e* stm32f4ccm ROM=512K RAM=128K CCM=64K
stm32f4[01][57]?g* stm32f4ccm ROM=1024K RAM=128K CCM=64K
stm32f410?8* stm32f4 ROM=64K RAM=32K
stm32f410?b* stm32f4 ROM=128K RAM=32K
stm32f411?c* stm32f4 ROM=256K RAM=128K
stm32f411?e* stm32f4 ROM=512K RAM=128K
stm32f412?e* stm32f4 ROM=512K RAM=256K
stm32f412?g* stm32f4 ROM=1024K RAM=256K
stm32f4[12]3?g* stm32f4ccm ROM=1024K RAM=256K CCM=64K
stm32f4[12]3?h* stm32f4ccm ROM=1536K RAM=256K CCM=64K
stm32f4[23][79]?e* stm32f4ccm ROM=512K RAM=192K CCM=64K
stm32f4[23][79]?g* stm32f4ccm ROM=1024K RAM=192K CCM=64K
stm32f4[23][79]?i* stm32f4ccm ROM=2048K RAM=192K CCM=64K
stm32f446?c* stm32f4 ROM=256K RAM=128K
stm32f446?e* stm32f4 ROM=512K RAM=128K
stm32f4[67]9?e* stm32f4ccm ROM=512K RAM=320K CCM=64K
stm32f4[67]9?g* stm32f4ccm ROM=1024K RAM=320K CCM=64K
stm32f4[67]9?i* stm32f4ccm ROM=2048K RAM=320K CCM=64K
# on F7 CCM is in some datasheets named as DTCM
stm32f7[23][23]?c* stm32f7ccm ROM=256K RAM=192K CCM=64K
stm32f7[23][23]?e* stm32f7ccm ROM=512K RAM=192K CCM=64K
stm32f745?e* stm32f7ccm ROM=512K RAM=256K CCM=64K
stm32f745?g* stm32f7ccm ROM=1024K RAM=256K CCM=64K
stm32f765?g* stm32f7ccm ROM=512K RAM=384K CCM=128K
stm32f765?i* stm32f7ccm ROM=2048K RAM=384K CCM=128K
stm32f7[45]6?e* stm32f7ccm ROM=512K RAM=256K CCM=64K
stm32f7[45]6?g* stm32f7ccm ROM=1024K RAM=256K CCM=64K
stm32f7[67]7?g* stm32f7ccm ROM=1024K RAM=384K CCM=128K
stm32f7[67]7?i* stm32f7ccm ROM=2048K RAM=384K CCM=128K
stm32f769?g* stm32f7ccm ROM=1024K RAM=384K CCM=128K
stm32f7[67][89]?i* stm32f7ccm ROM=2048K RAM=384K CCM=128K
stm32f750* stm32f7ccm ROM=64K RAM=256K CCM=64K
stm32f730* stm32f7ccm ROM=64K RAM=192K CCM=64K
stm32l01??3* stm32l0 ROM=8K RAM=2K
stm32l0[12]??4* stm32l0 ROM=16K RAM=2K
stm32l03??4* stm32l0 ROM=16K RAM=8K
stm32l0???6* stm32l0 ROM=32K RAM=8K
stm32l0[78]??8* stm32l0 ROM=64K RAM=20K
stm32l0???8* stm32l0 ROM=64K RAM=8K
stm32l0???b* stm32l0 ROM=128K RAM=20K
stm32l0???z* stm32l0 ROM=192K RAM=20K
stm32l100?6* stm32l1eep ROM=32K RAM=4K EEP=2K
stm32l100?8* stm32l1eep ROM=64K RAM=8K EEP=2K
stm32l100?b*_a stm32l1eep ROM=128K RAM=16K EEP=2K
stm32l100?b* stm32l1eep ROM=128K RAM=10K EEP=2K
stm32l100?c* stm32l1eep ROM=256K RAM=16K EEP=4K
stm32l15[12]?6*_a stm32l1eep ROM=32K RAM=16K EEP=4K
stm32l15[12]?6* stm32l1eep ROM=32K RAM=10K EEP=4K
stm32l15[12]?8*_a stm32l1eep ROM=64K RAM=32K EEP=4K
stm32l15[12]?8* stm32l1eep ROM=64K RAM=10K EEP=4K
stm32l15[12]?b*_a stm32l1eep ROM=128K RAM=32K EEP=4K
stm32l15[12]?b* stm32l1eep ROM=128K RAM=16K EEP=4K
stm32l15[12]?c* stm32l1eep ROM=256K RAM=32K EEP=8K
stm32l15[12]?d*_x stm32l1eep ROM=384K RAM=80K EEP=16K
stm32l15[12]?d* stm32l1eep ROM=384K RAM=48K EEP=12K
stm32l15[12]?e* stm32l1eep ROM=512K RAM=80K EEP=16K
stm32l162?c* stm32l1eep ROM=256K RAM=32K EEP=8K
stm32l162?d*_x stm32l1eep ROM=384K RAM=80K EEP=16K
stm32l162?d* stm32l1eep ROM=384K RAM=48K EEP=12K
stm32l43??b* stm32l4 ROM=128K RAM=48K RAM2=16K
stm32l4[34]??c* stm32l4 ROM=256K RAM=48K RAM2=16K
stm32l451?c* stm32l4 ROM=256K RAM=128K RAM2=32K
stm32l451?e* stm32l4 ROM=512K RAM=128K RAM2=32K
stm32l471?e* stm32l4 ROM=512K RAM=96K RAM2=32K
stm32l471?g* stm32l4 ROM=1024K RAM=96K RAM2=32K
stm32l452?c* stm32l4 ROM=256K RAM=128K RAM2=32K
stm32l4[56]2?e* stm32l4 ROM=512K RAM=128K RAM2=32K
stm32l47[56]?c* stm32l4 ROM=256K RAM=96K RAM2=32K
stm32l47[56]?e* stm32l4 ROM=512K RAM=96K RAM2=32K
stm32l47[56]?g* stm32l4 ROM=1024K RAM=96K RAM2=32K
stm32l486?g* stm32l4 ROM=1024K RAM=96K RAM2=32K
stm32l496?e* stm32l4 ROM=512K RAM=256K RAM2=64K
stm32l496?g* stm32l4 ROM=1024K RAM=256K RAM2=64K
stm32l4a6?g* stm32l4 ROM=1024K RAM=256K RAM2=64K
stm32ts60 stm32t ROM=32K RAM=10K
stm32w108c8 stm32w ROM=64K RAM=8K
stm32w108?b stm32w ROM=128K RAM=8K
stm32w108cz stm32w ROM=192K RAM=12K
stm32w108cc stm32w ROM=256K RAM=16K
stm32g0[43]1?4* stm32g0 ROM=16K RAM=8K
stm32g0[43][01]?6* stm32g0 ROM=32K RAM=8K
stm32g0[43][01]?8* stm32g0 ROM=64K RAM=8K
stm32g0[56][01]?6* stm32g0 ROM=32K RAM=18K
stm32g0[56][01]?8* stm32g0 ROM=64K RAM=18K
stm32g0[78]1?8* stm32g0 ROM=64K RAM=36K
stm32g0[78][01]?b* stm32g0 ROM=128K RAM=36K
stm32g0[BC]1?c* stm32g0 ROM=256K RAM=128K
stm32g0[BC]1?e* stm32g0 ROM=512K RAM=128K
stm32g4?1?6* stm32g4ccm ROM=32K RAM=22K CCM=10K
stm32g4?1?8* stm32g4ccm ROM=64K RAM=22K CCM=10K
stm32g4?1?b* stm32g4ccm ROM=128K RAM=22K CCM=10K
stm32g4?1?c* stm32g4ccm ROM=256K RAM=96K CCM=16K
stm32g4?1?e* stm32g4ccm ROM=512K RAM=96K CCM=16K
stm32g4?[34]?b* stm32g4ccm ROM=128K RAM=96K CCM=32K
stm32g4?[34]?c* stm32g4ccm ROM=256K RAM=96K CCM=32K
stm32g4?[34]?e* stm32g4ccm ROM=512K RAM=96K CCM=32K
################################################################################
# the SAM3 chips
sam3a4* sam3a ROM=256K RAM=32K RAM1=32K
sam3a8* sam3a ROM=512K RAM=64K RAM1=32K
sam3n00* sam3n ROM=16K RAM=4K
sam3n0* sam3n ROM=32K RAM=8K
sam3n1* sam3n ROM=64K RAM=8K
sam3n2* sam3n ROM=128K RAM=16K
sam3n4* sam3n ROM=256K RAM=24K
sam3s1* sam3s ROM=64K RAM=16K
sam3s2* sam3s ROM=128K RAM=32K
sam3s4* sam3s ROM=256K RAM=48K
sam3s8* sam3s ROM=512K RAM=64K
sam3sd8* sam3s ROM=512K RAM=64K
sam3u1* sam3u ROM=64K RAM=8K RAM1=8K
sam3u2* sam3u ROM=128K RAM=16K RAM1=16K
sam3u4* sam3u ROM=265K RAM=32K RAM1=16K
sam3x4c* sam3x ROM=256K RAM=32K RAM1=32K
sam3x4e* sam3xnfc ROM=256K RAM=32K RAM1=32K
sam3x8c* sam3x ROM=512K RAM=64K RAM1=32K
sam3x8e* sam3xnfc ROM=512K RAM=64K RAM1=32K
samd10?13* samd ROM=8K RAM=4K
samd10?14* samd ROM=16K RAM=4K
################################################################################
# the SAM4 chips
sam4l?8* sam4l ROM=512K RAM=64K RAM1=4K
sam4l?4* sam4l ROM=256K RAM=32K RAM1=4K
sam4l?2* sam4l ROM=128K RAM=32K RAM1=4K
################################################################################
# the lpc chips
lpc1311* lpc13 ROM=8K RAM=4K
lpc1313* lpc13 ROM=32K RAM=8K
lpc1342* lpc13 ROM=16K RAM=4K
lpc1343* lpc13 ROM=32K RAM=8K
lpc1315* lpc13u ROM=32K RAM=8K
lpc1316* lpc13u ROM=48K RAM=8K
lpc1317* lpc13u ROM=64K RAM=8K RAM1=2K
lpc1345* lpc13u ROM=32K RAM=8K USBRAM=2K
lpc1346* lpc13u ROM=48K RAM=8K USBRAM=2K
lpc1346* lpc13u ROM=64K RAM=8K USBRAM=2K RAM1=2K
lpc1751* lpc175x ROM=32K RAM=8K
lpc1752* lpc175x ROM=64K RAM=16K
lpc1754* lpc175x ROM=128K RAM=16K RAM1=16K
lpc1756* lpc175x ROM=256K RAM=16K RAM1=16K
lpc1758* lpc175x ROM=512K RAM=32K RAM1=16K RAM2=16K
lpc1759* lpc175x ROM=512K RAM=32K RAM1=16K RAM2=16K
lpc1763* lpc176x ROM=256K RAM=32K RAM1=16K RAM2=16K
lpc1764* lpc176x ROM=128K RAM=16K RAM1=16K
lpc1765* lpc176x ROM=256K RAM=32K RAM1=16K RAM2=16K
lpc1766* lpc176x ROM=256K RAM=32K RAM1=16K RAM2=16K
lpc1767* lpc176x ROM=512K RAM=32K RAM1=16K RAM2=16K
lpc1768* lpc176x ROM=512K RAM=32K RAM1=16K RAM2=16K
lpc1769* lpc176x ROM=512K RAM=32K RAM1=16K RAM2=16K
lpc1774* lpc177x ROM=128K RAM=32K RAM1=8K
lpc1776* lpc177x ROM=256K RAM=64K RAM1=16K
lpc1777* lpc177x ROM=512K RAM=64K RAM1=16K RAM2=16K
lpc1778* lpc177x ROM=512K RAM=64K RAM1=16K RAM2=16K
lpc1785* lpc178x ROM=256K RAM=64K RAM1=16K
lpc1786* lpc178x ROM=256K RAM=64K RAM1=16K
lpc1787* lpc178x ROM=512K RAM=64K RAM1=16K RAM2=16K
lpc1788* lpc178x ROM=512K RAM=64K RAM1=16K RAM2=16K
lpc4370* lpc43xx RAM=128K RAM1=72K RAM2=32K RAM3=16K
lpc4350* lpc43xx RAM=128K RAM1=72K RAM2=32K RAM3=16K
lpc4330* lpc43xx RAM=128K RAM1=72K RAM2=32K RAM3=16K
lpc4320* lpc43xx RAM=96K RAM1=40K RAM2=32K RAM3=16K
lpc4310* lpc43xx RAM=96K RAM1=40K RAM2=16K
lpc43S70* lpc43xx RAM=128K RAM1=72K RAM2=32K RAM3=16K
lpc43S50* lpc43xx RAM=128K RAM1=72K RAM2=32K RAM3=16K
lpc43S30* lpc43xx RAM=128K RAM1=72K RAM2=32K RAM3=16K
lpc43S20* lpc43xx RAM=96K RAM1=40K RAM2=32K RAM3=16K
lpc43S10* lpc43xx RAM=96K RAM1=40K RAM2=16K
lpc4367* lpc43xx ROM=512K ROM1=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4357* lpc43xx ROM=512K ROM1=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4355* lpc43xx ROM=384K ROM1=384K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4353* lpc43xx ROM=256K ROM1=256K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4352* lpc43xx ROM=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4350* lpc43xx RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4337* lpc43xx ROM=512K ROM1=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4335* lpc43xx ROM=384K ROM1=384K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4333* lpc43xx ROM=256K ROM1=256K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4332* lpc43xx ROM=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4330* lpc43xx RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4327* lpc43xx ROM=512K ROM1=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4325* lpc43xx ROM=384K ROM1=384K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4323* lpc43xx ROM=256K ROM1=256K RAM=32K RAM1=40K RAM2=16K
lpc4322* lpc43xx ROM=512K RAM=32K RAM1=40K RAM2=16K
lpc4317* lpc43xx ROM=512K ROM1=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4315* lpc43xx ROM=384K ROM1=384K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc4313* lpc43xx ROM=256K ROM1=256K RAM=32K RAM1=40K RAM2=16K
lpc4312* lpc43xx ROM=512K RAM=32K RAM1=40K RAM2=16K
lpc43S67* lpc43xx ROM=512K ROM1=512K RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc43S57* lpc43xx RAM=32K RAM1=40K RAM2=32K RAM3=16K
lpc43S37* lpc43xx RAM=32K RAM1=40K RAM2=32K RAM3=16K
################################################################################
# the efm32 chips
# Zero Gecko
efm32zg???f4 efm32zg ROM=4K RAM=2K
efm32zg???f8 efm32zg ROM=8K RAM=2K
efm32zg???f16 efm32zg ROM=16K RAM=4K
efm32zg???f32 efm32zg ROM=32K RAM=4K
# Happy Gecko
efm32hg[12]??f32 efm32hg ROM=32K RAM=4K
efm32hg3??f32 efm32hg ROM=32K RAM=8K
efm32hg???f64 efm32hg ROM=64K RAM=8K
# Tiny Gecko
efm32tg108f4 efm32tg ROM=4K RAM=1K
efm32tg110f4 efm32tg ROM=4K RAM=2K
efm32tg???f8 efm32tg ROM=8K RAM=2K
efm32tg???f16 efm32tg ROM=16K RAM=4K
efm32tg???f32 efm32tg ROM=32K RAM=4K
# Gecko
efm32g200f16 efm32g ROM=16K RAM=8K
efm32g???f32 efm32g ROM=32K RAM=8K
efm32g???f64 efm32g ROM=64K RAM=16K
efm32g???f128 efm32g ROM=128K RAM=16K
# Large Gecko
efm32lg???f64 efm32lg ROM=64K RAM=32K
efm32lg???f128 efm32lg ROM=128K RAM=32K
efm32lg???f256 efm32lg ROM=256K RAM=32K
# Giant Gecko
efm32gg???f512 efm32gg ROM=512K RAM=128K
efm32gg???f1024 efm32gg ROM=1024K RAM=128K
# Wonder Gecko
efm32wg???f64 efm32gg ROM=64K RAM=32K
efm32wg???f128 efm32gg ROM=128K RAM=32K
efm32wg???f256 efm32gg ROM=256K RAM=32K
################################################################################
# the TI cortex M3 chips
lm3s101 lm3sandstorm ROM=8K RAM=2K
lm3s102 lm3sandstorm ROM=8K RAM=2K
lm3s300 lm3sandstorm ROM=16K RAM=4K
lm3s301 lm3sandstorm ROM=16K RAM=2K
lm3s308 lm3sandstorm ROM=16K RAM=4K
lm3s310 lm3sandstorm ROM=16K RAM=4K
lm3s315 lm3sandstorm ROM=16K RAM=4K
lm3s316 lm3sandstorm ROM=16K RAM=4K
lm3s317 lm3sandstorm ROM=16K RAM=4K
lm3s328 lm3sandstorm ROM=16K RAM=4K
lm3s600 lm3sandstorm ROM=32K RAM=8K
lm3s601 lm3sandstorm ROM=32K RAM=8K
lm3s608 lm3sandstorm ROM=32K RAM=8K
lm3s610 lm3sandstorm ROM=32K RAM=8K
lm3s611 lm3sandstorm ROM=32K RAM=8K
lm3s612 lm3sandstorm ROM=32K RAM=8K
lm3s613 lm3sandstorm ROM=32K RAM=8K
lm3s615 lm3sandstorm ROM=32K RAM=8K
lm3s617 lm3sandstorm ROM=32K RAM=8K
lm3s618 lm3sandstorm ROM=32K RAM=8K
lm3s628 lm3sandstorm ROM=32K RAM=8K
lm3s800 lm3sandstorm ROM=64K RAM=8K
lm3s801 lm3sandstorm ROM=64K RAM=8K
lm3s808 lm3sandstorm ROM=64K RAM=8K
lm3s811 lm3sandstorm ROM=64K RAM=8K
lm3s812 lm3sandstorm ROM=64K RAM=8K
lm3s815 lm3sandstorm ROM=64K RAM=8K
lm3s817 lm3sandstorm ROM=64K RAM=8K
lm3s818 lm3sandstorm ROM=64K RAM=8K
lm3s828 lm3sandstorm ROM=64K RAM=8K
lm3s1110 lm3fury ROM=64K RAM=16K
lm3s1133 lm3fury ROM=64K RAM=16K
lm3s1138 lm3fury ROM=64K RAM=16K
lm3s1150 lm3fury ROM=64K RAM=16K
lm3s1162 lm3fury ROM=64K RAM=16K
lm3s1165 lm3fury ROM=64K RAM=16K
lm3s1332 lm3fury ROM=96K RAM=16K
lm3s1435 lm3fury ROM=96K RAM=32K
lm3s1439 lm3fury ROM=96K RAM=32K
lm3s1512 lm3fury ROM=96K RAM=64K
lm3s1538 lm3fury ROM=96K RAM=64K
lm3s1601 lm3fury ROM=128K RAM=32K
lm3s1607 lm3fury ROM=128K RAM=32K
lm3s1608 lm3fury ROM=128K RAM=32K
lm3s1620 lm3fury ROM=128K RAM=32K
lm3s3748 lm3fury ROM=128K RAM=64K
lm3s6965 lm3fury ROM=256K RAM=64K
lm3s8962 lm3fury ROM=256K RAM=64K
lm4f120xl lm4f ROM=128K RAM=32K
################################################################################
# the TI cortex R4F chips
rm46l852* rm46l ROM=1280K RAM=192K
################################################################################
# NXP/Freescale Vybrid VF6xx parts. (Cortex A5+M4 pair)
vf610 vf6xx RAM=256K RAM1=256K RAM_OFF=0x1f000000 RAM1_OFF=0x3f040000
################################################################################
# SWM050 chips
swm050* END ROM=8K RAM=1K ROM_OFF=0x00000000 RAM_OFF=0x20000000 CPU=cortex-m0 FPU=soft
################################################################################
# Qorvo PAC55xx Cortex-M4 based chips
pac5523 pac55xx ROM=128K RAM=32K
pac5524 pac55xx ROM=128K RAM=32K
pac5527 pac55xx ROM=128K RAM=32K
pac5532 pac55xx ROM=128K RAM=32K
pac5556 pac55xx ROM=128K RAM=32K
################################################################################
################################################################################
################################################################################
# the STM32 family groups
stm32f3ccm stm32f3 CCM_OFF=0x10000000
stm32f4ccm stm32f4 CCM_OFF=0x10000000
stm32f7ccm stm32f7 CCM_OFF=0x20000000
stm32g4ccm stm32g4 CCM_OFF=0x10000000
stm32l1eep stm32l1 EEP_OFF=0x08080000
################################################################################
# the SAM3 family groups
sam3xnfc sam3x NFCRAM=4K NFCRAM_OFF=0x20100000
################################################################################
# the lpc family groups
lpc13 lpc13xx
lpc13u lpc13xx USBRAM_OFF=0x20004000
lpc17[56]x lpc17xx RAM1_OFF=0x2007C000 RAM2_OFF=0x20080000
lpc17[78]x lpc17xx RAM1_OFF=0x20000000 RAM2_OFF=0x20004000
lpc43xx_m0 lpc43xx CPU=cortex-m0 FPU=soft
lpc43xx_m4 lpc43xx CPU=cortex-m4 FPU=hard-fp4-sp-d16
################################################################################
################################################################################
################################################################################
# the STM32 families
stm32f0 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m0 FPU=soft
stm32f1 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
stm32f2 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
stm32f3 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16
stm32f4 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16
#stm32f7 is supported on GCC-arm-embedded 4.8 2014q4
stm32f7 END ROM_OFF=0x08000000 RAM_OFF=0x20010000 CPU=cortex-m7 FPU=hard-fpv5-sp-d16
stm32l0 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m0plus FPU=soft
stm32l1 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
stm32l4 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 RAM2_OFF=0x10000000 RAM3_OFF=0x20040000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16
stm32g0 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m0plus FPU=soft
stm32g4 END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16
stm32w END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
stm32t END ROM_OFF=0x08000000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
################################################################################
# the SAM3 families
sam3a END ROM_OFF=0x00080000 RAM_OFF=0x20000000 RAM1_OFF=0x20080000 CPU=cortex-m3 FPU=soft
sam3n END ROM_OFF=0x00400000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
sam3s END ROM_OFF=0x00400000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
sam3u END ROM_OFF=0x00080000 RAM_OFF=0x20000000 RAM1_OFF=0x20080000 NFCRAM=4K NFCRAM_OFF=0x20100000 CPU=cortex-m3 FPU=soft
sam3x END ROM_OFF=0x00080000 RAM_OFF=0x20000000 RAM1_OFF=0x20080000 CPU=cortex-m3 FPU=soft
samd END ROM_OFF=0x00000000 RAM_OFF=0x20000000 CPU=cortex-m0plus FPU=soft
################################################################################
# the SAM4 families
sam4l END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x21000000
################################################################################
# the lpc families
lpc13xx END ROM_OFF=0x00000000 RAM_OFF=0x10000000 RAM1_OFF=0x20000000 CPU=cortex-m3 FPU=soft
lpc17xx END ROM_OFF=0x00000000 RAM_OFF=0x10000000 CPU=cortex-m3 FPU=soft
lpc43xx + ROM_OFF=0x1A000000 ROM1_OFF=0x1B000000 RAM_OFF=0x10000000 RAM1_OFF=0x10080000
lpc43xx + RAM2_OFF=0x20000000 RAM3_OFF=0x20008000
lpc43xx END CPU=cortex-m4 FPU=hard-fpv4-sp-d16
################################################################################
# the efm32 Gecko families
efm32zg END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m0plus FPU=soft
efm32hg END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m0plus FPU=soft
efm32tg END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m3 FPU=soft
efm32g END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m3 FPU=soft
efm32lg END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m3 FPU=soft
efm32gg END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m3 FPU=soft
efm32wg END ROM_OFF=0x00000000 RAM_OFF=0x20000000 RAM1_OFF=0x10000000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16
################################################################################
# Cortex LM3 and LM4 families
lm3fury lm3s
lm3sandstorm lm3s
lm3s END ROM_OFF=0x00000000 RAM_OFF=0x20000000 CPU=cortex-m3 FPU=soft
lm4f END ROM_OFF=0x00000000 RAM_OFF=0x20000000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16
################################################################################
# Cortex R4F families
rm46l END ROM_OFF=0x00000000 RAM_OFF=0x08000000 RAM1_OFF=0x08400000
################################################################################
# VF6xx families
vf6xx END CPU=cortex-m4 FPU=hard-fpv4-sp-d16
################################################################################
# PAC55xx families
pac55xx END ROM_OFF=0x00000000 RAM_OFF=0x20000000 CPU=cortex-m4 FPU=hard-fpv4-sp-d16

203
libopencm3/ld/linker.ld.S Normal file
View File

@@ -0,0 +1,203 @@
/*
* This file is part of the libopencm3 project.
*
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
* Copyright (C) 2013 Frantisek Burian <BuFran@seznam.cz>
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
/* Generic linker script for all targets using libopencm3. */
/* Enforce emmition of the vector table. */
EXTERN(vector_table)
/* Define the entry point of the output file. */
ENTRY(reset_handler)
/* Define memory regions. */
MEMORY
{
/* RAM is always used */
ram (rwx) : ORIGIN = _RAM_OFF, LENGTH = _RAM
#if defined(_ROM)
rom (rx) : ORIGIN = _ROM_OFF, LENGTH = _ROM
#endif
#if defined(_ROM1)
rom1 (rx) : ORIGIN = _ROM1_OFF, LENGTH = _ROM1
#endif
#if defined(_ROM2)
rom2 (rx) : ORIGIN = _ROM2_OFF, LENGTH = _ROM2
#endif
#if defined(_RAM1)
ram1 (rwx) : ORIGIN = _RAM1_OFF, LENGTH = _RAM1
#endif
#if defined(_RAM2)
ram2 (rwx) : ORIGIN = _RAM2_OFF, LENGTH = _RAM2
#endif
#if defined(_RAM3)
ram3 (rwx) : ORIGIN = _RAM3_OFF, LENGTH = _RAM3
#endif
#if defined(_CCM)
ccm (rwx) : ORIGIN = _CCM_OFF, LENGTH = _CCM
#endif
#if defined(_EEP)
eep (r) : ORIGIN = _EEP_OFF, LENGTH = _EEP
#endif
#if defined(_XSRAM)
xsram (rw) : ORIGIN = _XSRAM_OFF, LENGTH = _XSRAM
#endif
#if defined(_XDRAM)
xdram (rw) : ORIGIN = _XDRAM_OFF, LENGTH = _XDRAM
#endif
#if defined(_NFCRAM)
nfcram (rw) : ORIGIN _NFCRAM_OFF, LENGTH = _NFCRAM
#endif
}
/* Define sections. */
SECTIONS
{
.text : {
*(.vectors) /* Vector table */
*(.text*) /* Program code */
. = ALIGN(4);
*(.rodata*) /* Read-only data */
. = ALIGN(4);
} >rom
/* C++ Static constructors/destructors, also used for
* __attribute__((constructor)) and the likes.
*/
.preinit_array : {
. = ALIGN(4);
__preinit_array_start = .;
KEEP (*(.preinit_array))
__preinit_array_end = .;
} >rom
.init_array : {
. = ALIGN(4);
__init_array_start = .;
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
__init_array_end = .;
} >rom
.fini_array : {
. = ALIGN(4);
__fini_array_start = .;
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
__fini_array_end = .;
} >rom
/*
* Another section used by C++ stuff, appears when using newlib with
* 64bit (long long) printf support
*/
.ARM.extab : {
*(.ARM.extab*)
} >rom
.ARM.exidx : {
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >rom
. = ALIGN(4);
_etext = .;
/* ram, but not cleared on reset, eg boot/app comms */
.noinit (NOLOAD) : {
*(.noinit*)
} >ram
. = ALIGN(4);
.data : {
_data = .;
*(.data*) /* Read-write initialized data */
*(.ramtext*) /* "text" functions to run in ram */
. = ALIGN(4);
_edata = .;
} >ram AT >rom
_data_loadaddr = LOADADDR(.data);
.bss : {
*(.bss*) /* Read-write zero initialized data */
*(COMMON)
. = ALIGN(4);
_ebss = .;
} >ram
#if defined(_CCM)
.ccm : {
*(.ccmram*)
. = ALIGN(4);
} >ccm
#endif
#if defined(_RAM1)
.ram1 : {
*(.ram1*)
. = ALIGN(4);
} >ram1
#endif
#if defined(_RAM2)
.ram2 : {
*(.ram2*)
. = ALIGN(4);
} >ram2
#endif
#if defined(_RAM3)
.ram3 : {
*(.ram3*)
. = ALIGN(4);
} >ram3
#endif
#if defined(_XSRAM)
.xsram : {
*(.xsram*)
. = ALIGN(4);
} >xsram
#endif
#if defined(_XDRAM)
.xdram : {
*(.xdram*)
. = ALIGN(4);
} >xdram
#endif
#if defined(_NFCRAM)
.nfcram : {
*(.nfcram*)
. = ALIGN(4);
} >nfcram
#endif
/*
* The .eh_frame section appears to be used for C++ exception handling.
* You may need to fix this if you're using C++.
*/
/DISCARD/ : { *(.eh_frame) }
. = ALIGN(4);
end = .;
}
PROVIDE(_stack = ORIGIN(ram) + LENGTH(ram));

View File

@@ -0,0 +1,2 @@
device family A=val B=val
family END CPU=cpu FPU=fpu

View File

@@ -0,0 +1,6 @@
-DFAMILY -DDEVICE
-DFAMILY -DDEVICE -D_A=val -D_B=val
family
device
cpu
fpu

View File

@@ -0,0 +1 @@
ignore END A B C D -E=val f=val

View File

@@ -0,0 +1,6 @@
-DIGNORE
-DIGNORE
ignore

View File

@@ -0,0 +1,2 @@
multiline + A=val B=val
multiline END C=val D=val

View File

@@ -0,0 +1,6 @@
-DMULTILINE
-DMULTILINE -D_A=val -D_B=val -D_C=val -D_D=val
multiline

View File

@@ -0,0 +1,2 @@
p?tte* parent A=val B=val
parent END C=val D=val

View File

@@ -0,0 +1,6 @@
-DPARENT -DPATTERN
-DPARENT -DPATTERN -D_A=val -D_B=val -D_C=val -D_D=val
parent
pattern

View File

@@ -0,0 +1 @@
single END A=val B=val

View File

@@ -0,0 +1,6 @@
-DSINGLE
-DSINGLE -D_A=val -D_B=val
single

View File

@@ -0,0 +1,2 @@
tree1 parent A=val B=val
parent END C=val D=val

View File

@@ -0,0 +1,6 @@
-DPARENT -DTREE1
-DPARENT -DTREE1 -D_A=val -D_B=val -D_C=val -D_D=val
parent
tree1

View File

@@ -0,0 +1,5 @@
tree5 tree4 A=val
tree4 tree3 B=val
tree3 tree2 C=val
tree2 tree1 D=val
tree1 END E=VAL F=val

View File

@@ -0,0 +1,6 @@
-DTREE1 -DTREE2 -DTREE3 -DTREE4 -DTREE5
-DTREE1 -DTREE2 -DTREE3 -DTREE4 -DTREE5 -D_A=val -D_B=val -D_C=val -D_D=val -D_E=VAL -D_F=val
tree1
tree2

View File

@@ -0,0 +1,4 @@
twomatch treeparent A=val B=val C=val D=val
# the next line will be ignored because previous matches before and no + there
twomatch treeparent P=val Q=val R=val S=val
treeparent END E F

View File

@@ -0,0 +1,6 @@
-DTREEPARENT -DTWOMATCH
-DTREEPARENT -DTWOMATCH -D_A=val -D_B=val -D_C=val -D_D=val
treeparent
twomatch