Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Ricing gentoo
View unanswered posts
View posts from last 24 hours

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Gentoo Chat
View previous topic :: View next topic  
Author Message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Fri Aug 25, 2023 8:27 am    Post subject: Ricing gentoo Reply with quote

I have seen multiple threads recently regarding optimization.
These are my COMMON_FLAGS right now:
Code:
COMMON_FLAGS="-O2 -pipe -march=native -flto=4"

The wiki recommends also using -ftree-vectorize.
The wiki recommends against -ffast-math, but Linus Torvalds seems to think it's a good idea:
https://gcc.gnu.org/legacy-ml/gcc/2001-07/msg01887.html
It might also be a good idea to use -ffast-math on arm cpus without hard floats(not that I have any).
-funswitch-loops is a flag that is enabled by pgo. The wiki makes no mention of it other that about redundant flags in general.
Other optimizations:
From my cflags, you can see I use lto.
I used pgo with librewolf, but I don't think it's worth the extra 1.5 hours of compile time. I also had to build xorg with USE="xvfb", so any gains from pgo may have been offset by that.
I tried using graphite, but it proved to be more of a hassle that anything useful. Too many broken builds.

Should I add any of the flags I mentioned, -ftree-vectorize -ffast-math -funswitch-loops, to my COMMON_FLAGS?
What optimizations do you use? Is your system debian-level stable or ultra-riced?

EDIT:
Better quote: https://gcc.gnu.org/legacy-ml/gcc/2001-07/msg02150.html
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"


Last edited by stefan11111 on Fri Aug 25, 2023 10:31 am; edited 1 time in total
Back to top
View user's profile Send private message
CaptainBlood
Advocate
Advocate


Joined: 24 Jan 2010
Posts: 3642

PostPosted: Fri Aug 25, 2023 10:03 am    Post subject: Reply with quote

Here's lto as much as possible... when it's worth it.

By worth I mean binary size shrink. Please note efficiency impact isn't considered there.

Most of the time lto shrinks, but not always.
Even within a single package: Some files may shrink when other may grow.

