Como criar bibliotecas compartilhadas vinculadas estáticas

Para minha tese de mestrado, estou tentando adaptar uma abordagem de biblioteca compartilhada para um sistema embarcado ARM Cortex-M3. Como nosso quadro de destino não possui MMU, acho que não faria sentido usar bibliotecas compartilhadas dinâmicas "normais". Como .text é executado diretamente do flash e .data é copiado para a RAM no momento da inicialização, não consigo endereçar .data em relação ao código, portanto, GOT também. O GOT teria que ser acessado através de um endereço absoluto que deve ser definido no tempo do link. Então, por que não atribuir endereços absolutos fixos a todos os símbolos no momento do link ...?

Do livro"Ligadores e carregadores" Fiquei ciente de "bibliotecas compartilhadas vinculadas estáticas, ou seja, bibliotecas em que os endereços de programa e dados nas bibliotecas são vinculados aos executáveis no momento do link". O capítulo vinculado descreve como essas bibliotecas podem ser criadas em geral e fornece referências ao Unix System V, BSD / OS; mas também menciona o Linux e sua chamada de sistema uselib (). Infelizmente, o livro não fornece informações sobre como realmente criar bibliotecas, como ferramentas e / ou opções de compilador / vinculador. Fora esse livro, mal encontrei outras informações sobre essas bibliotecas "em estado selvagem". A única coisa que encontrei a esse respeito foipré-ligação para Linux. Mas como isso opera em bibliotecas dinâmicas "normais", isso não é exatamente o que estou procurando.

Receio que o uso desse tipo de biblioteca seja muito específico, de modo que não exista nenhuma ferramenta comum para criá-las. Embora o syscall uselib () mencionado neste contexto me faça pensar. Mas eu queria ter certeza de que não havia esquecido nada antes de começar a invadir meu próprio vinculador ...;) Então, alguém poderia me dar mais informações sobre essas bibliotecas?

Além disso, eu estou querendo saber se existe alguma opção gcc / ld que vincule e realoque um arquivo, mas mantenha as entradas de realocação no arquivo - para que ele possa ser realocado? Encontrei a opção "-r", mas isso pula completamente o processo de realocação. Alguém tem alguma ideia?

editar:

Sim, também estou ciente dos scripts do vinculador. Comgcc libfoo.c -o libfoo -nostdlib -e initLib -Ttext 0xdeadc0de Consegui obter algum tipo de arquivo de objeto vinculado e realocado. Mas até agora não encontrei nenhuma possibilidade de vincular um programa principal a isso e usá-lo como biblioteca compartilhada. (A "maneira normal" de vincular uma biblioteca compartilhada dinâmica será recusada pelo vinculador.)

questionAnswers(3)

yourAnswerToTheQuestion