| Index: tools/codemap.js
 | 
| diff --git a/tools/codemap.js b/tools/codemap.js
 | 
| index 30cdc21db50160b3363cbc34131487003ae94492..df6770f9a88087e5daa62ac0dee433ed27fdaa92 100644
 | 
| --- a/tools/codemap.js
 | 
| +++ b/tools/codemap.js
 | 
| @@ -175,23 +175,28 @@ CodeMap.prototype.isAddressBelongsTo_ = function(addr, node) {
 | 
|   */
 | 
|  CodeMap.prototype.findInTree_ = function(tree, addr) {
 | 
|    var node = tree.findGreatestLessThan(addr);
 | 
| -  return node && this.isAddressBelongsTo_(addr, node) ? node.value : null;
 | 
| +  return node && this.isAddressBelongsTo_(addr, node) ? node : null;
 | 
|  };
 | 
|  
 | 
|  
 | 
|  /**
 | 
|   * Finds a code entry that contains the specified address. Both static and
 | 
| - * dynamic code entries are considered.
 | 
| + * dynamic code entries are considered. Returns the code entry and the offset
 | 
| + * within the entry.
 | 
|   *
 | 
|   * @param {number} addr Address.
 | 
|   */
 | 
| -CodeMap.prototype.findEntry = function(addr) {
 | 
| +CodeMap.prototype.findAddress = function(addr) {
 | 
|    var pageAddr = addr >>> CodeMap.PAGE_ALIGNMENT;
 | 
|    if (pageAddr in this.pages_) {
 | 
|      // Static code entries can contain "holes" of unnamed code.
 | 
|      // In this case, the whole library is assigned to this address.
 | 
| -    return this.findInTree_(this.statics_, addr) ||
 | 
| -        this.findInTree_(this.libraries_, addr);
 | 
| +    var result = this.findInTree_(this.statics_, addr);
 | 
| +    if (!result) {
 | 
| +      result = this.findInTree_(this.libraries_, addr);
 | 
| +      if (!result) return null;
 | 
| +    }
 | 
| +    return { entry : result.value, offset : addr - result.key };
 | 
|    }
 | 
|    var min = this.dynamics_.findMin();
 | 
|    var max = this.dynamics_.findMax();
 | 
| @@ -199,17 +204,30 @@ CodeMap.prototype.findEntry = function(addr) {
 | 
|      var dynaEntry = this.findInTree_(this.dynamics_, addr);
 | 
|      if (dynaEntry == null) return null;
 | 
|      // Dedupe entry name.
 | 
| -    if (!dynaEntry.nameUpdated_) {
 | 
| -      dynaEntry.name = this.dynamicsNameGen_.getName(dynaEntry.name);
 | 
| -      dynaEntry.nameUpdated_ = true;
 | 
| +    var entry = dynaEntry.value;
 | 
| +    if (!entry.nameUpdated_) {
 | 
| +      entry.name = this.dynamicsNameGen_.getName(entry.name);
 | 
| +      entry.nameUpdated_ = true;
 | 
|      }
 | 
| -    return dynaEntry;
 | 
| +    return { entry : entry, offset : addr - dynaEntry.key };
 | 
|    }
 | 
|    return null;
 | 
|  };
 | 
|  
 | 
|  
 | 
|  /**
 | 
| + * Finds a code entry that contains the specified address. Both static and
 | 
| + * dynamic code entries are considered.
 | 
| + *
 | 
| + * @param {number} addr Address.
 | 
| + */
 | 
| +CodeMap.prototype.findEntry = function(addr) {
 | 
| +  var result = this.findAddress(addr);
 | 
| +  return result ? result.entry : null;
 | 
| +};
 | 
| +
 | 
| +
 | 
| +/**
 | 
|   * Returns a dynamic code entry using its starting address.
 | 
|   *
 | 
|   * @param {number} addr Address.
 | 
| 
 |