Created attachment 12541 [details] add default "/usr/bin:/bin" after $PATH My use case is like this, I install gcc-4.8.5 and devtoolset-9-gcc, while I set the PATH by "source /opt/rh/devtoolset-9/enable" to use gcc-9, but when I use "stap test.stap", I always get compile errors for "gcc: error: unrecognized command line option ‘-fpatchable-function-entry=2’", the option ‘-fpatchable-function-entry=2’ is not supported by gcc-4.8.5 but supported by gcc-9. The stap process building always use gcc-4.8.5 from /usr/bin not from the first path of PATH, such as /opt/rh/devtoolset-9/root/usr/bin/gcc. As I think the default /usr/bin:/bin should be added after $PATH. I add an attachment to fix it, please have a review.
The problem is that for systemtap to build kernel modules compatible with the system kernel, it must use the same compiler. Jumping between major versions can create incompatible modules, whether enforced by symbol versioning type metadata, or undetected inconsistencies in kernel struct declarations. Any idea where those -fpatchable-function-entry=2 cflags are coming from? Maybe we can nuke those from within stap more properly.
(In reply to Frank Ch. Eigler from comment #1) > The problem is that for systemtap to build kernel modules compatible with > the system kernel, it must use the same compiler. Jumping between major > versions can create incompatible modules, whether enforced by symbol > versioning type metadata, or undetected inconsistencies in kernel struct > declarations. > > Any idea where those -fpatchable-function-entry=2 cflags are coming from? > Maybe we can nuke those from within stap more properly. yes, My kernel is build with devtoolset-9-gcc, and systemtap is also build with devtoolset-9, when I use systemtap I want to use gcc which is /opt/rh/devtoolset-9/root/usr/bin/gcc not /usr/bin/gcc. the "-fpatchable-function-entry=2" is from arch/arm64/Makefile: ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y) KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY CC_FLAGS_FTRACE := -fpatchable-function-entry=2 endif
> yes, My kernel is build with devtoolset-9-gcc Ahh, interesting. Try: # scl enable .... bash # stap -B CC=/opt/rh/...../bin/gcc <options> The -B option passes through kbuild make options.
(In reply to Frank Ch. Eigler from comment #3) > > yes, My kernel is build with devtoolset-9-gcc > > Ahh, interesting. > > Try: > # scl enable .... bash > # stap -B CC=/opt/rh/...../bin/gcc <options> > > The -B option passes through kbuild make options. ok,I try it, and it works, thanks.
it is not a problem, can use -B option to set kbuild make options