3 ms·
Exploring GNU extensions in the Linux kernel
- zhouzhouyi 2y agoI am fantastic on Linux kernel and on Clang compiler. This article teaches me what GNU extension characteristic will be when Linux kernel is accepting more modern C11 standard. For example, Linux kernel use local labels, inline assembly and builtin functions heavily. This article inspires me to persist studying in Linux kernel and Clang compiler.
- jcalvinowens 2y agoClang supports the extensions, you can build the Linux kernel with clang today: make -s LLVM=1
- e63f67dd-065b 2y agoAs sibling mentioned, you can build the kernel with clang today. `make CC=clang`, and for whatever reason I've found that it produces code that's significantly more pleasant to step through under a debugger than gcc. If anybody has an explanation for this I'd love to hear it.
- MaskRay 2y agoInteresting. Traditionally, Clang's -O1 and higher optimizations have been considered less debuggable than GCC's. Sony developers have proposed changes to improve the debugging experience and some work has been done, e.g. https://discourse.llvm.org/t/rfc-redefine-og-o1-and-add-a-new-level-of-og/72850 https://discourse.llvm.org/t/rfc-redefine-og-o1-and-add-a-ne... * change representation to help make -g not change codegen : https://discourse.llvm.org/t/rfc-debuginfo-proposed-changes-to-the-textual-ir-representation-for-debug-values/73491 https://discourse.llvm.org/t/rfc-debuginfo-proposed-changes-...
- o11c 2y agoI don't kernel, but: Empty structures are useful, but behave weirdly. Structures containing a zero-size `char` array are much more portable. Although `__builtin_choose_expr` isn't available in C++, it's trivial to implement using templates. Actually a lot of these are a reminder that GNU C exists for people who refuse to use C++ for political reasons. `__builtin_types_compatible_p` is mostly not needed now that C11 `_Generic` exists.
- omoikane 2y agoI wonder what it would take to have the Elvis operator to be standardized in C and C++, since GCC and Clang have supported this extension for years. https://en.wikipedia.org/wiki/Elvis_operator https://en.wikipedia.org/wiki/Elvis_operator
- pjmlp 2y agoWrite a language improvement paper and fight for it at WG14 meetings, so that when voting comes to be, it is voted in.
- AstroJetson 2y agoI've done a few bytecode interpreters but have mostly used the case of Operator type of driving loop. I was impressed by this static void tbl[] = {&&do_ret, &&do_inc, &&do_dec}; #define NEXT goto tbl[*pc++] NEXT; for(;;) { do_ret: return val; do_inc: val++; NEXT; do_dec: val--; NEXT; }