tech-toolchain archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: gcc m68k default optimization flag
mrg@ wrote:
> BTW, if you think that GCC 4.8 is working fine with this
> change, it's probably time to switch the default for it?
In my opinion, someone[tm] who will handle gcc48 migration
schedule should explicitly ask port-maintainers and users
to check MD binaries, especially kernels and bootloaders.
There was a developer who claimed we didn't need such announcement
in public, but as a Tier-II port maintainer, such strategy
"no announcement of migration but it's Tier-II users' responsibility"
seems quite inconsistent.
Anyway, we had several MD problem on gcc 4.1.x and 4.5.x migration
http://mail-index.netbsd.org/source-changes/2009/01/06/msg214930.html
http://mail-index.netbsd.org/source-changes/2012/07/26/msg035956.html
and that's why I've tried whole installation on my ports.
At least gcc 4.8.x seems no longer keep the order of const data
in ro section. For example, gcc 4.8.3 make the following diff
on x68k/stand/boot_ustarfs:
% diff -u fdboot_ustar.gcc4?.dump
--- fdboot_ustar.gcc45.dump 2014-06-22 17:38:54.000000000 +0900
+++ fdboot_ustar.gcc48.dump 2014-06-22 17:38:58.000000000 +0900
@@ -59,6 +59,6 @@
000003a0 2a 40 2c 40 4e d0 4e b9 00 00 22 ec 49 6c 6c 65 |*@,@N.N...".Ille|
000003b0 67 61 6c 20 73 65 63 6f 6e 64 61 72 79 20 62 6f |gal secondary bo|
000003c0 6f 74 00 00 4e b9 00 00 22 ec 49 6e 76 61 6c 69 |ot..N...".Invali|
-000003d0 64 20 6d 61 67 69 63 00 31 2e 30 00 36 2e 39 39 |d magic.1.0.6.99|
-000003e0 2e 34 33 00 |.43.|
+000003d0 64 20 6d 61 67 69 63 00 36 2e 39 39 2e 34 33 00 |d magic.6.99.43.|
+000003e0 31 2e 30 00 |1.0.|
000003e4
% cat obj.x68k/vers.c
const char bootprog_rev[] = "1.0";
const char bootprog_kernrev[] = "6.99.43";
%
---
If there are bootloaders (and other standalone binaries) that assume
the order of data is the same as the C source layout, they would fail.
Atari's bootloader assumed that the first function in the C source
would be allocated at the top of the binary, and it failed on
gcc 4.1 migration, for example.
There are also more issue on gcc 4.8.x with -O2 on m68k:
- doc/HACKS says the following entry:
---
hack gcc-4.8.1
cdate Wed Nov 6 20:41:35 EST 2013
who christos
file src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6
descr
compile hashtable_c++0x.cc with -O2 instead of -Os to
produce missing instantiation of std::lower_bound expansion
for unsigned long.
kcah
---
but I can't find what's the hack.
- I'm trying whole build.sh release with gcc 4.8.3 and
"-O2 -fno-reorder-blocks" but it looks more tweaks are needed
around libgcc_s:
---
# build libgcc_s/libgcc_s.so.1.0
rm -f libgcc_s.so.1.0
/usr/local/src/obj.hp300/tooldir.Linux-2.6.32-042stab079.5-i686/bin/m68k--netbsdelf-gcc
-nodefaultlibs -Wl,-x -shared -Wl,-soname,libgcc_s.so.1
-Wl,--warn-shared-textrel -Wl,-Map=libgcc_s.so.1.map
--sysroot=/usr/local/src/obj.hp300/destdir.hp300 -nodefaultlibs
-Wl,--version-script=/usr/local/src/external/gpl3/gcc/lib/libgcc/libgcc_s/obj.hp300/libgcc.map
-o libgcc_s.so.1.0 -Wl,-rpath,/lib -L=/lib -Wl,--whole-archive
libgcc_s_pic.a -Wl,--no-whole-archive
libgcc_s_pic.a(_float.pico):(.text+0x8): relocation truncated to fit:
R_68K_PC16 against symbol `$_exception_handler' defined in .text section in
libgcc_s_pic.a(_floatex.pico)
libgcc_s_pic.a(_float.pico):(.text+0x18): relocation truncated to fit:
R_68K_PC16 against symbol `$_exception_handler' defined in .text section in
libgcc_s_pic.a(_floatex.pico)
libgcc_s_pic.a(_float.pico):(.text+0x22): relocation truncated to fit:
R_68K_PC16 against symbol `$_exception_handler' defined in .text section in
libgcc_s_pic.a(_floatex.pico)
libgcc_s_pic.a(_float.pico):(.text+0x2c): relocation truncated to fit:
R_68K_PC16 against symbol `$_exception_handler' defined in .text section in
libgcc_s_pic.a(_floatex.pico)
libgcc_s_pic.a(_float.pico):(.text+0x3c): relocation truncated to fit:
R_68K_PC16 against symbol `$_exception_handler' defined in .text section in
libgcc_s_pic.a(_floatex.pico)
/usr/local/src/obj.hp300/tooldir.Linux-2.6.32-042stab079.5-i686/lib/gcc/m68k--netbsdelf/4.8.3/../../../../m68k--netbsdelf/bin/ld:
warning: creating a DT_TEXTREL in a shared object.
collect2: error: ld returned 1 exit status
*** Failed target: libgcc_s.so.1.0
---
I have not checked why this doesn't happen with -Os.
etc.
---
Izumi Tsutsui
Home |
Main Index |
Thread Index |
Old Index