#pragma arm section [section_type_list]

このプラグマを使用すると、セクション名が以後の関数またはオブジェクトに使用されるように指定されます。 これには、初期化を行うためにコンパイラが作成する匿名オブジェクトの定義が含まれます。

Note

関数または変数の __attribute__((section(..))) を、#pragma arm section の代わりに使用できます。

Show/hide構文

#pragma arm section [section_type_list]

各項目には以下の意味があります。

section_type_list

セクション名のオプションのリストが後続の関数またはオブジェクトに使用されるように指定されます。 section_type_list の構文は以下のとおりです。

section_type[[=]"name"] [,section_type="name"]*

有効なセクションの型は以下のとおりです。

  • code

  • rodata

  • rwdata

  • zidata

Show/hide使用法

#pragma arm section [section_type_list] を使用すると、別個の名前付きセクションに関数や変数を配置することができます。 メモリ内の特定のアドレスに存在するこれらの要素は、スャッタロード記述ファイルを使用して特定できます。

Show/hide制約条件

このオプションは、以下に対しては作用しません。

  • インライン関数およびこの関数のローカルスタティック変数

  • テンプレートのインスタンスおよびこのインスタンスのローカルスタティック変数

  • 未使用の変数と関数の削除。 使用される関数や変数と同じセクションに存在する関数や変数は未使用であっても保持されますが、#pragma arm section を使用すると、リンカは、このような関数や変数を削除できることがあります。

  • 定義がオブジェクトファイルに書き込まれる順序

Show/hide

int x1 = 5;                     // .data(デフォルト)
int y1[100];                    // .bss(デフォルト)
int const z1[3] = {1,2,3};      // .constdata(デフォルト)
#pragma arm section rwdata = "foo", rodata = "bar"
int x2 = 5;                     // foo(領域のデータ部分)
int y2[100];                    // .bss
int const z2[3] = {1,2,3};      // bar
char *s2 = "abc";               // s2 は foo、"abc" は .conststring
#pragma arm section rodata
int x3 = 5;                     // foo
int y3[100];                    // .bss
int const z3[3] = {1,2,3};      // .constdata
char *s3 = "abc";               // s3 は foo、"abc" は .conststring
#pragma arm section code = "foo"
int add1(int x)                   // foo(領域のコード部分)
{
    return x+1;
} 
#pragma arm section code

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0491GJ
Non-ConfidentialID051612