15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- SymbolCategory.cpp -------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/SymbolCategory.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/LDSymbol.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/ResolveInfo.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <algorithm> 156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <cassert> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Category 2137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::Category::Type SymbolCategory::Category::categorize( 2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines const ResolveInfo& pInfo) { 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (ResolveInfo::File == pInfo.type()) 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return Category::File; 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (ResolveInfo::Local == pInfo.binding()) 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return Category::Local; 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (ResolveInfo::Common == pInfo.desc()) 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return Category::Common; 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines if (ResolveInfo::Default == pInfo.visibility() || 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ResolveInfo::Protected == pInfo.visibility()) 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return Category::Dynamic; 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return Category::Regular; 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SymbolCategory 3737b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::SymbolCategory() { 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pFile = new Category(Category::File); 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pLocal = new Category(Category::Local); 406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocalDyn = new Category(Category::LocalDyn); 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pCommon = new Category(Category::Common); 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pDynamic = new Category(Category::Dynamic); 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pRegular = new Category(Category::Regular); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pFile->next = m_pLocal; 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pLocal->next = m_pLocalDyn; 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocalDyn->next = m_pCommon; 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pCommon->next = m_pDynamic; 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pDynamic->next = m_pRegular; 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pRegular->prev = m_pDynamic; 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pDynamic->prev = m_pCommon; 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pCommon->prev = m_pLocalDyn; 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocalDyn->prev = m_pLocal; 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pLocal->prev = m_pFile; 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5837b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::~SymbolCategory() { 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Category* current = m_pFile; 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines while (current != NULL) { 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Category* tmp = current; 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->next; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete tmp; 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6737b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory& SymbolCategory::add(LDSymbol& pSymbol, Category::Type pTarget) { 686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines Category* current = m_pRegular; 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_OutputSymbols.push_back(&pSymbol); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // use non-stable bubble sort to arrange the order of symbols. 7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines while (current != NULL) { 736f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (current->type == pTarget) { 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->end++; 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 7637b74a387bb3993387029859c2d9d051c41c724eStephen Hines } else { 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!current->empty()) { 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::swap(m_OutputSymbols[current->begin], 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_OutputSymbols[current->end]); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->end++; 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->begin++; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->prev; 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8937b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory& SymbolCategory::add(LDSymbol& pSymbol) { 9037b74a387bb3993387029859c2d9d051c41c724eStephen Hines assert(pSymbol.resolveInfo() != NULL); 916f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return add(pSymbol, Category::categorize(*pSymbol.resolveInfo())); 926f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9437b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory& SymbolCategory::forceLocal(LDSymbol& pSymbol) { 956f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return add(pSymbol, Category::Local); 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 986f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory& SymbolCategory::arrange(LDSymbol& pSymbol, 99f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::Type pSource, 10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Category::Type pTarget) { 101f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines int distance = pTarget - pSource; 10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines if (distance == 0) { 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // in the same category, do not need to re-arrange 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // source and target are not in the same category 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // find the category of source 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Category* current = m_pFile; 11037b74a387bb3993387029859c2d9d051c41c724eStephen Hines while (current != NULL) { 111f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (pSource == current->type) 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->next; 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 11637b74a387bb3993387029859c2d9d051c41c724eStephen Hines assert(current != NULL); 117551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines size_t pos = 0; 118551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (!current->empty()) { 119551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // find the position of source 120551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines pos = current->begin; 121551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines while (pos != current->end) { 122551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (m_OutputSymbols[pos] == &pSymbol) 123551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines break; 124551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines ++pos; 125551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 126551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 127551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // FIXME: Try to search the symbol explicitly, if symbol is not in the given 128551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // source category. Or we need to add some logics like shouldForceLocal() in 129551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // SymbolCategory::Category::categorize(). 130551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (current->end == pos || current->empty()) { 131551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines current = m_pFile; 132551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines do { 133551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines pos = current->begin; 134551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines while (pos != current->end) { 135551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (m_OutputSymbols[pos] == &pSymbol) { 136551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines distance = pTarget - current->type; 137551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines break; 138551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 139551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines ++pos; 140551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 141551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pos != current->end) 142551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines break; 143551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines current = current->next; 144551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } while (current != NULL); 145551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines assert(current != NULL); 1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // The distance is positive. It means we should bubble sort downward. 1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (distance > 0) { 1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // downward 1515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t rear; 1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao do { 153f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (current->type == pTarget) { 1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 15537b74a387bb3993387029859c2d9d051c41c724eStephen Hines } else { 1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(!current->isLast() && "target category is wrong."); 1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao rear = current->end - 1; 1585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::swap(m_OutputSymbols[pos], m_OutputSymbols[rear]); 1595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pos = rear; 1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->next->begin--; 1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->end--; 1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->next; 16437b74a387bb3993387029859c2d9d051c41c724eStephen Hines } while (current != NULL); 1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 16737b74a387bb3993387029859c2d9d051c41c724eStephen Hines } // downward 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // The distance is negative. It means we should bubble sort upward. 1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (distance < 0) { 1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // upward 1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao do { 173f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (current->type == pTarget) { 1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 17537b74a387bb3993387029859c2d9d051c41c724eStephen Hines } else { 1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(!current->isFirst() && "target category is wrong."); 1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::swap(m_OutputSymbols[current->begin], m_OutputSymbols[pos]); 1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pos = current->begin; 1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->begin++; 1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->prev->end++; 1815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->prev; 18337b74a387bb3993387029859c2d9d051c41c724eStephen Hines } while (current != NULL); 1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 18637b74a387bb3993387029859c2d9d051c41c724eStephen Hines } // upward 1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 190f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen HinesSymbolCategory& SymbolCategory::arrange(LDSymbol& pSymbol, 19137b74a387bb3993387029859c2d9d051c41c724eStephen Hines const ResolveInfo& pSourceInfo) { 19237b74a387bb3993387029859c2d9d051c41c724eStephen Hines assert(pSymbol.resolveInfo() != NULL); 193f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return arrange(pSymbol, 194f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::categorize(pSourceInfo), 195f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::categorize(*pSymbol.resolveInfo())); 196f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines} 197f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 19837b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory& SymbolCategory::changeCommonsToGlobal() { 1996f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines // Change Common to Dynamic/Regular 2006f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines while (!emptyCommons()) { 2016f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines size_t pos = m_pCommon->end - 1; 2026f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines switch (Category::categorize(*(m_OutputSymbols[pos]->resolveInfo()))) { 20337b74a387bb3993387029859c2d9d051c41c724eStephen Hines case Category::Dynamic: 20437b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pCommon->end--; 20537b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pDynamic->begin--; 20637b74a387bb3993387029859c2d9d051c41c724eStephen Hines break; 20737b74a387bb3993387029859c2d9d051c41c724eStephen Hines case Category::Regular: 20837b74a387bb3993387029859c2d9d051c41c724eStephen Hines std::swap(m_OutputSymbols[pos], m_OutputSymbols[m_pDynamic->end - 1]); 20937b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pCommon->end--; 21037b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pDynamic->begin--; 21137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pDynamic->end--; 21237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pRegular->begin--; 21337b74a387bb3993387029859c2d9d051c41c724eStephen Hines break; 21437b74a387bb3993387029859c2d9d051c41c724eStephen Hines default: 21537b74a387bb3993387029859c2d9d051c41c724eStephen Hines assert(0); 21637b74a387bb3993387029859c2d9d051c41c724eStephen Hines break; 2176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines } 2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 22237b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory& SymbolCategory::changeToDynamic(LDSymbol& pSymbol) { 22337b74a387bb3993387029859c2d9d051c41c724eStephen Hines assert(pSymbol.resolveInfo() != NULL); 224f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return arrange(pSymbol, 225f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::categorize(*pSymbol.resolveInfo()), 226f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::LocalDyn); 22722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 22822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 22937b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfSymbols() const { 2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.size(); 2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 23337b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfFiles() const { 2346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pFile->size(); 2356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 23737b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfLocals() const { 2386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocal->size(); 2396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 24137b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfLocalDyns() const { 2426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocalDyn->size(); 2435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 24537b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfCommons() const { 2465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pCommon->size(); 2475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 24937b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfDynamics() const { 2506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pDynamic->size(); 2516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 25337b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t SymbolCategory::numOfRegulars() const { 2546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pRegular->size(); 2555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 25737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::empty() const { 2586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_OutputSymbols.empty(); 2596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 26137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::emptyFiles() const { 2626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pFile->empty(); 2635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 26537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::emptyLocals() const { 2666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocal->empty(); 2676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 26937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::emptyLocalDyns() const { 2706f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocalDyn->empty(); 2715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 27337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::emptyCommons() const { 2745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pCommon->empty(); 2755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 27737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::emptyDynamics() const { 2786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pDynamic->empty(); 2796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2806f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 28137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool SymbolCategory::emptyRegulars() const { 2826f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pRegular->empty(); 2835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 28537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::begin() { 2865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.begin(); 2875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 28937b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::end() { 2905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 2915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 29337b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::begin() const { 2945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.begin(); 2955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 29737b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::end() const { 2985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 2995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 30137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::fileBegin() { 3025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.begin(); 3035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 30537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::fileEnd() { 3066f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = fileBegin(); 3075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pFile->size(); 3086f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 3096f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 31137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::fileBegin() const { 3126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_OutputSymbols.begin(); 3136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 31537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::fileEnd() const { 3166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = fileBegin(); 3176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pFile->size(); 3186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 3196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 32137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::localBegin() { 3226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return fileEnd(); 3236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 32537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::localEnd() { 3266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = localBegin(); 3275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pLocal->size(); 3285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 3295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 33137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::localBegin() const { 3326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return fileEnd(); 3335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 33537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::localEnd() const { 3366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = localBegin(); 3375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pLocal->size(); 3385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 3395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 34137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::localDynBegin() { 3425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return localEnd(); 3435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 34537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::localDynEnd() { 3466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = localDynBegin(); 3476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pLocalDyn->size(); 34822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return iter; 34922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 35022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 35137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::localDynBegin() const { 35222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return localEnd(); 35322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 35422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 35537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::localDynEnd() const { 3566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = localDynBegin(); 3576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pLocalDyn->size(); 35822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return iter; 35922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 36022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 36137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::commonBegin() { 3626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return localDynEnd(); 36322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 36422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 36537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::commonEnd() { 3666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = commonBegin(); 3675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pCommon->size(); 3685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 3695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 37137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::commonBegin() const { 3726f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return localDynEnd(); 3735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 37537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::commonEnd() const { 3766f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = commonBegin(); 3775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pCommon->size(); 3785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 3795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 38137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::dynamicBegin() { 3826f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return commonEnd(); 3836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3846f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 38537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::dynamicEnd() { 3866f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = dynamicBegin(); 3876f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pDynamic->size(); 3886f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 3896f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3906f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 39137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::dynamicBegin() const { 3926f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return commonEnd(); 3936f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3946f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 39537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::dynamicEnd() const { 3966f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = dynamicBegin(); 3976f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pDynamic->size(); 3986f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 3996f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 4006f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 40137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::regularBegin() { 40237b74a387bb3993387029859c2d9d051c41c724eStephen Hines return dynamicEnd(); 4035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 40537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::iterator SymbolCategory::regularEnd() { 4065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 4075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 40937b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::regularBegin() const { 41037b74a387bb3993387029859c2d9d051c41c724eStephen Hines return dynamicEnd(); 4115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 41337b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategory::const_iterator SymbolCategory::regularEnd() const { 4145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 4155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 41737b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 418