On Wed, Feb 26, 2014 at 02:01:51PM -0800, enh wrote:
> i notice that the decoding of sigaltstack's struct stack_t is wrong on
> arm64 for a 32-bit process. looking at print_stack_t in strace, i
> don't understand how this works for x86/x86_64 --- the first field is
> a void*. so i'm a bit confused about how i should go about fixing this
> for arm/arm64. anyone have a clue to spare?

This is a demonstration why current multiarch approach is unreliable: every
structure containing members whose size differs between personalities has
to be open-coded.  In case of stack_t, the fix is likely to be this:

--- a/signal.c
+++ b/signal.c
@@ -1084,10 +1084,33 @@ static void
 print_stack_t(struct tcb *tcp, unsigned long addr)
 {
        stack_t ss;
+       int r;
 
        if (!addr) {
                tprints("NULL");
-       } else if (umove(tcp, addr, &ss) < 0) {
+               return;
+       }
+
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+       if (current_wordsize != sizeof(ss.ss_sp) && current_wordsize == 4) {
+               struct {
+                       uint32_t ss_sp;
+                       int32_t ss_flags;
+                       uint32_t ss_size;
+               } ss32;
+               r = umove(tcp, addr, &ss32);
+               if (r >= 0) {
+                       memset(&ss, 0, sizeof(ss));
+                       ss.ss_sp = (void*)(unsigned long) ss32.ss_sp;
+                       ss.ss_flags = ss32.ss_flags;
+                       ss.ss_size = (unsigned long) ss32.ss_size;
+               }
+       } else
+#endif
+       {
+               r = umove(tcp, addr, &ss);
+       }
+       if (r < 0) {
                tprintf("%#lx", addr);
        } else {
                tprintf("{ss_sp=%#lx, ss_flags=", (unsigned long) ss.ss_sp);


-- 
ldv

Attachment: pgp8Zahv2hlMs.pgp
Description: PGP signature

------------------------------------------------------------------------------
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk
_______________________________________________
Strace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to