Summary Home Activity Tracker Lists Tasks Docs News SCM Files

[#169] Implementación de una interfaz con la que exportar símbolos

Date:
2007-07-15 15:45
Priority:
3
State:
Open
Submitted by:
Da Silva Nao (batchdrake)
Assigned to:
Nobody (None)
Summary:
Implementación de una interfaz con la que exportar símbolos

Detailed description
Se me apareció de manera providencial esta idea en sueños, la discutí con xeos y pareció gustarle. Así que estreno este TODO con esta tarea.

El problema: Sistematizar la exportación de símbolos y otra información relevante de cada plug-in, siendo éstos lo más descriptivos posibles, etcétera, etcétera.

La solución: La solución es grande y muy bonita. Yo opté por abstraer la idea de símbolo en una estructura de tipo struct symbol. ¿Qué puede haber ahí dentro? Pues cosas como ésta:

- Nombre del símbolo. (Obvio)
- Tipo. (Variable o función)
- Dirección. (¿Dónde está el símbolo?)

Y ya, de una manera más opcional:

- Tamaño del símbolo. (en bytes, por si es una matriz o cualquier cosa)
- Tipo de contenido. (poco útil, si usas el símbolo es porque sabes lo que hay dentro, pero nunca sesabe).
- Número de argumentos. (Por si es una función)
- Autor.
- Plug-in del que es propietario.

¡Qué se yo!

Esta estructura podría declararse de una manera muy escueta a través de alguna macro. Como por ejemplo:

#define EXPORT_FUNCTION (cosa)
#define EXPORT_VAR (cosa)

Y ahora surge otro problema. ¿Dónde están esos símbolos? ¿Cómo accedemos a ellos?

Yo he pensado en dejarlos todos en una sección, mediante los consabidos atributos de gcc:

__attribute__ ((section("slabsyms")));

Con esto se produce la automática exportación de dos símbolos llamados:

__start_slabsyms
__stop_slabsyms

Cuyas direcciones no son si no el propio inicio y final de la sección slabsyms.

Ahora bien, por la experiencia sé que no siempre los símbolos aglotinados en una sección ocupan espacios contiguos. Misterios del alineado de gcc, no sé.

Por eso también sería conveniente añadir un campo a struct symbol llamado "magic", o algo parecido. Para estar seguros de que lo que viene detrás es una verdadera estructura struct_symbol.

Bueno, es una idea que hay que desarrollar mucho y con calma.

No Comments Have Been Posted

No related tasks

No attached documents

No Changes Have Been Made to This Item