Commit Graph

8 Commits

Author SHA1 Message Date
Jonathan Roelofs b780c8ac75 Fix ARM bare metal driver to support atomics
The new bare metal support only supports the single thread model. This causes
the builtin atomic functions (e.g.: __atomic_fetch_add) to not generate
thread-safe assembly for these operations, which breaks our firmware. We target
bare metal, and need to atomically modify variables in our interrupt routines,
and task threads.

Internally, the -mthread-model flag determines whether to lower or expand
atomic operations (see D4984).

This change removes the overridden thread model methods, and instead relies on
the base ToolChain class to validate the thread model (which already includes
logic to validate single thread model support). If the single thread model is
required, the -mthread-model flag will have to be provided.

As a workaround "-mthread-model posix" could be provided, but it only works due
to a bug in the validation of the -mthread-model flag (separate patch coming to
fix this).

https://reviews.llvm.org/D37493

Patch by: Ian Tessier!

llvm-svn: 312651
2017-09-06 17:09:25 +00:00
Michal Gorny 997f7764be [test] Fix baremetal test to allow any -resource-dir
The baremetal test (r303873) has been added with expectance of very
specific -resource-dir. However, the test itself nor the BareMetal
driver does not enforce any specific -resource-dir, making this
constraint invalid. It already has been altered twice -- in r303910 for
Windows compatibility, and in r304085 for systems using lib64. To
account for even more systems, just use [[RESOURCE_DIR]] like a number
of other tests do. This is needed for Gentoo where RESOURCE_DIR starts
with ../ (uses relative path to a parent directory).

Differential Revision: https://reviews.llvm.org/D33877

llvm-svn: 304715
2017-06-05 14:13:37 +00:00
Ismail Donmez fd934c29d3 baremetal.cpp: Fix tests where lib suffix is 64
llvm-svn: 304085
2017-05-28 06:15:42 +00:00
Richard Trieu d3bc3e0138 "*" => "+" to avoid matching on empty string.
llvm-svn: 303934
2017-05-25 23:25:36 +00:00
Richard Trieu 13b12dc02d Make test/Driver/baremetal.cpp work when output directory isn't named 'bin'.
llvm-svn: 303932
2017-05-25 23:03:08 +00:00
Hans Wennborg ca7a3947f5 Make test/Driver/baremetal.cpp pass on Windows
llvm-svn: 303910
2017-05-25 20:39:52 +00:00
Jonathan Roelofs 8d765ef92d Relax testcase to appease buildbots
When lld isn't built, the tests as they were previously, were too picky about
the path to the linker.

llvm-svn: 303880
2017-05-25 16:20:51 +00:00
Jonathan Roelofs 901c776d06 Don't defer to the GCC driver for linking arm-baremetal
Also comes with a cmake cache for building the runtime bits:

 $ cmake <normal cmake flags> \
   -DBAREMETAL_ARMV6M_SYSROOT=/path/to/sysroot \
   -DBAREMETAL_ARMV7M_SYSROOT=/path/to/sysroot \
   -DBAREMETAL_ARMV7EM_SYSROOT=/path/to/sysroot \
   -C /path/to/clang/cmake/caches/BaremetalARM.cmake \
   /path/to/llvm

https://reviews.llvm.org/D33259

llvm-svn: 303873
2017-05-25 15:42:13 +00:00