fbpx
Skip to main content

Linux Avanzato 2008-2009

Di più
16 Anni 2 Mesi fa #99702 da Mikaela Locci
Ragazzi potete aiutarmi con questo pezzo di codice:
#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
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • 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..

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
16 Anni 2 Mesi fa #99735 da Mikaela Locci
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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • 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
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • 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.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • 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.

Si prega Accedi o Crea un account a partecipare alla conversazione.