packages icon indicating copy to clipboard operation
packages copied to clipboard

glib2: undefined reference to `__fn_local_printf_frexpl' for mipsel_24kc_24kf

Open moetayuko opened this issue 2 years ago • 8 comments

Maintainer: @neheb Environment: mipsel_24kc_24kf snapshot sdk provided by openwrt/sdk:mipsel_24kc_24kf-snapshot docker image

Description:

2022-10-03T03:54:11.8678551Z FAILED: glib/libglib-2.0.so.0.7400.0 
2022-10-03T03:54:11.8689537Z mipsel-openwrt-linux-musl-gcc  -o glib/libglib-2.0.so.0.7400.0 glib/libglib-2.0.so.0.7400.0.p/deprecated_gallocator.c.o glib/libglib-2.0.so.0.7400.0.p/deprecated_gcache.c.o glib/libglib-2.0.so.0.7400.0.p/deprecated_gcompletion.c.o glib/libglib-2.0.so.0.7400.0.p/deprecated_grel.c.o glib/libglib-2.0.so.0.7400.0.p/deprecated_gthread-deprecated.c.o glib/libglib-2.0.so.0.7400.0.p/garcbox.c.o glib/libglib-2.0.so.0.7400.0.p/garray.c.o glib/libglib-2.0.so.0.7400.0.p/gasyncqueue.c.o glib/libglib-2.0.so.0.7400.0.p/gatomic.c.o glib/libglib-2.0.so.0.7400.0.p/gbacktrace.c.o glib/libglib-2.0.so.0.7400.0.p/gbase64.c.o glib/libglib-2.0.so.0.7400.0.p/gbitlock.c.o glib/libglib-2.0.so.0.7400.0.p/gbookmarkfile.c.o glib/libglib-2.0.so.0.7400.0.p/gbytes.c.o glib/libglib-2.0.so.0.7400.0.p/gcharset.c.o glib/libglib-2.0.so.0.7400.0.p/gchecksum.c.o glib/libglib-2.0.so.0.7400.0.p/gconvert.c.o glib/libglib-2.0.so.0.7400.0.p/gdataset.c.o glib/libglib-2.0.so.0.7400.0.p/gdate.c.o glib/libglib-2.0.so.0.7400.0.p/gdatetime.c.o glib/libglib-2.0.so.0.7400.0.p/gdir.c.o glib/libglib-2.0.so.0.7400.0.p/genviron.c.o glib/libglib-2.0.so.0.7400.0.p/gerror.c.o glib/libglib-2.0.so.0.7400.0.p/gfileutils.c.o glib/libglib-2.0.so.0.7400.0.p/ggettext.c.o glib/libglib-2.0.so.0.7400.0.p/ghash.c.o glib/libglib-2.0.so.0.7400.0.p/ghmac.c.o glib/libglib-2.0.so.0.7400.0.p/ghook.c.o glib/libglib-2.0.so.0.7400.0.p/ghostutils.c.o glib/libglib-2.0.so.0.7400.0.p/giochannel.c.o glib/libglib-2.0.so.0.7400.0.p/gkeyfile.c.o glib/libglib-2.0.so.0.7400.0.p/glib-init.c.o glib/libglib-2.0.so.0.7400.0.p/glib-private.c.o glib/libglib-2.0.so.0.7400.0.p/glist.c.o glib/libglib-2.0.so.0.7400.0.p/gmain.c.o glib/libglib-2.0.so.0.7400.0.p/gmappedfile.c.o glib/libglib-2.0.so.0.7400.0.p/gmarkup.c.o glib/libglib-2.0.so.0.7400.0.p/gmem.c.o glib/libglib-2.0.so.0.7400.0.p/gmessages.c.o glib/libglib-2.0.so.0.7400.0.p/gnode.c.o glib/libglib-2.0.so.0.7400.0.p/goption.c.o glib/libglib-2.0.so.0.7400.0.p/gpattern.c.o glib/libglib-2.0.so.0.7400.0.p/gpoll.c.o glib/libglib-2.0.so.0.7400.0.p/gprimes.c.o glib/libglib-2.0.so.0.7400.0.p/gqsort.c.o glib/libglib-2.0.so.0.7400.0.p/gquark.c.o glib/libglib-2.0.so.0.7400.0.p/gqueue.c.o glib/libglib-2.0.so.0.7400.0.p/grand.c.o glib/libglib-2.0.so.0.7400.0.p/grcbox.c.o glib/libglib-2.0.so.0.7400.0.p/grefcount.c.o glib/libglib-2.0.so.0.7400.0.p/grefstring.c.o glib/libglib-2.0.so.0.7400.0.p/gregex.c.o glib/libglib-2.0.so.0.7400.0.p/gscanner.c.o glib/libglib-2.0.so.0.7400.0.p/gsequence.c.o glib/libglib-2.0.so.0.7400.0.p/gshell.c.o glib/libglib-2.0.so.0.7400.0.p/gslice.c.o glib/libglib-2.0.so.0.7400.0.p/gslist.c.o glib/libglib-2.0.so.0.7400.0.p/gstdio.c.o glib/libglib-2.0.so.0.7400.0.p/gstrfuncs.c.o glib/libglib-2.0.so.0.7400.0.p/gstring.c.o glib/libglib-2.0.so.0.7400.0.p/gstringchunk.c.o glib/libglib-2.0.so.0.7400.0.p/gstrvbuilder.c.o glib/libglib-2.0.so.0.7400.0.p/gtestutils.c.o glib/libglib-2.0.so.0.7400.0.p/gthread.c.o glib/libglib-2.0.so.0.7400.0.p/gthreadpool.c.o glib/libglib-2.0.so.0.7400.0.p/gtimer.c.o glib/libglib-2.0.so.0.7400.0.p/gtimezone.c.o glib/libglib-2.0.so.0.7400.0.p/gtrace.c.o glib/libglib-2.0.so.0.7400.0.p/gtranslit.c.o glib/libglib-2.0.so.0.7400.0.p/gtrashstack.c.o glib/libglib-2.0.so.0.7400.0.p/gtree.c.o glib/libglib-2.0.so.0.7400.0.p/guniprop.c.o glib/libglib-2.0.so.0.7400.0.p/gutf8.c.o glib/libglib-2.0.so.0.7400.0.p/gunibreak.c.o glib/libglib-2.0.so.0.7400.0.p/gunicollate.c.o glib/libglib-2.0.so.0.7400.0.p/gunidecomp.c.o glib/libglib-2.0.so.0.7400.0.p/guri.c.o glib/libglib-2.0.so.0.7400.0.p/gutils.c.o glib/libglib-2.0.so.0.7400.0.p/guuid.c.o glib/libglib-2.0.so.0.7400.0.p/gvariant.c.o glib/libglib-2.0.so.0.7400.0.p/gvariant-core.c.o glib/libglib-2.0.so.0.7400.0.p/gvariant-parser.c.o glib/libglib-2.0.so.0.7400.0.p/gvariant-serialiser.c.o glib/libglib-2.0.so.0.7400.0.p/gvarianttypeinfo.c.o glib/libglib-2.0.so.0.7400.0.p/gvarianttype.c.o glib/libglib-2.0.so.0.7400.0.p/gversion.c.o glib/libglib-2.0.so.0.7400.0.p/gwakeup.c.o glib/libglib-2.0.so.0.7400.0.p/gprintf.c.o glib/libglib-2.0.so.0.7400.0.p/glib-unix.c.o glib/libglib-2.0.so.0.7400.0.p/gspawn.c.o glib/libglib-2.0.so.0.7400.0.p/giounix.c.o glib/libglib-2.0.so.0.7400.0.p/gjournal-private.c.o glib/libglib-2.0.so.0.7400.0.p/gthread-posix.c.o -L/home/build/openwrt/staging_dir/toolchain-mipsel_24kc+24kf_gcc-11.3.0_musl/usr/lib -L/home/build/openwrt/staging_dir/toolchain-mipsel_24kc+24kf_gcc-11.3.0_musl/lib -flto -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,--start-group -Wl,-soname,libglib-2.0.so.0 -znow -zrelro -Wl,--gc-sections -Wl,-rpath,/home/build/openwrt/staging_dir/target-mipsel_24kc+24kf_musl/usr/lib -Wl,-rpath-link,/home/build/openwrt/staging_dir/target-mipsel_24kc+24kf_musl/usr/lib glib/libcharset/libcharset.a glib/gnulib/libgnulib.a -Wl,-z,nodelete -Wl,-Bsymbolic-functions /home/build/openwrt/staging_dir/target-mipsel_24kc+24kf_musl/usr/lib/libpcre2-8.so -pthread -lm -Wl,--end-group
2022-10-03T03:54:11.8696368Z /home/build/openwrt/staging_dir/toolchain-mipsel_24kc+24kf_gcc-11.3.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/11.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/build/openwrt/tmp/ccrpKuEw.ltrans11.ltrans.o: in function `$L1074':
2022-10-03T03:54:11.8696995Z <artificial>:(.text+0x4284): undefined reference to `__fn_local_printf_frexpl'
2022-10-03T03:54:11.8697851Z /home/build/openwrt/staging_dir/toolchain-mipsel_24kc+24kf_gcc-11.3.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/11.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: <artificial>:(.text+0x428a): undefined reference to `__fn_local_printf_frexpl'
2022-10-03T03:54:11.8698405Z collect2: error: ld returned 1 exit status
2022-10-03T03:54:11.8698697Z ninja: build stopped: subcommand failed.
2022-10-03T03:54:11.8699224Z make[3]: *** [Makefile:122: /home/build/openwrt/build_dir/target-mipsel_24kc+24kf_musl/glib-2.74.0/.built] Error 1
2022-10-03T03:54:11.8699743Z make[3]: Leaving directory '/home/build/openwrt/feeds/packages/libs/glib2'
2022-10-03T03:54:11.8708916Z time: package/feeds/packages/glib2/compile#36.42#8.70#46.40
2022-10-03T03:54:11.8720107Z     ERROR: package/feeds/packages/glib2 failed to build.
2022-10-03T03:54:11.8738961Z make[2]: *** [package/Makefile:116: package/feeds/packages/glib2/compile] Error 1
2022-10-03T03:54:11.9061647Z make[2]: *** Waiting for unfinished jobs....

