summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-10-29 15:11:30 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2012-10-30 09:18:43 +0100
commit67d223be90178f7142b4f566358cea446af8df74 (patch)
treef8ac837c1e6ef1629810bc646256efc4dbf4da36
parentf3192e8fb28529dd4fd777f916c437f49098ad39 (diff)
downloadqemu-67d223be90178f7142b4f566358cea446af8df74.tar.gz
compiler: use weak aliases to provide default definitions
This is simpler and more portable. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--arch_init.h2
-rw-r--r--compiler.h11
-rw-r--r--qmp.c3
3 files changed, 7 insertions, 9 deletions
diff --git a/arch_init.h b/arch_init.h
index d9c572aee8..5fc780c63d 100644
--- a/arch_init.h
+++ b/arch_init.h
@@ -34,6 +34,6 @@ int tcg_available(void);
int kvm_available(void);
int xen_available(void);
-CpuDefinitionInfoList GCC_WEAK_DECL *arch_query_cpu_definitions(Error **errp);
+CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp);
#endif
diff --git a/compiler.h b/compiler.h
index c734a71c67..58865d65e8 100644
--- a/compiler.h
+++ b/compiler.h
@@ -50,16 +50,13 @@
# define __printf__ __gnu_printf__
# endif
# endif
-#if defined(_WIN32)
-#define GCC_WEAK __attribute__((weak))
-#define GCC_WEAK_DECL GCC_WEAK
-#else
-#define GCC_WEAK __attribute__((weak))
-#define GCC_WEAK_DECL
-#endif
+# define QEMU_WEAK_ALIAS(newname, oldname) \
+ typeof(oldname) newname __attribute__((weak, alias (#oldname)))
#else
#define GCC_ATTR /**/
#define GCC_FMT_ATTR(n, m)
+#define QEMU_WEAK_ALIAS(newname, oldname) \
+ _Pragma("weak " #newname "=" #oldname)
#endif
#endif /* COMPILER_H */
diff --git a/qmp.c b/qmp.c
index 31bc3bfdd1..df952b60bc 100644
--- a/qmp.c
+++ b/qmp.c
@@ -466,11 +466,12 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
return prop_list;
}
-CpuDefinitionInfoList GCC_WEAK *arch_query_cpu_definitions(Error **errp)
+static CpuDefinitionInfoList *default_arch_query_cpu_definitions(Error **errp)
{
error_set(errp, QERR_NOT_SUPPORTED);
return NULL;
}
+QEMU_WEAK_ALIAS(arch_query_cpu_definitions, default_arch_query_cpu_definitions);
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
{