Commit Graph

56 Commits (7794d901f2be0737c02fa30fdae0b9ddf59dadf3)

Author SHA1 Message Date
Evelyne Donnaes d9f32639eb Changed minimal-printf to call fputc so that it does not bypass the retargetting code
Removed minimal-printf-console-output
2019-08-29 11:30:34 +01:00
Anna Bridge 3ede2a9a60
Merge pull request #11126 from teetak01/optimize-debug-profile
Optimize debug profile flags for size
2019-08-15 12:53:32 +01:00
Evelyne Donnaes 5eaa922ce1 Moved minimal-printf.json to a subdirectory 2019-08-13 12:59:45 +01:00
Martin Kojtal fafd0a5480
Merge pull request #11051 from evedon/minimal-printf
Minimal printf addition
2019-08-09 09:52:36 +01:00
Evelyne Donnaes d6b197a98b Removed no-builtin-printf for uARM 2019-08-05 16:01:34 +01:00
Evelyne Donnaes 050a338771 Addressed review comments, in particular:
* Fixed wrapper functions for IAR
* Fixed and renamed profile to minimal-printf.json
* Moved minimal-printf under platform
* Removed minimal-printf/mbed_lib.json
* Modified exporter template to work with partial profile
* Prevented optimization of printf to avoid compiler function substitution
2019-08-01 12:42:24 +01:00
Evelyne Donnaes 65ab34695e Integrated minimal-printf in mbed-os 2019-08-01 12:41:59 +01:00
Teemu Takaluoma 5b8b2c95b1 Debug-profile: Use -Og level for GCC_ARM optimization
This brings massive ROM savings, and allows to use debug builds
also with larger applications (for. ex. Mesh stack).

Diff. for mbed-cloud-client-example with Wi-Sun stack.

Total Static RAM memory (data + bss): 85120(-216) bytes
Total Flash memory (text + data): 592668(-329296) bytes
2019-07-31 07:51:33 +03:00
Teemu Takaluoma f30703af16 Debug profile: Change IAR profile to use -Ol instead of -On
Total Static RAM memory (data + bss): 71179(+0) bytes
Total Flash memory (text + data): 665394(-44680) bytes
2019-07-30 09:45:07 +03:00
Teemu Takaluoma 985f981b83 Debug profile: Change ARM and uARM profile to size-optimized 2019-07-30 09:44:49 +03:00
Seppo Takalo 25198ba056
Merge pull request #11070 from kjbracey-arm/iar_exception_warning
IAR: Suppress "exceptions are disabled" warning
2019-07-23 11:42:15 +03:00
Kevin Bracey 2078575bae IAR: Suppress "exceptions are disabled" warning
IAR compiler is outputting lots of warnings about exceptions being
disabled whenever it sees a "noexcept" keyword. We know, we know.
2019-07-18 19:59:41 +03:00
Tomasz Moń 4e992cd901 GCC ARM: Increase develop and release debug level
Do not specify the debug level for develop and release profiles. Instead
rely on the compiler to choose sensible default (-g2). Note that -g1 is
minimal debugging information and does not include structure definitions
which quite heavily reduces debugging experience.

For develop and release profiles this results in elf file containing
structure definitions. This does not impact debug profile as it already
did use -g3 which is the highest debug level.

Compatible debuggers (eg. gdb, SEGGER Ozone) can use the extra information
to provide better debugging experience. For example, when compiled .elf is
loaded in gdb, this change makes it trivial to access internal RTX data.

Without this change on develop profile:
  (gdb) print osRtxInfo.thread.run
  'osRtxInfo' has unknown type; cast it to its declared type

With this change on develop profile:
  (gdb) print osRtxInfo.thread.run
  $1 = {curr = 0x20014F04, next = 0x20014F04}
2019-07-18 12:03:13 +02:00
Arto Kinnunen 3d65ace77a
Merge pull request #10950 from artokin/Update_freescale_K6xF_linker_files
Enable split heap in K64F/K66F devices
2019-07-08 11:46:30 +03:00
Kevin Bracey 5ab714e604 ARM linker: add --any_contingency option
When packing data into multiple regions using the `.ANY` directive,
the linker can accidentally overfill an area.

