On Thu, Mar 05, 2015 at 12:05:52PM +0100, Ján Tomko wrote:
Explicitly request that virNumaNodeIsAvailable not be inlined.
This fixes the test suite when building with clang (3.5.1).
Huh, so clang will inline functions, even if they are exported
in the .so library ? Is there some clang compiler flag we can
use to stop that ? I'd only expect it to inline stuff which
was declared static, or whose impl body was in the header file
---
This only leaves the mysterious check-protocol failure.
And too large stack frame size when building the tests with -O0.
src/internal.h | 10 ++++++++++
src/util/virnuma.h | 3 ++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/internal.h b/src/internal.h
index 4d473af..84aa330 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -139,6 +139,16 @@
# endif
/**
+ * ATTRIBUTE_NOINLINE:
+ *
+ * Macro to indicate a function that cannot be inlined
+ * (e.g. a function that is mocked in the test suite)
+ */
+# ifndef ATTRIBUTE_NOINLINE
+# define ATTRIBUTE_NOINLINE __attribute__((__noinline__))
+# endif
+
+/**
* ATTRIBUTE_SENTINEL:
*
* Macro to check for NULL-terminated varargs lists
diff --git a/src/util/virnuma.h b/src/util/virnuma.h
index 1f3c0ad..4ddcc5a 100644
--- a/src/util/virnuma.h
+++ b/src/util/virnuma.h
@@ -37,7 +37,8 @@ virBitmapPtr virNumaGetHostNodeset(void);
bool virNumaNodesetIsAvailable(virBitmapPtr nodeset);
bool virNumaIsAvailable(void);
int virNumaGetMaxNode(void);
-bool virNumaNodeIsAvailable(int node);
+bool virNumaNodeIsAvailable(int node)
+ ATTRIBUTE_NOINLINE;
int virNumaGetDistances(int node,
int **distances,
int *ndistances);
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|