https://downloads.openwrt.org/snapshots/faillogs/mipsel_24kc_24kf/packages/glib2/compile.txt

moetayuko avatar Oct 03 '22 05:10 moetayuko

yep. I have absolutely no idea how to fix.

The issue is somehow related to gnulib.

neheb avatar Oct 03 '22 05:10 neheb

That's a missing -latomic and unrelated to this issue.

neheb avatar Oct 04 '22 08:10 neheb

That's a missing -latomic and unrelated to this issue.

how do i add that in the makefile?

predators46 avatar Oct 04 '22 08:10 predators46

TARGET_LDFLAGS += -latomic .

neheb avatar Oct 04 '22 08:10 neheb

TARGET_LDFLAGS += -latomic .

I will try it

predators46 avatar Oct 04 '22 08:10 predators46

TARGET_LDFLAGS += -latomic .

i have tried but get error.

predators46 avatar Oct 04 '22 08:10 predators46

That is...ancient.

neheb avatar Oct 04 '22 14:10 neheb

That is...ancient.

Hm...

predators46 avatar Oct 10 '22 05:10 predators46

@neheb issue can be fixed by adding no-mips16 to PKG_BUILD_FLAGS, is this sane?

moetayuko avatar Jun 10 '23 15:06 moetayuko

Probably not.

