10.79 #pragma arm section [section_type_list]

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

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

構文

#pragma arm section [ section_type_list ]
各項目には以下の意味があります。
section_type_list
セクション名のオプションのリストが後続の関数またはオブジェクトに使用されるように指定されます。 section_type_list の構文は以下のとおりです。
section_type[[=]"name"] [,section_type="name"]*
有効なセクションの型は以下のとおりです。

使用法

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

制約条件

このオプションは、以下に対しては作用しません。
  • --no_ool_section_name コマンドラインオプションが指定されている場合は、インライン関数とそのローカルスタティック変数。
  • テンプレートのインスタンスおよびこのインスタンスのローカルスタティック変数
  • 未使用の変数と関数の削除。使用される関数や変数と同じセクションに存在する関数や変数は未使用であっても保持されますが、#pragma arm section を使用すると、リンカは、このような関数や変数を削除できることがあります。
  • 定義がオブジェクトファイルに書き込まれる順序

int x1 = 5;                     // in .data (default)
int y1[100];                    // in .bss (default)
int const z1[3] = {1,2,3};      // in .constdata (default)
#pragma arm section rwdata = "foo", rodata = "bar"
int x2 = 5;                     // in foo (data part of region)
int y2[100];                    // in .bss
int const z2[3] = {1,2,3};      // in bar
char *s2 = "abc";               // s2 in foo, "abc" in .conststring
#pragma arm section rodata
int x3 = 5;                     // in foo
int y3[100];                    // in .bss
int const z3[3] = {1,2,3};      // in .constdata
char *s3 = "abc";               // s3 in foo, "abc" in .conststring
#pragma arm section code = "foo"
int add1(int x)                   // in foo (code part of region)
{
    return x+1;
} 
#pragma arm section code
関連する参考文書
10.49 __attribute__((section("name"))) 関数属性
8.142 --ool_section_name、--no_ool_section_name
関連情報
スキャッタロード機能
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.