summaryrefslogtreecommitdiffstats
path: root/man/pt/dpkg-buildflags.pod
diff options
context:
space:
mode:
Diffstat (limited to 'man/pt/dpkg-buildflags.pod')
-rw-r--r--man/pt/dpkg-buildflags.pod646
1 files changed, 0 insertions, 646 deletions
diff --git a/man/pt/dpkg-buildflags.pod b/man/pt/dpkg-buildflags.pod
deleted file mode 100644
index e630c4f..0000000
--- a/man/pt/dpkg-buildflags.pod
+++ /dev/null
@@ -1,646 +0,0 @@
-
- *****************************************************
- * GENERATED FILE, DO NOT EDIT *
- * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
- *****************************************************
-
-This file was generated by po4a(7). Do not store it (in VCS, for example),
-but store the PO file used as source file by po4a-translate.
-
-In fact, consider this as a binary, and the PO file as a regular .c file:
-If the PO get lost, keeping this translation up-to-date will be harder.
-
-=encoding UTF-8
-
-=head1 NOME
-
-dpkg-buildflags - retorna flags de compilação para usar durante a compilação de pacotes
-
-=head1 RESUMO
-
-B<dpkg-buildflags> [I<option>...] [I<command>]
-
-=head1 DESCRIÇÃO
-
-B<dpkg-buildflags> é uma ferramenta para obter flags de compilação para usar durante a compilação de pacotes Debian.
-
-As flags predefinidas são definidas pelo fornecedor mas podem ser estendidas/sobrepostas de várias maneiras:
-
-=over
-
-=item 1.
-
-de todo o sistema com B<%PKGCONFDIR%/buildflags.conf>;
-
-=item 2.
-
-para o utilizador actual com B<$XDG_CONFIG_HOME/dpkg/buildflags.conf> onde B<$XDG_CONFIG_HOME> usa por predefinição B<$HOME/.config>;
-
-=item 3.
-
-temporarily by the user with environment variables (see section L</ENVIRONMENT>);
-
-=item 4.
-
-dynamically by the package maintainer with environment variables set via B<debian/rules> (see section L</ENVIRONMENT>).
-
-=back
-
-Os ficheiros de configuração podem conter quatro tipos de directivas:
-
-=over
-
-=item B<SET> I<flag> I<value>
-
-Sobrescreve a flag chamada I<flag> para ter o valor I<valor>.
-
-=item B<STRIP> I<flag> I<value>
-
-Despoja da flag chamada I<flag> todas as flags de compilação listadas em I<valor>. Desde dpkg 1.16.1.
-
-=item B<APPEND> I<flag> I<value>
-
-Estende a flag chamada I<flag> ao acrescentar as opções dadas em I<valor>. É usado um espaço a preceder o valor acrescentado se o valor da flag actual não estiver vazio.
-
-=item B<PREPEND> I<flag> I<value>
-
-Estende a flag chamada I<flag> ao precede-la com as opções dadas em I<valor>. É acrescentado um espaço ao valor precedido se o valor da flag actual não estiver vazio. Desde dpkg 1.16.1.
-
-=back
-
-Os ficheiros de configuração podem conter comentários nas linhas que começam com um cardinal (#). As linhas vazias também são ignoradas.
-
-Este programa foi introduzido no dpkg 1.15.7.
-
-=head1 COMANDOS
-
-=over
-
-=item B<--dump>
-
-Escreve na saída standard todas as bandeiras de compilação e os seus valores. Escreve uma bandeira por linha separada do seu valor por um sinal de igual ("I<flag>=I<value>"). Esta é a acção predefinida.
-
-=item B<--list>
-
-Print the list of flags supported by the current vendor (one per line). See the L</SUPPORTED FLAGS> section for more information about them.
-
-=item B<--status>
-
-Mostra qualquer informação que possa ser útil para explicar o comportamento de B<dpkg-buildflags> (desde dpkg 1.16.5): variáveis de ambiente relevantes, fornecedor actual, estado de todas as bandeiras de funcionalidades. Também escreve as bandeira de compilação resultantes com as suas origens.
-
-Isto destina-se a ser corrido a partir de B<debian/rules>, para que os relatórios de compilação mantenham um rasto claro das bandeiras de compilação usadas. Isto pode ser útil para diagnosticar problemas relacionados com elas.
-
-=item B<--export=>I<format>
-
-Escreve na saída standard comandos que podem ser usados para exportar todas as bandeiras de compilação para alguma ferramenta particular. Se o valor I<format> não for fornecido, é assumido B<sh>. Apenas são incluídas bandeiras que comecem com um caractere maiúsculo, as outras são assumidas como não apropriadas para o ambiente. Formatos suportados:
-
-=over
-
-=item B<sh>
-
-Comandos de shell para definir e exportar todas as bandeiras de compilação no ambiente. Os valores das bandeiras são citados para que o resultado esteja pronto para avaliação pela shell.
-
-=item B<cmdline>
-
-Argumentos a passar para a linha de comandos dos programas de compilação para se usar todas as bandeiras de compilação (desde dpkg 1.17.0). Os valores das bandeiras são citados na sintaxe da shell.
-
-=item B<configure>
-
-Este é um nome alternativo antigo para B<cmdline>.
-
-=item B<make>
-
-Faz as directivas definir e exportar todas as bandeiras de compilação no ambiente. O resultado pode ser escrito para o fragmento do Makefile e avaliado usando uma directiva B<include>.
-
-=back
-
-=item B<--get> I<flag>
-
-Escreve o valor da flag na saída standard. Termina com 0 se a flag for conhecida, caso contrário termina com 1.
-
-=item B<--origin> I<flag>
-
-Escreve a origem do valor que é devolvido por B<--get>. Termina com 0 se a flag for conhecida, caso contrário termina com 1. A origem pode ser um dos seguintes valores:
-
-=over
-
-=item B<vendor>
-
-é devolvida a flag origina definida pelo fornecedor;
-
-=item B<system>
-
-a flag é definida/modifica por uma configuração de todo o sistema;
-
-=item B<user>
-
-a flag é definida/modifica por uma configuração específica do utilizador;
-
-=item B<env>
-
-a flag é definida/modifica por uma configuração específica do ambiente;
-
-=back
-
-=item B<--query>
-
-Escreve qualquer informação que possa ser útil para explicar o comportamento do programa: fornecedor actual, variáveis de ambiente relevantes, áreas de funcionalidades, estado de todas as bandeiras de funcionalidades, se uma funcionalidade é lidada como uma predefinição de compilação pelo compilador (desde dpkg 1.21.14), a as bandeiras de compilação com as suas origens (desde dpkg 1.19.0).
-
-Por exemplo:
-
- Vendor: Debian
- Environment:
- DEB_CFLAGS_SET=-O0 -Wall
-
- Area: qa
- Features:
- bug=no
- canary=no
- Builtins:
-
- Area: hardening
- Features:
- pie=no
- Builtins:
- pie=yes
-
- Area: reproducible
- Features:
- timeless=no
- Builtins:
-
- Flag: CFLAGS
- Value: -O0 -Wall
- Origin: env
-
- Flag: CPPFLAGS
- Value: -D_FORTIFY_SOURCE=2
- Origin: vendor
-
-=item B<--query-features> I<area>
-
-Escreve as funcionalidades activadas para uma dada área (desde dpkg 1.16.2). Se a funcionalidade é lidada (mesmo que apenas em algumas arquitecturas) como predefinição de compilação pelo compilador, então é escrito um campo B<Builtin> (desde dpkg 1.21.14). As únicas áreas actualmente reconhecidas em Debian e derivados são B<future>, B<qa>, B<reproducible>, B<sanitize> e B<hardening>, veja a secção B<ÁREAS DE CARACTERÍSTICAS> para mais detalhes. Termina com 0 se a área é conhecida caso contrário termina com 1.
-
-O resultado está em formato RFC822, com uma secção por característica. Por exemplo:
-
- Feature: pie
- Enabled: yes
- Builtin: yes
-
- Feature: stackprotector
- Enabled: yes
-
-=item B<--help>
-
-Mostra a mensagem de utilização e termina.
-
-=item B<--version>
-
-Mostra a versão e termina.
-
-=back
-
-=head1 FLAGS SUPORTADAS
-
-=over
-
-=item B<ASFLAGS>
-
-Options for the host assembler. Default value: empty. Since dpkg 1.21.0.
-
-=item B<CFLAGS>
-
-Options for the host C compiler. The default value set by the vendor includes B<-g> and the default optimization level (B<-O2> usually, or B<-O0> if the B<DEB_BUILD_OPTIONS> environment variable defines I<noopt>).
-
-=item B<CPPFLAGS>
-
-Options for the host C preprocessor. Default value: empty.
-
-=item B<CXXFLAGS>
-
-Options for the host C++ compiler. Same as B<CFLAGS>.
-
-=item B<OBJCFLAGS>
-
-Options for the host Objective C compiler. Same as B<CFLAGS>. Since dpkg 1.17.7.
-
-=item B<OBJCXXFLAGS>
-
-Options for the host Objective C++ compiler. Same as B<CXXFLAGS>. Since dpkg 1.17.7.
-
-=item B<DFLAGS>
-
-Options for the host D compiler (ldc or gdc). Since dpkg 1.20.6.
-
-=item B<FFLAGS>
-
-Options for the host Fortran 77 compiler. A subset of B<CFLAGS>.
-
-=item B<FCFLAGS>
-
-Options for the host Fortran 9x compiler. Same as B<FFLAGS>. Since dpkg 1.17.7.
-
-=item B<LDFLAGS>
-
-Options passed to the host compiler when linking executables or shared objects (if the linker is called directly, then B<-Wl> and B<,> have to be stripped from these options). Default value: empty.
-
-=item B<ASFLAGS_FOR_BUILD>
-
-Options for the build assembler. Default value: empty. Since dpkg 1.22.1.
-
-=item B<CFLAGS_FOR_BUILD>
-
-Options for the build C compiler. The default value set by the vendor includes B<-g> and the default optimization level (B<-O2> usually, or B<-O0> if the B<DEB_BUILD_OPTIONS> environment variable defines I<noopt>). Since dpkg 1.22.1.
-
-=item B<CPPFLAGS_FOR_BUILD>
-
-Options for the build C preprocessor. Default value: empty. Since dpkg 1.22.1.
-
-=item B<CXXFLAGS_FOR_BUILD>
-
-Options for the build C++ compiler. Same as B<CFLAGS_FOR_BUILD>. Since dpkg 1.22.1.
-
-=item B<OBJCFLAGS_FOR_BUILD>
-
-Options for the build Objective C compiler. Same as B<CFLAGS_FOR_BUILD>. Since dpkg 1.22.1.
-
-=item B<OBJCXXFLAGS_FOR_BUILD>
-
-Options for the build Objective C++ compiler. Same as B<CXXFLAGS_FOR_BUILD>. Since dpkg 1.22.1.
-
-=item B<DFLAGS_FOR_BUILD>
-
-Options for the build D compiler (ldc or gdc). Since dpkg 1.22.1.
-
-=item B<FFLAGS_FOR_BUILD>
-
-Options for the build Fortran 77 compiler. A subset of B<CFLAGS_FOR_BUILD>. Since dpkg 1.22.1.
-
-=item B<FCFLAGS_FOR_BUILD>
-
-Options for the build Fortran 9x compiler. Same as B<FFLAGS_FOR_BUILD>. Since dpkg 1.22.1.
-
-=item B<LDFLAGS_FOR_BUILD>
-
-Options passed to the build compiler when linking executables or shared objects (if the linker is called directly, then B<-Wl> and B<,> have to be stripped from these options). Default value: empty. Since dpkg 1.22.1.
-
-=back
-
-Podem ser adicionadas novas bandeiras no futuro se a necessidade surgir (por exemplo para suportar outras linguagens).
-
-=head1 ÁREAS DE CARACTERÍSTICAS
-
-Cada funcionalidade de área pode ser activada ou desactivada no valor da área das variáveis de ambiente B<DEB_BUILD_OPTIONS> e B<DEB_BUILD_MAINT_OPTIONS> com o modificador ‘B<+>’ e ‘B<->’. Por exemplo, par activar a funcionalidade "pie" de B<hardening> e desactivar a funcionalidade “fortify” você pode fazer isto em B<debian/rules>:
-
- export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
-
-A funcionalidade especial B<all> (válida em qualquer área) pode ser usada para activar ou desactivar todas as funcionalidades de área ao mesmo tempo. Assim desactivar tudo na área B<hardening> e activar apenas apenas “format” e “fortify” pode ser obtido com:
-
- export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
-
-=head2 abi
-
-Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para activar funcionalidades que podem modificar o ABI dum pacote, mas não podem estar activas por predefinição devido a razões de compatibilidade com versões anteriores, a menos que sejam coordenadas ou verificadas individualmente.
-
-=over
-
-=item B<lfs>
-
-Esta definição (desde dpkg 1.22.00; desactivada por predefinição) activa Suporte Ficheiros Longos em arquitecturas de 32-bit onde o seu ABI não inclui LFS (Large File Support) por predefinição, ao adicionar B<-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64> a B<CPPFLAGS>.
-
-Quando esta funcionalidade é activa irá sobrepor o valor da mesma funcionalidade na área de funcionalidades B<future>.
-
-=item B<time64>
-
-Esta definição (desde dpkg 1.22.0; desactivada por predefinição) activa suporte time_t de 64bit em arquitecturas de 32-bit onde o seu ABI não a inclui por predefinição, ao adicionar B<-D_TIME_BITS=64> a B<CPPFLAGS>. Esta definição activa automaticamente a funcionalidade B<lfs> porque a requer.
-
-=back
-
-=head2 future
-
-Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para activar funcionalidades que deveria estar activadas por predefinição, mas não podem estar por razões de compatibilidade com versões anteriores.
-
-=over
-
-=item B<lfs>
-
-Esta definição (desde dpkg 1.19.0; desactivada por predefinição) é agora um nome alternativo para a funcionalidade B<lfs> na área B<abi>, use esta em vez da anterior. A funcionalidade da ária B<abi> sobrepõe esta definição.
-
-=back
-
-=head2 qa
-
-Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a detectar no código fonte ou no sistema de compilação.
-
-=over
-
-=item B<bug-implicit-func>
-
-This setting (since dpkg 1.22.3; disabled by default) adds B<-Werror=implicit-function-declaration> to B<CFLAGS>.
-
-=item B<bug>
-
-Esta definição (desde dpkg 1.17.4; desactivada por predefinição) adiciona qualquer opção de aviso de detecção de fiabilidade problemática no código fonte. Os avisos são fatais. As únicas bandeiras presentemente suportadas são B<CFLAGS> e B<CXXFLAGS> com bandeiras definidas para B<-Werror=array-bounds>, B<-Werror=clobbered>, B<-Werror=implicit-function-declaration> e B<-Werror=volatile-register-var>.
-
-This feature handles B<-Werror=implicit-function-declaration> via the B<bug-implicit-func> feature, if that has not been specified.
-
-=item B<canary>
-
-Esta definição (desde dpkg 1.17.14; desactivada por predefinição) adiciona opções canary fantoches às bandeiras de compilação, para que os relatórios de compilação possam ser verificados em como as bandeiras de compilação se propagam e para permitir encontrar qualquer omissão de definições normais de bandeiras de compilação. As únicas bandeiras actualmente suportadas são B<CPPFLAGS>, B<CFLAGS>, B<OBJCFLAGS>, B<CXXFLAGS> e B<OBJCXXFLAGS> com bandeiras definidas para B<-D__DEB_CANARY_>I<flag>_I<random-id>B<__>, e B<LDFLAGS> definida para B<-Wl,-z,deb-canary->I<random-id>.
-
-=back
-
-=head2 optimize
-
-Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a optimizar um binário resultante (desde dpkg 1.21.0). B<Nota>: ativador B<todas> estas opções pode resultar em artefactos binários não reproduzíveis.
-
-=over
-
-=item B<lto>
-
-This setting (since dpkg 1.21.0; disabled by default) enables Link Time Optimization by adding B<-flto=auto -ffat-lto-objects> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS>, B<FCFLAGS> and B<LDFLAGS>.
-
-=back
-
-=head2 sanitize
-
-Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a higienizar um binário resultante contra corrupções de memória, fugas de memória, utilização após livre, segmentação de dados e bugs de comportamento indefinido. B<Nota>: estas opções B<não> devem ser usadas para compilações de produção pois elas podem reduzir a confiança na conformidade do código, reduzir a segurança ou mesmo a funcionalidade.
-
-=over
-
-=item B<address>
-
-Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=address> a B<LDFLAGS> e B<-fsanitize=address -fno-omit-frame-pointer> a B<CFLAGS> e B<CXXFLAGS>.
-
-=item B<thread>
-
-Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=thread> a B<CFLAGS>, B<CXXFLAGS> e B<LDFLAGS>.
-
-=item B<leak>
-
-Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=leak> a B<LDFLAGS>. Fica automaticamente desactivada se as funcionalidades B<address> ou B<thread> estiverem activas, pois elas já implicam isto.
-
-=item B<undefined>
-
-Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=undefined> a B<CFLAGS>, B<CXXFLAGS> e B<LDFLAGS>.
-
-=back
-
-=head2 endurecimento
-
-Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a endurecer um binário resultante contra ataques de corrupção de memória, ou disponibilizar mensagens de aviso adicionais durante a compilação. Excepto como notado em baixo, estas estão activadas por predefinição para as arquitecturas que as suportam.
-
-=over
-
-=item B<format>
-
-Esta definição (desde dpkg 1.16.1; activada por predefinição) adiciona B<-Wformat -Werror=format-security> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS> e B<OBJCXXFLAGS>. Isto irá avisar sobre uso de strings de formato impróprias, e irá falhar quando funções de formato forem usadas em modo que representem possíveis problemas de segurança. Presentemente, isto avisa sobre chamadas a funções B<printf> e B<scanf> onde a string de formato não é uma string literal e não existem argumentos de formato, como em B<printf(foo);> em vez de B<printf("%s", foo);> Isto pode ser um buraco de segurança se a string de formato vier de uma entrada não confiável e conter ‘%n’.
-
-=item B<fortify>
-
-Esta definição (desde dpkg 1.16.1; activada por predefinição) adiciona B<-D_FORTIFY_SOURCE=2> a B<CPPFLAGS>. Durante a geração de código o compilador sabe muita informação sobre tamanhos de buffer (onde possível), e tenta substituir chamadas de função buffer de comprimento ilimitadas e inseguras por umas limitadas em comprimento. Isto é especialmente útil para código antigo, desnecessariamente complicado. Adicionalmente, as strings de formato em memória gravável que contêm ‘%n’ são bloqueadas. Se uma aplicação depender de tal string de formato, isso terá que ser contornado.
-
-Note que para esta opção ter algum efeito, a fonte tem de também ser compilada com B<-O1> ou superior. Se a variável de ambiente B<DEB_BUILD_OPTIONS> conter I<noopt>, então o suporte a B<fortify> será desactivado, devido a novos avisos serem emitidos pelo glibc 2.16 e posterior.
-
-=item B<stackprotector>
-
-This setting (since dpkg 1.16.1; enabled by default if stackprotectorstrong is not in use) adds B<-fstack-protector --param=ssp-buffer-size=4> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS>. This adds safety checks against stack overwrites. This renders many potential code injection attacks into aborting situations. In the best case this turns code injection vulnerabilities into denial of service or into non-issues (depending on the application).
-
-Esta funcionalidade requer ligação (link) a glibc (ou outro fornecedor de B<__stack_chk_fail>), portanto precisa de ser desactivada quando se compila com B<-nostdlib> ou B<-ffreestanding> ou semelhante.
-
-=item B<stackprotectorstrong>
-
-This setting (since dpkg 1.17.11; enabled by default) adds B<-fstack-protector-strong> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS>. This is a stronger variant of B<stackprotector>, but without significant performance penalties.
-
-Desactivar B<stackprotector> irá também desactivar esta definição.
-
-Esta funcionalidade tem os mesmos requerimentos que B<stackprotector>, e adicionalmente também requer gcc 4.9 e posterior.
-
-=item B<stackclash>
-
-This setting (since dpkg 1.22.0; enabled by default) adds B<-fstack-clash-protection> on B<amd64>, B<arm64>, B<armhf> and B<armel> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS>. This adds code to prevent stack clash style attacks.
-
-=item B<branch>
-
-This setting (since dpkg 1.22.0; enabled by default) adds B<-fcf-protection> on B<amd64> and B<-mbranch-protection=standard> on B<arm64> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS>. This adds branch protection to indirect calls, jumps and returns to check whether these are valid at run-time.
-
-=item B<relro>
-
-Esta definição (desde dpkg 1.16.1; activada por predefinição) adiciona B<-Wl,-z,relro> a B<LDFLAGS>. Durante o carregamento do programa, várias secções de memória ELF precisam de ser escritas pelo vinculador. Isto sinaliza ao carregador para tornar estas secções só-leitura antes de entregar o controlo ao programa. Mais notavelmente isto previne ataques de sobrescrita GOT. Se esta opção for desactivada, B<bindnow> irá ficar também desactivado.
-
-=item B<bindnow>
-
-Esta definição (desde dpkg 1.16.1; desactivada por predefinição) adiciona B<-Wl,-z,now> a B<LDFLAGS>. Durante o carregamento do programa, todos os símbolos dinâmicos são resolvidos, permitindo que todo o PLT seja marcado só-leitura (devido ao B<relro> em cima). A opção pode ser activada se B<relro> não for activado.
-
-=item B<pie>
-
-This setting (since dpkg 1.16.1; with no global default since dpkg 1.18.23, as it is enabled by default now by gcc on the amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc and sparc64 Debian architectures) adds the required options to enable or disable PIE via gcc specs files, if needed, depending on whether gcc injects on that architecture the flags by itself or not. When the setting is enabled and gcc injects the flags, it adds nothing. When the setting is enabled and gcc does not inject the flags, it adds B<-fPIE> (via I<%PKGDATADIR%/pie-compiler.specs>) to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS>, and B<-fPIE -pie> (via I<%PKGDATADIR%/pie-link.specs>) to B<LDFLAGS>. When the setting is disabled and gcc injects the flags, it adds B<-fno-PIE> (via I<%PKGDATADIR%/no-pie-compile.specs>) to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS>, and B<-fno-PIE -no-pie> (via I<%PKGDATADIR%/no-pie-link.specs>) to B<LDFLAGS>.
-
-Position Independent Executable (PIE) é necessário para tirar vantagem de Address Space Layout Randomization (ASLR), suportado por algumas versões de kernel. Enquanto ASLR já pode ser aplicada para áreas de dados na stack e heap (brk e mmap), as áreas de código têm de ser compiladas como independente-de-posição. As bibliotecas partilhadas já fazem isto (B<-fPIC>), assim elas ganham ASLR automaticamente, mas as regiões de texto binários precisam de ser compiladas como PIE para ganhar ASLR. Quando isto acontece, os ataques ROP (Return Oriented Programming) são mais difíceis pois não são localizações estáticas para ressaltar durante um ataque de corrupção de memória.
-
-PIE não é compatível com B<-fPIC>, assim em geral é preciso cuidado ao compilar objectos partilhados. Mas porque as bandeiras PIE emitidas são injetadas via ficheiros specs de gcc, deverá ser sempre seguro defini-las incondicionalmente independentemente do tipo de objecto a ser compilado ou ligado em link.
-
-Bibliotecas estáticas pode ser usadas por programas ou outras bibliotecas partilhadas. Dependendo das bandeiras usadas para compilar todos os objectos dentro de uma biblioteca estática, estas bibliotecas serão utilizáveis por conjuntos diferentes de objectos:
-
-=over
-
-=item none
-
-Não pode ser vinculado a um programa PIE, não é uma biblioteca partilhada.
-
-=item B<-fPIE>
-
-Pode ser vinculado a qualquer programa, mas não a uma biblioteca partilhada (recomendado).
-
-=item B<-fPIC>
-
-Pode ser vinculado a qualquer programa e biblioteca partilhada.
-
-=back
-
-Se existir a necessidade de definir estas bandeiras manualmente, fazendo bypass à injeção de spec gcc, há varias coisas a ter em conta. Passar incondicionalmente e explicitamente B<-fPIE>, B<-fpie> ou B<-pie> a um sistema de compilação usando libtool é seguro pois estas bandeiras irão ser despojadas quando se compila bibliotecas partilhadas. Caso contrário em projetos que compilam ambos programas e bibliotecas partilhadas você pode precisar de certificar que quando compila as bibliotecas partilhadas, B<-fPIC> seja sempre passado em último (para que sobreponha qualquer B<-PIE> anterior) às bandeiras de compilação tais como B<CFLAGS>, e B<-shared> é passado em último (para que sobreponha qualquer B<-pie> anterior) para ligar em link bandeiras tais como B<LDFLAGS>. B<Nota>: Isto não deve ser necessário com a maquinaria de specs gcc predefinida.
-
-Adicionalmente, como PIE é implementado via registo geral, algumas arquitecturas com falta de registo (mas não incluindo mais a i386 desde as optimizações implementadas no gcc E<gt>= 5) podem ver perdas de performance até aos 15% em grandes cargas de aplicações de segmentos de texto pesados; a maioria das cargas vêm menos de 1%. Arquitecturas com registos mais gerais (ex. amd64) não vêm mais alto que uma penalidade de pior caso.
-
-=back
-
-=head2 reproducible
-
-As opções de tempo de compilação detalhadas em baixo podem ser usadas para ajudar a melhorar a reprodutibilidade de compilação ou fornecer mensagens de aviso adicionais durante a compilação. Excepto como notado em baixo, estas estão activadas por predefinição para as arquitecturas que as suportam.
-
-=over
-
-=item B<timeless>
-
-Esta definição (desde dpkg 1.17.14; activada por predefinição) adiciona B<-Wdate-time> a B<CPPFLAGS>. Isto irá causar avisos quando as macros B<__TIME__>, B<__DATE__> e B<__TIMESTAMP__> são usadas.
-
-=item B<fixfilepath>
-
-This setting (since dpkg 1.19.1; enabled by default) adds B<-ffile-prefix-map=>I<BUILDPATH>B<=.> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS> where B<BUILDPATH> is set to the top-level directory of the package being built. This has the effect of removing the build path from any generated file.
-
-Se ambas B<fixdebugpath> e B<fixfilepath> forem definidas, esta opção toma precedência, porque é um superconjunto do anterior.
-
-B<Nota>: Se o processo de compilação capturar as bandeiras de compilação para os objectos de compilação resultantes, isso irá tornar o pacote não-reproduzível. E ao desactivar esta opção poderá tornar alguns dos objectos reproduzíveis de novo isto irá também requerer desactivar B<fixdebugpath>, o que poderá tornar quaisquer símbolos de depuração gerados não-reproduzíveis. A correção ideal é parar de capturar bandeiras de compilação.
-
-=item B<fixdebugpath>
-
-This setting (since dpkg 1.18.5; enabled by default) adds B<-fdebug-prefix-map=>I<BUILDPATH>B<=.> to B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> and B<FCFLAGS> where B<BUILDPATH> is set to the top-level directory of the package being built. This has the effect of removing the build path from any generated debug symbols.
-
-B<Nota>: Esta funcionalidade tem propriedades de reprodução semelhantes a B<fixfilepath>.
-
-=back
-
-=head1 AMBIENTE
-
-Existem 2 conjuntos de variáveis de ambiente a fazer as mesmas operações, O primeiro (DEB_I<flag>_I<op>) nunca deve ser usada dentro de B<debian/rules>. Destina-se a qualquer utilizador que queria recompilar o pacote fonte com bandeiras de compilação diferentes. O segundo conjunto (DEB_I<flag>_MAINT_I<op>) só deve ser usado em B<debian/rules> pelos maintainers de pacotes para alterar as bandeiras de compilação resultantes.
-
-=over
-
-=item B<DEB_>I<flag>B<_SET>
-
-=item B<DEB_>I<flag>B<_MAINT_SET> (desde dpkg 1.16.1)
-
-Esta variável pode ser usada para forçar o valor retornado para a <flag> fornecida.
-
-=item B<DEB_>I<flag>B<_STRIP> (desde dpkg 1.16.1)
-
-=item B<DEB_>I<flag>B<_MAINT_STRIP> (desde dpkg 1.16.1)
-
-Esta variável pode ser usada para disponibilizar uma lista separada por espaços das opções que irão ser despojadas do conjunto de flags retornado para a I<flag> fornecida.
-
-=item B<DEB_>I<flag>B<_APPEND>
-
-=item B<DEB_>I<flag>B<_MAINT_APPEND> (desde dpkg 1.16.1)
-
-Esta variável pode ser usada para acrescentar opções suplementares ao valor retornado para a I<flag> fornecida.
-
-=item B<DEB_>I<flag>B<_PREPEND> (desde dpkg 1.16.1)
-
-=item B<DEB_>I<flag>B<_MAINT_PREPEND> (desde dpkg 1.16.1)
-
-Esta variável pode ser usada para adicionar opções suplementares ao inicio do valor retornado para a I<flag> fornecida.
-
-=item B<DEB_BUILD_OPTIONS>
-
-=item B<DEB_BUILD_MAINT_OPTIONS> (desde dpkg 1.16.1)
-
-These variables can be used by a user or maintainer to disable/enable various area features that affect build flags. The B<DEB_BUILD_MAINT_OPTIONS> variable overrides any setting in the B<DEB_BUILD_OPTIONS> feature areas. See the L</FEATURE AREAS> section for details.
-
-=item B<DEB_VENDOR>
-
-Esta definição define o fornecedor actual. Se não definida, irá descobrir o fornecedor actual ao ler B<%PKGCONFDIR%/origins/default>.
-
-=item B<DEB_BUILD_PATH>
-
-Esta variável define o caminho de compilação (desde dpkg 1.18.8) a usar em funcionalidades como B<fixdebugpath> para que possam ser controladas pelo chamador. Esta variável é actualmente específica de Debian e derivados.
-
-=item B<DPKG_COLORS>
-
-Define o modo de cor (desde dpkg 1.18.5). Os valores actualmente aceites são: B<auto> (predefinido), B<always> e B<never>.
-
-=item B<DPKG_NLS>
-
-Se definida, será usada para decidir se deve activar o Suporte a Linguagem Nativa. Também como conhecido como suporte de internacionalização (ou i18n) (desde dpkg 1.19.0). Os valores aceites são B<0> e B<1> (predefinição).
-
-=back
-
-=head1 FICHEIROS
-
-=head2 Ficheiros de configuração
-
-=over
-
-=item B<%PKGCONFDIR%/buildflags.conf>
-
-Ficheiro de configuração geral do sistema.
-
-=item B<$XDG_CONFIG_HOME/dpkg/buildflags.conf> ou
-
-=item B<$HOME/.config/dpkg/buildflags.conf>
-
-Ficheiro de configuração do utilizador.
-
-=back
-
-=head2 Suporte a empacotamento
-
-=over
-
-=item B<%PKGDATADIR%/buildflags.mk>
-
-trecho do Makefile que irá carregar (e opcionalmente exportar) todas as bandeiras suportadas pelo B<dpkg-buildflags> em variáveis (desde dpkg 1.16.1).
-
-=back
-
-=head1 EXEMPLOS
-
-Para passar flags de compilação a um comando de compilação dentro de um Makefile:
-
-=over
-
- $(MAKE) $(shell dpkg-buildflags --export=cmdline)
-
- ./configure $(shell dpkg-buildflags --export=cmdline)
-
-=back
-
-Para definir bandeiras de compilação num script de shell ou num fragmento de shell, por ser usado o B<eval> para interpretar o resultado e para exportar as bandeiras no ambiente:
-
-=over
-
- eval "$(dpkg-buildflags --export=sh)" && make
-
-=back
-
-ou para definir os parâmetros posicionais a passar a um comando:
-
-=over
-
- eval "set -- $(dpkg-buildflags --export=cmdline)"
- for dir in a b c; do (cd $dir && ./configure "$@" && make); done
-
-=back
-
-=head2 Utilização em debian/rules
-
-Você deve chamar B<dpkg-buildflags> ou incluir B<buildflags.mk> do ficheiro B<debian/rules> para obter as bandeiras de compilação necessárias para passar ao sistema de compilação. Note que versões antigas do B<dpkg-buildpackage> (antes do dpkg 1.16.1) exportavam estas bandeiras automaticamente. No entanto, você não deve confiar nisto, pois isto quebra a invocação manual de B<debian/rules>.
-
-For packages with autoconf-like build systems, you can pass the relevant options to configure or L<make(1)> directly, as shown above.
-
-Para outros sistemas de compilação, ou quando precisa de um controle mais afinado acerca de quais bandeiras são passadas para onde, você pode usar B<--get>. Ou você pode incluir B<buildflags.mk> em vez disto, o que toma conta de chamar B<dpkg-buildflags> e guardar as bandeiras de compilação em variáveis do make.
-
-Se você quiser exportar todas as bandeiras de compilação para o ambiente (onde elas pode ser colhidas pelo seu sistema de compilação):
-
-=over
-
- DPKG_EXPORT_BUILDFLAGS = 1
- include %PKGDATADIR%/buildflags.mk
-
-=back
-
-Para algum controle extra sobre o que é exportado, você pode exportar manualmente as variáveis (pois nenhuma é exportada por predefinição).
-
-=over
-
- include %PKGDATADIR%/buildflags.mk
- export CPPFLAGS CFLAGS LDFLAGS
-
-=back
-
-E claro que você pode passar as bandeiras aos comandos manualmente:
-
-=over
-
- include %PKGDATADIR%/buildflags.mk
- build-arch:
- $(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
-
-=back
-
-
-=head1 TRADUÇÃO
-
-Américo Monteiro
-
-Se encontrar algum erro na tradução deste documento, por favor comunique para
-Américo Monteiro <a_monteiro@gmx.com>.