1e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao/*
2e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Copyright 2011, The Android Open Source Project
3e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *
4e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
5e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * you may not use this file except in compliance with the License.
6e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * You may obtain a copy of the License at
7e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *
8e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *     http://www.apache.org/licenses/LICENSE-2.0
9e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *
10e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Unless required by applicable law or agreed to in writing, software
11e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
12e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * See the License for the specific language governing permissions and
14e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * limitations under the License.
15e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao */
16e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao
1703eafa401a9387395625023857981d4691ceea22TDYa#ifndef ELF_SECTION_REL_TABLE_H
1803eafa401a9387395625023857981d4691ceea22TDYa#define ELF_SECTION_REL_TABLE_H
1903eafa401a9387395625023857981d4691ceea22TDYa
2058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include "ELFTypes.h"
21974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien#include "ELFSection.h"
2203eafa401a9387395625023857981d4691ceea22TDYa
2358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include <string>
2458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include <vector>
2503eafa401a9387395625023857981d4691ceea22TDYa
26a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth>
27974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chienclass ELFSectionRelTable : public ELFSection<Bitwidth> {
2858611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chienpublic:
2958611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(Bitwidth);
3058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien
313bab0cc4c1115bc4430aa97453bca914e1174858TDYaprivate:
3258611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  std::vector<ELFRelocTy *> table;
3303eafa401a9387395625023857981d4691ceea22TDYa
3403eafa401a9387395625023857981d4691ceea22TDYaprivate:
3503eafa401a9387395625023857981d4691ceea22TDYa  ELFSectionRelTable() { }
3603eafa401a9387395625023857981d4691ceea22TDYa
3703eafa401a9387395625023857981d4691ceea22TDYapublic:
38974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  virtual ~ELFSectionRelTable();
393bab0cc4c1115bc4430aa97453bca914e1174858TDYa
40974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  virtual void print() const;
4103eafa401a9387395625023857981d4691ceea22TDYa
42974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  template <typename Archiver>
4358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  static ELFSectionRelTable *read(Archiver &AR, ELFSectionHeaderTy const *sh);
4403eafa401a9387395625023857981d4691ceea22TDYa
45974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  size_t size() const {
4668aab0239525454d17465d927028cdbd2bfd2969Logan Chien    return table.size();
47974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  }
4803eafa401a9387395625023857981d4691ceea22TDYa
4958611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFRelocTy const *operator[](size_t index) const {
5068aab0239525454d17465d927028cdbd2bfd2969Logan Chien    return table[index];
51974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  }
52974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien
5358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFRelocTy *operator[](size_t index) {
5468aab0239525454d17465d927028cdbd2bfd2969Logan Chien    return table[index];
55974c82871ee2205c0f7728cc43a5ff02487a50e0Logan Chien  }
567cea0a041b87afe2c5ad5f26e6a89494d0819bd1Logan Chien
577cea0a041b87afe2c5ad5f26e6a89494d0819bd1Logan Chien  size_t getMaxNumStubs(ELFObjectTy const *) const;
5803eafa401a9387395625023857981d4691ceea22TDYa};
5903eafa401a9387395625023857981d4691ceea22TDYa
60b27ccae0d5900e923c13936274369f754d8e28e9Logan Chien#include "impl/ELFSectionRelTable.hxx"
6103eafa401a9387395625023857981d4691ceea22TDYa
6203eafa401a9387395625023857981d4691ceea22TDYa#endif // ELF_SECTION_REL_TABLE_H
63