This doesn't normally happen because it defaults to
`--any_placement=worst_fit`, which puts data in the region with
most space.

When we prioritise regions with `.ANY1`/`.ANY2`, it may totally fill
an area, then fail to leave enough space for linker-generated veneers.
We've just seen this error with the new K64F linker map.

Adding `--any-contingency` makes it lower priority when a region is
98% full, avoiding this error.

The option should not have any effect on targets with scatter files
without prioritised `.ANY` directives.
2019-07-03 15:36:49 +03:00
Janne Kiiskila 7bfe0be43f Align also IAR - develop profile to be size optimized
IAR is also performance optimizing instead of size optimizing in
develop profile. Align also that (review feedback).
2019-06-12 13:54:34 +03:00
Janne Kiiskila 261e071013 Make ARMC5 develop profile also size optimized
Due to some historical reasons ARMC 5 compiler behaves very
differently compared to others (GCC, IAR, ARM C 6) as it optimizes
performance rather than size (like the others).

All compilers should behave the same way with the same profile,
thus ARM C 5 should also drive towards size (space).
2019-06-12 12:04:23 +03:00
Kevin Bracey 18ce757c07 ARMC6: Suppress "register deprecated" warning
Lots of target code, STM in particular, uses the `register` keyword, so
it'll take a little while to clean up. In the interim, some builds are
producing a lot of warnings. Suppress the warning for now, as `register`
remains legal C++14 and C11, despite C++14 deprecating it.

C++17 removes `register`, so code will need to be cleaned before any
further C++ version update.
2019-06-03 12:19:58 +03:00
Kevin Bracey b437d700b5 ARMC6: disable "reserved user-defined literal" warning
Clang warns about reserved user-defined literals by default. This
warning is not terribly helpful; compilers aren't normally in the
habit of warning about use of reserved identifiers. It can interfere
with, for example, deliberate emulation of a future standard
language feature.

The warning was promoted to an error in an mbed client build, due to a
non-C++11 "%s"name occurring in a macro. But the macro itself was never
invoked, so the misinterpretation as C++11 caused no problems other than
this warning. Killing the warning will let that code build on ARMC6.
The code already built on GCC and IAR.

If that macro ever was used, then a separate error about operator ""
name not being defined would be generated, on all 3 toolchains.
2019-05-24 16:26:15 +03:00
Kevin Bracey 5b859c47ee Set compilers to C++14 and C11
* ARMC6 and GCC are set to C++14 and C11.
* ARMC5 is set to C++11 and C99, as it's the highest it can offer.
2019-05-24 16:26:15 +03:00
Kevin Bracey 3caa480b04 GCC: remove `-fno-builtin` option
Since the year dot GCC has been passed the `-fno-builtin` option, which
eliminates all compiler knowledge of the C library, even down to basic
stuff like `memcpy` or `memset`, potentially inhibiting quite a lot of
optimisations.

Remove the option to re-enable the optimisations.

There is no record in the source as to why the option is present - maybe
we'll find out by trying to remove it. If necessary, it could be
selectively turned back on for particular functions.
2019-04-05 12:40:58 +03:00
Cruz Monrreal 2910ed54c1
Merge pull request #9277 from deepikabhavnani/flags_fixes
Sleep: error flags fix
2019-02-20 12:07:15 -06:00
deepikabhavnani 7b37b42080 Add NDEBUG flag to release profile of ARMC6 2019-01-22 11:21:33 -06:00
deepikabhavnani 30f18b67e5 Add flag "-DMBED_TRAP_ERRORS_ENABLED=1" to develop profile as well
printf was called from ISR when sleep tracing was enabled. Issue was
captured only in debug profile.
Printf is not allowed from ISR context and issues like this should be
trapped in case of debug profiles as well.
2019-01-22 10:23:18 -06:00
deepikabhavnani 8547f26872 Add missing ARMC6 flags - MBED_DEBUG and MBED_TRAP_ERRORS_ENABLED 2019-01-15 13:39:06 -06:00
Deepika 255661e55b Adding debugger awarness with Keil MDK
Main thread in Mbed OS is statically allocated and was not available in call
stack of Keil MDK. The RTX5 kernel requires statically allocated thread
information objects that are placed into a specific section to enable RTOS
thread awareness in Keil MDK. This fix is to keep main thread in specific
section of memory.
2019-01-15 12:04:39 -06:00
Jimmy Brisson b1b69d2d60 Compatibilize ArmC6 with ArmC5-built archives
### Description

