status_t Architecture::InitRegisterRules(CfaContext& context) const { // Init the initial register rules. The DWARF 3 specs on the // matter: "The default rule for all columns before // interpretation of the initial instructions is the undefined // rule. However, an ABI authoring body or a compilation system // authoring body may specify an alternate default value for any // or all columns." // GCC's assumes the "same value" rule for all callee preserved // registers. We set them respectively. // the stack pointer is initialized to // CFA offset 0 by default. const Register* registers = Registers(); RegisterMap* toDwarf = NULL; status_t result = GetDwarfRegisterMaps(&toDwarf, NULL); if (result != B_OK) return result; BReference<RegisterMap> toDwarfMapReference(toDwarf, true); for (int32 i = 0; i < CountRegisters(); i++) { int32 dwarfReg = toDwarf->MapRegisterIndex(i); if (dwarfReg < 0 || dwarfReg > CountRegisters() - 1) continue; // TODO: on CPUs that have a return address register // a default rule should be set up to use that to // extract the instruction pointer switch (registers[i].Type()) { case REGISTER_TYPE_STACK_POINTER: { context.RegisterRule(dwarfReg)->SetToValueOffset(0); break; } default: { context.RegisterRule(dwarfReg)->SetToSameValue(); break; } } } return result; }
//------------------------------------------------------------------------------ void ClimateFile::LoadClimateInformation() { AnsiString nombre = AnsiString(FileName); int posicion=nombre.Pos("."); int longitud=nombre.Length(); int caract=longitud-posicion; AnsiString ext=nombre.SubString(posicion+1,caract); if(ext=="prn") { RecNum=CountRegisters(FileName); GetColumnData(FileName , TitTMin , MinTemp ); GetColumnData(FileName , TitTMax , MaxTemp ); GetColumnData(FileName , TitPrec , Precipit ); GetColumnData(FileName , TitRad , Radiation); GetColumnData(FileName , TitET , ET); GetColumnData(FileName , TitIrri , Irri); GetColumnData(FileName , TitSoilTemp , SoilTemp); GetColumnData(FileName , TitSunshine , Sunshine); GetColumnData(FileName , TitDay , Day); GetColumnData(FileName , TitMonth , Month); GetColumnData(FileName , TitYear , Year); GetColumnData(FileName , TitObs , Obs); GetColumnData(FileName , TitObsCC , ObsCC); } if(ext=="csv") { RecNum=CountRegistersFromCSVFile(FileName); GetColumnDataFromCSVFile(FileName , TitTMin , MinTemp ); GetColumnDataFromCSVFile(FileName , TitTMax , MaxTemp ); GetColumnDataFromCSVFile(FileName , TitPrec , Precipit ); GetColumnDataFromCSVFile(FileName , TitRad , Radiation); GetColumnDataFromCSVFile(FileName , TitET , ET); GetColumnDataFromCSVFile(FileName , TitIrri , Irri); GetColumnDataFromCSVFile(FileName , TitSoilTemp , SoilTemp); GetColumnDataFromCSVFile(FileName , TitSunshine , Sunshine); GetColumnDataFromCSVFile(FileName , TitDay , Day); GetColumnDataFromCSVFile(FileName , TitMonth , Month); GetColumnDataFromCSVFile(FileName , TitYear , Year); GetColumnDataFromCSVFile(FileName , TitObs , Obs); GetColumnDataFromCSVFile(FileName , TitObsCC , ObsCC); } }