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
Direct Download
Read full article as PDF:
Price $2.95
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Find SysAdmin Jobs
News
-
SparkyLinux 6.6 Now Available for Installation
The Debian-based SparkyLinux has a new point release that retools the live USB desktop creator and other changes that give it shiny new-ness.
-
SparkyLinux 6.6 Now Available for Installation
The Debian-based SparkyLinux has a new point release that retools the live USB desktop creator and other changes that give it shiny new-ness.
-
Escuelas Linux 8.0 Now Available
Just in time for its 25th anniversary, the developers of Escuelas Linux have released the latest version.
-
LibreOffice 7.5 Loaded with New Features and Improvements
The favorite office suite of the Linux community has a new release that includes some visual refreshing and new features across all modules.
-
The Next Major Release of Elementary OS Has Arrived
It's been over a year since the developers of elementary OS released version 6.1 (Jólnir) but they've finally made their latest release (Horus) available with a renewed focus on the user.
-
KDE Plasma 5.27 Beta Is Ready for Testing
The latest beta iteration of the KDE Plasma desktop is now available and includes some important additions and fixes.
-
Netrunner OS 23 Is Now Available
The latest version of this Linux distribution is now based on Debian Bullseye and is ready for installation and finally hits the KDE 5.20 branch of the desktop.
-
New Linux Distribution Built for Gamers
With a Gnome desktop that offers different layouts and a custom kernel, PikaOS is a great option for gamers of all types.
-
System76 Beefs Up Popular Pangolin Laptop
The darling of open-source-powered laptops and desktops will soon drop a new AMD Ryzen 7-powered version of their popular Pangolin laptop.
-
Nobara Project Is a Modified Version of Fedora with User-Friendly Fixes
If you're looking for a version of Fedora that includes third-party and proprietary packages, look no further than the Nobara Project.