Linaro Connect Asia 2013 (LCA13) will take place in Hong Kong again this year, on March 4 – 8, 2013 at the Gold Coast Hotel. Linaro recently published the event schedule, with sessions focused on kernel, power management, toolchain, graphics and multimedia, platform, validation, and QA tracks, as well as 2 mini-summits: Linaro Enterprise Group (LEG) which will discuss about ARM server, and an as-yet-unannounced group (Linaro Networking Group?) within Linaro. There will also be hacking sessions each day (except on “Demo Friday”) where you can certainly expect to learn many useful skills/tips. I’ve selected 2 sessions or keynotes per day that I think could be especially interesting. Some of the sessions don’t have description yet, so even if they might seem interesting I’ve usually skipped those. Monday 12:00 – 13:00 – Low Level Virtual Machine (LLVM) Update The Toolchain Working Group started working on LLVM in January 2013. Come […]
Embedded Linux Conference 2013 Schedule
The Embedded Linux Conference (ELC 2013) will take place on February 20 – 22, 2013 at Park 55 Hotel in San Francisco, California. ELC consists of 3 days of presentations, tutorials and sessions. There will be over 50 sessions during those 3 days. I’ll highlight a few sessions that I find particularly interesting, and that did not get presented at ELCE 2012 (AFAICR). February 20 11:00 – Anatomy of the arm-soc git tree by Olof Johansson, Google We are now two years into the new maintainer model for ARM platforms, and we have settled down into a workflow that maintainers have adjusted well to. Still, when new platforms arrive, or when maintainer ship changes hands, there’s sometimes a bit of ramp-up in getting used to how we organize our git tree and how we prefer to see code submitted to fit that model. This presentation will give an overview of […]
LinuxCon North America 2012 Schedule
LinuxCon (North America) 2012 will take place on August 29 – 31, 2012 at Sheraton Hotel & Marina, in San Diego, California. The event will be co-located with the Linux Kernel Summit, the Linux Plumbers Conference, and CloudOpen 2012. LinuxCon consists of 3 days of keynotes, business and developers related sessions as well as tutorials. There will be over 80 sessions and keynotes during those 3 days. I’ll highlight a few sessions that I find particularly interesting and related to embedded Linux, software development and ARM. August 29 10:45 – 11:30 – Life After BerkeleyDB: OpenLDAP’s Memory-Mapped Database by Howard Chu, Symas Abstract: OpenLDAP’s new MDB library is a highly optimized B+tree implementation that is orders of magnitude faster and more efficient than everything else in the software world. Reads scale perfectly linearly across arbitrarily many CPUs with no bottlenecks, and data is returned with zero memcpy’s. Writes are on […]
ELLCC Multi-Target Cross Compiler Based on Clang and LLVM Compiler Infrastructure
ELLCC is a project aiming at creating a multi-target cross compilation environment for embedded systems. which makes use of Clang and the LLVM compiler infrastructure. QEMU is used for cross-platform testing. The project goals are to implement the following key features: A functional C/C++ compiler based on Clang (ecc) Multi-target support: ARM, i386, Microblaze, Mips, Nios2, PowerPC, PowerPC64, Sparc and X86_64 Multi-OS support: Linux, Standalone, … A complete test environment that allows automatic unit and integration testing of the run-time environment and complete executables. Support of a wide variety of target processors from armv4 to armv7, several mips cores, i386, and more. The project is still being developed, and ELLCC is in a pre-release state. ELLCC is composed of the following components: ecc – The ELLCC C/C++ compiler, a single executable with gcc compatible options. binutils – The GNU binutils package. libecc – The C standard library based on the musl standard […]
Development Testing with Static Analysis
I’ve recently come across an EE Times article written by Coverity stressing the benefits of static analysis and how it can help finding potential issues in the code early. They mentioned 3 static analysis techniques: Dataflow analysis This technique can find the defect in the listing below during compile time.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void null_pointer_deref(int x) { char *p; if (x == 0) { p = foo(); } else { p = 0; } if(x != 0) { *p; } else { ... } } |
If value of x passed into the function is not zero, p is assigned a null pointer with p=0. Then, the next conditional check (x!=0) takes a true branch and in the next line p is dereferenced, leading to a null pointer dereference. This type of issue can be detected at compiled time with dataflow analysis. Interprocedural analysis This technique can find defects across function and method boundaries. See listing below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void *zero_alloc(size_t size) { void *p = malloc(size); if (!p) return NULL; memset(p,0,size); return p; } struct S *create_S(int initial_value) { struct S *s = (struct S *) zero_alloc(sizeof(*s)); if (!s) return NULL; s->field = initial_value; return s; } int example_leak(struct S *s, int value) { struct S *tmp = s; if(!tmp) { tmp = create_S(value); } if(!tmp) return -1; ... return 0; } |
There are 3 functions: example_leak, create_S and zero_alloc. Interprocedural analysis can go through the code and identify the memory leak. The analysis engine has to trace the […]
LLVM (Low Level Virtual Machine) Compiler Infrastructure
The Low Level Virtual Machine (LLVM) is a compiler and toolchain infrastructure, written in C++, designed for compile-time, link-time, run-time, and “idle-time” optimization of programs written in arbitrary programming languages. Originally implemented for C/C++, LLVM is now used with a variety programming languages such as Python, Ruby and may others. Code in the LLVM project is licensed under the “UIUC” BSD-Style license. LLVM can be used to replace and/or supplement the GNU tools such as gcc, g++, gdb, etc… LLVM now consists of a number of different sub-projects including: The LLVM Core libraries provide a source- and target-independent optimizer, along with code generation support for many popular CPUs. These libraries are built around a well specified code representation known as the LLVM intermediate representation (“LLVM IR”). The LLVM Core libraries are well documented, and it is particularly easy to invent your own language (or port an existing compiler) to use […]