* [U-Boot] gcc, ARM, -fdata-sections -fmerge-constants and strings
@ 2012-08-20 16:55 Tom Rini
0 siblings, 0 replies; only message in thread
From: Tom Rini @ 2012-08-20 16:55 UTC (permalink / raw)
To: u-boot
Hey all,
As I just mentioned in another thread, gcc bug #54303 [1] causes us
problems. -fmerge-constants is an optimization enabled in most levels.
On some platforms such as x86_64, when used with -fdata-sections it
means that each set of "strings" in a function will result in a
per-function .rodata.strN.N section. Later when a function isn't used
these sections can also be garbage collected. However, on ARM this
isn't what happens. All strings for an object file are collected into a
single .rodata.strN.N section. Further, these sections are combined
again when we link our library. This means that we can only garbage
collect strings for a given library when none of them are used. This is
OK in some cases as we luck out and don't need any of the functions with
printf/puts. In other cases, such as if we move the SPL framework to
common/ all of the strings we need will be retained. This pushes us
over the size limit in some cases, along with being a flat-out bug.
As this is a bug, and something that is handled correctly on other
platforms my hope is that fixing the problem won't be hard for someone
that knows the toolchain and eventually we can set a minimum requirement
on a gcc without this bug. A work-around for this would be to disable
-fmerge-constants but this results in a larger SPL binary, but not so
large as when we collected nothing. It is larger than being careful
about where we place source files, so I would only suggest this as a
work-around once we have a fixed gcc available.
[1]
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54303
--
Tom
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-08-20 16:55 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-20 16:55 [U-Boot] gcc, ARM, -fdata-sections -fmerge-constants and strings Tom Rini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.