summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTDYa127 <a127a127@gmail.com>2011-06-18 15:49:32 +0800
committerLogan Chien <tzuhsiang.chien@gmail.com>2011-07-01 08:19:01 +0800
commit404833ada8caa7027105bd52bd36ab7822030369 (patch)
tree76df1bb2702b147df99bb93055e1ce9886a4abf2
parent388f443ba0c474ffcc2e06f8d2a668c4488c3c1b (diff)
downloadlinkloader-404833ada8caa7027105bd52bd36ab7822030369.tar.gz
Use llvm/Support/ELF.h.
-rw-r--r--android/librsloader.cpp1
-rw-r--r--include/ELF.h37
-rw-r--r--include/ELFHeader.h3
-rw-r--r--include/ELFReloc.h8
-rw-r--r--include/ELFSymbol.h2
-rw-r--r--include/impl/ELFObject.hxx10
-rw-r--r--include/impl/ELFSymbol.hxx1
-rw-r--r--lib/ELFHeader.cpp1
-rw-r--r--lib/ELFSectionHeader.cpp3
-rw-r--r--lib/ELFSymbol.cpp3
-rw-r--r--main.cpp2
11 files changed, 57 insertions, 14 deletions
diff --git a/android/librsloader.cpp b/android/librsloader.cpp
index 874447e..4847fe2 100644
--- a/android/librsloader.cpp
+++ b/android/librsloader.cpp
@@ -26,7 +26,6 @@
#include "cutils/log.h"
#include <llvm/ADT/OwningPtr.h>
-#include <elf.h>
static inline RSExecRef wrap(ELFObject<32> *object) {
return reinterpret_cast<RSExecRef>(object);
diff --git a/include/ELF.h b/include/ELF.h
new file mode 100644
index 0000000..d33b6b8
--- /dev/null
+++ b/include/ELF.h
@@ -0,0 +1,37 @@
+#ifndef ELF_H
+#define ELF_H
+
+#include <llvm/Support/ELF.h>
+// FIXME: XXX: Can't using namespace in header file!
+using namespace llvm::ELF;
+
+// TODO: These definitions are not defined in include/llvm/Support/ELF.h
+// elf.h. So we to this by ourself. Maybe we should update ELF.h
+// instead.
+
+#ifndef ET_LOOS
+#define ET_LOOS 0xfe00
+#endif
+
+#ifndef ET_HIOS
+#define ET_HIOS 0xfeff
+#endif
+
+#ifndef STT_LOOS
+#define STT_LOOS 10
+#endif
+
+#ifndef STT_HIOS
+#define STT_HIOS 12
+#endif
+
+#ifndef STB_LOOS
+#define STB_LOOS 10
+#endif
+
+#ifndef STB_HIOS
+#define STB_HIOS 12
+#endif
+
+
+#endif // ELF_H
diff --git a/include/ELFHeader.h b/include/ELFHeader.h
index c6d7cb7..98fa920 100644
--- a/include/ELFHeader.h
+++ b/include/ELFHeader.h
@@ -18,10 +18,10 @@
#define ELF_HEADER_H
#include "ELFTypes.h"
+#include "ELF.h"
#include <llvm/ADT/OwningPtr.h>
-#include <elf.h>
#include <string.h>
class ELFHeaderHelperMixin {
@@ -34,7 +34,6 @@ protected:
static char const *getVersionStr(uint32_t version);
};
-
template <unsigned Bitwidth>
class ELFHeader : private ELFHeaderHelperMixin {
public:
diff --git a/include/ELFReloc.h b/include/ELFReloc.h
index 62da9aa..c6bf759 100644
--- a/include/ELFReloc.h
+++ b/include/ELFReloc.h
@@ -112,11 +112,15 @@ private:
public:
word_t getSymTabIndex() const {
+#define ELF32_R_SYM(i) ((i)>>8)
return ELF32_R_SYM(this->r_info);
+#undef ELF32_R_SYM
}
word_t getType() const {
+#define ELF32_R_TYPE(i) ((unsigned char)(i))
return ELF32_R_TYPE(this->r_info);
+#undef ELF32_R_TYPE
}
};
@@ -131,11 +135,15 @@ private:
public:
xword_t getSymTabIndex() const {
+#define ELF64_R_SYM(i) ((i)>>32)
return ELF64_R_SYM(this->r_info);
+#undef ELF64_R_SYM
}
xword_t getType() const {
+#define ELF64_R_TYPE(i) ((i)&0xffffffffL)
return ELF64_R_TYPE(this->r_info);
+#undef ELF64_R_TYPE
}
};
diff --git a/include/ELFSymbol.h b/include/ELFSymbol.h
index 826d6d8..c8f14d8 100644
--- a/include/ELFSymbol.h
+++ b/include/ELFSymbol.h
@@ -18,13 +18,13 @@
#define ELF_SYMBOL_H
#include "ELFTypes.h"
+#include "ELF.h"
#include <llvm/ADT/OwningPtr.h>
#include <string>
#include <algorithm>
-#include <elf.h>
#include <malloc.h>
#include <stdint.h>
#include <stdlib.h>
diff --git a/include/impl/ELFObject.hxx b/include/impl/ELFObject.hxx
index 2436b69..44e3346 100644
--- a/include/impl/ELFObject.hxx
+++ b/include/impl/ELFObject.hxx
@@ -22,11 +22,11 @@
#include "ELFSection.h"
#include "ELFSectionHeaderTable.h"
#include "StubLayout.h"
+#include "ELF.h"
#include <llvm/ADT/SmallVector.h>
#include "utils/rsl_assert.h"
-#include <elf.h>
template <unsigned Bitwidth>
template <typename Archiver>
@@ -141,7 +141,7 @@ relocateARM(void *(*find_sym)(void *context, char const *name),
rsl_assert(0 && "Not implemented relocation type.");
break;
- case 2: // R_ARM_ABS32
+ case R_ARM_ABS32:
{
A = *inst;
*inst = (S+A);
@@ -149,7 +149,7 @@ relocateARM(void *(*find_sym)(void *context, char const *name),
break;
// FIXME: Predefine relocation codes.
- case 28: // R_ARM_CALL
+ case R_ARM_CALL:
{
#define SIGN_EXTEND(x, l) (((x)^(1<<((l)-1)))-(1<<(l-1)))
A = (Inst_t)(int64_t)SIGN_EXTEND(*inst & 0xFFFFFF, 24);
@@ -207,9 +207,9 @@ relocateARM(void *(*find_sym)(void *context, char const *name),
*inst = ((result) & 0x00FFFFFF) | (*inst & 0xFF000000);
}
break;
- case 44: // R_ARM_MOVT_ABS
+ case R_ARM_MOVT_ABS:
S >>= 16;
- case 43: // R_ARM_MOVW_ABS_NC
+ case R_ARM_MOVW_ABS_NC:
{
// No need sign extend.
A = ((*inst & 0xF0000) >> 4) | (*inst & 0xFFF);
diff --git a/include/impl/ELFSymbol.hxx b/include/impl/ELFSymbol.hxx
index f943e04..c632f8c 100644
--- a/include/impl/ELFSymbol.hxx
+++ b/include/impl/ELFSymbol.hxx
@@ -27,6 +27,7 @@
#include "ELFSectionNoBits.h"
#include "utils/rsl_assert.h"
+#include "ELF.h"
#ifdef __arm__
#define LOG_TAG "bcc"
diff --git a/lib/ELFHeader.cpp b/lib/ELFHeader.cpp
index de68726..562770b 100644
--- a/lib/ELFHeader.cpp
+++ b/lib/ELFHeader.cpp
@@ -15,6 +15,7 @@
*/
#include "ELFHeader.h"
+#include "ELF.h"
char const *ELFHeaderHelperMixin::getClassStr(int clazz) {
switch (clazz) {
diff --git a/lib/ELFSectionHeader.cpp b/lib/ELFSectionHeader.cpp
index f9554fb..03930d6 100644
--- a/lib/ELFSectionHeader.cpp
+++ b/lib/ELFSectionHeader.cpp
@@ -15,8 +15,7 @@
*/
#include "ELFSectionHeader.h"
-
-#include <elf.h>
+#include "ELF.h"
// ARM Section Header Type Definitions
diff --git a/lib/ELFSymbol.cpp b/lib/ELFSymbol.cpp
index 447b0f7..cfdab1c 100644
--- a/lib/ELFSymbol.cpp
+++ b/lib/ELFSymbol.cpp
@@ -15,8 +15,7 @@
*/
#include "ELFSymbol.h"
-
-#include <elf.h>
+#include "ELF.h"
char const *
ELFSymbolHelperMixin::getTypeStr(uint8_t type) {
diff --git a/main.cpp b/main.cpp
index 1c63a78..08b62e6 100644
--- a/main.cpp
+++ b/main.cpp
@@ -17,10 +17,10 @@
#include "ELFObject.h"
#include "utils/serialize.h"
+#include "ELF.h"
#include <llvm/ADT/OwningPtr.h>
-#include <elf.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/mman.h>