mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCHv3 1/3] fix matching errors for overwritten registers in x86 CFI generation script
@ 2015-10-13 11:28 Alex Dowad
  2015-10-13 11:28 ` [PATCH 2/3] x86 CFI generation script recognizes when %ax, %ah, %al, etc. are overwritten Alex Dowad
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Alex Dowad @ 2015-10-13 11:28 UTC (permalink / raw)
  To: musl

thanks to R. Felker for noticing 2 separate problems:

- binary ops like ADD, AND, etc. overwrite the 2nd operand, not the 1st.
  this confusion resulted from mixing up Intel and GNU asm syntax.

- the regexps used to identify clobbered registers would erroneously match
  index registers. in other words, the following asm:

    mov $0, (%eax,%ebx,4)

...would cause EBX to be considered as overwritten, which might prevent a
debugger from displaying a variable's value in a higher stack frame.
---

Here is the latest iteration. I have merged 2 previously separate commits, and
fixed up the matching of registers (for the purpose of identifying overwritten
registers).

As usual, thanks for the feedback. AD

 tools/add-cfi.i386.awk | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/tools/add-cfi.i386.awk b/tools/add-cfi.i386.awk
index 5dc8794..bd7932f 100644
--- a/tools/add-cfi.i386.awk
+++ b/tools/add-cfi.i386.awk
@@ -184,13 +184,13 @@ 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())
+/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_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") }
 
-- 
2.0.0.GIT



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-10-14 20:27 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-13 11:28 [PATCHv3 1/3] fix matching errors for overwritten registers in x86 CFI generation script Alex Dowad
2015-10-13 11:28 ` [PATCH 2/3] x86 CFI generation script recognizes when %ax, %ah, %al, etc. are overwritten Alex Dowad
2015-10-13 11:28 ` [PATCH 3/3] add CFI generation script for x86_64 Alex Dowad
2015-10-13 22:42 ` [PATCHv3 1/3] fix matching errors for overwritten registers in x86 CFI generation script Rich Felker
2015-10-14 10:21   ` Alex
2015-10-14 19:14     ` Rich Felker
2015-10-14 19:23       ` Alex
2015-10-14 19:27         ` Rich Felker
2015-10-14 19:44           ` Alex
2015-10-14 19:51             ` Rich Felker
2015-10-14 20:27               ` Alex

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).