summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2022-03-23 14:04:49 -0400
committerTom Rini <trini@konsulko.com>2022-04-11 10:00:30 -0400
commitbdaeea1b6863b0ec80f2d4bc15d50b8d16efa708 (patch)
treea9a68f315eceeabb9477bb58b8726e307dc2c99c /scripts
parentfba0882bcdfd919727ee9ee8523ef3156daab507 (diff)
downloadu-boot-bdaeea1b6863b0ec80f2d4bc15d50b8d16efa708.tar.gz
u-boot-bdaeea1b6863b0ec80f2d4bc15d50b8d16efa708.tar.bz2
u-boot-bdaeea1b6863b0ec80f2d4bc15d50b8d16efa708.zip
malloc: Annotate allocator for valgrind
This annotates malloc and friends so that valgrind can track the heap. To do this, we need to follow a few rules: * Call VALGRIND_MALLOCLIKE_BLOCK whenever we malloc something * Call VALGRIND_FREELIKE_BLOCK whenever we free something (generally after we have done our bookkeeping) * Call VALGRIND_RESIZEINPLACE_BLOCK whenever we change the size of an allocation. We don't record the original request size of a block, and neither does valgrind. For this reason, we pretend that the old size of the allocation was for 0 bytes. This marks the whole allocaton as undefined, so in order to mark all bits correctly, we must make the whole new allocation defined with VALGRIND_MAKE_MEM_DEFINED. This may cause us to miss some invalid reads, but there is no way to detect these without recording the original size of the allocation. In addition to the above, dlmalloc itself tends to make a lot of accesses which we know are safe, but which would be unsafe outside of dlmalloc. For this reason, we provide a suppression file which ignores errors ocurring in dlmalloc.c Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/u-boot.supp53
1 files changed, 53 insertions, 0 deletions
diff --git a/scripts/u-boot.supp b/scripts/u-boot.supp
new file mode 100644
index 0000000000..9562b27a61
--- /dev/null
+++ b/scripts/u-boot.supp
@@ -0,0 +1,53 @@
+{
+ dlmalloc
+ Memcheck:Addr1
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Addr4
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Addr8
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Addr1
+ fun:*
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Addr4
+ fun:*
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Addr8
+ fun:*
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Value4
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Value8
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Cond
+ src:dlmalloc.c
+}
+{
+ dlmalloc
+ Memcheck:Free
+ src:dlmalloc.c
+}