This is the mail archive of the
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
open source real-time operating system RTEMS and we use the GNU tool
and Binutils). We use it on a couple of architectures and various
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
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.
not want this. We want simple self-contained text files that you can open,
read and edit in 30 years from now .
Why not use the default linker command file? On the small-scale systems
is no room for an ELF-loader due to resource constraints. These systems
to have a very scattered memory map. You have internal and off-chip
SRAMs, MRAMS, SDRAMS, etc. You have internal SRAMs that are located in
different peripherals that can be also use as a general-purpose RAM.
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
that region. To make this flexible I added the REGION_ALIAS feature to
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
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
to the linker script language offers more flexibility. I hope that this
is acceptable in principle.
 Imagine software for long lasting goods like container ship Diesel
or large power plants.
On 28/06/13 09:23, Sebastian Huber wrote:
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 : firstname.lastname@example.org
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.