about summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/register-dump.h46
-rw-r--r--sysdeps/unix/sysv/linux/ifaddrs.c10
2 files changed, 26 insertions, 30 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/register-dump.h b/sysdeps/unix/sysv/linux/alpha/register-dump.h
index d55899a2c1..77f962952a 100644
--- a/sysdeps/unix/sysv/linux/alpha/register-dump.h
+++ b/sysdeps/unix/sysv/linux/alpha/register-dump.h
@@ -18,7 +18,7 @@
    02111-1307 USA.  */
 
 #include <stddef.h>
-#include <sys/uio.h>
+#include <string.h>
 
 /* We will print the register dump in this format:
 
@@ -51,7 +51,7 @@
 
 #define NREGS (32+32+3)
 
-static const char regnames[NREGS][8] = 
+static const char __attribute__((aligned(8))) regnames[NREGS][8] = 
 {
   "    V0: ", "    T0: ", "    T1: ",
   "    T2: ", "    T3: ", "    T4: ",
@@ -113,49 +113,45 @@ static const int offsets[NREGS] =
 
 #undef O
 
-static const char linefeed[2] = "\n\n";
-
 static void
 register_dump (int fd, struct sigcontext *ctx)
 {
-  char regs[NREGS][16];
-  struct iovec iov[2*NREGS+24];
-  size_t iov_i = 0, i, j;
+  char buf[NREGS*(8+16) + 25 + 80];
+  char *p = buf;
+  size_t i;
   
-#define ADD_MEM(str, len)			\
-  (iov[iov_i].iov_base = (void *)(str),		\
-   iov[iov_i].iov_len = len,			\
-   ++iov_i)
-
-#define ADD_STRING(str) ADD_MEM(str, strlen(str))
-
-  ADD_STRING ("Register dump:\n\n");
+  p = stpcpy (p, "Register dump:\n\n");
 
   for (i = 0; i < NREGS; ++i)
     {
       int this_offset, this_lf;
       unsigned long val;
+      signed long j;
       
       this_offset = offsets[i];
       this_lf = this_offset & 7;
-      this_offset &= -8;
 
-      val = *(unsigned long *)((char *)ctx + this_offset);
+      val = *(unsigned long *)(((size_t)ctx + this_offset) & -8);
 
-      for (j = 0; j < 16; ++j)
+      memcpy (p, regnames[i], 8);
+      p += 8;
+
+      for (j = 60; j >= 0; j -= 4)
 	{
-	  unsigned long x = (val >> (64 - (j + 1) * 4)) & 15;
+	  unsigned long x = (val >> j) & 15;
 	  x += x < 10 ? '0' : 'a' - 10;
-	  regs[i][j] = x;
+	  *p++ = x;
 	}
 
-      ADD_MEM (regnames[i], 8);
-      ADD_MEM (regs[i], 16);
-      if (this_lf)
-	ADD_MEM (linefeed, this_lf);
+      if (this_lf > 0)
+	{
+	  if (this_lf > 1)
+	    *p++ = '\n';
+	  *p++ = '\n';
+	}
     }
 
-  writev (fd, iov, iov_i);
+  write (fd, buf, p - buf);
 }
 
 #define REGISTER_DUMP register_dump (fd, ctx)
diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c
index f4dce4cd61..8a052e212d 100644
--- a/sysdeps/unix/sysv/linux/ifaddrs.c
+++ b/sysdeps/unix/sysv/linux/ifaddrs.c
@@ -566,7 +566,7 @@ getifaddrs (struct ifaddrs **ifap)
 				if (IN6_IS_ADDR_LINKLOCAL (rta_data)
 				    || IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
 				  ((struct sockaddr_in6 *) sa)->sin6_scope_id
-				    = ifam->ifa_scope;
+				    = ifam->ifa_index;
 			      }
 			    break;
 
@@ -610,10 +610,10 @@ getifaddrs (struct ifaddrs **ifap)
 			    {
 			      memcpy (&ifas[ifa_index].addr.s6.sin6_addr,
 				      rta_data, rta_payload);
-			      if (IN6_IS_ADDR_LINKLOCAL (rta_data) ||
-				  IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
+			      if (IN6_IS_ADDR_LINKLOCAL (rta_data)
+				  || IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
 				ifas[ifa_index].addr.s6.sin6_scope_id =
-				  ifam->ifa_scope;
+				  ifam->ifa_index;
 			    }
 			  break;
 
@@ -654,7 +654,7 @@ getifaddrs (struct ifaddrs **ifap)
 			      if (IN6_IS_ADDR_LINKLOCAL (rta_data)
 				  || IN6_IS_ADDR_MC_LINKLOCAL (rta_data))
 				ifas[ifa_index].broadaddr.s6.sin6_scope_id
-				  = ifam->ifa_scope;
+				  = ifam->ifa_index;
 			    }
 			  break;