Zack's Kernel News
Un-inlining for Debugging
Changbin Du from Intel posted a patch for kernel developers only – it would give developers the option of preventing GCC from auto-inlining code. In the C language, inlining a function tells the compiler not to actually call the function when the user invokes it. Instead, the compiler copies the function's code directly to the place that called it. The drawback is that the compiled binary is bulked up with copies of that particular function, but the benefit is that the code runs faster because it doesn't have to jump all the way over to the function for each invocation anymore.
But GCC can also use its own judgment to inline functions that the developer never specified. It's a great feature, which allows GCC to produce faster output in general. However, as a byproduct, it makes certain Linux kernel debugging tools less effective, because something like the kernel function tracer will only trace functions that have not been inlined.
Changbin's patch prevented GCC from using its own judgment to inline functions. This meant that a whole lot more functions would be analyzed by the kernel function tracer.
The result was striking. Immediately, the function tracer started finding bugs all over the kernel, in areas it had never been able to test before.
Steven Rostedt was highly impressed by the patch's ability to uncover bugs throughout the entire kernel. Johan Hovold was also very impressed but did notice one warning produced by Changbin's patch that was a false positive. He asked if there was some way to trick the test code into just letting this one case slip through, and Steven suggested modifying the kernel code slightly to stop the warning.
Viresh Kumar took a look at the false positive and remarked, "I am not sure what would [be] the best way to get around this incorrect warning." The specific issue had to do with the way the code allocated memory in one particular spot, but didn't clear out the RAM buffer before making use of it. It also wasn't clear why the false warning showed up for only two of the four occurrences in the affected file.
Johan suggested that fixing the false positive might not be the best idea and that it was "probably best to leave things as they are, and let the GCC folks find a way to handle such false positives." Any other fix in the kernel sources, he said, would be "contrived." Viresh agreed that they might as well just leave the false positive as it was, since it did no harm.
Meanwhile Steven did actually come up with a patch to alleviate the false positive, but Johan felt it was overly complicated and remarked, "should we really be working around GCC this way? If the implementation of this new warning isn't smart enough yet, should it not just be disabled instead?"
The conversation ended there. The interesting part of all of that for me is the attention given to a benign and minor circumstance, just because it didn't fit properly. Changbin's code worked and uncovered bugs all over the place, which presumably all got patched. But a couple of false positives – not kernel bugs at all – inspired a discussion of the best way to allocate memory, possible ways to trick GCC into doing the expected thing, and ultimately the decision to allow GCC to continue to produce the false positive so that the GCC people might find and fix the compiler's own misbehavior.
« Previous 1 2
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you've found an article to be beneficial.
News
-
The GNU Project Celebrates Its 40th Birthday
September 27 marks the 40th anniversary of the GNU Project, and it was celebrated with a hacker meeting in Biel/Bienne, Switzerland.
-
Linux Kernel Reducing Long-Term Support
LTS support for the Linux kernel is about to undergo some serious changes that will have a considerable impact on the future.
-
Fedora 39 Beta Now Available for Testing
For fans and users of Fedora Linux, the first beta of release 39 is now available, which is a minor upgrade but does include GNOME 45.
-
Fedora Linux 40 to Drop X11 for KDE Plasma
When Fedora 40 arrives in 2024, there will be a few big changes coming, especially for the KDE Plasma option.
-
Real-Time Ubuntu Available in AWS Marketplace
Anyone looking for a Linux distribution for real-time processing could do a whole lot worse than Real-Time Ubuntu.
-
KSMBD Finally Reaches a Stable State
For those who've been looking forward to the first release of KSMBD, after two years it's no longer considered experimental.
-
Nitrux 3.0.0 Has Been Released
The latest version of Nitrux brings plenty of innovation and fresh apps to the table.
-
Linux From Scratch 12.0 Now Available
If you're looking to roll your own Linux distribution, the latest version of Linux From Scratch is now available with plenty of updates.
-
Linux Kernel 6.5 Has Been Released
The newest Linux kernel, version 6.5, now includes initial support for two very exciting features.
-
UbuntuDDE 23.04 Now Available
A new version of the UbuntuDDE remix has finally arrived with all the updates from the Deepin desktop and everything that comes with the Ubuntu 23.04 base.