diff options
author | Arnd Bergmann <arnd@arndb.de> | 2017-07-19 08:53:00 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-07-20 04:46:24 -0400 |
commit | 75e2f0a6b16141cb347f442033ec907380d4d66e (patch) | |
tree | 95da28d4ab0ea6a7d902f4c63c61f9f5cca8cc82 | |
parent | 11d8b05855f3749bcb6c57e2c4052921b9605c77 (diff) |
x86/fpu/math-emu: Fix possible uninitialized variable use
When building the kernel with "make EXTRA_CFLAGS=...", this overrides
the "PARANOID" preprocessor macro defined in arch/x86/math-emu/Makefile,
and we run into a build warning:
arch/x86/math-emu/reg_compare.c: In function ‘compare_i_st_st’:
arch/x86/math-emu/reg_compare.c:254:6: error: ‘f’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
This fixes the implementation to work correctly even without the PARANOID
flag, and also fixes the Makefile to not use the EXTRA_CFLAGS variable
but instead use the ccflags-y variable in the Makefile that is meant
for this purpose.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Bill Metzenthen <billm@melbpc.org.au>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-3-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/math-emu/Makefile | 4 | ||||
-rw-r--r-- | arch/x86/math-emu/reg_compare.c | 16 |
2 files changed, 10 insertions, 10 deletions
diff --git a/arch/x86/math-emu/Makefile b/arch/x86/math-emu/Makefile index 9b0c63b60302..1b2dac174321 100644 --- a/arch/x86/math-emu/Makefile +++ b/arch/x86/math-emu/Makefile | |||
@@ -5,8 +5,8 @@ | |||
5 | #DEBUG = -DDEBUGGING | 5 | #DEBUG = -DDEBUGGING |
6 | DEBUG = | 6 | DEBUG = |
7 | PARANOID = -DPARANOID | 7 | PARANOID = -DPARANOID |
8 | EXTRA_CFLAGS := $(PARANOID) $(DEBUG) -fno-builtin $(MATH_EMULATION) | 8 | ccflags-y += $(PARANOID) $(DEBUG) -fno-builtin $(MATH_EMULATION) |
9 | EXTRA_AFLAGS := $(PARANOID) | 9 | asflags-y += $(PARANOID) |
10 | 10 | ||
11 | # From 'C' language sources: | 11 | # From 'C' language sources: |
12 | C_OBJS =fpu_entry.o errors.o \ | 12 | C_OBJS =fpu_entry.o errors.o \ |
diff --git a/arch/x86/math-emu/reg_compare.c b/arch/x86/math-emu/reg_compare.c index b77360fdbf4a..19b33b50adfa 100644 --- a/arch/x86/math-emu/reg_compare.c +++ b/arch/x86/math-emu/reg_compare.c | |||
@@ -168,7 +168,7 @@ static int compare(FPU_REG const *b, int tagb) | |||
168 | /* This function requires that st(0) is not empty */ | 168 | /* This function requires that st(0) is not empty */ |
169 | int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) | 169 | int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) |
170 | { | 170 | { |
171 | int f = 0, c; | 171 | int f, c; |
172 | 172 | ||
173 | c = compare(loaded_data, loaded_tag); | 173 | c = compare(loaded_data, loaded_tag); |
174 | 174 | ||
@@ -189,12 +189,12 @@ int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) | |||
189 | case COMP_No_Comp: | 189 | case COMP_No_Comp: |
190 | f = SW_C3 | SW_C2 | SW_C0; | 190 | f = SW_C3 | SW_C2 | SW_C0; |
191 | break; | 191 | break; |
192 | #ifdef PARANOID | ||
193 | default: | 192 | default: |
193 | #ifdef PARANOID | ||
194 | EXCEPTION(EX_INTERNAL | 0x121); | 194 | EXCEPTION(EX_INTERNAL | 0x121); |
195 | #endif /* PARANOID */ | ||
195 | f = SW_C3 | SW_C2 | SW_C0; | 196 | f = SW_C3 | SW_C2 | SW_C0; |
196 | break; | 197 | break; |
197 | #endif /* PARANOID */ | ||
198 | } | 198 | } |
199 | setcc(f); | 199 | setcc(f); |
200 | if (c & COMP_Denormal) { | 200 | if (c & COMP_Denormal) { |
@@ -205,7 +205,7 @@ int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) | |||
205 | 205 | ||
206 | static int compare_st_st(int nr) | 206 | static int compare_st_st(int nr) |
207 | { | 207 | { |
208 | int f = 0, c; | 208 | int f, c; |
209 | FPU_REG *st_ptr; | 209 | FPU_REG *st_ptr; |
210 | 210 | ||
211 | if (!NOT_EMPTY(0) || !NOT_EMPTY(nr)) { | 211 | if (!NOT_EMPTY(0) || !NOT_EMPTY(nr)) { |
@@ -235,12 +235,12 @@ static int compare_st_st(int nr) | |||
235 | case COMP_No_Comp: | 235 | case COMP_No_Comp: |
236 | f = SW_C3 | SW_C2 | SW_C0; | 236 | f = SW_C3 | SW_C2 | SW_C0; |
237 | break; | 237 | break; |
238 | #ifdef PARANOID | ||
239 | default: | 238 | default: |
239 | #ifdef PARANOID | ||
240 | EXCEPTION(EX_INTERNAL | 0x122); | 240 | EXCEPTION(EX_INTERNAL | 0x122); |
241 | #endif /* PARANOID */ | ||
241 | f = SW_C3 | SW_C2 | SW_C0; | 242 | f = SW_C3 | SW_C2 | SW_C0; |
242 | break; | 243 | break; |
243 | #endif /* PARANOID */ | ||
244 | } | 244 | } |
245 | setcc(f); | 245 | setcc(f); |
246 | if (c & COMP_Denormal) { | 246 | if (c & COMP_Denormal) { |
@@ -283,12 +283,12 @@ static int compare_i_st_st(int nr) | |||
283 | case COMP_No_Comp: | 283 | case COMP_No_Comp: |
284 | f = X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF; | 284 | f = X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF; |
285 | break; | 285 | break; |
286 | #ifdef PARANOID | ||
287 | default: | 286 | default: |
287 | #ifdef PARANOID | ||
288 | EXCEPTION(EX_INTERNAL | 0x122); | 288 | EXCEPTION(EX_INTERNAL | 0x122); |
289 | #endif /* PARANOID */ | ||
289 | f = 0; | 290 | f = 0; |
290 | break; | 291 | break; |
291 | #endif /* PARANOID */ | ||
292 | } | 292 | } |
293 | FPU_EFLAGS = (FPU_EFLAGS & ~(X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF)) | f; | 293 | FPU_EFLAGS = (FPU_EFLAGS & ~(X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF)) | f; |
294 | if (c & COMP_Denormal) { | 294 | if (c & COMP_Denormal) { |