Re: Allocate a variable in a known physical location

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 31/01/2011 22:01, isuru herath wrote:
Hi Ian,

Thanks a lot for your quick response and I am sorry for not explaining the
problem correctly.

I have a separate piece of memory for which I have given physical address
range 0x10001000 to 0x10101000. I want to allocate variables in this
address range. To achieve this I create a structure with variables I need
to allocate there. For example if I need to allocate i and j in the above
address range, I define a structure like following.

struct my
{
      int i;
      int j;
};


I don't know what OS you are using, or what you want to do with mmap. But if you have struct that you want to access at a particular address, the easiest way is with a bit of typecasting:

struct my *p = (struct my*) 0x10001000;

Then when you access p->j, for example, the generated code will use the absolute address 0x10001004 (for 32-bit ints).

mvh.,

David


and then allocate memory for the structure using mmap like below.(bear with
me if syntax are wrong).

struct my *p = mmap(........);

when ever I need to access i, j in my code I access them via pointer p like
following.

p->i or p->j

All what I need is to allocate i and j in the above address range. Due to
lack of my  knowledge in compiler and gcc this is how I did it. The
drawback of this is that to access i, it has to access p first. This
introduces an unnecessary access to my statistics. Therefore if I could
allocate i and j without using the above method I thought my problem will
be solved.

As you mentioned in your reply can I use section attribute to achieve this or do you have any other suggestion.

Any help/advice is greatly appreciated.

regards,
Isuru

--- On Mon, 1/31/11, Ian Lance Taylor<iant@xxxxxxxxxx>  wrote:

From: Ian Lance Taylor<iant@xxxxxxxxxx>
Subject: Re: Allocate a variable in a known physical location
To: "isuru herath"<isuru81@xxxxxxxxx>
Cc: gcc-help@xxxxxxxxxxx
Date: Monday, January 31, 2011, 11:21 AM
isuru herath<isuru81@xxxxxxxxx>
writes:

I need to allocate a variable in a known physical
location, let's say I need
to allocate void *p in location 0x10001000.  I
was using mmap to to do this,
but in that manner I can only allocate p[0],
p[1]...p[n] in that physical
address range. Therefore when I access p[i], accesses
to p results in
outside {0x10001000,  0x10001000+offset} and p[i]
results as an access in
the range I am interested in.

I don't understand the last sentence there.

I was wondering is there a was for me to force
to allocate variable p in that address range or I am
looking for something
totally unrealistic. Because of the nature of my
research I can use any
optimization(-O2, O3).

If you don't want to use mmap, the simplest way to put a
variable at a
specific location is to put it in a specific section using
__attribute__
((section ("..."))) and then put that section at a specific
address
using a linker script.

Ian









[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux