Muitas seções, erro assembler, usando boost :: spirit

Eu estou no progresso de escrever um compilador para um subconjunto de Java, usandoboost::spirit, para lexing e parsing. Durante a compilação da fase lexer / parser, o compilador consome1.6GB de RAM (g++ (GCC) 4.8.1), isso não é um problema, pois há muita memória nesta máquina.

O que é um problema, no entanto, é que quando o compilador é feito, e o assembler começa a rodar (GNU assembler (GNU Binutils) 2.23.52.20130604), cai com;

as: build/src/ast_generate.o: too many sections (33098)
/tmp/cc0ZyvKK.s: Assembler messages:
/tmp/cc0ZyvKK.s: Fatal error: can't write build/src/ast_generate.o: File too big
as: build/src/ast_generate.o: too many sections (33098)
/tmp/cc0ZyvKK.s: Fatal error: can't close build/src/ast_generate.o: File too big
scons: *** [build/src/ast_generate.o] Error 1

Adicionando'-Os' ao meu compilador flags, permite que o assembler processe a saída do compilador, mas como eu vejo, é apenas uma questão de tempo, até que eu acerte o mesmo problema, mesmo com o pequeno sinalizador de otimização.

Inspecionando, o tamanho do arquivo de objeto otimizado (ast_generate.o) usandoobjdump, me diz que estou gerandope-x86-64, que é o que eu esperaria no Windows.

o2358 seções geradas, é no entanto um choque para mim. Principalmente, parece que uma seção foi gerada para cada parte doboost::spirit;

 CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_DISCARD
 ...
 60 .pdata$_ZNK5boost5lexer6detail8end_node9unique_idEv 0000000c  0000000000000000  0000000000000000  00030750  2**2
 61 .text$_ZNK5boost5lexer6detail8end_node11lexer_stateEv 00000010  0000000000000000  0000000000000000  0003075c  2**4
 ...

Então minhas perguntas são;

É o número no erro (too many sections (X)), o número de seções a serem geradas, ou é um código de erro?Por que uma seção é gerada para cada tipo de dados?O que posso fazer para evitar ter que passar'-Os' para o meu compilador. Ou seja, o que posso fazer para corrigir o problema em vez de contorná-lo?A divisão da fase lexer e parse em duas fases distintas (e unidades de compilação), conectadas somente através de um iterador lexer, me ajudaria?

Nota; Estou compilando usandocygwin64.

questionAnswers(4)

yourAnswerToTheQuestion