Skip to main content

Raymii.org Raymii.org Logo

Quis custodiet ipsos custodes?
Home | About | All pages | Cluster Status | RSS Feed

The Adventure of the Missing Syscall: Error 38

Published: 24-10-2024 21:33 | Author: Dr. John Watson | Text only version of this article



Sherlock Holmes tackles a modern computing dilemma involving a missing system call. In this case, a frustrated developer attempts to port an embedded device running Yocto to a newer version, only to be met with Error 38 due to a missing syscall. Holmes and Watson delve into the intricacies of kernel versions, glibc, and system calls to uncover the truth behind the missing syscall_397 and provide a logical solution.

Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:

I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!

Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.

You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!

Disclaimer: This story was written by AI, inspired by a real-world technical issue encountered in the process of upgrading an embedded system.

I recently listened to the Sherlock Holmes novels on a populair audiobook platform, I thought this would be entertaining. I did actually encounter this issue while upgrading an older Yocto system. Resolved it by upgrading more parts of yocto and the application.

Please send me a message on how you feel about this content. It's an experiment, if you dislike it, or like it, just send me an email. Most articles I write result in at least 20 messages so don't let me down on this one.

sherlock

The Adventure of the Missing Syscall: Error 38

It was a foggy evening in London when I, Dr. John Watson, found myself once again in the company of my esteemed friend, Mr. Sherlock Holmes. The fire crackled in the hearth of our Baker Street lodgings, casting flickering shadows on the walls. Holmes was deep in thought, his sharp eyes fixed on a peculiar set of logs displayed on his laptop screen.

"Watson," he began, without looking up, "we have a most intriguing case on our hands. It appears that a system call, syscall_397, has gone missing, leading to a rather perplexing error: Error 38."

I leaned over to examine the output of strace that Holmes had been scrutinizing. The sequence of events was clear:

openat(AT_FDCWD, "/lib/libm.so.6", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 512) = 512
syscall_397(0x3, 0xb6f1ca0c, 0x1800, 0x7ff, 0xbece2e08, 0xbece3008) = -1 (errno 38)
close(3) = 0
writev(2, [{"./busybox.nosuid", 16}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libm.so.6", 9}, {": ", 2}, {"cannot stat shared object", 25}, {": ", 2}, {"Error 38", 8}, {"\n", 1}], 10) = 103

Holmes tapped the screen. "Notice, Watson, the syscall_397 returns -1 with errno 38. This indicates that the function is not implemented."

He continued, "But Watson, there's more to this tale. The case arose because a software developer was attempting to port an embedded device running Yocto to a newer version. He endeavored to run the device's current kernel, version 3.17, with a new root filesystem, built using glibc 2.39 on Yocto 5. The error 38 emerged when the system was booted with the old kernel and new rootfs, and when executing a binary compiled by Yocto on the current machine's rootfs."

Despite Holmes' logical deductions, the developer's frustration had boiled over. The once marvelously engineered device had become a stubborn relic. On a stormy night, with rain battering the windows, the developer's patience snapped. Seizing the device, he stormed out into the tempest in a fit of rage.

Holmes and I followed, our coats flapping violently in the wind. We watched from a distance as the developer, standing at the edge of a cliff, hurled the device into the churning sea below. The dramatic scene, the device disappearing into the dark waters, echoed the developer's despair.

Back at Baker Street, drenched but undeterred, Holmes resumed his analysis. He leaned back in his chair, eyes twinkling with satisfaction as he lit his pipe, the familiar scent of tobacco filling the room. "Watson, despite the theatrics, the solution is clear. The kernel and glibc must be updated. The storm may rage, but logic and reason will prevail."

I poured us both a cup of tea, the steam rising gently as I handed Holmes his cup. "Holmes, this is all quite fascinating, but I must confess, I am still somewhat bewildered. What exactly does all this mean?"

Holmes took a thoughtful puff from his pipe, the smoke curling lazily towards the ceiling. "Ah, Watson, the intricacies of modern computing can indeed be perplexing. Allow me to elucidate."

As I pondered the situation, Holmes delved deeper into the system's architecture. He pulled up the syscall tables and kernel headers, meticulously searching for any discrepancies.

"Look here, Watson," he said, pointing to the syscall table. "The syscall_397 is indeed listed as statx. However, in our current kernel version, this entry is absent."

He navigated to the kernel headers, examining the definitions and structures. "The headers confirm our suspicion. The necessary definitions for statx are missing in this version."

Holmes continued, "The syscall table, found in arch/arm/tools/syscall.tbl, maps system call numbers to their corresponding functions. This table ensures that when a program makes a system call, the kernel knows which function to execute. In our case, the absence of syscall_397 means the kernel does not recognize the statx call."

Finally, Holmes turned to the errno.h file. "The error code 38, ENOSYS, is defined as 'Function not implemented.' This aligns perfectly with our findings."

With a final flourish, Holmes closed his laptop. "Watson, our investigation into the syscall tables, kernel headers, and errno.h has confirmed the root cause. The missing syscall_397 is due to outdated kernel and glibc versions. Updating them will restore the missing functionality."

As the fog lifted outside, I couldn't help but marvel at Holmes' unparalleled deductive skills. Once again, he had turned a seemingly insurmountable problem into a simple matter of logic and observation.

Tags: ai , chatgpt , fiction , glibc , kernel , linux , sherlockholmes , syscall , yocto