Skip to content

Commit 03c47a7

Browse files
committed
When reporting extra errno information use orig_arg1().
On AArch64 syscalls clobber arg1 instead of the syscall number like on x86 so not doing this will result in incorrect output.
1 parent 7299880 commit 03c47a7

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/record_syscall.cc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6539,7 +6539,7 @@ static string extra_expected_errno_info(RecordTask* t,
65396539
ss << "; unknown fcntl(" << HEX((int)t->regs().arg2_signed()) << ")";
65406540
break;
65416541
case Arch::prctl: {
6542-
int request = (int)t->regs().arg1_signed();
6542+
int request = (int)t->regs().orig_arg1_signed();
65436543
if (request == PR_SET_MM) {
65446544
ss << "; unknown prctl(PR_SET_MM, " << HEX((int)t->regs().arg2_signed()) << ")";
65456545
} else {
@@ -6548,44 +6548,44 @@ static string extra_expected_errno_info(RecordTask* t,
65486548
break;
65496549
}
65506550
case Arch::arch_prctl:
6551-
ss << "; unknown arch_prctl(" << HEX((int)t->regs().arg1_signed())
6551+
ss << "; unknown arch_prctl(" << HEX((int)t->regs().orig_arg1_signed())
65526552
<< ")";
65536553
break;
65546554
case Arch::keyctl:
6555-
ss << "; unknown keyctl(" << HEX((int)t->regs().arg1_signed()) << ")";
6555+
ss << "; unknown keyctl(" << HEX((int)t->regs().orig_arg1_signed()) << ")";
65566556
break;
65576557
case Arch::socketcall:
6558-
ss << "; unknown socketcall(" << HEX((int)t->regs().arg1_signed())
6558+
ss << "; unknown socketcall(" << HEX((int)t->regs().orig_arg1_signed())
65596559
<< ")";
65606560
break;
65616561
case Arch::ipc:
6562-
ss << "; unknown ipc(" << HEX((int)t->regs().arg1_signed()) << ")";
6562+
ss << "; unknown ipc(" << HEX((int)t->regs().orig_arg1_signed()) << ")";
65636563
break;
65646564
case Arch::futex_time64:
65656565
case Arch::futex:
65666566
ss << "; unknown futex("
65676567
<< HEX((int)t->regs().arg2_signed() & FUTEX_CMD_MASK) << ")";
65686568
break;
65696569
case Arch::waitid:
6570-
ss << "; unknown waitid(" << HEX((idtype_t)t->regs().arg1()) << ")";
6570+
ss << "; unknown waitid(" << HEX((idtype_t)t->regs().orig_arg1()) << ")";
65716571
break;
65726572
case Arch::seccomp:
6573-
ss << "; unknown seccomp(" << HEX((unsigned int)t->regs().arg1())
6573+
ss << "; unknown seccomp(" << HEX((unsigned int)t->regs().orig_arg1())
65746574
<< ")";
65756575
break;
65766576
case Arch::madvise:
65776577
ss << "; unknown madvise(" << (int)t->regs().arg3() << ")";
65786578
break;
65796579
case Arch::bpf:
6580-
ss << "; unknown bpf(cmd=" << (int)t->regs().arg1() << ")";
6580+
ss << "; unknown bpf(cmd=" << (int)t->regs().orig_arg1_signed() << ")";
65816581
break;
65826582
}
65836583
break;
65846584
case EIO:
65856585
switch (t->regs().original_syscallno()) {
65866586
case Arch::ptrace:
6587-
ss << "; unsupported ptrace(" << HEX((int)t->regs().arg1()) << " ["
6588-
<< ptrace_req_name<Arch>((int)t->regs().arg1_signed()) << "])";
6587+
ss << "; unsupported ptrace(" << HEX((int)t->regs().orig_arg1_signed()) << " ["
6588+
<< ptrace_req_name<Arch>((int)t->regs().orig_arg1_signed()) << "])";
65896589
break;
65906590
}
65916591
break;

0 commit comments

Comments
 (0)