Procurando por uma solução alternativa para um bug de linker do GNU

0

Há algum tempo (provavelmente 12 anos), o linker GNU inclui suporte para arquivos de mapeamento de linker para bibliotecas compartilhadas com versão, introduzidas pela Sun em 1993.

Infelizmente, o linker GNU rejeita os arquivos de mapeamento de linkers corretos, mas gosta de ver arquivos de mapa semelhantes em ordem inversa.

Um arquivo de mapa de link correto é semelhante:

SCHILY_3 {
global:
    function5;
    function6;
local:
     *;
} SCHILY_2;

SCHILY_2 {
global:
    function3;
    function4;
local:
     *;
} SCHILY_1;

SCHILY_1 {
global:
    function1;
    function2;
local:
     *;
};

O linker GNU, no entanto, parece gostar desta maneira:

SCHILY_1 {
global:
    function1;
    function2;
local:
     *;
};

SCHILY_2 {
global:
    function3;
    function4;
local:
     *;
} SCHILY_1;

SCHILY_3 {
global:
    function5;
    function6;
local:
     *;
} SCHILY_2;

Alguém sabe uma maneira de converter automaticamente o primeiro formulário correto no segundo para usar programas on-board do UNIX / LINUX?

    
por schily 04.08.2018 / 16:37

1 resposta

0

Com a ajuda da idéia básica correta tirada de um amigo, consegui encontrar uma solução para um filtro:

| sed 's/^SCHILY/+SCHILY/' | tr '2' '@' | tr '+' '2' | sort -t. -n -k1 -k2 -k3 |  tr '@' '2'

Este primeiro sed faz o bloco começar único, o primeiro tr remove novas linhas, o segundo tr faz o bloco iniciar linhas separadas, o comando sort cria a ordem necessária e o comando% finaltr restaura todas as novas linhas.

O comando sed é um pouco complexo, pois precisa lidar com até três níveis de ordenação.

    
por 04.08.2018 / 18:58

Tags