From: Alex Dowad Date: Tue, 13 Oct 2015 11:28:50 +0000 (+0200) Subject: fix misinterpretation of operand order in i386 CFI generation X-Git-Tag: v1.1.12~15 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=fef9c801feeccbb40623f0c2a6e4f2b19f58a34b;p=oweals%2Fmusl.git fix misinterpretation of operand order in i386 CFI generation binary ops like ADD, AND, etc. modify the 2nd operand, not 1st. --- diff --git a/tools/add-cfi.i386.awk b/tools/add-cfi.i386.awk index 5dc87941..231d67ed 100644 --- a/tools/add-cfi.i386.awk +++ b/tools/add-cfi.i386.awk @@ -185,12 +185,12 @@ function trashed(register) { # this does NOT exhaustively check for all possible instructions which could # overwrite a register value inherited from the caller (just the common ones) /mov.*,%e(ax|bx|cx|dx|si|di|bp)/ { trashed(get_reg2()) } -/(add|addl|sub|subl|and|or|xor|lea|sal|sar|shl|shr) %e(ax|bx|cx|dx|si|di|bp),/ { - trashed(get_reg1()) +/(add|addl|sub|subl|and|or|xor|lea|sal|sar|shl|shr).*,%e(ax|bx|cx|dx|si|di|bp)$/ { + trashed(get_reg2()) } -/^i?mul [^,]*$/ { trashed("eax"); trashed("edx") } -/^i?mul %e(ax|bx|cx|dx|si|di|bp),/ { trashed(get_reg1()) } -/^i?div/ { trashed("eax"); trashed("edx") } +/^i?mul [^,]*$/ { trashed("eax"); trashed("edx") } +/^i?mul.*,%e(ax|bx|cx|dx|si|di|bp)$/ { trashed(get_reg2()) } +/^i?div/ { trashed("eax"); trashed("edx") } /(dec|inc|not|neg|pop) %e(ax|bx|cx|dx|si|di|bp)/ { trashed(get_reg()) } /cpuid/ { trashed("eax"); trashed("ebx"); trashed("ecx"); trashed("edx") }