For this purpose, I have a script that builds a package twice and compare file sizes.
Classes of files considered here are:
*/*bin/*
/*.so
/*.pyc
I may be missing some, though...
Then I have to make decision when to activate lto in /etc/portage/package.env or not.

So I've opt for a per package setting, rather than global.
It could also be configured as global + negative /etc/portage/package.env to block it.

Some packages are or may become flto insensitive upon upstream decisions (source, or portage)
When package lto it blocked at gentoo/portage level, it should be easy to workaround it deriving its ebuild in local repository and modify it.

Besides,

I'm not sure -flto=4 is the regular way to activate...
Here is gcc by default, clang/llvm may be a # activation story.

rust/llvm has it own way to activate it.

Side note,
march / mtune should be considered if a binary package generated on a newer CPU is expected to be installed on a lower CPU.

The underlying general idea is that every optimization option should be well evaluated before deciding when and how to apply.

Thks 4 ur attention, interest & support.
_________________
USE="-* ..." in /etc/portage/make.conf here, i.e. a countermeasure to portage implicit braces, belt & diaper paradigm
LT: "I've been doing a passable imitation of the Fontana di Trevi, except my medium is mucus. Sooo much mucus. "


Last edited by CaptainBlood on Fri Aug 25, 2023 10:47 am; edited 2 times in total
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Fri Aug 25, 2023 10:32 am    Post subject: Reply with quote

I do also have USE="lto" enabled globally.
Code:
USE="-* git verify-sig rsync-verify man alsa X grub ssl ipv6 lto libressl olde-gentoo asm native-symlinks threads jit jumbo-build minimal"

_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
CaptainBlood
Advocate
Advocate


Joined: 24 Jan 2010
Posts: 3642

PostPosted: Fri Aug 25, 2023 10:46 am    Post subject: Reply with quote

Packages with USE=lto may indeed deserve some attention when activated along with lto global setting.

Thks 4 ur attention, interest & support
_________________
USE="-* ..." in /etc/portage/make.conf here, i.e. a countermeasure to portage implicit braces, belt & diaper paradigm
LT: "I've been doing a passable imitation of the Fontana di Trevi, except my medium is mucus. Sooo much mucus. "


Last edited by CaptainBlood on Sun Sep 03, 2023 9:48 am; edited 1 time in total
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sat Aug 26, 2023 3:56 pm    Post subject: Reply with quote

Not many people interested in optimizing gentoo?
I also looked into these:
https://forums.gentoo.org/viewtopic.php?t=67777
https://github.com/InBetweenNames/gentooLTO

I will give it a try with these flags:
COMMON_FLAGS="-O3 -pipe -march=native -flto=4 -ftree-vectorize -ffast-math -funswitch-loops -fno-semantic-interposition -fipa-pta -fdevirtualize-at-ltrans"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed"
Will come back after an emerge -e @world.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sat Aug 26, 2023 11:26 pm    Post subject: Reply with quote

Results are in:
@world without palemoon builds in just under 6 hours.
The reason it's without palemoon is that palemoon fails to build.
The code has a #error to require me to define something to let me build it.
The fix is to add this to /etc/portage/env/www-client/palemoon:
Code:
CFLAGS="${CFLAGS} -DFLOAT_APPROX"

But now this happens:
Code:
20:52.91 Executing: /usr/bin/g++ -std=gnu++14 -Wall -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wwrite-strings -Wno-invalid-offsetof -Wc++1z-compat -Wimplicit-fallthrough -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=multistatement-macros -fno-sized-deallocation -flifetime-dse=1 -pipe -march=native -flto=4 -ftree-vectorize -ffast-math -funswitch-loops -fno-semantic-interposition -fipa-pta -fdevirtualize-at-ltrans -fno-exceptions -fno-strict-aliasing -fno-rtti -fno-exceptions -fno-math-errno -pipe -msse2 -mfpmath=sse -pthread -g -O2 -msse2 -mfpmath=sse -fomit-frame-pointer -fPIC -shared -Wl,-z,defs -Wl,-h,libmozavcodec.so -o libmozavcodec.so /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/o/media/ffvpx/libavcodec/tmpI2hfxf.list -lpthread -Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed -Wl,-rpath=/usr/lib64/palemoon -Wl,-z,noexecstack -Wl,-z,text -Wl,--build-id -Wl,-rpath-link,/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/o/dist/bin -Wl,-rpath-link,/usr/local/lib ../libavutil/libmozavutil.so -Wl,--version-script,libmozavcodec.so.symbols
20:52.91 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/o/media/ffvpx/libavcodec/tmpI2hfxf.list:
20:52.91     INPUT("allcodecs.o")
20:52.91     INPUT("avpacket.o")
20:52.91     INPUT("avpicture.o")
20:52.91     INPUT("bitstream.o")
20:52.91     INPUT("bitstream_filter.o")
20:52.91     INPUT("bitstream_filters.o")
20:52.91     INPUT("bsf.o")
20:52.91     INPUT("codec_desc.o")
20:52.91     INPUT("decode.o")
20:52.91     INPUT("dummy_funcs.o")
20:52.91     INPUT("flac.o")
20:52.91     INPUT("flac_parser.o")
20:52.91     INPUT("flacdata.o")
20:52.91     INPUT("flacdec.o")
20:52.91     INPUT("flacdsp.o")
20:52.91     INPUT("golomb.o")
20:52.91     INPUT("h264pred.o")
20:52.91     INPUT("imgconvert.o")
20:52.91     INPUT("log2_tab.o")
20:52.91     INPUT("mathtables.o")
20:52.91     INPUT("null_bsf.o")
20:52.91     INPUT("options.o")
20:52.91     INPUT("parser.o")
20:52.91     INPUT("parsers.o")
20:52.91     INPUT("profiles.o")
20:52.91     INPUT("pthread.o")
20:52.91     INPUT("pthread_frame.o")
20:52.91     INPUT("pthread_slice.o")
20:52.91     INPUT("qsv_api.o")
20:52.91     INPUT("raw.o")
20:52.91     INPUT("reverse.o")
20:52.92     INPUT("utils.o")
20:52.92     INPUT("videodsp.o")
20:52.92     INPUT("vorbis_parser.o")
20:52.92     INPUT("vp56rac.o")
20:52.92     INPUT("vp8.o")
20:52.92     INPUT("vp8_parser.o")
20:52.92     INPUT("vp8dsp.o")
20:52.92     INPUT("vp9.o")
20:52.92     INPUT("vp9_parser.o")
20:52.92     INPUT("vp9_superframe_split_bsf.o")
20:52.92     INPUT("vp9block.o")
20:52.92     INPUT("vp9data.o")
20:52.92     INPUT("vp9dsp.o")
20:52.92     INPUT("vp9dsp_10bpp.o")
20:52.92     INPUT("vp9dsp_12bpp.o")
20:52.92     INPUT("vp9dsp_8bpp.o")
20:52.92     INPUT("vp9lpf.o")
20:52.92     INPUT("vp9mvs.o")
20:52.92     INPUT("vp9prob.o")
20:52.92     INPUT("vp9recon.o")
20:52.92     INPUT("xiph.o")
20:52.92     INPUT("x86/constants.o")
20:52.92     INPUT("x86/flacdsp_init.o")
20:52.92     INPUT("x86/h264_intrapred_init.o")
20:52.92     INPUT("x86/videodsp_init.o")
20:52.92     INPUT("x86/vp8dsp_init.o")
20:52.92     INPUT("x86/vp9dsp_init.o")
20:52.92     INPUT("x86/vp9dsp_init_10bpp.o")
20:52.92     INPUT("x86/vp9dsp_init_12bpp.o")
20:52.92     INPUT("x86/vp9dsp_init_16bpp.o")
20:52.92     INPUT("x86/flacdsp.o")
20:52.92     INPUT("x86/h264_intrapred.o")
20:52.92     INPUT("x86/h264_intrapred_10bit.o")
20:52.92     INPUT("x86/videodsp.o")
20:52.92     INPUT("x86/vp8dsp.o")
20:52.92     INPUT("x86/vp8dsp_loopfilter.o")
20:52.92     INPUT("x86/vp9intrapred.o")
20:52.92     INPUT("x86/vp9intrapred_16bpp.o")
20:52.92     INPUT("x86/vp9itxfm.o")
20:52.93     INPUT("x86/vp9itxfm_16bpp.o")
20:52.93     INPUT("x86/vp9lpf.o")
20:52.93     INPUT("x86/vp9lpf_16bpp.o")
20:52.93     INPUT("x86/vp9mc.o")
20:52.93     INPUT("x86/vp9mc_16bpp.o")
20:52.93
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h: Assembler
messages:
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.93 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.94 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'
20:52.95 make[6]: *** [/var/tmp/portage/www-client/palemoon-32.3.1/temp/ccCz5kyr.mk:14: /var/tmp/portage/www-client/palemoon-32.3.1/temp/ccLtrxMZ.ltrans4.ltrans.o] Error 1
20:52.95 lto-wrapper: fatal error: make returned 2 exit status
20:52.95 compilation terminated.
20:52.95 /usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
20:52.95 collect2: error: ld returned 1 exit status
20:52.95 gmake[5]: *** [/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/config/rules.mk:772: libmozavcodec.so] Error 1
20:52.95 gmake[4]: *** [/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/config/recurse.mk:71: media/ffvpx/libavcodec/target] Error 2
20:52.95 gmake[4]: *** Waiting for unfinished jobs....
21:05.34 In file included from /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/o/gfx/thebes/Unified_cpp_gfx_thebes1.cpp:101:
21:05.34 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/gfx/thebes/gfxTextRun.cpp: In member function 'void gfxFontGroup::BuildFontList()':
21:05.34 Warning: -Wunused-variable in /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/gfx/thebes/gfxTextRun.cpp: unused variable 'enumerateFonts'
21:05.34 /var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/gfx/thebes/gfxTextRun.cpp:1612:10: warning: unused variable 'enumerateFonts' [-Wunused-variable]
21:05.34  1612 |     bool enumerateFonts = true;
21:05.34       |          ^~~~~~~~~~~~~~
21:09.20 libgfx_thebes.a.desc
21:09.27 gmake[3]: *** [/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/config/recurse.mk:33: compile] Error 2
21:09.27 gmake[2]: *** [/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/config/rules.mk:493: default] Error 2
21:09.27 gmake[1]: *** [/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/client.mk:406: realbuild] Error 2
21:09.27 gmake: *** [client.mk:164: build] Error 2
21:09.30 438 compiler warnings present.
 * ERROR: www-client/palemoon-32.3.1::palemoon failed (compile phase):
 *   (no error message)
 *
 * Call stack:
 *     ebuild.sh, line 136:  Called src_compile
 *   environment, line 3254:  Called die
 * The specific snippet of code:
 *       python2 "${S}/platform/mach" build || die
 *
 * If you need support, post the output of `emerge --info '=www-client/palemoon-32.3.1::palemoon'`,
 * the complete build log and the output of `emerge -pqv '=www-client/palemoon-32.3.1::palemoon'`.
 * The complete build log is located at '/var/tmp/portage/www-client/palemoon-32.3.1/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/www-client/palemoon-32.3.1/temp/environment'.
 * Working directory: '/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1'
 * S: '/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1'

>>> Failed to emerge www-client/palemoon-32.3.1, Log file:

>>>  '/var/tmp/portage/www-client/palemoon-32.3.1/temp/build.log'

 * Messages for package www-client/palemoon-32.3.1:

 * Building Pale Moon with a compiler other than a supported gcc version
 * may result in an unstable build.
 * Be aware that building Pale Moon with an unsupported compiler
 * means that the official support channels may refuse to offer any
 * kind of help in case the build fails or the browser behaves incorrectly.
 * Supported GCC versions: 7.5, 8.5, 9.3, 9.4, 10.3, 11.3, 12.2, 12.3
 * Selected GCC version: 13.2
 * To disable this warning unset the PALEMOON_ENABLE_UNSUPPORTED_COMPILERS
 * environment variable.

 * Messages for package www-client/palemoon-32.3.1:

 * ERROR: www-client/palemoon-32.3.1::palemoon failed (compile phase):
 *   (no error message)
 *
 * Call stack:
 *     ebuild.sh, line 136:  Called src_compile
 *   environment, line 3254:  Called die
 * The specific snippet of code:
 *       python2 "${S}/platform/mach" build || die
 *
 * If you need support, post the output of `emerge --info '=www-client/palemoon-32.3.1::palemoon'`,
 * the complete build log and the output of `emerge -pqv '=www-client/palemoon-32.3.1::palemoon'`.
 * The complete build log is located at '/var/tmp/portage/www-client/palemoon-32.3.1/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/www-client/palemoon-32.3.1/temp/environment'.
 * Working directory: '/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1'
 * S: '/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1'

Any idea how to fix? It seems to be related to lto, but I've always built it with lto.
Maybe -fdevirtualize-at-ltrans? How to only override it for palemoon?
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
pjp
Administrator
Administrator


Joined: 16 Apr 2002
Posts: 20067

PostPosted: Sun Aug 27, 2023 12:41 am    Post subject: Reply with quote

stefan11111 wrote:
Not many people interested in optimizing gentoo?
What's in a name? Well, Gentoo is Rice.
_________________
Quis separabit? Quo animo?
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sun Aug 27, 2023 5:32 am    Post subject: Reply with quote

pjp wrote:
stefan11111 wrote:
Not many people interested in optimizing gentoo?
What's in a name? Well, Gentoo is Rice.

I don't think my cflags are that bad.
However, this doesn't seem to be caused by CFLAGS.
I tried building with COMMON_FLAGS="-O2 -pipe -march=native" on my pc and my laptop.
My laptop has everything built with COMMON_FLAGS="-O2 -pipe -march=native -flto=12", so no way this is caused by my optimized toolchain.
I think this might be caused by the code that also generates hundreds of warnings from each recursive call to make.
I guess this is what happens when the only ebuild is a git ebuild from an overlay.
Gentoo says "not my business",citing "security concerns" that were already addressed by palemoon upstream...
https://bugs.gentoo.org/656578

The only error I see is the assembler error:
Code:
/var/tmp/portage/www-client/palemoon-32.3.1/work/palemoon-32.3.1/platform/media/ffvpx/libavcodec/x86/mathops.h:125: Error: operand type mismatch for `shr'

And the relevant code is:
Code:
#define NEG_USR32 NEG_USR32
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
    __asm__ ("shrl %1, %0\n\t"
         : "+r" (a)
         : "ic" ((uint8_t)(-s))
    );
    return a;
}

But that file hasn't changed in 6 years.
https://repo.palemoon.org/MoonchildProductions/UXP/blame/branch/master/media/ffvpx/libavcodec/x86/mathops.h

Will file an issue upstream.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sun Aug 27, 2023 9:12 am    Post subject: Reply with quote

Got it to build.
It took 46 minutes, 10 more that usual.
This bumps my @world emerge time to 6hours 30 minutes. Not too bad I'd say.
The assembler errors were a known issue:
https://repo.palemoon.org/MoonchildProductions/Pale-Moon/issues/1932

I also got some errors saying that libxul.so has 0 symbols.
Those were resolved after commenting out my LDFLAGS.
Code:
LDFLAGS="-Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed"

The LDFLAGS come from here, combined with the default LDFLAGS.
Any idea why that happens?

In conclusion, the CFLAGS I used are perfectly safe. The problems arise from LDFLAGS.
The same as this bug: https://bugs.gentoo.org/74072
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
Hu
Administrator
Administrator


Joined: 06 Mar 2007
Posts: 21761

PostPosted: Sun Aug 27, 2023 4:05 pm    Post subject: Reply with quote

stefan11111 wrote:
The wiki recommends against -ffast-math, but Linus Torvalds seems to think it's a good idea:
https://gcc.gnu.org/legacy-ml/gcc/2001-07/msg01887.html
That thread is from more than 20 years ago, and was arguing that the compiler ought to be more aggressive, and rely on programmers who care to tell it to be less aggressive in the situations where the aggressive mode causes their code not to work as desired. Linus's position was never accepted by gcc, so -ffast-math is fine if and only if you are using only code that the authors have carefully written to work properly under the more aggressive behavior. How confident are you that every floating-point using program you build, most of which you will never personally review, were written to work under the more aggressive rules?
stefan11111 wrote:
Better quote: https://gcc.gnu.org/legacy-ml/gcc/2001-07/msg02150.html
To me, this makes it even more clear that Linus was focusing on programs where imprecise but approximately accurate results were acceptable. That's fine for most games, most of the time (though I could believe this could in rare cases allow objects to fit through small spaces that they should not, due to rounding errors).
stefan11111 wrote:
Code:
LDFLAGS="-Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed"
As taskara explained in 2005, using -s is not necessary.
stefan11111 wrote:
Any idea how to fix? It seems to be related to lto, but I've always built it with lto.
Based on your later post, I suspect this code was always wrong, and that using Link Time Optimization allowed the compiler to inline enough layers to trigger the bug.
info '(gcc)Simple Constraints':
‘i’
     An immediate integer operand (one with constant value) is allowed.
     This includes symbolic constants whose values will be known only at
     assembly time or later.
Combine that with the constraint of c, and to me, this means passing a variable that may or may not actually be constant may, but is not guaranteed, to fail. The upstream fix is consistent with my explanation. When the value is actually constant, use i. When it is not guaranteed constant, do not use i.

Inspection of the generated output from gcc likely would have shown that the constraint allowed gcc to generate text that was not valid input to the assembler. I cannot confirm this as you did not post the output that gas rejected, only the error stating that it had rejected something.

This type of failure is a known risk any time asm statements are used improperly, since the compiler does not fully validate that their contents are reasonable.
stefan11111 wrote:
I also got some errors saying that libxul.so has 0 symbols.
Those were resolved after commenting out my LDFLAGS.
Code:
LDFLAGS="-Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed"
The LDFLAGS come from here, combined with the default LDFLAGS.
Any idea why that happens?
Advice from 2005 may not be applicable today. To the extent it is, I refer to taskara's post back then discouraging use of -s.

You told the linker to strip all symbols:
info '(ld)Options':
'-s'
'--strip-all'
     Omit all symbol information from the output file.
As a result, there were no symbols in libxul.so. -s is one of the flags that must not be used blindly, but instead applied only on programs which are prepared to handle it. Given that Portage will perform the required (and less destructive) strip operation on its own, including -s seems like asking for trouble, in my opinion.
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sun Aug 27, 2023 6:54 pm    Post subject: Reply with quote

Hu wrote:
stefan11111 wrote:
The wiki recommends against -ffast-math, but Linus Torvalds seems to think it's a good idea:
https://gcc.gnu.org/legacy-ml/gcc/2001-07/msg01887.html
That thread is from more than 20 years ago, and was arguing that the compiler ought to be more aggressive, and rely on programmers who care to tell it to be less aggressive in the situations where the aggressive mode causes their code not to work as desired. Linus's position was never accepted by gcc, so -ffast-math is fine if and only if you are using only code that the authors have carefully written to work properly under the more aggressive behavior. How confident are you that every floating-point using program you build, most of which you will never personally review, were written to work under the more aggressive rules?

I don't think gcc and other parts of the toolchain are affected by this.
The biggest program on my system is gcc. The second biggest is palemoon. I know that palemoon works with -ffast-math. The only other thing I'm worried about is qbittorrent, but that is buggy even without -ffast-math.
I see so many warnings about programs doing things like writing/reading from a buffer more bytes than allocated. If such things work at -O2, but break at -O3, is it the fault of the compiler or the fault of the programmer?
Hu wrote:

stefan11111 wrote:
Better quote: https://gcc.gnu.org/legacy-ml/gcc/2001-07/msg02150.html
To me, this makes it even more clear that Linus was focusing on programs where imprecise but approximately accurate results were acceptable. That's fine for most games, most of the time (though I could believe this could in rare cases allow objects to fit through small spaces that they should not, due to rounding errors).

I don't mind if slstatus reports speeds with a .0000001% inacuracy.
Hu wrote:

stefan11111 wrote:
Code:
LDFLAGS="-Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed"
As taskara explained in 2005, using -s is not necessary.

Thanks for pointing out.
Hu wrote:

stefan11111 wrote:
Any idea how to fix? It seems to be related to lto, but I've always built it with lto.
Based on your later post, I suspect this code was always wrong, and that using Link Time Optimization allowed the compiler to inline enough layers to trigger the bug.
info '(gcc)Simple Constraints':
‘i’
     An immediate integer operand (one with constant value) is allowed.
     This includes symbolic constants whose values will be known only at
     assembly time or later.
Combine that with the constraint of c, and to me, this means passing a variable that may or may not actually be constant may, but is not guaranteed, to fail. The upstream fix is consistent with my explanation. When the value is actually constant, use i. When it is not guaranteed constant, do not use i.

Inspection of the generated output from gcc likely would have shown that the constraint allowed gcc to generate text that was not valid input to the assembler. I cannot confirm this as you did not post the output that gas rejected, only the error stating that it had rejected something.

This type of failure is a known risk any time asm statements are used improperly, since the compiler does not fully validate that their contents are reasonable.

In this case, it seems that binutils 2.41 causes that to error, but binutils 2.40 allows it to build.
Hu wrote:

stefan11111 wrote:
I also got some errors saying that libxul.so has 0 symbols.
Those were resolved after commenting out my LDFLAGS.
Code:
LDFLAGS="-Wl,-O1 -Wl,--sort-common -s -Wl,--as-needed"
The LDFLAGS come from here, combined with the default LDFLAGS.
Any idea why that happens?
Advice from 2005 may not be applicable today. To the extent it is, I refer to taskara's post back then discouraging use of -s.

You told the linker to strip all symbols:
info '(ld)Options':
'-s'
'--strip-all'
     Omit all symbol information from the output file.
As a result, there were no symbols in libxul.so. -s is one of the flags that must not be used blindly, but instead applied only on programs which are prepared to handle it. Given that Portage will perform the required (and less destructive) strip operation on its own, including -s seems like asking for trouble, in my opinion.

Will try building without -s to see what happens.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
Hu
Administrator
Administrator


Joined: 06 Mar 2007
Posts: 21761

PostPosted: Sun Aug 27, 2023 7:40 pm    Post subject: Reply with quote

stefan11111 wrote:
I don't think gcc and other parts of the toolchain are affected by this.
Anything which uses floating point is potentially affected, depending on what it does with floating point and whether it requires exact IEEE rules.
stefan11111 wrote:
I know that palemoon works with -ffast-math.
How do you know this? This is a compiler option that changes the generated code, so the only ways to be sure are to inspect the generated code and see that the option made no changes (at which point the option is useless) or to run an exhaustive test suite that validates that all the floating point logic in the program still produces the correct results for all use cases. It is not sufficient to say that the program linked correctly and started without an error.
stefan11111 wrote:
I see so many warnings about programs doing things like writing/reading from a buffer more bytes than allocated.
Is this "may access" or "will access"? gcc can warn about the former, and is known to be very cautious. It may warn if it cannot prove that the use is always safe, even if the developer assures you that this function could never receive the inputs that trigger the error.
stefan11111 wrote:
If such things work at -O2, but break at -O3, is it the fault of the compiler or the fault of the programmer?
Accessing beyond the extent of the buffer is undefined behavior, and must never be done. It may or may not work at runtime, but is never correct.
stefan11111 wrote:
I don't mind if slstatus reports speeds with a .0000001% inacuracy.
What about if it fails to report errors properly because you used -ffast-math, which implies -fno-math-errno?
stefan11111 wrote:
In this case, it seems that binutils 2.41 causes that to error, but binutils 2.40 allows it to build.
gcc has a history of newer versions rejecting incorrect programs that older versions wrongly allowed. I am not surprised that a newer version of binutils would likewise be more strict about rejecting invalid inputs.
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sun Aug 27, 2023 8:06 pm    Post subject: Reply with quote

Hu wrote:
stefan11111 wrote:
I know that palemoon works with -ffast-math.
How do you know this? This is a compiler option that changes the generated code, so the only ways to be sure are to inspect the generated code and see that the option made no changes (at which point the option is useless) or to run an exhaustive test suite that validates that all the floating point logic in the program still produces the correct results for all use cases. It is not sufficient to say that the program linked correctly and started without an error.

To build palemoon with -ffast-math, I have to do this:
Code:
CFLAGS="${CFLAGS} -DFLOAT_APPROX"

There is a #error in the code that stops the build if I build with -ffast-math and don't define FLOAT_APPROX.
This is why I assume that the palemoon devs know what code in palemoon is broken with -ffast-math, and that define avoids that code.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
Hu
Administrator
Administrator


Joined: 06 Mar 2007
Posts: 21761

PostPosted: Sun Aug 27, 2023 9:56 pm    Post subject: Reply with quote

That could be, or it could be that this is their equivalent to Portage's I_KNOW_WHAT_I_AM_DOING. Their flag might be merely to disable a sanity check so that the developers can build with -ffast-math and see what is broken, as a necessary prerequisite to improving the code. If I were the developer, and I knew that -ffast-math broke the normal code, my preferences would be, in order:
  • Fix the code to work with -ffast-math, if possible.
  • Lock out the bad option, so that users cannot use it unknowingly.
  • Detect the bad option and transparently switch to good code, even if it is less efficient. (PIC often did this on x86.)
Locking out the option, and requiring the user to manually switch to working code, and not naming the switch flag to make it obvious that this is what is happening, is not how I would approach this, when other options are available. Therefore, I am doubtful that the Palemoon developers took that approach.
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Mon Aug 28, 2023 10:19 pm    Post subject: Reply with quote

Hu wrote:
That could be, or it could be that this is their equivalent to Portage's I_KNOW_WHAT_I_AM_DOING. Their flag might be merely to disable a sanity check so that the developers can build with -ffast-math and see what is broken, as a necessary prerequisite to improving the code. If I were the developer, and I knew that -ffast-math broke the normal code, my preferences would be, in order:
  • Fix the code to work with -ffast-math, if possible.
  • Lock out the bad option, so that users cannot use it unknowingly.
  • Detect the bad option and transparently switch to good code, even if it is less efficient. (PIC often did this on x86.)
Locking out the option, and requiring the user to manually switch to working code, and not naming the switch flag to make it obvious that this is what is happening, is not how I would approach this, when other options are available. Therefore, I am doubtful that the Palemoon developers took that approach.

You are right. After rebooting, palemoon was broken.
Rebuilt palemoon without -ffast-math and everything worked.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
NichtDerHans
Tux's lil' helper
Tux's lil' helper


Joined: 27 Jan 2023
Posts: 135

PostPosted: Sat Sep 02, 2023 8:23 am    Post subject: Reply with quote

Is your Gentoo faster then before?
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sat Sep 02, 2023 11:40 am    Post subject: Reply with quote

NichtDerHans wrote:
Is your Gentoo faster then before?

Didn't think to run benchmarks, but maybe I will.
What should I run.
Give me some algorithms for openssl speed. I can't run the full suite because I use libressl.
Maybe foss games with built in fps counters?
I can't run the full phoronix suite because it doesn't build with libressl.
Edit:
Doesn't seem related to libressl.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"


Last edited by stefan11111 on Sun Sep 03, 2023 10:08 am; edited 1 time in total
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Sat Sep 02, 2023 7:30 pm    Post subject: Reply with quote

Don't know how CFLAGS affect this, but at least it shows why minimalism is good.
I have qbittorrent open with 50 torrents summing up to about 3.8 TB with 6 MB/s traffic when I wrote this.
I have palemoon open with 60 tabs, which I made sure that they are all loaded into memory.
I also have kirc, vsftpd, sshd, utelnetd running.
The system uses about 2.6 GB ram and less that 10% cpu.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
NichtDerHans
Tux's lil' helper
Tux's lil' helper


Joined: 27 Jan 2023
Posts: 135

PostPosted: Sun Sep 03, 2023 9:50 am    Post subject: Reply with quote

Hmmm... I dont know a good benchmark for this case.
Back to top
View user's profile Send private message
pc_user4
n00b
n00b


Joined: 14 Sep 2023
Posts: 12

PostPosted: Tue Sep 19, 2023 7:00 am    Post subject: Reply with quote

I know this thread hasn't had activity for a bit, but "ricing" / "rice" as a verb has racist context and I suggest to disavow such language within Gentoo. I understand the "Gentoo is Rice" meme page is several decades old and the world was a very different place in the early 2000's.

I am not the only one here who endorses the use of Gentoo in professional settings, and I would be very unhappy if a current or prospective employer investigating what Gentoo is all about saw such things or came across the "Gentoo is Rice" page.

We all use Gentoo because we enjoy full control over the system and squeezing every last bit of performance out of our systems. We would all be better off to refrain from using language which may be seen as culturally insensitive.

Kindly,
pc_user4
Back to top
View user's profile Send private message
pietinger
Moderator
Moderator


Joined: 17 Oct 2006
Posts: 4299
Location: Bavaria

PostPosted: Tue Sep 19, 2023 7:38 am    Post subject: Reply with quote

I have the feeling this post is a counterattack on the thread creator. As a moderator, it is my job to point out early on that an escalation between two users is undesirable. If you want a discussion with the thread creator write him an email.

This is an international support forum in which it is only about a Linux system. No user here will be able to know all the specific rules of all the countries on this planet. That is why the reference to the subject is important.

I don't think there are people who don't realize what the subject is here. But the reference to the subject is crucial. Consider:

To rape a child is forbidden in every country of our planet. But a system can be raped very easily - just install windows.
Back to top
View user's profile Send private message
Zucca
Moderator
Moderator


Joined: 14 Jun 2007
Posts: 3377
Location: Rasi, Finland

PostPosted: Tue Sep 19, 2023 9:15 am    Post subject: Reply with quote

For me rice means a seed of a grass which is edible after boiling it a while.
I've seen posts on Lemmy network where people present their customized Unix/Linux desktop as "riced".

Also Wikipedia has few meanings for the word "Ricing". Of which one means tuning a car. Which I assume this topic is about, but instead of car it's Gentoo installation.

The little search I did, I didn't found any racist relation to this word. If there is one it is either "kept well underground" or is very new. Even a online dictionary for my language didn't find any translations.

Currently, I think it's up to the OP to decide if the title needs changing.
_________________
..: Zucca :..
Gentoo IRC channels reside on Libera.Chat.
--
Quote:
I am NaN! I am a man!
Back to top
View user's profile Send private message
stefan11111
l33t
l33t


Joined: 29 Jan 2023
Posts: 922
Location: Romania

PostPosted: Tue Sep 19, 2023 9:28 am    Post subject: Reply with quote

pc_user4 wrote:
I know this thread hasn't had activity for a bit, but "ricing" / "rice" as a verb has racist context and I suggest to disavow such language within Gentoo. I understand the "Gentoo is Rice" meme page is several decades old and the world was a very different place in the early 2000's.

I am not the only one here who endorses the use of Gentoo in professional settings, and I would be very unhappy if a current or prospective employer investigating what Gentoo is all about saw such things or came across the "Gentoo is Rice" page.

We all use Gentoo because we enjoy full control over the system and squeezing every last bit of performance out of our systems. We would all be better off to refrain from using language which may be seen as culturally insensitive.

Kindly,
pc_user4

I have seen the term rice being used on plebbit, a notorious left-wing political site which promotes "politically correctness" &co.
Using the term here seems perfectly fine.
I will also point out that you are the only one who posted about this being "racist", when the discussion was purely technical until your post.
If you disagree, please point out where in this thread did you see racism.
From my previous posts on the forum, you can see that I view ricing as a praiseworthy practice that should be preserved, so your "racism" argument holds even less water.

To me, this seems like you're grasping at straws to find something to paint me in a bad light.
Please stop derailing threads in order to do that.
Make a new thread in Gentoo forums feedback, pm me or email me if you want to talk to me.
_________________
My overlay: https://github.com/stefan11111/stefan_overlay
INSTALL_MASK="/etc/systemd /lib/systemd /usr/lib/systemd /usr/lib/modules-load.d *udev* /usr/lib/tmpfiles.d *tmpfiles* /var/lib/dbus /usr/bin/gdbus /lib/udev"
Back to top
View user's profile Send private message
sMueggli
Guru
Guru


Joined: 03 Sep 2022
Posts: 377

PostPosted: Tue Sep 19, 2023 9:41 am    Post subject: Reply with quote

pc_user4 wrote:
I know this thread hasn't had activity for a bit, but "ricing" / "rice" as a verb has racist context [...]


Hahahaha, you are very funny.

pietinger wrote:
To rape a child is forbidden in every country of our planet. But a system can be raped very easily - just install windows.


Are you sure?
Back to top
View user's profile Send private message
pietinger
Moderator
Moderator


Joined: 17 Oct 2006
Posts: 4299
Location: Bavaria

PostPosted: Tue Sep 19, 2023 9:52 am    Post subject: Reply with quote

sMueggli wrote:
Are you sure?

Only 99 % ... I am never sure, because I know I can always be wrong. Fortunately, I always find someone who improves me then.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Gentoo Chat All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum