A questão geral ficou comigo, então pensei em adicionar uma resposta sobre como eu poderia encontrar um identificador arbitrário no kernel do Linux.
Faça o download de uma versão do código fonte do kernel (ou instale o pacote fonte do kernel linux-distribution) e extraia:
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.39.tar.xz
tar xf linux-4.9.39.tar.xz
cd linux-4.9.39
Crie um arquivo .config mínimo, apenas para criar um kernel compilável:
make menuconfig # just exit and save
Passo-chave: compile o kernel com o sinalizador -save-temps
gcc para que ele salve os arquivos intermediários do pré-processador:
make KCFLAGS=-save-temps
O processo de compilação descartará *.i
arquivos no diretório atual.
Encontre qualquer arquivo onde o identificador é definido; Eu escolhi o mesmo identificador aqui, para facilitar a comparação, mas o processo funcionaria para qualquer outro identificador; Eu escolhi zbud.i apenas porque gostei do nome do arquivo:
grep PageWriteback *.i
...
zbud.i:static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) int PageWriteback(struct page *page) { return (__builtin_constant_p((PG_writeback)) ? constant_test_bit((PG_writeback), (&({ ((void)(sizeof(( long)(0 && PageCompound(page))))); page;})->flags)) : variable_test_bit((PG_writeback), (&({ ((void)(sizeof(( long)(0 && PageCompound(page))))); page;})->flags))); }
...
Abra o arquivo para visualização, role até o identificador em questão e pesquise para cima / para trás no arquivo de uma linha que começa com #
para ver de onde veio a definição:
# 255 "./include/linux/page-flags.h"
que nos aponta para o mesmo arquivo de origem que Nick encontrou antes .
Como alternativa, você pode pesquisar as linhas de inclusão e / ou o identificador e excluir todas as linhas à direita; a última linha de saída será o arquivo onde o identificador foi definido:
grep -E '^# |PageWriteback' zbud.i | sed '/PageWriteback/,$d' | tail -n 1
...
# 74 "./include/linux/page-flags.h"
# 108 "./include/linux/page-flags.h"
# 255 "./include/linux/page-flags.h"