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

Reply via email to