Hello, I am currently trying to change the QEMU build configuration to add the -finstrument-functions flag so that I can build QEMU with tracing functions I wrote for __cyg_profile_func_enter and __cyg_profile_func_exit. The compilation process for finstrument-functions requires first compiling the source files with the -finstrument-functions flag into an object file and second compiling that object file with the tracing definitions (compiling at the same time leads to segfaults).
I was wondering how I could change the QEMU build configuration's Make file to tell it to link all built files with an object file that I can specify? So far, I've tried to change the configure bash script so that it manually compiles and links, but it's led to some errors in the config.log about how some files don't have the libraries they need to link at this point in the build process, and also errors during the make process: error: call to ‘qemu_build_not_reached_always’ declared with attribute error: code path is reachable 261 | #define qemu_build_not_reached() qemu_build_not_reached_always() | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/trevor/qemu/include/qemu/lockable.h:41:9: note: in expansion of macro ‘qemu_build_not_reached’ 41 | qemu_build_not_reached(); In case it's any help, I've attached the config.log from the configure bash script below Thank you for your time and please let me know if there's any other information I can provide! Best, Trevor Chan
# QEMU configure log Tue 07 Nov 2023 07:20:57 PM EST # Configured with: '/home/trevor/qemu/configure' # funcs: do_compiler do_cc compile_object check_define main lines: 186 230 438 447 0 cc -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o funcs: do_compiler do_cc compile_object check_define main lines: 186 230 438 489 0 cc -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c config-temp/qemu-conf.c:2:2: error: #error __i386__ not defined 2 | #error __i386__ not defined | ^~~~~ funcs: do_compiler do_cc compile_object check_define main lines: 186 230 438 491 0 cc -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o funcs: do_compiler do_cc compile_object check_define main lines: 186 230 438 492 0 cc -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c config-temp/qemu-conf.c:2:2: error: #error __ILP32__ not defined 2 | #error __ILP32__ not defined | ^~~~~ funcs: do_compiler do_cc compile_prog main lines: 186 236 1197 0 cc -m64 -mcx16 -Werror -fPIE -DPIE -pie -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m64 -mcx16 -Werror -fPIE -DPIE -pie -o config-temp/qemu-conf.exe /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main' collect2: error: ld returned 1 exit status funcs: do_compiler do_cc compile_prog main lines: 186 236 1248 0 cc -m64 -mcx16 -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c config-temp/qemu-conf.c:2:3: error: #error LITTLE 2 | # error LITTLE | ^~~~~ funcs: do_compiler do_cc compile_object main lines: 186 230 1290 0 cc -m64 -mcx16 -Werror -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m64 -mcx16 -Werror -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o funcs: do_compiler probe_target_compiler main lines: 1643 1756 0 cc -m32 -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m32 -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: cannot find Scrt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc /usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: cannot find libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1650 1919 0 cc -m32 -static -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c /usr/bin/ld: cannot find crt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc_eh.a when searching for -lgcc_eh /usr/bin/ld: cannot find -lgcc_eh /usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc /usr/bin/ld: cannot find -lc collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1655 1919 0 cc -m32 -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c /usr/bin/ld: cannot find Scrt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc /usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: cannot find libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1650 1919 0 cc -m64 -static -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m64 -static -o config-temp/qemu-conf.exe /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: /home/trevor/qemu/temp.o: in function `__cyg_profile_func_exit': (.text+0x4a810): multiple definition of `__cyg_profile_func_exit'; /home/trevor/qemu/trace.o:trace.c:(.text+0xa1): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `data_start': (.data+0x8): multiple definition of `__dso_handle'; /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o:(.data+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_dl_relocate_static_pie': (.text+0xa20): multiple definition of `_dl_relocate_static_pie'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.text+0x30): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_init': (.init+0x0): multiple definition of `_init'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_start': (.text+0x9f0): multiple definition of `_start'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `__cyg_profile_func_exit': (.text+0x4a810): multiple definition of `__cyg_profile_func_enter'; /home/trevor/qemu/trace.o:trace.c:(.text+0x4b): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_fini': (.fini+0x0): multiple definition of `_fini'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o:(.rodata+0x0): multiple definition of `_IO_stdin_used'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `data_start': (.data+0x0): multiple definition of `__data_start'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'; /home/trevor/qemu/temp.o:(__libc_subfreeres+0x0): first defined here /usr/bin/ld: error in /home/trevor/qemu/temp.o(.eh_frame); no .eh_frame_hdr table will be created collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1655 1919 0 cc -m64 -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m64 -o config-temp/qemu-conf.exe /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main' collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1650 1919 0 x86_64-linux-gnu-gcc -m64 -static -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c x86_64-linux-gnu-gcc -m64 -static -o config-temp/qemu-conf.exe /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: /home/trevor/qemu/temp.o: in function `__cyg_profile_func_exit': (.text+0x4a810): multiple definition of `__cyg_profile_func_exit'; /home/trevor/qemu/trace.o:trace.c:(.text+0xa1): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `data_start': (.data+0x8): multiple definition of `__dso_handle'; /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o:(.data+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_dl_relocate_static_pie': (.text+0xa20): multiple definition of `_dl_relocate_static_pie'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.text+0x30): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_init': (.init+0x0): multiple definition of `_init'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_start': (.text+0x9f0): multiple definition of `_start'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `__cyg_profile_func_exit': (.text+0x4a810): multiple definition of `__cyg_profile_func_enter'; /home/trevor/qemu/trace.o:trace.c:(.text+0x4b): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `_fini': (.fini+0x0): multiple definition of `_fini'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o:(.rodata+0x0): multiple definition of `_IO_stdin_used'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here /usr/bin/ld: /home/trevor/qemu/temp.o: in function `data_start': (.data+0x0): multiple definition of `__data_start'; /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'; /home/trevor/qemu/temp.o:(__libc_subfreeres+0x0): first defined here /usr/bin/ld: error in /home/trevor/qemu/temp.o(.eh_frame); no .eh_frame_hdr table will be created collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1655 1919 0 x86_64-linux-gnu-gcc -m64 -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c x86_64-linux-gnu-gcc -m64 -o config-temp/qemu-conf.exe /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main' collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1643 1919 0 cc -m32 -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m32 -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o /usr/bin/ld: cannot find Scrt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc /usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: cannot find libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc /usr/bin/ld: cannot find -lgcc collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1643 1919 0 cc -m64 -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c cc -m64 -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o funcs: do_compiler probe_target_compiler main lines: 1644 1919 0 cc -m64 -r -nostdlib -lgcc -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.o /usr/bin/ld: attempted static link of dynamic object `config-temp/qemu-conf.o' collect2: error: ld returned 1 exit status funcs: do_compiler probe_target_compiler main lines: 1643 1919 0 x86_64-linux-gnu-gcc -m64 -c -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.c x86_64-linux-gnu-gcc -m64 -o config-temp/qemu-conf.o /home/trevor/qemu/trace.o /home/trevor/qemu/temp.o funcs: do_compiler probe_target_compiler main lines: 1644 1919 0 x86_64-linux-gnu-gcc -m64 -r -nostdlib -lgcc -g -finstrument-functions -o /home/trevor/qemu/temp.o config-temp/qemu-conf.o /usr/bin/ld: attempted static link of dynamic object `config-temp/qemu-conf.o' collect2: error: ld returned 1 exit status