[LLVMdev] LLD improvement plan
Smith, Kevin B
kevin.b.smith at intel.com
Wed May 6 13:53:17 PDT 2015
While slightly off topic of LLD improvement,
volatile uint8_t __attribute__((address(0x1234))) foo;
is slightly nicer than
(*(volatile uint8_t *)0x1234)
because the latter ends up often being done in a header file as a macro, usually as something like:
#define foo (*(volatile uint8_t *)0x1234)
The former behaves with all the language scoping rules, so a foo within a function or as a parameter has the expected
behavior. The latter has all the downsides that macro usage can come with.
On topic ā Sean ā I think that is a great document on linker scripts and their usage and meaning.
Kevin Smith
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Sean Silva
Sent: Wednesday, May 06, 2015 1:34 PM
To: Will Newton
Cc: LLVM Developers Mailing List
Subject: Re: [LLVMdev] LLD improvement plan
On Wed, May 6, 2015 at 9:34 AM, Will Newton <will.newton at gmail.com<mailto:will.newton at gmail.com>> wrote:
On Wed, May 6, 2015 at 5:30 PM, Daniel Dilts <diltsman at gmail.com<mailto:diltsman at gmail.com>> wrote:
>
>
> On Wed, May 6, 2015 at 12:51 AM, Will Newton <will.newton at gmail.com<mailto:will.newton at gmail.com>> wrote:
>>
>> On Wed, May 6, 2015 at 6:22 AM, Chris Lattner <clattner at apple.com<mailto:clattner at apple.com>> wrote:
>> > On May 5, 2015, at 6:47 PM, Daniel Dilts <diltsman at gmail.com<mailto:diltsman at gmail.com>> wrote:
>> >
>> > Take a look at how debuggers have migrated through the years. They too
>> >>
>> >> used to have their own script format. Now most (all?) popular
>> >> debuggers
>> >> do scripting through embedding an actual programming language. This
>> >> could be a better way forward for linkers as well -- embed Python in
>> >> the
>> >> linker, define a Python API for linkable item placement, entry point,
>> >> symbol operations, etc..., and then you also have the rest of Python at
>> >> your fingertips.
>> >
>> >
>> > I mostly care about specifying address where specific symbols will be
>> > placed
>> > and specifying the memory layout of the platform. I normally use
>> > __attribute__((section(""))) to place the symbols in their own sections
>> > and
>> > then use the linker script to place the sections at the required
>> > addresses.
>> > How would this be accomplished without linker scripts?
>> >
>> >
>> > Iād prefer to use an "__attribute__((address(0x1234)))ā myself. That
>> > way
>> > you can control platform specifics with #ifdefs.
>>
>> But that way you have to do layout by hand in C. Generally you won't
>> know the size of the preceding code or data so you won't know what
>> address to put things at at the granularity of a single C level
>> object/function. Better to say "put this in the ROM section" and set
>> the address of the ROM section once in a linker script and let the
>> linker do the layout.
>
>
> The real use case is on platforms, like ARM, where control registers are
> mapped to a specific address range. Then it is useful to put an object that
> deals with the control registers at a specific address.
> __attribute__((address(0x1234))) can be replaced with a platform specific
> linker script. Which is better? I don't know, I haven't spent any time
> comparing them.
Why would you want to put an object at the address of some registers?
You would just want a cast would you not?
e.g. regs = (struct MyRegBlock *)0x1234
This causes you to have to be constantly dereferencing, which can result in a huge amount of syntactic overhead. CMSIS does this really consistently and do a good job at it: http://www.keil.com/pack/doc/CMSIS/Core/html/group__peripheral__gr.html
But it's sort of an all-or-nothing thing to organize the peripheral headers like that, and many platforms don't (MSP430, AVR, smaller PIC's), instead preferring to have e.g. `volatile uint8_t Foo;` for each hardware register instead of putting things in structs.
-- Sean Silva
_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150506/9c382e4d/attachment.html>
More information about the llvm-dev
mailing list