@Override public int getOrDecideVaddr(Map<Element, LayoutDecisionMap> alreadyDecided, int vaddrHint) { return impl.getOrDecideVaddr(alreadyDecided, vaddrHint); }
@Override public int getOrDecideVaddr(Map<Element, LayoutDecisionMap> alreadyDecided, int vaddrHint) { return impl.getOrDecideVaddr(alreadyDecided, vaddrHint); }
@Override public int getOrDecideVaddr(Map<Element, LayoutDecisionMap> alreadyDecided, int vaddrHint) { /* * We have to be careful about our vaddr. If we're the first section in the text segment, we * should have vaddr at least 4096. Why? to reproduce what the native tools do. */ int implVaddr = impl.getOrDecideVaddr(alreadyDecided, vaddrHint); // we should already have decided our file offset Object offsetObj = alreadyDecided.get(this).getDecidedValue(LayoutDecision.Kind.OFFSET); assert offsetObj != null; assert offsetObj instanceof Integer; // test for the special case if (getSegment() == getOwner().getSegments().iterator().next() && getSegment().get(0) == this) { if (implVaddr < getOwner().getPageSize()) { // choose the next congruent return ObjectFile.nextIntegerMultipleWithCongruence(getOwner().getPageSize(), impl.getAlignment(), (int) offsetObj, getOwner().getPageSize()); } } return implVaddr; }