Arm compiler 5 builds with "short" enums and "short" wchars. This means
that C/C++ enums will be packed into the smallest power of 2 number of
bytes by the compiler and the `wchar_t` is 2 bytes. Arm compiler 6
defaults to packing enums into 4 bytes and `wchar_t` is 4 bytes.

Further, Arm Compiler 5's `-O0` (no optimizations) bulids will actually
do some amount of optimizing, similar to Arm Compiler 6's `-O1`. I have
switched the debug profile to `-O1` for maximum compatibility with our
prior behavior.

NOTE: "Compatibilize" is a word

### Pull request type

    [x] Fix
    [ ] Refactor
    [ ] Target update
    [ ] Functionality change
    [ ] Docs update
    [ ] Test update
    [ ] Breaking change
2018-11-19 11:43:05 -06:00
Janne Kiiskila f1795e3418 IOTCORE-389 - bring back legacy alignment for Arm C6
Quite a few of the scatter files are not (yet) aligned to 8-byte
boundaries and therefore the removal of legacy alignment feature
(which is under deprecation warning, but it actually not YET
deprecated) broke quite a few builds to this error:

Error: L6244E: Exec region RW_IRAM1 address (0x200001ac) not aligned on a 8 byte boundary.

We must bring this option now back to fix the builds.

This option to ld (--legacyalign) can only be removed once all of
the scatter files have been fixed.
2018-09-06 01:04:38 +03:00
deepikabhavnani 37a5646372 Remove deprecated linker options
Resolved below warnings
Warning: L3912W: Option 'legacyalign' is deprecated.
Warning: L3912W: Option 'no_strict_wchar_size' is deprecated.
Warning: L3912W: Option 'no_strict_enum_size' is deprecated.
2018-08-16 18:14:14 -05:00
Jimmy Brisson 5f8aa893ca Partial revert of "CMSIS/RTX: Adapt Mbed OS to CMSIS/RTX device support scheme" 2018-07-11 13:49:57 +01:00
Cruz Monrreal f11d0f3be7
Merge pull request #7261 from kjbracey-arm/iar-jump-warning
IAR: Suppress C "bypasses initialization" warning
2018-06-19 21:46:14 -05:00
Kevin Bracey 81ed8014cd IAR: Suppress C "bypasses initialization" warning
By default IAR generates "transfer of control bypasses initialization"
warnings for C code - it's a legal construct that frequently occurs when
doing Linux-style "goto error". Many occurrences in Nanostack.

Suppress the warning for C only, to align with GCC and ARMCC. Have to
take care not to put it in the "common" section, as this would suppress
it for C++, where it actually is illegal.
2018-06-19 15:54:28 +03:00
Jimmy Brisson 7f0e7ce722 Add show full path option to armc6 linker
### Description
Full paths in the map file are required to have correct memap parsing.
This PR adds the option `--show_full_path` to ARMC6 in every profile.
This option only affects the map file output, so it's safe to add.
2018-06-07 11:44:03 -05:00
Bartek Szatkowski 07aad3c862 CMSIS/RTX: Adapt Mbed OS to CMSIS/RTX device support scheme 2018-05-14 12:18:21 +01:00
Jimmy Brisson 0f15633d37 Work around Arm Compiler 6 stdvector perfomance cliff 2018-02-28 14:46:03 -06:00
Seppo Takalo 0d6f760c16 Add minimal debug info to release and develop profiles.
This allows minimal debugging and allows tools like
mbed-os-linker-report to work properly.

Because debugging info is kept in .elf file and not flashed to device
there is no side effects to flash sizes.
2017-12-14 17:18:31 +02:00
Bartek Szatkowski 2ea01ac8a9 Enabled restrict keyword for IAR 2017-11-10 09:53:42 +00:00
Jimmy Brisson 8c54c4efa8 Display full paths in armlink output 2017-09-18 16:40:52 -05:00
Jimmy Brisson bd7f320387 Emit dependency information with ARMC6
Which allows it to be parsed
2017-09-14 16:17:44 -05:00
Jimmy Brisson 23aafbfe6c Optimize space usage on builds
by not creating gigantic exception nonsense
2017-09-11 14:45:21 -05:00
Jimmy Brisson d72f6dbfe4 Disable MULADDC assembly
It's not supported in ARMC6
2017-09-11 13:20:33 -05:00
Jimmy Brisson 98b4768434 Initial toolchain class for ARMC6
While ARMC6 does use the same linker (armlink) as ARM Compiler 5, it
is not compatible.

