Não é possível carregar mais nenhum objeto com o TLS estático
Eu tenho um aplicativo que usadlopen()
para carregar módulos adicionais. O aplicativo e os módulos são criados no Ubuntu 12.04 x86_64 usando o gcc 4.6, mas para o i386 arch. Os binários são então copiados para outra máquina com exatamente o mesmo sistema operacional e funcionam bem.
No entanto, se forem copiados para o Ubuntu 12.04 i386, alguns módulos (mas não todos) não serão carregados com a seguinte mensagem:
dlopen: cannot load any more object with static TLS
Eu suspeito que isso é causado pelo uso de__thread
variáveis. No entanto, essas variáveis não são usadas nos módulos carregados - apenas no próprio módulo carregador.
Alguém pode fornecer qualquer informação adicional, qual pode ser o motivo?
Eu estou reduzindo o número de__thread
variáveis e otimizando-as (com-ftls-model
etc), estou curioso para saber por que não funcionaquase mesmo sistema.