packaging: Add -marm and -fno-omit-frame-pointer
authorDenis Khalikov <d.khalikov@partner.samsung.com>
Thu, 5 Jul 2018 10:04:58 +0000 (13:04 +0300)
committerDongkyun Son <dongkyun.s@samsung.com>
Fri, 28 Jul 2023 12:00:38 +0000 (21:00 +0900)
To enable "fastunwinder" work on armv7l we should explicitly
build libasan with -marm and -fno-omit-frame-pointer.

Change-Id: I28e763fa7b088aa26a81e7bb6d3a7fa9ba7a714b

gcc/testsuite/c-c++-common/asan/fast-unwind.c [new file with mode: 0644]
packaging/gcc-aarch64.spec
packaging/gcc-armv7hl.spec
packaging/gcc-armv7l.spec
packaging/linaro-gcc.spec

diff --git a/gcc/testsuite/c-c++-common/asan/fast-unwind.c b/gcc/testsuite/c-c++-common/asan/fast-unwind.c
new file mode 100644 (file)
index 0000000..f411a55
--- /dev/null
@@ -0,0 +1,49 @@
+/* { dg-do compile { target arm*-*-*} } */
+/* { dg-options "-fno-builtin-malloc -fno-builtin-free -fno-builtin-memset
+ * -fno-omit-frame-pointer -marm -Wa,-mimplicit-it=arm" } */
+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+/* { dg-shouldfail "asan" } */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void *memset (void *, int, __SIZE_TYPE__);
+void *malloc (__SIZE_TYPE__);
+void free (void *);
+
+const char *
+__asan_default_options () {
+  return "fast_unwind_on_fatal=true";
+}
+
+#ifdef __cplusplus
+}
+#endif
+volatile int ten = 10;
+__attribute__ ((noinline)) int
+foo ()
+{
+  char *x = (char *) malloc (10);
+  memset(x, 0, 10);
+  int res = x[ten]; /* BOOOM */
+  free(x);
+  return res;
+}
+
+__attribute__ ((noinline)) int
+bar ()
+{
+  return foo ();
+}
+
+int
+main (int argc, char **argv)
+{
+  return bar ();
+}
+
+/* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
+/* { dg-output "    #0 0x\[0-9a-f\]+ +(in \[^\n\r]*foo\[^\n\r]*fast-unwind.c:29|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #1 0x\[0-9a-f\]+ +(in \[^\n\r]*bar\[^\n\r]*fast-unwind.c:37|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #2 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*fast-unwind.c:43|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
index 8b21972..ff392d0 100644 (file)
@@ -667,7 +667,12 @@ echo "" > gcc/DEV-PHASE
 %global gcc_release `sed -e 's/^.*-//g' %{_builddir}/gcc-%{version}/gcc/LINARO-VERSION`
 
 %build
-%{?asan:%gcc_unforce_options}
+%{?asan:
+%gcc_unforce_options
+%ifarch armv7l
+RPM_OPT_FLAGS="$RPM_OPT_FLAGS -marm -Wa,-mimplicit-it=arm -fno-omit-frame-pointer"
+%endif
+}
 rm -rf obj
 mkdir obj
 cd obj
index 74ebac9..30469a9 100644 (file)
@@ -667,7 +667,12 @@ echo "" > gcc/DEV-PHASE
 %global gcc_release `sed -e 's/^.*-//g' %{_builddir}/gcc-%{version}/gcc/LINARO-VERSION`
 
 %build
-%{?asan:%gcc_unforce_options}
+%{?asan:
+%gcc_unforce_options
+%ifarch armv7l
+RPM_OPT_FLAGS="$RPM_OPT_FLAGS -marm -Wa,-mimplicit-it=arm -fno-omit-frame-pointer"
+%endif
+}
 rm -rf obj
 mkdir obj
 cd obj
index 07c2cdc..7e195d7 100644 (file)
@@ -667,7 +667,12 @@ echo "" > gcc/DEV-PHASE
 %global gcc_release `sed -e 's/^.*-//g' %{_builddir}/gcc-%{version}/gcc/LINARO-VERSION`
 
 %build
-%{?asan:%gcc_unforce_options}
+%{?asan:
+%gcc_unforce_options
+%ifarch armv7l
+RPM_OPT_FLAGS="$RPM_OPT_FLAGS -marm -Wa,-mimplicit-it=arm -fno-omit-frame-pointer"
+%endif
+}
 rm -rf obj
 mkdir obj
 cd obj
index 27bfc5e..3703551 100644 (file)
@@ -664,7 +664,12 @@ echo "" > gcc/DEV-PHASE
 %global gcc_release `sed -e 's/^.*-//g' %{_builddir}/gcc-%{version}/gcc/LINARO-VERSION`
 
 %build
-%{?asan:%gcc_unforce_options}
+%{?asan:
+%gcc_unforce_options
+%ifarch armv7l
+RPM_OPT_FLAGS="$RPM_OPT_FLAGS -marm -Wa,-mimplicit-it=arm -fno-omit-frame-pointer"
+%endif
+}
 rm -rf obj
 mkdir obj
 cd obj