#15122: arm linker relocation issues
--------------------------+------------------------------
Reporter: kallisti5 | Owner: bonefish
Type: bug | Status: new
Priority: normal | Milestone: Unscheduled
Component: Build System | Version: R1/Development
Keywords: | Blocked By:
Blocking: | Has a Patch: 0
Platform: All |
--------------------------+------------------------------
Our gcc toolchain's linker (ld) continues to have problems with odd
relocation issues.
We (waddlesplash) was able to work around these issues by leveraging the
clang linker (lld) to link the operating system.
While the clang linker works as expected, the gcc linker throws relocation
errors linking libbe:
{{{
kDir1 objects/haiku/arm/release/system/glue/arch
MkDir1 objects/haiku/arm/release/system/glue/arch/arm
As objects/haiku/arm/release/system/glue/arch/arm/crti.o
Cc objects/haiku/arm/release/system/glue/init_term_dyn.o
As objects/haiku/arm/release/system/glue/arch/arm/crtn.o
Link objects/haiku/arm/release/system/libroot/libroot.so
SetType1 objects/haiku/arm/release/system/libroot/libroot.so
MimeSet1 objects/haiku/arm/release/system/libroot/libroot.so
SetVersion1 objects/haiku/arm/release/system/libroot/libroot.so
Chmod1 objects/haiku/arm/release/system/libroot/libroot.so
Link objects/haiku/arm/release/kits/libbe.so
/home/alex.vongluck/Code/haiku/generated.arm/cross-tools-arm/lib/gcc/arm-
unknown-haiku/8.3.0/../../../../arm-unknown-haiku/bin/ld:
objects/haiku/arm/release/kits/interface/interface_kit.o: relocation
R_ARM_REL32 against external or undefined symbol `_ZTIi' can not be used
when making a shared object; recompile with -fPIC
/home/alex.vongluck/Code/haiku/generated.arm/cross-tools-arm/lib/gcc/arm-
unknown-haiku/8.3.0/../../../../arm-unknown-haiku/bin/ld:
objects/haiku/arm/release/kits/interface/interface_kit.o(.ARM.extab+0x445c):
unresolvable R_ARM_REL32 relocation against symbol `_ZTIi'
/home/alex.vongluck/Code/haiku/generated.arm/cross-tools-arm/lib/gcc/arm-
unknown-haiku/8.3.0/../../../../arm-unknown-haiku/bin/ld: final link
failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
export
"LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/alex.vongluck/Code/haiku/generated.arm/objects/linux/lib"
; ../build/scripts/rm_attrs objects/linux/x86_64/release/tools/rm_attrs -f
"objects/haiku/arm/release/kits/libbe.so"
/home/alex.vongluck/Code/haiku/generated.arm/cross-tools-arm/bin/arm-
unknown-haiku-gcc -fno-strict-aliasing -fno-delete-null-pointer-checks
-fno-builtin-fork -fno-builtin-vfork -march=armv7-a -mfloat-abi=hard
-Xlinker --no-undefined -shared -Xlinker -soname="libbe.so" -nostdlib
-Xlinker --no-undefined -o "objects/haiku/arm/release/kits/libbe.so"
"objects/haiku/arm/release/system/glue/arch/arm/crti.o"
"/home/alex.vongluck/Code/haiku/generated.arm/cross-tools-arm/lib/gcc/arm-
unknown-haiku/8.3.0/crtbeginS.o"
"objects/haiku/arm/release/system/glue/init_term_dyn.o" \
"objects/haiku/arm/release/kits/app/app_kit.o"
"objects/haiku/arm/release/kits/interface/interface_kit.o"
"objects/haiku/arm/release/kits/locale/locale_kit.o"
"objects/haiku/arm/release/kits/storage/storage_kit.o"
"objects/haiku/arm/release/kits/support/support_kit.o"
"objects/haiku/arm/release/kits/storage/mime/libstorage_kit_mime.a"
"objects/haiku/arm/release/libs/icon/libicon.a"
"objects/haiku/arm/release/libs/agg/libagg.a"
"build_packages/gcc_syslibs-8.3.0_2019_05_24-1-arm/lib/libstdc++.so"
"build_packages/icu-57.1-2-arm/develop/lib/libicudata.so"
"build_packages/icu-57.1-2-arm/develop/lib/libicui18n.so"
"build_packages/icu-57.1-2-arm/develop/lib/libicuio.so"
"build_packages/icu-57.1-2-arm/develop/lib/libicule.so"
"build_packages/icu-57.1-2-arm/develop/lib/libiculx.so"
"build_packages/icu-57.1-2-arm/develop/lib/libicutu.so"
"build_packages/icu-57.1-2-arm/develop/lib/libicuuc.so"
"build_packages/zlib-1.2.11-1-arm/develop/lib/libz.so"
"objects/haiku/arm/release/system/libroot/libroot.so"
"build_packages/gcc_syslibs-8.3.0_2019_05_24-1-arm/lib/libgcc_s.so.1"
"build_packages/gcc_syslibs_devel-8.3.0_2019_05_24-1-arm/develop/lib/libgcc.a"
"/home/alex.vongluck/Code/haiku/generated.arm/cross-tools-arm/lib/gcc/arm-
unknown-haiku/8.3.0/crtendS.o"
"objects/haiku/arm/release/system/glue/arch/arm/crtn.o" \
-Wl,--version-script,../src/kits/libbe_versions
...failed Link objects/haiku/arm/release/kits/libbe.so ...
}}}
waddlesplash discovered that changing the linker to the following in th
BuildConfig works around the issue:
{{{
HAIKU_LD_arm ?= /usr/bin/ld.lld ;
HAIKU_LINK_arm ?= /usr/bin/clang -fuse-ld=lld -target arm-unknown-freebsd
-shared ;
}}}
--
Ticket URL: <https://dev.haiku-os.org/ticket/15122>
Haiku <https://dev.haiku-os.org>
The Haiku operating system.