FYI, the uname syscall comes from ld-linux/glibc, which uses it as a fallback for when "the kernel-supplied DSO [doesn't contain] a note indicating the kernel's version":
https://github.com/bminor/glibc/blob/master/sysdeps/unix/sysv/linux/dl-sysdep.c#L87. Might be worth fixing that instead of patching around syscall filters for every binary in existence. Here's a comparison between the syscalls in Arch ARM and Arch x86-64 when executing `echo`:
$this->bbcode_second_pass_code('', '
armv7l $ strace echo
execve("/usr/bin/echo", ["echo"], 0x7ecb9c40 /* 24 vars */) = 0
brk(NULL) = 0x2342000
uname({sysname="Linux", nodename="orion", ...}) = 0
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f2e000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=102611, ...}) = 0
mmap2(NULL, 102611, PROT_READ, MAP_PRIVATE, 3, 0) = 0x76ee5000
close(3) = 0
openat(AT_FDCWD, "/usr/lib/libc.so.6", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0l\255\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1628016, ...}) = 0
mmap2(NULL, 1373916, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76d95000
mprotect(0x76ecf000, 65536, PROT_NONE) = 0
mmap2(0x76edf000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13a000) = 0x76edf000
mmap2(0x76ee3000, 5852, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76ee3000
close(3) = 0
set_tls(0x76f2eca0) = 0
mprotect(0x76edf000, 8192, PROT_READ) = 0
mprotect(0x4ee000, 4096, PROT_READ) = 0
mprotect(0x76f30000, 4096, PROT_READ) = 0
munmap(0x76ee5000, 102611) = 0
brk(NULL) = 0x2342000
brk(0x2363000) = 0x2363000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=3035952, ...}) = 0
mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0x76b95000
mmap2(NULL, 2596864, PROT_READ, MAP_PRIVATE, 3, 0x6c000) = 0x7691b000
close(3) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x1), ...}) = 0
write(1, "\n", 1
) = 1
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
')
$this->bbcode_second_pass_code('', '
amd64 $ strace echo
execve("/usr/bin/echo", ["echo"], 0x7ffcd92f7bc0 /* 34 vars */) = 0
brk(NULL) = 0x55f97e864000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc2dbde080) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=425744, ...}) = 0
mmap(NULL, 425744, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe47658d000
close(3) = 0
openat(AT_FDCWD, "/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@q\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\346~\200\347\6\31qw\t\343\30\16U*\21\242"..., 68, 880) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2146832, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe47658b000
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\346~\200\347\6\31qw\t\343\30\16U*\21\242"..., 68, 880) = 68
mmap(NULL, 1860456, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe4763c4000
mprotect(0x7fe4763e9000, 1671168, PROT_NONE) = 0
mmap(0x7fe4763e9000, 1363968, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7fe4763e9000
mmap(0x7fe476536000, 303104, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x172000) = 0x7fe476536000
mmap(0x7fe476581000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bc000) = 0x7fe476581000
mmap(0x7fe476587000, 13160, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe476587000
close(3) = 0
arch_prctl(ARCH_SET_FS, 0x7fe47658c580) = 0
mprotect(0x7fe476581000, 12288, PROT_READ) = 0
mprotect(0x55f97cead000, 4096, PROT_READ) = 0
mprotect(0x7fe476620000, 4096, PROT_READ) = 0
munmap(0x7fe47658d000, 425744) = 0
brk(NULL) = 0x55f97e864000
brk(0x55f97e885000) = 0x55f97e885000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3040304, ...}) = 0
mmap(NULL, 3040304, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe4760dd000
close(3) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x2), ...}) = 0
write(1, "\n", 1
) = 1
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
')
As can be seen, the loader uses arch_prctl on x86, but since that's not available on ARM, it has to use uname. Setting LD_ASSUME_KERNEL= as described in ld.so(8) does not seem to change anything.