neheb avatar Jun 10 '23 16:06 neheb

I found that locally disabling mips16 by adding __attribute__((nomips16)) to printf_frexpl also fixes the issue.

The __fn_local_printf_frexpl symbol is a stub of printf_frexpl and is supposed to be automatically generated by the compiler for mips16 hard-float targets. Maybe for some reason (or compiler bug?) the stub is not generated so linker fails to linking?

~~The most interesting thing is that printf_frexp compiles fine while their implementations are nearly identical.~~ EDIT: disabling mips16 for either printf_frexp or printf_frexpl fixes build.

Ref: https://github.com/gcc-mirror/gcc/blob/20c85207abd543c76818032632a5f1b3aea5495b/gcc/config/mips/mips.cc#L7307 https://github.com/llvm/llvm-project/blob/5217e7756c123972bd8340163ba20d05284ec24e/llvm/lib/Target/Mips/Mips16HardFloat.cpp#L453

moetayuko avatar Jun 11 '23 06:06 moetayuko

A patch like that makes sense.

Should be reported upstream in any case.

neheb avatar Jun 11 '23 06:06 neheb

@neheb Apart from the root cause of the issue, I figured out why it compiled fine previously.

Prior to https://github.com/openwrt/packages/commit/5d27631d9fbca076eb6377fc8c10f474ce9f4fea we had 006-c99.patch which unconditionally disabled gnulib build. What about adding it back for now?

moetayuko avatar Jun 11 '23 12:06 moetayuko

Oh that is…interesting.

Adding it back sounds good.

neheb avatar Jun 11 '23 12:06 neheb