[BACK]Return to kdump.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / kdump

Diff for /src/usr.bin/kdump/kdump.c between version 1.102 and 1.103

version 1.102, 2015/07/19 02:52:35 version 1.103, 2015/07/19 04:45:25
Line 146 
Line 146 
 static void ktrpsig(struct ktr_psig *);  static void ktrpsig(struct ktr_psig *);
 static void ktrsyscall(struct ktr_syscall *, size_t);  static void ktrsyscall(struct ktr_syscall *, size_t);
 static const char *kresolvsysctl(int, const int *);  static const char *kresolvsysctl(int, const int *);
 static void ktrsysret(struct ktr_sysret *);  static void ktrsysret(struct ktr_sysret *, size_t);
 static void ktruser(struct ktr_user *, size_t);  static void ktruser(struct ktr_user *, size_t);
 static void setemul(const char *);  static void setemul(const char *);
 static void usage(void);  static void usage(void);
Line 281 
Line 281 
                         ktrsyscall((struct ktr_syscall *)m, ktrlen);                          ktrsyscall((struct ktr_syscall *)m, ktrlen);
                         break;                          break;
                 case KTR_SYSRET:                  case KTR_SYSRET:
                         ktrsysret((struct ktr_sysret *)m);                          ktrsysret((struct ktr_sysret *)m, ktrlen);
                         break;                          break;
                 case KTR_NAMEI:                  case KTR_NAMEI:
                         ktrnamei(m, ktrlen);                          ktrnamei(m, ktrlen);
Line 1105 
Line 1105 
 }  }
   
 static void  static void
 ktrsysret(struct ktr_sysret *ktr)  ktrsysret(struct ktr_sysret *ktr, size_t ktrlen)
 {  {
         register_t ret = ktr->ktr_retval;          register_t ret = 0;
           long long retll;
         int error = ktr->ktr_error;          int error = ktr->ktr_error;
         int code = ktr->ktr_code;          int code = ktr->ktr_code;
   
           if (ktrlen < sizeof(*ktr))
                   errx(1, "sysret length %zu < ktr header length %zu",
                       ktrlen, sizeof(*ktr));
           ktrlen -= sizeof(*ktr);
           if (error == 0) {
                   if (ktrlen == sizeof(ret)) {
                           memcpy(&ret, ktr+1, sizeof(ret));
                           retll = ret;
                   } else if (ktrlen == sizeof(retll))
                           memcpy(&retll, ktr+1, sizeof(retll));
                   else
                           errx(1, "sysret bogus length %zu", ktrlen);
           }
   
         if (code >= current->nsysnames || code < 0)          if (code >= current->nsysnames || code < 0)
                 (void)printf("[%d] ", code);                  (void)printf("[%d] ", code);
         else {          else {
                 (void)printf("%s ", current->sysnames[code]);                  (void)printf("%s ", current->sysnames[code]);
                 if (ret > 0 && (strcmp(current->sysnames[code], "fork") == 0 ||                  if (error == 0 && ret > 0 &&
                       (strcmp(current->sysnames[code], "fork") == 0 ||
                     strcmp(current->sysnames[code], "vfork") == 0 ||                      strcmp(current->sysnames[code], "vfork") == 0 ||
                     strcmp(current->sysnames[code], "__tfork") == 0 ||                      strcmp(current->sysnames[code], "__tfork") == 0 ||
                     strcmp(current->sysnames[code], "clone") == 0))                      strcmp(current->sysnames[code], "clone") == 0))
Line 1125 
Line 1141 
         if (error == 0) {          if (error == 0) {
                 if (fancy) {                  if (fancy) {
                         switch (current == &emulations[0] ? code : -1) {                          switch (current == &emulations[0] ? code : -1) {
                           case SYS_lseek:
                                   (void)printf("%lld", retll);
                                   if (retll < 0 || retll > 9)
                                           (void)printf("/%#llx", retll);
                                   break;
                         case SYS_sigprocmask:                          case SYS_sigprocmask:
                         case SYS_sigpending:                          case SYS_sigpending:
                                 sigset(ret);                                  sigset(ret);
Line 1148 
Line 1169 
                         }                          }
                 } else {                  } else {
                         if (decimal)                          if (decimal)
                                 (void)printf("%ld", (long)ret);                                  (void)printf("%lld", retll);
                         else                          else
                                 (void)printf("%#lx", (long)ret);                                  (void)printf("%#llx", retll);
                 }                  }
         } else if (error == ERESTART)          } else if (error == ERESTART)
                 (void)printf("RESTART");                  (void)printf("RESTART");

Legend:
Removed from v.1.102  
changed lines
  Added in v.1.103