This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] [LD] Add ALIGN_WITH_INPUT output section attribute
- From: Sebastian Huber <sebastian dot huber at embedded-brains dot de>
- To: binutils at sourceware dot org
- Date: Sun, 30 Jun 2013 18:14:12 +0200
- Subject: Re: [PATCH] [LD] Add ALIGN_WITH_INPUT output section attribute
- References: <1372342669-4598-1-git-send-email-sebastian dot huber at embedded-brains dot de> <51CD39EA dot 5090604 at embedded-brains dot de>
Let me explain a bit more why this feature is important for us. We
support the
open source real-time operating system RTEMS and we use the GNU tool
chain (GCC
and Binutils). We use it on a couple of architectures and various
chips. It
ranges from small-scale platforms (KiB of code and data space) to multi-core
high-performance embedded systems with GiB of RAM available. The ARM and
PowerPC platforms for example offer chips in the whole range. So it is
tempting to use one general linker command file to cover all systems of an
architecture.
We want to use the GNU tool chain alone. Some software or hardware vendors
ship fancy (closed source) development environments that generate perfect
linker command files automatically for their systems with nice wizards.
We do
not want this. We want simple self-contained text files that you can open,
read and edit in 30 years from now [1].
Why not use the default linker command file? On the small-scale systems
there
is no room for an ELF-loader due to resource constraints. These systems
tend
to have a very scattered memory map. You have internal and off-chip
flashes,
SRAMs, MRAMS, SDRAMS, etc. You have internal SRAMs that are located in
different peripherals that can be also use as a general-purpose RAM.
The GNU
ld offers the VMA and LMA regions to deal with this issue. For each output
section you can say the VMA addresses go into this region and for the
LMA use
that region. To make this flexible I added the REGION_ALIAS feature to
GNU ld
in 2009 (http://sourceware.org/bugzilla/show_bug.cgi?id=7031).
Various standards and tools expect to see certain output sections in the
executable ELF file. So the approach to merge output sections together
to deal
with the change to fix PR15222 did not work
(http://sourceware.org/ml/binutils/2013-05/msg00195.html). This leaves a
command line option or an addition to the linker script language. The
addition
to the linker script language offers more flexibility. I hope that this
change
is acceptable in principle.
[1] Imagine software for long lasting goods like container ship Diesel
engines
or large power plants.
On 28/06/13 09:23, Sebastian Huber wrote:
Hello,
what is the background of this patch?
Before 2.23.2 I did this:
1. Get the default linker script (ld --verbose).
2. For each output section select a VMA and LMA region.
3. Sort the output sections according to LMA region and preserve order
of default linker script in each LMA region equivalence class.
4. Add begin, end and size symbols for each VMA and LMA region pair.
Use memcpy() in the application start code to initialize the VMA regions.
5. Add custom sections.
With the change in 2.23.2 step 4 is broken. I had to merge all output
sections of a VMA and LMA region pair into one. This breaks for
example the dynamic linking and debugging in C++. I had to introduce
special cases for small-data areas and ARM exception tables. In order
to overcome these problems I propose the ALIGN_WITH_INPUT attribute to
restore the behaviour prior to 2.23.2.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.