Skip to content
Snippets Groups Projects
  • Tom de Vries's avatar
    15368960
    [gdb/build] Fix gdbserver build with -fsanitize=thread · 15368960
    Tom de Vries authored
    When building gdbserver with -fsanitize=thread (added to CFLAGS/CXXFLAGS) we
    run into:
    ...
    ld: ../libiberty/libiberty.a(safe-ctype.o): warning: relocation against \
      `__tsan_init' in read-only section `.text'
    ld: ../libiberty/libiberty.a(safe-ctype.o): relocation R_X86_64_PC32 \
      against symbol `__tsan_init' can not be used when making a shared object; \
      recompile with -fPIC
    ld: final link failed: bad value
    collect2: error: ld returned 1 exit status
    make[1]: *** [libinproctrace.so] Error 1
    ...
    which looks similar to what is described in commit 78e49486944 ("[gdb/build]
    Fix gdbserver build with -fsanitize=address").
    
    The gdbserver component builds a shared library libinproctrace.so, which uses
    libiberty and therefore requires the pic variant.  The gdbserver Makefile is
    setup to use this variant, if available, but it's not there.
    
    Fix this by listing gdbserver in the toplevel configure alongside libcc1, as a
    component that needs the libiberty pic variant, setting:
    ...
    extra_host_libiberty_configure_flags=--enable-shared
    ...
    
    Tested on x86_64-linux.
    
    ChangeLog:
    
    2022-06-27  Tom de Vries  <tdevries@suse.de>
    
    	* configure.ac: Build libiberty pic variant for gdbserver.
    	* configure: Regenerate.
    15368960
    History
    [gdb/build] Fix gdbserver build with -fsanitize=thread
    Tom de Vries authored
    When building gdbserver with -fsanitize=thread (added to CFLAGS/CXXFLAGS) we
    run into:
    ...
    ld: ../libiberty/libiberty.a(safe-ctype.o): warning: relocation against \
      `__tsan_init' in read-only section `.text'
    ld: ../libiberty/libiberty.a(safe-ctype.o): relocation R_X86_64_PC32 \
      against symbol `__tsan_init' can not be used when making a shared object; \
      recompile with -fPIC
    ld: final link failed: bad value
    collect2: error: ld returned 1 exit status
    make[1]: *** [libinproctrace.so] Error 1
    ...
    which looks similar to what is described in commit 78e49486944 ("[gdb/build]
    Fix gdbserver build with -fsanitize=address").
    
    The gdbserver component builds a shared library libinproctrace.so, which uses
    libiberty and therefore requires the pic variant.  The gdbserver Makefile is
    setup to use this variant, if available, but it's not there.
    
    Fix this by listing gdbserver in the toplevel configure alongside libcc1, as a
    component that needs the libiberty pic variant, setting:
    ...
    extra_host_libiberty_configure_flags=--enable-shared
    ...
    
    Tested on x86_64-linux.
    
    ChangeLog:
    
    2022-06-27  Tom de Vries  <tdevries@suse.de>
    
    	* configure.ac: Build libiberty pic variant for gdbserver.
    	* configure: Regenerate.