The reason for this incompatibility are twofold:
 * armlink may invoke the C preprocessor by adding a shebang
   (`#!`) to the top of their input files.
 * ARMC6 and ARMC5 differ in how you invoke the preprocessor:
   * ARMC5: `#! armcc -E`
   * ARMC6: `#! armclang -E`

This forces the tools to rewrite the shebang if it's wrong.

This does not yet handle dependencies properly
2017-09-11 13:17:54 -05:00
Niklas Hauser 8fb74f42d2 uVisor: Wrap _memalign_r and _calloc_r 2017-06-04 14:41:59 +01:00
Russ Butler 737c5a9cea Trap on errors when building with debug profile
Define MBED_TRAP_ERRORS_ENABLED to 1 for the debug profile so errors
are obvious when building as debug.
2017-06-02 23:50:40 -05:00
Bartek Szatkowski cc71f3f5d4 Introduce MBED_DEBUG macro for debug build profile 2017-04-10 11:40:04 +01:00
Seppe Stas 886713d290 Removed superfluous space
The extra space between "--no_wrap_diagnostics" and "-e" is inconsistent with the development and release targets.

It bugs people (like me) that have little OCD tics 😉.
2017-03-30 10:19:36 +02:00
Tony Wu 72589dfef3 tools - turn off page alignment of sections
By default, ld sets page alignment of sections to 0x8000, which bloats
up elf file size. This behavior is unnecessary for MCU.

Example:

1. page alignment on

mbed.elf file size 144936

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x008000 0x00000000 0x00000000 0x00400 0x00400 R   0x8000
  LOAD           0x008400 0x00000400 0x00000400 0x00010 0x00010 R   0x8000
  LOAD           0x008410 0x00000410 0x00000410 0x0ab3c 0x0ab3c RWE 0x8000
  LOAD           0x018000 0x20000000 0x0000af4c 0x008d0 0x008d0 RW  0x8000
  LOAD           0x01b81c 0x0000b81c 0x0000b81c 0x00000 0x00004 RW  0x8000
  LOAD           0x020000 0x1fff0000 0x1fff0000 0x00000 0x00400 RW  0x8000
  LOAD           0x0188d0 0x200008d0 0x200008d0 0x00000 0x08860 RW  0x8000

2. page alignment off

mbed.elf file size 91792

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000114 0x00000000 0x00000000 0x00400 0x00400 R   0x4
  LOAD           0x000514 0x00000400 0x00000400 0x00010 0x00010 R   0x1
  LOAD           0x000528 0x00000410 0x00000410 0x0ab3c 0x0ab3c RWE 0x8
  LOAD           0x00b068 0x20000000 0x0000af4c 0x008d0 0x008d0 RW  0x8
  LOAD           0x00b938 0x0000b81c 0x0000b81c 0x00000 0x00004 RW  0x1
  LOAD           0x00b938 0x1fff0000 0x1fff0000 0x00000 0x00400 RW  0x1
  LOAD           0x00b938 0x200008d0 0x200008d0 0x00000 0x08860 RW  0x8

Signed-off-by: Tony Wu <tonywu@realtek.com>
2017-03-29 05:48:30 +08:00
Bartek Szatkowski 40d3b22785 Build: Rework build profiles
Rename small.json to release.json, default.json to develop.json and make
it the default profile.
2017-02-07 11:41:16 +00:00
Christopher Haster 83e5f272f6 Added '-g3' flag to gcc debug flags
Includes extra information, such as all the macro definitions present
in the program
2016-11-18 14:45:59 -06:00
Russ Butler 23af2421f3 Remove non-code profiles
Remove profiles which are not suitable for building stand alone. This
leaves just the 3 core profiles.
2016-10-18 09:23:10 -05:00