- Messaggi: 12
- Ringraziamenti ricevuti 0
Linux Avanzato 2008-2009
- Mikaela Locci
-
- Offline
- New Member
-
Riduci
Di più
16 Anni 2 Mesi fa #99702
da Mikaela Locci
Risposta da Mikaela Locci al topic Linux Avanzato 2008-2009
Ragazzi potete aiutarmi con questo pezzo di codice:
La funzione current_txt_addr(void) restituisce il valore del program counter. Ma non ho capito come.
Questo codice si trova in "Tecniche di programmazione" (tepr\simul_istruz\simul_current_text_addr)
#include <stdio.h>
static inline void *current_text_addr(void)
{
void *pc;
asm volatile("mov $1f, %0; 1:":"=r" (pc));
return pc;
}
int main(void)
{
char *addr;
addr = current_text_addr();
printf("addr= %lx\n", (unsigned long)addr);
return 0;
}La funzione current_txt_addr(void) restituisce il valore del program counter. Ma non ho capito come.
Questo codice si trova in "Tecniche di programmazione" (tepr\simul_istruz\simul_current_text_addr)
Si prega Accedi o Crea un account a partecipare alla conversazione.
- COM_EASYSOCIAL_GUEST_NAME
-
- Visitatori
-
16 Anni 2 Mesi fa #99709
da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato 2008-2009
e' codice extended inline assembly.
%0 e', ovviamente, la variabile in output pc.
Il codice non fa altro che spostare in pc l'indirizzo puntato dalla label 1,
ovvero l'istruzione che segue la mov.
poteva essere anche "mov $provola, %0; provola:"
oppure, se e' fastidioso tenere tutto su la stessa riga di codice:
asm volatile("mov $carciofo, %0"
"\n\tcarciofo:":"=r" (pc));
nella versione originale si scrive $1f, anziche' $1,
perche' quando la label e' numerica si deve posporre una f
per specificare il fatto che ci si sta riferendo alla label 1: piuttosto che al valore numerico 1..
%0 e', ovviamente, la variabile in output pc.
Il codice non fa altro che spostare in pc l'indirizzo puntato dalla label 1,
ovvero l'istruzione che segue la mov.
poteva essere anche "mov $provola, %0; provola:"
oppure, se e' fastidioso tenere tutto su la stessa riga di codice:
asm volatile("mov $carciofo, %0"
"\n\tcarciofo:":"=r" (pc));
nella versione originale si scrive $1f, anziche' $1,
perche' quando la label e' numerica si deve posporre una f
per specificare il fatto che ci si sta riferendo alla label 1: piuttosto che al valore numerico 1..
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Mikaela Locci
-
- Offline
- New Member
-
Riduci
Di più
- Messaggi: 12
- Ringraziamenti ricevuti 0
16 Anni 2 Mesi fa #99735
da Mikaela Locci
Risposta da Mikaela Locci al topic Linux Avanzato 2008-2009
Ok perfetto, grazie mille per l'aiuto. Non capivo che $1f era un riferimento ad una etichetta. In effetti la 'f' stava per forward 
Grazie ancora
Grazie ancora
Si prega Accedi o Crea un account a partecipare alla conversazione.
- COM_EASYSOCIAL_GUEST_NAME
-
- Visitatori
-
16 Anni 2 Mesi fa #99756
da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato 2008-2009
Sapete per caso dove sta la dichiarazione di task_struct ?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- COM_EASYSOCIAL_GUEST_NAME
-
- Visitatori
-
16 Anni 2 Mesi fa #99757
da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato 2008-2009
se intendi la definizione, sta in :
include/linux/sched.h (linea 1075)
per la ricerca nel codice ti consiglio il programma 'cscope',
ti permette di avere una lista di occorrenze tra:
simboli C, definizioni, funzioni chiamate da X, funzioni che chiamano X, ecc..
con "export EDITOR=nomeprogramma"
puoi scegliere l'editor da utilizzare per aprire i file trovati.
include/linux/sched.h (linea 1075)
per la ricerca nel codice ti consiglio il programma 'cscope',
ti permette di avere una lista di occorrenze tra:
simboli C, definizioni, funzioni chiamate da X, funzioni che chiamano X, ecc..
con "export EDITOR=nomeprogramma"
puoi scegliere l'editor da utilizzare per aprire i file trovati.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- COM_EASYSOCIAL_GUEST_NAME
-
- Visitatori
-
16 Anni 2 Mesi fa #99780
da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato 2008-2009
Vi consiglio il sito
lxr.linux.no/+trees
: è veramente fantastico, ha tutte le versioni di linux, si possono cercare sia definizioni che utilizzi.
Altrimenti, per la ricerca delle definizioni è molto utile anche l'utilizzo del tag file generato tramite make tags , con cui si interfacciano alcuni editor come Nedit. Effettivamente, è questo il metodo di ricerca che è usato all'orale.
Altrimenti, per la ricerca delle definizioni è molto utile anche l'utilizzo del tag file generato tramite make tags , con cui si interfacciano alcuni editor come Nedit. Effettivamente, è questo il metodo di ricerca che è usato all'orale.
Si prega Accedi o Crea un account a partecipare alla conversazione.