Message ID | 1394710307-13187-1-git-send-email-peter.maydell@linaro.org |
---|---|
State | Accepted |
Commit | 0100f42550201f346cc0c20c1864f941509eb592 |
Headers | show |
Am 13.03.2014 12:31, schrieb Peter Maydell: > Older versions of gcc (eg 4.6) can't handle varargs functions declared > inline for anything other than completely trivial uses, and complain: > > tests/qom-test.c: In function 'qmp': tests/libqtest.h:359:60: sorry, > unimplemented: function 'qmp' can never be inlined because it uses > variable argument lists > > Avoid this problem by putting the functions into libqtest.c instead > of using inline definitions in libqtest.h. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Andreas Färber <afaerber@suse.de> Feel free to go ahead with this. Thanks, Andreas
On 13 March 2014 12:31, Andreas Färber <afaerber@suse.de> wrote: > Am 13.03.2014 12:31, schrieb Peter Maydell: >> Older versions of gcc (eg 4.6) can't handle varargs functions declared >> inline for anything other than completely trivial uses, and complain: >> >> tests/qom-test.c: In function 'qmp': tests/libqtest.h:359:60: sorry, >> unimplemented: function 'qmp' can never be inlined because it uses >> variable argument lists >> >> Avoid this problem by putting the functions into libqtest.c instead >> of using inline definitions in libqtest.h. >> >> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > > Reviewed-by: Andreas Färber <afaerber@suse.de> > > Feel free to go ahead with this. Applied to master, thanks. Your pullreq is next in the queue. thanks -- PMM
diff --git a/tests/libqtest.c b/tests/libqtest.c index f587d36..b69dfca 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -581,3 +581,23 @@ void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size) qtest_sendf(s, "\n"); qtest_rsp(s, 0); } + +QDict *qmp(const char *fmt, ...) +{ + va_list ap; + QDict *response; + + va_start(ap, fmt); + response = qtest_qmpv(global_qtest, fmt, ap); + va_end(ap); + return response; +} + +void qmp_discard_response(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qtest_qmpv_discard_response(global_qtest, fmt, ap); + va_end(ap); +} diff --git a/tests/libqtest.h b/tests/libqtest.h index 9deebdc..8268c09 100644 --- a/tests/libqtest.h +++ b/tests/libqtest.h @@ -356,16 +356,7 @@ static inline void qtest_end(void) * * Sends a QMP message to QEMU and returns the response. */ -static inline QDict *qmp(const char *fmt, ...) -{ - va_list ap; - QDict *response; - - va_start(ap, fmt); - response = qtest_qmpv(global_qtest, fmt, ap); - va_end(ap); - return response; -} +QDict *qmp(const char *fmt, ...); /** * qmp_discard_response: @@ -373,14 +364,7 @@ static inline QDict *qmp(const char *fmt, ...) * * Sends a QMP message to QEMU and consumes the response. */ -static inline void qmp_discard_response(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - qtest_qmpv_discard_response(global_qtest, fmt, ap); - va_end(ap); -} +void qmp_discard_response(const char *fmt, ...); /** * get_irq:
Older versions of gcc (eg 4.6) can't handle varargs functions declared inline for anything other than completely trivial uses, and complain: tests/qom-test.c: In function 'qmp': tests/libqtest.h:359:60: sorry, unimplemented: function 'qmp' can never be inlined because it uses variable argument lists Avoid this problem by putting the functions into libqtest.c instead of using inline definitions in libqtest.h. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- This doesn't bite us with the current libqtest code but the enhancements Andreas has in his QOM queue do trigger this gcc 4.6 unimplemented behaviour. tests/libqtest.c | 20 ++++++++++++++++++++ tests/libqtest.h | 20 ++------------------ 2 files changed, 22 insertions(+), 18 deletions(-)