uml: fix "cond. expr. as lvalues" warning
PATCH 1/1 uml: fix "cond. expr. as lvalues" warning
From: Paolo 'Blaisorblade' Giarrusso <[email protected]>
Gcc 3.4.3 (and probably any 3.4) emits some "deprecation" warnings currently about usages of CHOOSE_MODE, since the below syntax has been deprecated:
(a ? foo: bar) = foobar;
which often results from expansion of:CHOOSE_MODE(foo, bar) = foobar;
So add an additional __CHOOSE_MODE syntax for users which need to get a lvalue, which uses (a ? &foo : &bar) inside a function, casts the result to the correct type and dereference the pointer, and use it where needed (i.e. in <sysdep/ptrace.h>)
The patch builds and runs correctly (this has been tested on i386 only, not on x86_64), and removes all the warnings.
---
linux-2.6.11-paolo/arch/um/include/choose-mode.h | 7 + linux-2.6.11-paolo/arch/um/include/sysdep-i386/ptrace.h | 36 ++++---- linux-2.6.11-paolo/arch/um/include/sysdep-x86_64/ptrace.h | 58 +++++++------- 3 files changed, 54 insertions(+), 47 deletions(-)
arch/um/include/choose-mode.h renamed from arch/um/include/choose-mode.h~uml-fix-cond-expr-as-lvalues +7 -0
@@ -21,6 +21,13 @@ #define CHOOSE_MODE_PROC(tt, skas, args...) \ CHOOSE_MODE(tt(args), skas(args)) +extern int mode_tt; +static inline void *__choose_mode (void *tt,void *skas) { +return mode_tt ? tt : skas; +} + +#define __CHOOSE_MODE (tt, skas) (*( (typeof(tt) *) __choose_mode(&(tt), &(skas)))) +#endif /*
arch/um/include/sysdep-i386/ptrace.h renamed from arch/um/include/sysdep-i386/ptrace.h~uml-fix-cond-expr-as-lvalues +18 -18
@@ -93,39 +93,39 @@ extern int mode_tt;#define UPT_SC (r) ((r)->tt.sc)#define UPT_IP (r) \ - CHOOSE_MODE(SC_IP(UPT_SC(r)), REGS_IP((r)->skas.regs)) + __CHOOSE_MODE(SC_IP(UPT_SC(r)), REGS_IP((r)->skas.regs))#define UPT_SP (r) \ - CHOOSE_MODE(SC_SP(UPT_SC(r)), REGS_SP((r)->skas.regs)) + __CHOOSE_MODE(SC_SP(UPT_SC(r)), REGS_SP((r)->skas.regs))#define UPT_EFLAGS (r) \ - CHOOSE_MODE(SC_EFLAGS(UPT_SC(r)), REGS_EFLAGS((r)->skas.regs)) + __CHOOSE_MODE(SC_EFLAGS(UPT_SC(r)), REGS_EFLAGS((r)->skas.regs))#define UPT_EAX (r) \ - CHOOSE_MODE(SC_EAX(UPT_SC(r)), REGS_EAX((r)->skas.regs)) + __CHOOSE_MODE(SC_EAX(UPT_SC(r)), REGS_EAX((r)->skas.regs))#define UPT_EBX (r) \ - CHOOSE_MODE(SC_EBX(UPT_SC(r)), REGS_EBX((r)->skas.regs)) + __CHOOSE_MODE(SC_EBX(UPT_SC(r)), REGS_EBX((r)->skas.regs))#define UPT_ECX (r) \ - CHOOSE_MODE(SC_ECX(UPT_SC(r)), REGS_ECX((r)->skas.regs)) + __CHOOSE_MODE(SC_ECX(UPT_SC(r)), REGS_ECX((r)->skas.regs))#define UPT_EDX (r) \ - CHOOSE_MODE(SC_EDX(UPT_SC(r)), REGS_EDX((r)->skas.regs)) + __CHOOSE_MODE(SC_EDX(UPT_SC(r)), REGS_EDX((r)->skas.regs))#define UPT_ESI (r) \ - CHOOSE_MODE(SC_ESI(UPT_SC(r)), REGS_ESI((r)->skas.regs)) + __CHOOSE_MODE(SC_ESI(UPT_SC(r)), REGS_ESI((r)->skas.regs))#define UPT_EDI (r) \ - CHOOSE_MODE(SC_EDI(UPT_SC(r)), REGS_EDI((r)->skas.regs)) + __CHOOSE_MODE(SC_EDI(UPT_SC(r)), REGS_EDI((r)->skas.regs))#define UPT_EBP (r) \ - CHOOSE_MODE(SC_EBP(UPT_SC(r)), REGS_EBP((r)->skas.regs)) + __CHOOSE_MODE(SC_EBP(UPT_SC(r)), REGS_EBP((r)->skas.regs))#define UPT_ORIG_EAX (r) \ - CHOOSE_MODE((r)->tt.syscall, (r)->skas.syscall) + __CHOOSE_MODE((r)->tt.syscall, (r)->skas.syscall)#define UPT_CS (r) \ - CHOOSE_MODE(SC_CS(UPT_SC(r)), REGS_CS((r)->skas.regs)) + __CHOOSE_MODE(SC_CS(UPT_SC(r)), REGS_CS((r)->skas.regs))#define UPT_SS (r) \ - CHOOSE_MODE(SC_SS(UPT_SC(r)), REGS_SS((r)->skas.regs)) + __CHOOSE_MODE(SC_SS(UPT_SC(r)), REGS_SS((r)->skas.regs))#define UPT_DS (r) \ - CHOOSE_MODE(SC_DS(UPT_SC(r)), REGS_DS((r)->skas.regs)) + __CHOOSE_MODE(SC_DS(UPT_SC(r)), REGS_DS((r)->skas.regs))#define UPT_ES (r) \ - CHOOSE_MODE(SC_ES(UPT_SC(r)), REGS_ES((r)->skas.regs)) + __CHOOSE_MODE(SC_ES(UPT_SC(r)), REGS_ES((r)->skas.regs))#define UPT_FS (r) \ - CHOOSE_MODE(SC_FS(UPT_SC(r)), REGS_FS((r)->skas.regs)) + __CHOOSE_MODE(SC_FS(UPT_SC(r)), REGS_FS((r)->skas.regs))#define UPT_GS (r) \ - CHOOSE_MODE(SC_GS(UPT_SC(r)), REGS_GS((r)->skas.regs)) + __CHOOSE_MODE(SC_GS(UPT_SC(r)), REGS_GS((r)->skas.regs))#define UPT_SYSCALL_ARG1 (r) UPT_EBX(r)#define UPT_SYSCALL_ARG2 (r) UPT_ECX(r)
@@ -222,7 +222,7 @@ struct syscall_args { REGS_SEGV_IS_FIXABLE(&r->skas))#define UPT_FAULT_ADDR (r) \ - CHOOSE_MODE(SC_FAULT_ADDR(UPT_SC(r)), REGS_FAULT_ADDR(&r->skas)) + __CHOOSE_MODE(SC_FAULT_ADDR(UPT_SC(r)), REGS_FAULT_ADDR(&r->skas))#define UPT_FAULT_WRITE (r) \ CHOOSE_MODE(SC_FAULT_WRITE(UPT_SC(r)), REGS_FAULT_WRITE(&r->skas))
arch/um/include/sysdep-x86_64/ptrace.h renamed from arch/um/include/sysdep-x86_64/ptrace.h~uml-fix-cond-expr-as-lvalues +29 -29
79 lines not on this page · raw message
_
-------------------------------------------------------
This SF.net email is sponsored by: 2005 Windows Mobile Application Contest Submit applications for Windows Mobile(tm)-based Pocket PCs or Smartphones for the chance to win $25,000 and application distribution. Enter today at
http://ads.osdn.com/?ad_id=6882&alloc_id=15148&op=click
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel