Separate function list for each target.
Change-Id: I0f5f92efe206adb843a18ff05cd95707ee5a24d2
diff --git a/lib/AndroidBitcode/ABCCompilerDriver.cpp b/lib/AndroidBitcode/ABCCompilerDriver.cpp
index 59d6dda..696cd62 100644
--- a/lib/AndroidBitcode/ABCCompilerDriver.cpp
+++ b/lib/AndroidBitcode/ABCCompilerDriver.cpp
@@ -98,16 +98,13 @@
// Add non-portable function list. For each function X, linker will rename
// it to X_portable. And X_portable" is implemented in libportable to solve
// portable issues.
- mLinkerConfig->addPortable("stat");
- mLinkerConfig->addPortable("fstat");
- mLinkerConfig->addPortable("lstat");
- mLinkerConfig->addPortable("fstatat");
- mLinkerConfig->addPortable("socket");
- mLinkerConfig->addPortable("setsockopt");
- mLinkerConfig->addPortable("getsockopt");
- mLinkerConfig->addPortable("epoll_event");
- mLinkerConfig->addPortable("epoll_ctl");
- mLinkerConfig->addPortable("epoll_wait");
+ const char **non_portable_func = getNonPortableList();
+ if (non_portable_func != NULL) {
+ while (*non_portable_func != NULL) {
+ mLinkerConfig->addPortable(*non_portable_func);
+ non_portable_func++;
+ }
+ }
// -shared
mLinkerConfig->setShared(true);
diff --git a/lib/AndroidBitcode/Android.mk b/lib/AndroidBitcode/Android.mk
index 1abc7b2..6ad1348 100644
--- a/lib/AndroidBitcode/Android.mk
+++ b/lib/AndroidBitcode/Android.mk
@@ -22,7 +22,9 @@
#=====================================================================
libbcc_androidbitcode_SRC_FILES := \
- ABCCompilerDriver.cpp
+ ABCCompilerDriver.cpp \
+ MipsABCCompilerDriver.cpp \
+ X86ABCCompilerDriver.cpp
#=====================================================================
# Device Static Library: libbccAndroidBitcode
diff --git a/lib/AndroidBitcode/MipsABCCompilerDriver.cpp b/lib/AndroidBitcode/MipsABCCompilerDriver.cpp
new file mode 100644
index 0000000..24632be
--- /dev/null
+++ b/lib/AndroidBitcode/MipsABCCompilerDriver.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MipsABCCompilerDriver.h"
+
+namespace {
+
+static const char *MipsNonPortableList[] = {
+ "stat",
+ "fstat",
+ "lstat",
+ "fstatat",
+ "socket",
+ "setsockopt",
+ "getsockopt",
+ "open",
+ "mmap",
+ "ioctl",
+
+ NULL // NUL-terminator
+};
+
+} // end anonymous namespace
+
+namespace bcc {
+
+const char **MipsABCCompilerDriver::getNonPortableList() const {
+ return MipsNonPortableList;
+}
+
+} // end namespace bcc
diff --git a/lib/AndroidBitcode/MipsABCCompilerDriver.h b/lib/AndroidBitcode/MipsABCCompilerDriver.h
index dea58ea..531fe83 100644
--- a/lib/AndroidBitcode/MipsABCCompilerDriver.h
+++ b/lib/AndroidBitcode/MipsABCCompilerDriver.h
@@ -27,6 +27,9 @@
: ABCCompilerDriver(pTriple) { }
virtual ~MipsABCCompilerDriver() { }
+
+private:
+ virtual const char **getNonPortableList() const;
};
} // end namespace bcc
diff --git a/lib/AndroidBitcode/X86ABCCompilerDriver.cpp b/lib/AndroidBitcode/X86ABCCompilerDriver.cpp
new file mode 100644
index 0000000..04cfe63
--- /dev/null
+++ b/lib/AndroidBitcode/X86ABCCompilerDriver.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "X86ABCCompilerDriver.h"
+
+namespace {
+
+static const char *X86NonPortableList[] = {
+ "stat",
+ "fstat",
+ "lstat",
+ "fstatat",
+ "open",
+ "ioctl",
+ "fcntl",
+ "epoll_ctl",
+ "epoll_wait",
+
+ NULL // NUL-terminator
+};
+
+} // end anonymous namespace
+
+namespace bcc {
+
+const char **X86ABCCompilerDriver::getNonPortableList() const {
+ return X86NonPortableList;
+}
+
+} // end namespace bcc
diff --git a/lib/AndroidBitcode/X86ABCCompilerDriver.h b/lib/AndroidBitcode/X86ABCCompilerDriver.h
index 4d76b5f..34e9603 100644
--- a/lib/AndroidBitcode/X86ABCCompilerDriver.h
+++ b/lib/AndroidBitcode/X86ABCCompilerDriver.h
@@ -27,6 +27,9 @@
: ABCCompilerDriver(pTriple) { }
virtual ~X86ABCCompilerDriver() { }
+
+private:
+ virtual const char **getNonPortableList() const;
};
} // end namespace bcc