/*
* VpcPrecision.java - This file is part of the Jakstab project.
* Copyright 2007-2015 Johannes Kinder <jk@jakstab.org>
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, see <http://www.gnu.org/licenses/>.
*/
package org.jakstab.analysis.explicit;
import java.util.HashMap;
import java.util.Map;
import org.jakstab.analysis.Precision;
import org.jakstab.cfa.Location;
/**
* Maps VPC values to explicit precision objects to realize the domain lifting for VPC-sensitivity.
*
* @author Johannes Kinder
*/
public class VpcPrecision implements Precision {
private Map<BasedNumberElement, ExplicitPrecision> vpcMap;
private final Location location;
VpcPrecision(Location location) {
vpcMap = new HashMap<BasedNumberElement, ExplicitPrecision>();
this.location = location;
}
public Location getLocation() {
return location;
}
public ExplicitPrecision getPrecision(BasedNumberElement vpcValue) {
/*BasedNumberElement vpcValue;
// If there's no VPC for this location (yet), assume TOP as VPC value
if (vpc == null) {
vpcValue = BasedNumberElement.getTop(32);
} else {
vpcValue = b.getValue(vpc);
}*/
ExplicitPrecision eprec = vpcMap.get(vpcValue);
if (eprec == null) {
eprec = new ExplicitPrecision(BoundedAddressTracking.varThreshold.getValue());
vpcMap.put(vpcValue, eprec);
}
return eprec;
}
}