Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

253
Vistas
¿Qué significa __devexit en una declaración de función?

Un controlador que miré tiene

 static void __devexit rtsx_remove(struct pci_dev *pci)

¿Qué significa __devexit en el contexto de la definición de función? Otras funciones que he visto tienen, como mucho, static y de tipo retorno.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Larga historia corta:

Esta es una macro que se expande a un conjunto de atributos gcc. Son una forma de proporcionar al compilador información especial sobre varias cosas en su código, como, en este caso, una función.

Los diferentes compiladores tienen una sintaxis diferente para este propósito, no está estandarizado. Por ejemplo, gcc usa atributos, pero otros compiladores usan construcciones diferentes.

Larga historia larga:

Entonces, no soy un experto en kernel de Linux, pero a juzgar por el código fuente, esta macro se usa para Hotplug . Creo que significa que la función debería hacer algo con la salida de un dispositivo específico.

Por ejemplo, la función que proporcionó parece ser del conjunto de funciones Hotplug para trabajar con un controlador de lector de tarjetas Realtek PCI-Express.

¿Qué hace realmente esa macro? Bueno, echemos un vistazo más de cerca a la definición de la macro:

 #define __devexit __section(.devexit.text) __exitused __cold

La primera parte es __section(.devexit.text) :

 # define __section(S) __attribute__ ((__section__(#S)))

Como puede ver, esto crea un __attribute__(__section__()) con el nombre de la sección ".devexit.text" . Esto significa que gcc compilará el código ensamblador de una función con este atributo en una sección con nombre en el binario compilado con el nombre .devexit.text (en lugar de la sección predeterminada).

La segunda parte es __exitused (definida como algo solo si se define la macro MODULE ):

 #define __exitused __used

Y __used , dependiendo de la versión de gcc, se define así:

 # define __used __attribute__((__used__))

o así:

 # define __used __attribute__((__unused__))

El primero se asegura de que la función que tiene este atributo se compile incluso si no se hace referencia a ella en ninguna parte. Este último suprime las advertencias del compilador en el mismo caso, aunque no afecta la compilación de ninguna manera.

Y, finalmente, __cold :

 #define __cold __attribute__((__cold__))

Este es un atributo que informa al compilador que la función con este atributo no se llamará con frecuencia, para que pueda optimizarse en consecuencia.

Entonces, ¿qué tenemos al final? Parece que las funciones marcadas con __devexit son solo funciones que no se llaman con frecuencia (si es que se llaman) y se meten en una sección con nombre.

Todo el código fuente fue tomado de aquí . Parece que la macro ya se ha eliminado del kernel de Linux .

over 4 years ago · Santiago Trujillo Denunciar

0

"... Lo más probable es que sea solo una anotación..." --barak manos

¡Eureka! Resulta que el elemento misterioso quizás se llame anotación , que agrega información adicional sobre una función. El compilador puede verificar esta información adicional para detectar errores que, de lo contrario, podrían pasar desapercibidos.

Editar: @MattMcNabb dice que no es una anotación. Incertidumbre añadida.

over 4 years ago · Santiago Trujillo Denunciar

0

Estos atributos se usaron en el Kernel de Linux en ciertas funciones del controlador y declaraciones de datos, colocándolos en una sección separada que podría descartarse bajo ciertas circunstancias.

Sin embargo, ya no se usan (o definen) desde 3.10.x en adelante. Ver: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=54b956b903607

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda