2

いくつかの単純なコードで問題を再現しようとしています。次のような C ファイルを生成する小さなスクリプトを作成しました。

int SYM_0 = 0;
int SYM_1 = 1;
int SYM_2 = 2;
int SYM_3 = 3;
int SYM_4 = 4;
.
.
.
int SYM_16384 = 16384; 

int main() {
  int sum = 0;
  sum += SYM_0;
  sum += SYM_1;
  sum += SYM_2;
  sum += SYM_3;
  sum += SYM_4;
  .
  .
  .
  sum += SYM_16384;
  return sum;
}

つまり、基本的に 16385 個のグローバル変数です。これを -fpic でコンパイルすると、エラーなしでコンパイルされます。ただし、-fPIC でコンパイルすると、次のようになります。

/tmp/ccCB1pty.s: Assembler messages:
/tmp/ccCB1pty.s:229412: Error: operand out of range (0x00008000 is not between 0xffff8000 and 0x00007fff)

私が読んだことから、-fPIC は関数ごとに 16k エントリの最大量の GOT エントリを許可することになっているため、混乱しています。-fpic は合計 16k エントリです。では、なぜ fpic ではなく fPIC でエラーが発生するのでしょうか?

4

0 に答える 0