| 883c4be3 | 13-Oct-2016 |
Jerome Forissier <jerome.forissier@linaro.org> |
Add support for user TA profiling with gprof (-pg)
Adds the infrastructure to collect profiling information from Trusted Applications running in user mode and instrumented with -pg. Enable with: CFG
Add support for user TA profiling with gprof (-pg)
Adds the infrastructure to collect profiling information from Trusted Applications running in user mode and instrumented with -pg. Enable with: CFG_TA_GPROF_SUPPORT=y.
Profiling support in itself adds no significant performance overhead. Instrumented applications however may run 1.3x - 2x slower, and have a larger .bss section (+1.36 times .text size for 32-bit TAs, +1.77 times .text size for 64-bit ones).
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (D02 64-bit) Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (QEMU 32-bit) Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 50ce5905 | 06-Jan-2017 |
Jerome Forissier <jerome.forissier@linaro.org> |
Fix build error when $(O) starts with ./
When a target starts with './', $@ does not. Therefore we must not use $@ to access a variable if its name is created from $(out-dir) which might start with
Fix build error when $(O) starts with ./
When a target starts with './', $@ does not. Therefore we must not use $@ to access a variable if its name is created from $(out-dir) which might start with './'. We use a macro to make sure that $(conf-mk-file-export) is evaluated immediately rather than when the rule is executed. It is needed because ta/ta.mk may be included twice with different values for $(conf-mk-file-export) (32-bit and 64-bit dev kits).
Fixes the following issue:
$ make O=./build <snip> GEN build/export-ta_arm32/mk/conf.mk /bin/bash: -c: line 0: syntax error near unexpected token `)' /bin/bash: -c: line 0: `() >> build/export-ta_arm32/mk/conf.mk' ta/ta.mk:120: recipe for target 'build/export-ta_arm32/mk/conf.mk' failed make: *** [build/export-ta_arm32/mk/conf.mk] Error 1
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org>
show more ...
|
| 9ac870c9 | 06-Jan-2017 |
Jerome Forissier <jerome.forissier@linaro.org> |
Make sure "make clean" removes everything "make" has created under $(O)
"make clean" would leave behind some files and many directories. Fix this by correctly tracking the files and directories crea
Make sure "make clean" removes everything "make" has created under $(O)
"make clean" would leave behind some files and many directories. Fix this by correctly tracking the files and directories created under $(O) during the build process: - Fix incorrect file names in $(cleanfiles) and add a few missing ones. - Introduce a makefile macro: $(cleandirs-for-rmdir), defined in a new file: mk/cleandirs.mk. It returns the list of directories that should be removed, given a list of files. The clean target removes the files, then all the directories in depth- first order. $(O) is also removed, if found to be empty.
Note that a more straightforward approach was discussed in [1]: use "rm -rf $(O)/some_dir" and get rid of the whole file and directory tracking via $(cleanfiles) and $(cleandirs). Although it was agreed it would be safe, doing so would necessarily break the backward compatibility for build scripts relying on "make O=<some path>", due to the additional level ($(O)/some_dir).
Finally, mk/cleandirs.mk is exported to the TA dev kit and the clean rule for the TAs is updated.
[1] https://github.com/OP-TEE/optee_os/pull/1270
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Andy Green <andy@warmcat.com>
show more ...
|
| c5402ff6 | 20-Oct-2016 |
Jerome Forissier <jerome.forissier@linaro.org> |
ta_dev_kit.mk: get optional flags from $(CFLAGS_$(sm))/$(CPPFLAGS_$(sm))
This provides an easy way to append some flags to the TA build, for instance: `make CFLAGS_ta_arm64=-O0' to disable optimizat
ta_dev_kit.mk: get optional flags from $(CFLAGS_$(sm))/$(CPPFLAGS_$(sm))
This provides an easy way to append some flags to the TA build, for instance: `make CFLAGS_ta_arm64=-O0' to disable optimizations in 64-bit TAs.
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| bfe62b88 | 15-Sep-2016 |
Joakim Bech <joakim.bech@linaro.org> |
ta-dev-kit: Remove use of platform_flags.mk
Signed-off-by: Joakim Bech <joakim.bech@linaro.org> Tested-by: Joakim Bech <joakim.bech@linaro.org> (QEMU) Reviewed-by: Jerome Forissier <jerome.forissier
ta-dev-kit: Remove use of platform_flags.mk
Signed-off-by: Joakim Bech <joakim.bech@linaro.org> Tested-by: Joakim Bech <joakim.bech@linaro.org> (QEMU) Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 9faf0da7 | 15-Jul-2016 |
Zeng Tao <prime.zeng@huawei.com> |
mk: add library common makefile support
It is not always suitable to place the third party library source in the optee-os directory, provide a common library makefile here, the usage is similar as T
mk: add library common makefile support
It is not always suitable to place the third party library source in the optee-os directory, provide a common library makefile here, the usage is similar as TA, the only difference is as follow: TA Makefile: BINARY := xxx LIB Makefile: LIBNAME := libxxx And xxx.ta or libxxx.a is the target.
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Zeng Tao <prime.zeng@huawei.com>
show more ...
|
| fdf35d01 | 27-Mar-2016 |
Jens Wiklander <jens.wiklander@linaro.org> |
Import libpng 1.6.21
Imports libpng 1.6.21 from git://git.code.sf.net/p/libpng/code, tag ibpng-1.6.21-master-signed
This library is built as a user-mode lib only and is needed to be able to support
Import libpng 1.6.21
Imports libpng 1.6.21 from git://git.code.sf.net/p/libpng/code, tag ibpng-1.6.21-master-signed
This library is built as a user-mode lib only and is needed to be able to support png images used in Trusted UI.
Internal test files and other unused files are removed.
Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| ca3a3582 | 27-Mar-2016 |
Jens Wiklander <jens.wiklander@linaro.org> |
Import zlib-1.2.8
Imports zlib-1.2.8 from http://zlib.net/zlib-1.2.8.tar.xz with MD5 checksum 28f1205d8dd2001f26fec1e8c2cebe37
This library is built as a user-mode lib only and is needed to be able
Import zlib-1.2.8
Imports zlib-1.2.8 from http://zlib.net/zlib-1.2.8.tar.xz with MD5 checksum 28f1205d8dd2001f26fec1e8c2cebe37
This library is built as a user-mode lib only and is needed to be able to decompress png images used in Trusted UI.
Internal test files and other unused files are removed.
Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 09d93d24 | 08-Apr-2016 |
Jens Wiklander <jens.wiklander@linaro.org> |
libutee: optimize byte swap macros
Optimizes byte swap macros to use compiler builtin if possible. Also adds a 64-bit byte swap macro.
Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Reviewed-b
libutee: optimize byte swap macros
Optimizes byte swap macros to use compiler builtin if possible. Also adds a 64-bit byte swap macro.
Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 0dcfe3a7 | 18-Feb-2016 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: map TA with strict permissions
Maps user TA with strict permissions. Blocks with mixed permissions are mapped with the union of the permissions. In order to take full advantage of the strict p
core: map TA with strict permissions
Maps user TA with strict permissions. Blocks with mixed permissions are mapped with the union of the permissions. In order to take full advantage of the strict permissions TAs should be mapped using small pages, that is, using the config option CFG_SMALL_PAGE_USER_TA = y.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey) Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Tested-by: Pascal Brand <pascal.brand@linaro.org> (STM) Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU, Juno) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 1d283b91 | 22-Feb-2016 |
Pascal Brand <pascal.brand@st.com> |
arm: fix stack size
According to GP Internal API, TA_STACK_SIZE corresponds to the stack size used by the TA code itself and does not include stack space possibly used by the Trusted Core Framework.
arm: fix stack size
According to GP Internal API, TA_STACK_SIZE corresponds to the stack size used by the TA code itself and does not include stack space possibly used by the Trusted Core Framework. Hence, stack_size which is the size of the stack to use, must be enlarged.
Without this patch, on FVP, xtest 1012, based on ta/sims, fails because TA_STACK_SIZE is defined as 1024, which is too low.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Pascal Brand <pascal.brand@st.com>
show more ...
|
| 85d83051 | 01-Mar-2016 |
Pascal Brand <pascal.brand@st.com> |
TA: clean $(link-script-dep)
Cleaning TA $(link-script-dep) is especially important when switching from 32bits mode to 64bits mode compilation of the TAs
Reviewed-by: Jerome Forissier <jerome.foris
TA: clean $(link-script-dep)
Cleaning TA $(link-script-dep) is especially important when switching from 32bits mode to 64bits mode compilation of the TAs
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Pascal Brand <pascal.brand@st.com>
show more ...
|
| c042fbef | 05-Feb-2016 |
Jerome Forissier <jerome.forissier@linaro.org> |
Introduce CROSS_COMPILE32 and CROSS_COMPILE64
Currently, to build a 64-bit TEE core (as well as mixed 32- and 64-bit TA libraries, which are automatically enabled in this case), one has to set too m
Introduce CROSS_COMPILE32 and CROSS_COMPILE64
Currently, to build a 64-bit TEE core (as well as mixed 32- and 64-bit TA libraries, which are automatically enabled in this case), one has to set too many compiler variables:
$ make PLATFORM=hikey CFG_ARM64_core=y \ CROSS_COMPILE_core=aarch64-linux-gnu- \ CROSS_COMPILE_ta_arm64=aarch64-linux-gnu-
This commit introduces two variables, CROSS_COMPILE32 and CROSS_COMPILE64. They take appropriate default values, so that the above line may be simplified as:
$ make PLATFORM=hikey CFG_ARM64_core=y
The change remains compatible with previous builds, i.e., CROSS_COMPILE can still be used to define the 32-bit compiler because CROSS_COMPILE32 defaults to $(CROSS_COMPILE). Similarly, CROSS_COMPILE_core and CROSS_COMPILE_ta_arm{32,64} are still used so they may be overridden too.
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org>
show more ...
|
| 739804b5 | 11-Dec-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
get rid of platform_flags.mk
Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey) Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@l
get rid of platform_flags.mk
Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey) Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU, FVP) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| fce8b659 | 08-Jan-2016 |
Pascal Brand <pascal.brand@st.com> |
Remove useless directives -Dxxx in ta_dev_kit.mk
No need to defines CFG_TA_FLOAT_SUPPORT, CFG_TEE_TA_MALLOC_DEBUG and CFG_TEE_CORE_USER_MEM_DEBUG as not used in .h files of user libraries
Reviewed-
Remove useless directives -Dxxx in ta_dev_kit.mk
No need to defines CFG_TA_FLOAT_SUPPORT, CFG_TEE_TA_MALLOC_DEBUG and CFG_TEE_CORE_USER_MEM_DEBUG as not used in .h files of user libraries
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Pascal Brand <pascal.brand@st.com>
show more ...
|
| b5569a68 | 08-Jan-2016 |
Pascal Brand <pascal.brand@st.com> |
Compiles user library using conf.h
Compilation of user libraries now includes conf.h This makes the definition of CFG_xxx macro more reliable, without the need of adding specific -D directives in ta
Compiles user library using conf.h
Compilation of user libraries now includes conf.h This makes the definition of CFG_xxx macro more reliable, without the need of adding specific -D directives in ta/ta.mk
Note that conf.h and conf.mk are no more generated in the out/core directory.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Pascal Brand <pascal.brand@st.com>
show more ...
|
| 4718d4b8 | 18-Dec-2015 |
Jerome Forissier <jerome.forissier@linaro.org> |
libutee: use CFG_TEE_PANIC_DEBUG setting
When libutee is compiled, the configuration variable CFG_TEE_PANIC_DEBUG is not exported to the C code as a pre-processor macro (contrary to TEE core build,
libutee: use CFG_TEE_PANIC_DEBUG setting
When libutee is compiled, the configuration variable CFG_TEE_PANIC_DEBUG is not exported to the C code as a pre-processor macro (contrary to TEE core build, it does not happen automatically). As a result, all the calls to TEE_Panic() that occur in the GlobalPlatform API wrappers do not call EMSG() when the TA is about to panic. This commit fixes this issue by properly defining the C macro when the configuration variable is enabled.
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 3e27ab4b | 11-Dec-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
Export CFG_TA_FLOAT_SUPPORT to TA dev kit
Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU, FVP Aarch64) Signed-off-by: Jens Wiklander
Export CFG_TA_FLOAT_SUPPORT to TA dev kit
Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU, FVP Aarch64) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 156fe685 | 03-Dec-2015 |
Pascal Brand <pascal.brand@st.com> |
build: fix definition of MDBG_ENABLE
Note that because of this bug, MDBG_ENABLE was always defined. Now, MDBG_ENABLE is not defined by default.
Reviewed-by: Jerome Forissier <jerome.forissier@linar
build: fix definition of MDBG_ENABLE
Note that because of this bug, MDBG_ENABLE was always defined. Now, MDBG_ENABLE is not defined by default.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Tested-by: Pascal Brand <pascal.brand@linaro.org> (QEMU) Signed-off-by: Pascal Brand <pascal.brand@st.com>
show more ...
|
| bc33bbd9 | 11-Nov-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
Add support to generate multiple TA dev kits
Adds support to generate multiple TA dev kits, one for each word in the variable "ta-targets". ta/ta.mk is included once for each word in "ta-targets" wi
Add support to generate multiple TA dev kits
Adds support to generate multiple TA dev kits, one for each word in the variable "ta-targets". ta/ta.mk is included once for each word in "ta-targets" with the word assigned to "ta-target". This word is the assigned the variable "sm" to allow each "ta-target" to be built as a separate sub-module.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 0fcbddd4 | 11-Nov-2015 |
SY Chiu <sy.chiu@linaro.org> |
debug: enable bget memory leak detection
This patch enables memory leak detection in bget_malloc.c. This is very helpful to find memory leakage issue in teecore or user TA. To enable it in teecore,
debug: enable bget memory leak detection
This patch enables memory leak detection in bget_malloc.c. This is very helpful to find memory leakage issue in teecore or user TA. To enable it in teecore, build optee_os with `CFG_TEE_CORE_MALLOC_DEBUG=y`. For user TA, build optee_os with `CFG_TEE_TA_MALLOC_DEBUG=y`.
Then, add the following statement at some point of your code that might frequently been triggered:
mdbg_check(1);
It will dump allocated memory blocks and the holders of them. If you find a memory block appears multiple times after the system runs a period of time, it is very likely the source of memory leakage.
Here is an example output:
ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 0 bytes core/tee/tee_svc_storage.c:260 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 104 bytes core/tee/tee_svc_storage.c:444 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 18 bytes core/tee/tee_pobj.c:119 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 56 bytes core/tee/tee_pobj.c:110 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 192 bytes core/arch/arm/mm/tee_mmu.c:93 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 32 bytes core/arch/arm/mm/tee_mmu.c:241 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 24 bytes core/arch/arm/mm/tee_mm.c:75 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 24 bytes core/arch/arm/mm/tee_mm.c:75 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 224 bytes core/arch/arm/kernel/tee_ta_manager.c:573 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 72 bytes core/arch/arm/kernel/tee_ta_manager.c:1202 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 7 bytes lib/libutils/isoc/strdup.c:34 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 7 bytes lib/libutils/isoc/strdup.c:34 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 7 bytes lib/libutils/isoc/strdup.c:34 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 7 bytes lib/libutils/isoc/strdup.c:34 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 32 bytes core/kernel/handle.c:70 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 24 bytes core/arch/arm/mm/tee_mm.c:48 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 24 bytes core/arch/arm/mm/tee_mm.c:48 ERR TEE-CORE:mdbg_check:720: Orphaned buffer: 24 bytes core/arch/arm/mm/tee_mm.c:48 ERR TEE-CORE:mdbg_check:720: Ignore buffer: 16 bytes lib/libutils/isoc/bget_malloc.c:794
You can see the buffer hold by strdup.c:34 appears 4 times, so it's very likely to be the source of memory leakage.
Signed-off-by: SY Chiu <sy.chiu@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey) Tested-by: SY Chiu <sy.chiu@linaro.org> (MT8173 EVB)
show more ...
|
| bc62d278 | 10-Nov-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
bugfix: rename define LP64 to __LP64__
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org> |
| 2f04385c | 12-Nov-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
Unify TA entry functions
Unifies TA entry function into one entry function.
* Updates TA entry * Update ta_head * Fixes style issues in user_ta_entry.c
Note that this change is not backwards compa
Unify TA entry functions
Unifies TA entry function into one entry function.
* Updates TA entry * Update ta_head * Fixes style issues in user_ta_entry.c
Note that this change is not backwards compatible, TAs needs to be recompiled.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (QEMU) Reviewed-by: Joakim Bech <joakim.bech@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org>
show more ...
|
| e86f1266 | 05-Nov-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
Make TEE Core TA interaction 64-bit compatible
* Updates TA entry * Update ta_head * Updates the syscall interface * Adds functions to make a short pointer (32-bit uref) from a kernel pointer and
Make TEE Core TA interaction 64-bit compatible
* Updates TA entry * Update ta_head * Updates the syscall interface * Adds functions to make a short pointer (32-bit uref) from a kernel pointer and vice versa
Note that this change is not backwards compatible, TAs needs to be recompiled.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Joakim Bech <joakim.bech@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org>
show more ...
|
| 94e8a4fc | 26-Oct-2015 |
Jens Wiklander <jens.wiklander@linaro.org> |
libutee: Optionally replace TEE_Panic() with macro
Help debugging by replacing TEE_Panic() with a macro that does an EMSG() and then calls panic function (__TEE_Panic()).
Signed-off-by: Jens Wiklan
libutee: Optionally replace TEE_Panic() with macro
Help debugging by replacing TEE_Panic() with a macro that does an EMSG() and then calls panic function (__TEE_Panic()).
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org>
show more ...
|