Saturday 4 November 2017

Ld output format binário opções no Brasil


Existe um conjunto de opções de linha de comando que convencerá o gcc a produzir um arquivo binário plano a partir de um arquivo de origem independente. Por exemplo, suponha que o conteúdo de foo. c não seja nenhuma referência externa, nada a ser exportado para o vinculador. Id gostaria de obter um pequeno arquivo com apenas as instruções da máquina para esta função, sem qualquer outra decoração. Tipo de como um arquivo (DOS), exceto modo protegido de 32 bits. As outras respostas são definitivamente o caminho a percorrer. No entanto, eu tinha que especificar argumentos de linha de comando adicionais para objcopy para que minha saída fosse como esperado. Observe que estou desenvolvendo código de 32 bits em uma máquina de 64 bits, daí o argumento - m32. Além disso, eu gosto de sintaxe de montagem Intel melhor, assim você verá que nos argumentos também. Ok, heres onde eu tinha que especificar que eu especificamente só queria a seção. Text: Levei cerca de 2 horas de leitura e tentar diferentes opções antes de eu descobri isso. Esperemos que isso salve alguém dessa vez. Você pode passar opções para o vinculador diretamente com - Wl, ltlinker optiongt A documentação relevante é copiada abaixo do homem gcc - Wl, opção Pass opção como uma opção para o vinculador. Se a opção contém vírgulas, ela é dividida em várias opções nas vírgulas. Você pode usar essa sintaxe para passar um argumento para a opção. Por exemplo, - Wl, - Map, output. map passa - Mapa output. map para o vinculador. Ao usar o vinculador GNU, você também pode obter o mesmo efeito com - Wl, - Mapoutput. map. Então, quando compilar com gcc se você passar - Wl, - oformatbinary você irá gerar um arquivo binário em vez do formato elf. Onde --oformatbinary informa ld para gerar um arquivo binário. Isso elimina a necessidade de objcopy separadamente. Observe que --oformatbinary pode ser expresso como OUTPUTFORMAT (binário) de dentro de um script de vinculador. Se você quiser lidar com binários planos, há uma grande chance de que você iria beneficiar de alto nível de controle que scripts linker fornecer. O linker dinâmico pode ser executado de forma indireta, executando algum programa ou biblioteca ligada dinamicamente (caso em que não existe um linkerloader dinâmico). Opções de linha de comando para o vinculador dinâmico podem ser passadas e, no caso ELF, o vinculador dinâmico que é armazenado na seção. interp do programa é executado) ou diretamente executando: libld-linux. so. OPÇÕES ARGUMENTOS DO PROGRAMA Descrição Os programas ld. so e ld-linux. so localizam e carregam as bibliotecas compartilhadas necessárias por um programa, preparam o programa para execução e depois executam-no. Os binários do Linux requerem vínculo dinâmico (vinculação em tempo de execução) a menos que a opção - static tenha sido dada a ld (1) durante a compilação. O programa ld. so manipula os binários a. out, um formato usado há muito tempo ld-linux. so manipula ELF (libld-linux. so.1 para libc5, libld-linux. so.2 para glibc2), que todo mundo tem usado Por anos agora. Caso contrário, ambos têm o mesmo comportamento e usam os mesmos arquivos e programas de suporte ldd (1), ldconfig (8) e etcld. so. conf. Ao resolver dependências de biblioteca, o vinculador dinâmico primeiro inspeciona cada seqüência de dependência para ver se ele contém uma barra (isso pode ocorrer se um caminho de biblioteca contendo barras foi especificado no momento do link). Se uma barra é encontrada, então a seqüência de dependência é interpretada como um caminho (relativo ou absoluto), ea biblioteca é carregada usando esse nome de caminho. Se uma dependência de biblioteca não contiver uma barra, então ela será pesquisada na seguinte ordem: o (somente ELF) Usando os diretórios especificados no atributo de seção dinâmica DTRPATH do atributo binário se presente e DTRUNPATH não existe. O uso de DTRPATH está obsoleto. Usando a variável de ambiente LDLIBRARYPATH. Exceto se o executável for um binário set-user-IDset-group-ID, caso em que ele será ignorado. (Somente ELF) Usando os diretórios especificados no atributo da seção dinâmica DTRUNPATH do binário, se presente. Do arquivo de cache etcld. so. cache. Que contém uma lista compilada de bibliotecas candidatas encontradas anteriormente no caminho da biblioteca aumentada. Se, entretanto, o binário foi vinculado com a opção - z nodeflib linker, as bibliotecas nos caminhos padrão da biblioteca são ignoradas. Bibliotecas instaladas em diretórios de capacidade de hardware (veja abaixo) são preferidas para outras bibliotecas. No caminho padrão lib. E depois usrlib. Se o binário foi vinculado com a opção - z nodeflib linker, esta etapa é ignorada. ORIGIN e rpath ld. so entende a seqüência ORIGIN (ou equivalentemente) em uma especificação rpath (DTRPATH ou DTRUNPATH) para significar o diretório que contém o aplicativo executável. Assim, um aplicativo localizado em somedirapp poderia ser compilado com gcc - Wl, - rpath, ORIGIN..lib para que ele encontre uma biblioteca compartilhada associada em somedirlib não importa onde somedir esteja localizado na hierarquia de diretórios. Isso facilita a criação de aplicativos turn-key que não precisam ser instalados em diretórios especiais, mas podem ser descompactados em qualquer diretório e ainda encontrar suas próprias bibliotecas compartilhadas. Liste todas as dependências e como elas são resolvidas. --verify Verifique se o programa está dinamicamente vinculado e este vinculador dinâmico pode lidar com ele. --library-path PATH Use PATH em vez da configuração da variável de ambiente LDLIBRARYPATH (veja abaixo). --inhibit-rpath LIST Ignora informações RPATH e RUNPATH em nomes de objetos em LIST. Esta opção é ignorada se ld. so for set-user-ID ou set-group-ID. --audit LIST Use objetos nomeados em LIST como auditores. Recursos de hardware Algumas bibliotecas são compiladas usando instruções específicas de hardware que não existem em cada CPU. Essas bibliotecas devem ser instaladas em diretórios cujos nomes definem as capacidades de hardware necessárias, como usrlibsse2. O vinculador dinâmico verifica esses diretórios contra o hardware da máquina e seleciona a versão mais adequada de uma determinada biblioteca. Os diretórios de recursos de hardware podem ser conectados em cascata para combinar recursos de CPU. A lista de nomes de recursos de hardware suportados depende da CPU. Os seguintes nomes são reconhecidos atualmente: Alpha ev4, ev5, ev56, ev6, ​​ev67 loongson2e, loongson2f, octeon, octeon2 PowerPC 4xxmac, altivec, arch205, arch206, booke, cellbe, dfp, efpdouble, efpsingle, fpu, icsnoop, mmu, notb , Pa6t, power4, power5, power5, power6x, ppc32, ppc601, ppc64, smt, spe, ucache, vsx SPARC flush, muldiv, stbar, swap, ultra3, v9, v9v, v9v2 dfp eimm esan3 etf3enh g5, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Hd, i386, i486, i586, Meio Ambiente Há quatro variáveis ​​de ambiente importantes. Há quatro variáveis ​​de ambiente importantes. LDBINDNOW (libc5 glibc since 2.1.1) Se definido como uma seqüência não vazia, faz com que o vinculador dinâmico resolver todos os símbolos na inicialização do programa em vez de adiar a resolução da chamada de função para o ponto quando eles são referenciados pela primeira vez. Isso é útil ao usar um depurador. LDLIBRARYPATH Uma lista separada por dois pontos de diretórios em que para procurar bibliotecas ELF em tempo de execução. Similar à variável de ambiente PATH. Ignorado nos programas set-user-ID e set-group-ID. LDPRELOAD Uma lista de bibliotecas compartilhadas ELF adicionais, especificadas pelo usuário, a serem carregadas antes de todas as outras. Os itens da lista podem ser separados por espaços ou dois pontos. Isso pode ser usado para substituir seletivamente funções em outras bibliotecas compartilhadas. As bibliotecas são pesquisadas usando as regras dadas em DESCRIÇÃO. Para os binários ELF de conjunto-usuário-IDset-grupo-ID, os nomes de caminho de pré-carregamento que contêm barras são ignorados e as bibliotecas nos diretórios de pesquisa padrão são carregadas somente se o bit de permissão set-user-ID estiver habilitado no arquivo de biblioteca. LDTRACELOADEDOBJECTS (somente ELF) Se definido como uma seqüência não vazia, faz com que o programa liste suas dependências de biblioteca dinâmica, como se executado por ldd (1), em vez de executar normalmente. Depois, existem muitas variáveis ​​mais ou menos obscuras, muitas obsoletas ou apenas para uso interno. LDAOUTLIBRARYPATH (libc5) Versão do LDLIBRARYPATH apenas para binários a. out. As versões antigas do ld-linux. so.1 também suportaram LDELFLIBRARYPATH. LDAOUTPRELOAD (libc5) Versão do LDPRELOAD apenas para binários a. out. Versões antigas do ld-linux. so.1 também suportaram LDELFPRELOAD. LDAUDIT (glibc since 2.4) Uma lista separada por dois pontos de objetos compartilhados ELF especificados pelo usuário a serem carregados antes de todos os outros em um namespace de vinculador separado (isto é, um que não invada as ligações de símbolos normais que ocorreriam no processo). Essas bibliotecas podem ser usadas para auditar a operação do vinculador dinâmico. LDAUDIT é ignorado para binários de set-user-IDset-group-ID. O vinculador dinâmico notificará as bibliotecas de auditoria nos chamados checkpoints de auditoria - por exemplo, carregar uma nova biblioteca, resolver um símbolo ou chamar um símbolo de outro objeto compartilhado - chamando uma função apropriada dentro da biblioteca de auditoria. Para obter detalhes, consulte rtld-audit (7). A interface de auditoria é amplamente compatível com a fornecida no Solaris, conforme descrito em seu Linker and Libraries Guide. No capítulo Interface de auditoria do vinculador de tempo de execução. LDBINDNOT (glibc desde 2.1.95) Não atualize GOT (tabela de deslocamento global) e PLT (tabela de vinculação de procedimento) após a resolução de um símbolo. LDDEBUG (glibc desde 2.1) Fornece informações detalhadas de depuração sobre o vinculador dinâmico. Se definido como all imprime todas as informações de depuração que tem, se configurado para ajudar imprime uma mensagem de ajuda sobre quais categorias podem ser especificadas nesta variável de ambiente. Desde o glibc 2.3.4, LDDEBUG é ignorado para binários de set-user-IDset-group-ID. LDDEBUGOUTPUT (glibc desde 2.1) Arquivo em que a saída LDDEBUG deve ser alimentada, padrão é a saída padrão. LDDEBUGOUTPUT é ignorado para binários do conjunto-usuário-IDset-grupo-ID. LDDYNAMICWEAK (glibc desde 2.1.91) Permite que os símbolos fracos sejam substituídos (voltando ao comportamento glibc antigo). Por razões de segurança, desde o glibc 2.3.4, o LDDYNAMICWEAK é ignorado para os binários de set-user-IDset-group-ID. LDHWCAPMASK (glibc desde 2.1) Máscara para recursos de hardware. LDKEEPDIR (a. out somente) (libc5) Não ignore o diretório nos nomes das bibliotecas a. out a serem carregadas. O uso desta opção é fortemente desencorajado. LDNOWARN (a. out only) (libc5) Suprime avisos sobre bibliotecas a. out com números de versão menores incompatíveis. LDORIGINPATH (glibc desde 2.1) Caminho onde o binário é encontrado (para programas não-set-user-ID). Por razões de segurança, desde o glibc 2.4, LDORIGINPATH é ignorado para os binários set-user-IDset-group-ID. LDPOINTERGUARD (glibc desde 2,4) Defina como 0 para desativar a proteção do ponteiro. Qualquer outro valor permite a proteção do ponteiro, que também é o padrão. A proteção de ponteiro é um mecanismo de segurança pelo qual alguns ponteiros para codificar armazenados em memória de programa gravável (endereços de retorno salvos por setjmp (3) ou ponteiros de função usados ​​por vários internos de glibc) são mangled semi-aleatoriamente para tornar mais difícil para um atacante para seqüestrar o Ponteiros para uso no caso de um buffer overrun ou stack-smashing ataque. LDPROFILE (glibc desde 2.1) Objeto compartilhado a ser perfilado, especificado como um nome de caminho ou um nome de filho. A saída de perfil é gravada no arquivo cujo nome é: LDPROFILEOUTPUT LDPROFILE. profile. LDPROFILEOUTPUT (glibc desde 2.1) Diretório onde LDPROFILE saída deve ser escrito. Se essa variável não for definida, ou for definida como uma string vazia, então o padrão é vartmp. LDPROFILEOUTPUT é ignorado para programas set-user-ID e set-group-ID, que sempre usam varprofile. LDSHOWAUXV (glibc since 2.1) Mostra a matriz auxiliar passada do kernel. Por razões de segurança, desde o glibc 2.3.5, o LDSHOWAUXV é ignorado para os binários de set-user-IDset-group-ID. LDUSELOADBIAS Por padrão (isto é, se essa variável não estiver definida), os executáveis ​​e os objetos compartilhados pré-ligados honrarão os endereços base de suas bibliotecas dependentes e os executáveis ​​independentes da posição (não pré-definidos) e outros objetos compartilhados não os honrarão. Se LDUSELOADBIAS for definido com o valor, tanto os executáveis ​​como as PIEs honrarão os endereços base. Se LDUSELOADBIAS é definido com o valor 0, nem executáveis ​​nem PIEs irá honrar os endereços de base. Essa variável é ignorada pelos programas set-user-ID e set-group-ID. LDVERBOSE (glibc desde 2.1) Se configurado para uma string não vazia, o símbolo de saída controlará a versão do programa se a variável LDTRACELOADEDOBJECTS tiver sido definida. LDWARN (somente ELF) (glibc desde 2.1.3) Se definido como uma seqüência não vazia, avise sobre símbolos não resolvidos. LDDARGV0 (libc5) argv 0 a ser usado por ldd (1) quando nenhum está presente. Libld. so a. out dynamic linkerloader libld-linux. so. 1, 2 ELF dynamic linkerloader etcld. so. cache Arquivo contendo uma lista compilada de diretórios em que a pesquisa de bibliotecas e uma lista ordenada de bibliotecas candidato. Etcld. so. preload Arquivo contendo uma lista separada por espaços em branco de bibliotecas compartilhadas ELF a serem carregadas antes do programa. Bibliotecas compartilhadas lib. so A funcionalidade ld. so está disponível para executáveis ​​compilados usando o libc versão 4.4.3 ou superior. A funcionalidade ELF está disponível desde Linux 1.1.52 e libc5. O linker GND ld destina-se a cobrir uma ampla gama de situações e a ser tão compatível quanto possível com outros vinculadores. Como resultado, você tem muitas opções para controlar seu comportamento. Aqui está um resumo das opções que você pode usar na linha de comando ld: Esta infinidade de opções de linha de comando pode parecer intimidante, mas na prática algumas delas são usadas em qualquer contexto específico. Por exemplo, um uso freqüente de ld é ligar arquivos de objeto Unix padrão em um sistema padrão Unix suportado. Em tal sistema, para ligar um arquivo hello. o. Isto diz ao ld para produzir um arquivo chamado saída como resultado da vinculação do arquivo libcrt0.o com hello. o e da biblioteca libc. a. Que virá dos diretórios de pesquisa padrão. (Consulte a discussão da opção - l abaixo.) As opções de linha de comando para ld podem ser especificadas em qualquer ordem e podem ser repetidas à vontade. Repetir a maioria das opções com um argumento diferente não terá mais efeito ou substituirá as ocorrências anteriores (aquelas mais à esquerda na linha de comando) dessa opção. As exceções - que podem ser usadas mais de uma vez - são - A. - b (ou seu sinônimo - format), - defsym. - EU. - eu. - R. - você. E - (ou seu sinônimo --start-group). A lista de arquivos de objeto a serem ligados, mostrados como objfile, pode seguir, preceder ou ser misturado com as opções de linha de comando, exceto que um argumento objfile não pode Ser colocado entre uma opção e seu argumento. Normalmente, o vinculador é chamado com pelo menos um arquivo de objeto, mas você pode especificar outras formas de arquivos de entrada binária usando - l. - R. Todos são especificados, o vinculador não produz qualquer saída e emite a mensagem Sem arquivos de entrada. Se o vinculador não pode reconhecer o formato de um arquivo de objeto, ele assumirá que é um script de vinculação. Um script especificado desta forma aumenta O script de vinculador principal usado para o link (ou o script de vinculador padrão ou aquele especificado usando - T). Esse recurso permite que o vinculador para vincular um arquivo que parece ser um objeto ou um arquivo, mas na verdade apenas define algum símbolo Valores, ou usa INPUT ou GROUP para carregar outros objetos. Linguagem de Comando. Para opções cujos nomes são uma única letra, os argumentos de opção devem seguir a letra da opção sem intervir em espaços em branco ou ser dados como argumentos separados imediatamente após a opção que os requer. Para opções cujos nomes são múltiplas letras, um traço ou dois podem preceder o nome da opção, por exemplo, --oformat e - formato são equivalentes. Os argumentos para as opções de várias letras devem ser separados do nome da opção por um sinal de igual ou ser dados como argumentos separados imediatamente após a opção que os requer. Por exemplo, --oformat srec e --oformatsrec são equivalentes. Aceitam-se abreviaturas únicas dos nomes das opções de várias letras. - b input-format ld pode ser configurado para suportar mais de um tipo de arquivo de objeto. Se seu ld estiver configurado desta maneira, você pode usar a opção - b para especificar o formato binário para os arquivos de objeto de entrada que seguem esta opção na linha de comando. Mesmo quando o ld está configurado para suportar formatos de objetos alternativos, normalmente não é necessário especificar isso, pois ld deve ser configurado para esperar como formato de entrada padrão o formato mais comum em cada máquina. Input-format é uma string de texto, o nome de um formato particular suportado pelas bibliotecas BFD. (Você pode listar os formatos binários disponíveis com objdump - i.) - format input-format tem o mesmo efeito, assim como o comando de script TARGET. Consulte a seção BFD. Você pode usar essa opção se estiver vinculando arquivos com um formato binário incomum. Você também pode usar - b para alternar formatos de forma explícita (ao vincular arquivos de objetos de diferentes formatos), incluindo - b input-format antes de cada grupo de arquivos de objeto em um formato específico. O formato padrão é obtido da variável de ambiente GNUTARGET. Você também pode definir o formato de entrada de um script, usando o comando TARGET, veja a seção Comandos de Opção. - Bstatic Não vincular bibliotecas compartilhadas. Isso só é significativo em plataformas para as quais bibliotecas compartilhadas são suportadas. - Link dinâmico contra bibliotecas dinâmicas. Isso só é significativo em plataformas para as quais bibliotecas compartilhadas são suportadas. Esta opção é normalmente a predefinição em tais plataformas. - Bsymbolic Ao criar uma biblioteca compartilhada, vincular referências a símbolos globais para a definição dentro da biblioteca compartilhada, se houver. Normalmente, é possível que um programa vinculado a uma biblioteca compartilhada substitua a definição na biblioteca compartilhada. Esta opção só é significativa nas plataformas ELF que suportam bibliotecas compartilhadas. - c MRI-commandfile Para compatibilidade com vinculadores produzidos por MRI, ld aceita arquivos de script escritos em uma linguagem de comando restrita e alternativa, descrita na seção MRI Compatible Script Files. Introduza arquivos de script MRI com a opção - c use a opção - T para executar scripts de vinculador escritos na linguagem de scripting ld de uso geral. Se MRI-cmdfile não existir, ld procura-lo nos diretórios especificados por quaisquer opções - L. - d - dc - dp Essas três opções são equivalentes várias formas são suportadas para compatibilidade com outros vinculadores. Eles atribuem espaço a símbolos comuns mesmo que um arquivo de saída relocável seja especificado (com - r). O comando de script FORCECOMMONALLOCATION tem o mesmo efeito. Consulte a seção Comandos de opção. - defsym expressão de símbolo Crie um símbolo global no arquivo de saída, contendo o endereço absoluto dado por expressão. Você pode usar essa opção quantas vezes forem necessárias para definir vários símbolos na linha de comando. Uma forma limitada de aritmética é suportada para a expressão neste contexto: você pode dar uma constante hexadecimal ou o nome de um símbolo existente, ou usar e - para adicionar ou subtrair constantes hexadecimais ou símbolos. Se você precisar de expressões mais elaboradas, considere usar a linguagem de comando do vinculador de um script (consulte a seção Atribuição: Definindo Símbolos). Nota: não deve haver espaço em branco entre o símbolo. O sinal de igual () e a expressão. - embedded-relocs Essa opção só é significativa ao vincular o código PIC incorporado MIPS, gerado pela opção - membedded-pic ao compilador e montador GNU. Faz com que o vinculador crie uma tabela que pode ser usada em tempo de execução para realocar qualquer dado que foi inicializado estaticamente para valores de ponteiro. Veja o código em testsuiteld-empic para mais detalhes. - e entry Utilize a entrada como o símbolo explícito para iniciar a execução do seu programa, em vez do ponto de entrada padrão. Consulte a seção O ponto de entrada. Para uma discussão de padrões e outras formas de especificar o ponto de entrada. - F - F formato Ignorado. Alguns vinculadores mais antigos usaram essa opção em toda uma cadeia de ferramentas de compilação para especificar o formato de arquivo de objeto para os arquivos de objetos de entrada e de saída. Os mecanismos ld usam para essa finalidade (as opções - b ou - format para arquivos de entrada, a opção - formato ou o comando TARGET em scripts de vinculação para arquivos de saída, a variável de ambiente GNUTARGET) são mais flexíveis, mas ld aceita a opção - F para Compatibilidade com scripts escritos para chamar o vinculador antigo. - format input-format Sinônimo de - b input-format. - g Ignorado. Fornecido para a compatibilidade com outras ferramentas. - G value - G value Defina o tamanho máximo de objetos a serem otimizados usando o GP register para tamanho sob MIPS ECOFF. Ignorado para outros formatos de arquivo de objeto. - help Imprime um resumo das opções de linha de comando na saída padrão e sair. - i Executa um link incremental (igual à opção - r). - l ar Adiciona um arquivo archive à lista de arquivos a vincular. Esta opção pode ser usada qualquer número de vezes. Ld procurará sua lista de caminho para ocorrências de lib ar. a para cada arquivo especificado. - L searchdir - L searchdir Adicionar path searchdir à lista de caminhos que ld buscará bibliotecas de arquivos e scripts de controle ld. Você pode usar esta opção qualquer número de vezes. Os diretórios são pesquisados ​​na ordem em que são especificados na linha de comando. Os diretórios especificados na linha de comando são pesquisados ​​antes dos diretórios padrão. Todas as opções - L se aplicam a todas as opções - l, independentemente da ordem em que as opções aparecem. Os caminhos também podem ser especificados em um script de link com o comando SEARCHDIR. Os diretórios especificados desta forma são pesquisados ​​no ponto em que o script de vinculador aparece na linha de comando. - M Imprimir (para a saída padrão) um mapa de link - informações de diagnóstico sobre onde os símbolos são mapeados por ld. E informações sobre alocação de armazenamento comum global. - Map mapfile Imprimir para o arquivo mapfile a link map - informações de diagnóstico sobre onde os símbolos são mapeados por ld. E informações sobre alocação de armazenamento comum global. - m emulação - m emulação Emule o emulador de ligação. Você pode listar as emulações disponíveis com as opções --verbose ou - V. O padrão depende de como seu ld foi configurado. - N Defina as seções de texto e dados para que possam ser lidas e graváveis. Além disso, não página-alinhar o segmento de dados. Se o formato de saída suporta números mágicos estilo Unix, marque a saída como OMAGIC. - n Defina o segmento de texto a ser somente leitura e marque a saída como NMAGIC, se possível. - noinhibit-exec Retenha o arquivo de saída executável sempre que ele for ainda utilizável. Normalmente, o vinculador não produzirá um arquivo de saída se encontrar erros durante o processo de ligação que ele sai sem escrever um arquivo de saída quando ele emite qualquer erro. - no-keep-memory ld normalmente otimiza a velocidade sobre o uso de memória colocando em cache as tabelas de símbolos dos arquivos de entrada na memória. Essa opção informa ld para otimizar o uso da memória, relendo as tabelas de símbolos conforme necessário. Isso pode ser necessário se ld ficar sem espaço de memória enquanto estiver vinculando um executável grande. - o output Use saída como o nome para o programa produzido por ld se esta opção não for especificada, o nome a. out é usado por padrão. O comando de script OUTPUT também pode especificar o nome do arquivo de saída. - formato saída-formato ld pode ser configurado para suportar mais de um tipo de arquivo de objeto. Se seu ld estiver configurado desta maneira, você pode usar a opção - oformat para especificar o formato binário para o arquivo de objeto de saída. Mesmo quando o ld está configurado para suportar formatos de objetos alternativos, normalmente não é necessário especificar isso, pois ld deve ser configurado para produzir como formato de saída padrão o formato mais comum em cada máquina. Output-format é uma string de texto, o nome de um formato particular suportado pelas bibliotecas BFD. (Você pode listar os formatos binários disponíveis com objdump - i.) O comando de script OUTPUTFORMAT também pode especificar o formato de saída, mas essa opção substitui-lo. Consulte a seção BFD. - R filename Ler os nomes dos símbolos e seus endereços a partir do nome do arquivo. Mas não realocá-lo ou incluí-lo na saída. Isso permite que o arquivo de saída se refira simbolicamente a locais absolutos de memória definidos em outros programas. - relax Uma opção com efeitos dependentes da máquina. Em algumas plataformas, a opção - relax executa otimizações globais que se tornam possíveis quando o vinculador resolve o endereçamento no programa, como relaxar modos de endereço e sintetizar novas instruções no arquivo de objeto de saída. - retain-symbols-file filename Retenha apenas os símbolos listados no arquivo filename. Descartando todos os outros. Filename é simplesmente um arquivo simples, com um nome de símbolo por linha. Essa opção é especialmente útil em ambientes onde uma grande tabela de símbolos global é acumulada gradualmente, para conservar a memória em tempo de execução. - retain-symbols-file não descarta símbolos indefinidos ou símbolos necessários para relocações. Você só pode especificar - retain-symbols-file uma vez na linha de comando. Substitui-s e - S. - r Gerar saída relocável - i. e. Gerar um arquivo de saída que por sua vez pode servir como entrada para ld. Isso é muitas vezes chamado de ligação parcial. Como um efeito colateral, em ambientes que suportam números mágicos Unix padrão, essa opção também define o número mágico de arquivos de saída para OMAGIC. Se essa opção não for especificada, um arquivo absoluto será produzido. Ao vincular programas C, esta opção não resolverá referências a construtores para fazer isso, use - Ur. Esta opção faz a mesma coisa que - i. - S Omitir informações de símbolo depurador (mas não todos os símbolos) do arquivo de saída. - s Omite todas as informações de símbolo do arquivo de saída. - shared Criar uma biblioteca compartilhada. Atualmente, isso só é suportado em plataformas ELF e SunOS. No SunOS, o vinculador criará automaticamente uma biblioteca compartilhada se a opção - e não for usada e houver símbolos indefinidos no link. - sort-common Normalmente, quando ld coloca os símbolos comuns globais nas seções de saída apropriadas, classifica-os por tamanho. Primeiro vêm todos os símbolos de um byte, depois todos os dois bytes, depois todos os quatro bytes e depois tudo o resto. Isso é para evitar aberturas entre símbolos devido a restrições de alinhamento. Esta opção desabilita essa classificação. - split-by-reloc count Trys para cria seções extras no arquivo de saída para que nenhuma seção de saída única no arquivo contenha mais do que contagem relocações. Isto é útil quando se gera um enorme relocável para download em determinados kernels em tempo real com o formato de arquivo de objeto COFF, já que o COFF não pode representar mais de 65535 deslocalizações em uma única seção. Observe que isso não funcionará com formatos de arquivo de objeto que não suportam seções arbitrárias. O linker não dividirá secções de entrada individuais para redistribuição, por isso, se uma única secção de entrada contiver mais do que as relocações de contagem, uma secção de saída conterá muitas deslocalizações. - split-by-file Similar a - split-by-reloc, mas cria uma nova seção de saída para cada arquivo de entrada. - stats Compute e exiba estatísticas sobre o funcionamento do vinculador, como tempo de execução e uso de memória. - Tbss org - Tdata org - Ttext org Use org como o endereço inicial para - respectivamente - o bss. dados. Ou o segmento de texto do arquivo de saída. Org deve ser um único inteiro hexadecimal para compatibilidade com outros vinculadores, você pode omitir o 0x principal normalmente associado com valores hexadecimais. - T commandfile - T commandfile Ler comandos de link do arquivo commandfile. Esses comandos substituem o script de link padrão do ld s (em vez de adicionar a ele), então commandfile deve especificar tudo o necessário para descrever o formato de destino. Consulte a seção Linguagem de Comando. Se commandfile não existir, ld procura-lo nos diretórios especificados por qualquer precedente - L opções. Várias opções - T acumulam. - t Imprime os nomes dos arquivos de entrada conforme ld os processa. - traditional-format Para alguns alvos, a saída de ld é diferente em alguns aspectos da saída de algum vinculador existente. Esta opção solicita ld para usar o formato tradicional em vez disso. Por exemplo, no SunOS, ld combina entradas duplicadas na tabela de cadeias de símbolos. Isso pode reduzir o tamanho de um arquivo de saída com informações de depuração em mais de 30 por cento. Infelizmente, o programa dbx do SunOS não consegue ler o programa resultante (o gdb não tem problemas). O parâmetro de formato tradicional informa ld para não combinar entradas duplicadas. - u símbolo Força símbolo a ser inserido no arquivo de saída como um símbolo indefinido. Isso pode, por exemplo, ativar a vinculação de módulos adicionais de bibliotecas padrão. - u pode ser repetido com argumentos de opção diferentes para inserir símbolos adicionais indefinidos. - Ur Para qualquer outra coisa que não programas C, esta opção é equivalente a - r. Ele gera saída relocável - i. e. Um arquivo de saída que por sua vez pode servir como entrada para ld. Ao ligar programas em C, - Ur resolve referências a construtores, ao contrário de - r. Ele não funciona para usar - Ur em arquivos que foram eles mesmos vinculados com - Ur uma vez que a tabela de construtor foi construída, ele não pode ser adicionado a. Use - Ur somente para o último link parcial e - r para os outros. --verbose Exibe o número da versão para ld e lista as emulações do vinculador suportadas. Exibe quais arquivos de entrada podem e não podem ser abertos. - v - V Exibe o número da versão para ld. A opção - V também lista as emulações suportadas. - version Exibe o número da versão para ld e sai. - warn-common Avisa quando um símbolo comum é combinado com outro símbolo comum ou com uma definição de símbolo. Unix linkers permitir esta prática um pouco desleixada, mas vinculadores em alguns outros sistemas operacionais não. Esta opção permite-lhe encontrar possíveis problemas de combinar símbolos globais. Infelizmente, algumas bibliotecas C usam essa prática, para que você possa receber alguns avisos sobre símbolos nas bibliotecas, bem como em seus programas. Há três tipos de símbolos globais, ilustrados aqui por exemplos C: int i 1 Uma definição, que vai na seção de dados inicializada do arquivo de saída. Extern int i Uma referência indefinida, que não aloca espaço. Deve haver uma definição ou um símbolo comum para a variável em algum lugar. Int i Um símbolo comum. Se houver apenas (um ou mais) símbolos comuns para uma variável, ele vai na área de dados não inicializada do arquivo de saída. O vinculador mescla vários símbolos comuns para a mesma variável em um único símbolo. Se eles são de tamanhos diferentes, ele escolhe o maior tamanho. O vinculador transforma um símbolo comum em uma declaração, se houver uma definição da mesma variável. A opção - warn-common pode produzir cinco tipos de avisos. Cada aviso consiste em um par de linhas: a primeira descreve o símbolo acabado de encontrar e a segunda descreve o símbolo anterior encontrado com o mesmo nome. Um ou ambos os dois símbolos serão um símbolo comum. Transformando um símbolo comum em uma referência, porque já existe uma definição para o símbolo. Transformando um símbolo comum em uma referência, porque uma definição posterior para o símbolo é encontrada. Este é o mesmo que o caso anterior, exceto que os símbolos são encontrados em uma ordem diferente. Mesclando um símbolo comum com um símbolo comum anterior do mesmo tamanho. Mesclando um símbolo comum com um símbolo comum anterior maior. Mesclando um símbolo comum com um símbolo comum anterior menor. Este é o mesmo que o caso anterior, exceto que os símbolos são encontrados em uma ordem diferente. - warn-constructors Avisar se qualquer construtores globais são usados. Isso é útil somente para alguns formatos de arquivo de objeto. Para formatos como COFF ou ELF, o vinculador não pode detectar o uso de construtores globais. - warn-once Apenas avisar uma vez para cada símbolo indefinido, em vez de uma vez por módulo que se refere a ele. For each archive mentioned on the command line, include every object file in the archive in the link, rather than searching the archive for the required object files. This is normally used to turn an archive file into a shared library, forcing every object to be included in the resulting shared library. - X Delete all temporary local symbols. For most targets, this is all local symbols whose names begin with L. - x Delete all local symbols. - y symbol Print the name of each linked file in which symbol appears. This option may be given any number of times. On many systems it is necessary to prepend an underscore. This option is useful when you have an undefined symbol in your link but dont know where the reference is coming from. -( archives -) --start-group archives --end-group The archives should be a list of archive files. They may be either explicit file names, or - l options. The specified archives are searched repeatedly until no new undefined references are created. Normally, an archive is searched only once in the order that it is specified on the command line. If a symbol in that archive is needed to resolve an undefined symbol referred to by an object in an archive that appears later on the command line, the linker would not be able to resolve that reference. By grouping the archives, they all be searched repeatedly until all possible references are resolved. Using this option has a significant performance cost. It is best to use it only when there are unavoidable circular references between two or more archives. Go to the first. previous. Próximo. last section, table of contents.

No comments:

Post a Comment