summaryrefslogtreecommitdiffstats
path: root/src/options_ppc.c
diff options
context:
space:
mode:
authorCyril Bur <cyrilbur@gmail.com>2018-02-14 15:31:47 +1100
committerAlistair Popple <alistair@popple.id.au>2018-02-16 16:22:23 +1100
commit88a6d568b94c447f1ef354696bd68a4c82d0e26e (patch)
tree75a9c259964de6aeaec6c5a68d6bda22d5fabc46 /src/options_ppc.c
parent8fb428320252d606658bbd25acfb1eadc516bdd2 (diff)
downloadpdbg-88a6d568b94c447f1ef354696bd68a4c82d0e26e.tar.gz
pdbg-88a6d568b94c447f1ef354696bd68a4c82d0e26e.zip
main: Attempt to automatically discover target
Signed-off-by: Cyril Bur <cyrilbur@gmail.com> Signed-off-by: Alistair Popple <alistair@popple.id.au>
Diffstat (limited to 'src/options_ppc.c')
-rw-r--r--src/options_ppc.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/options_ppc.c b/src/options_ppc.c
new file mode 100644
index 0000000..30ed5bb
--- /dev/null
+++ b/src/options_ppc.c
@@ -0,0 +1,92 @@
+/* Copyright 2017 IBM Corp.
+ *
+ * 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 <stdio.h>
+#include <string.h>
+
+#include "main.h"
+
+static const char p8[] = "p8";
+static const char p9[] = "p9";
+
+enum backend default_backend(void)
+{
+ return HOST;
+}
+
+bool backend_is_possible(enum backend backend)
+{
+ /* TODO */
+ return backend == HOST;
+}
+
+void print_backends(FILE *stream)
+{
+ fprintf(stream, "HOST");
+}
+
+const char *default_target(enum backend backend)
+{
+ const char *pos = NULL;
+ char line[256];
+ FILE *cpuinfo;
+
+ cpuinfo = fopen("/proc/cpuinfo", "r");
+ if (!cpuinfo)
+ return NULL;
+
+ while ((pos = fgets(line, sizeof(line), cpuinfo)))
+ if (strncmp(line, "cpu", 3) == 0)
+ break;
+ fclose(cpuinfo);
+
+ if (!pos) /* Got to EOF without a break */
+ return NULL;
+
+ pos = strchr(line, ':');
+ if (!pos)
+ return NULL;
+
+ if (*(pos + 1) == '\0')
+ return NULL;
+ pos += 2;
+
+ if (strncmp(pos, "POWER8", 6) == 0)
+ return p8;
+
+ if (strncmp(pos, "POWER9", 6) == 0)
+ return p9;
+
+ return NULL;
+}
+
+void print_targets(FILE *stream)
+{
+ fprintf(stream, "HOST: p8 p9\n");
+}
+
+bool target_is_possible(enum backend backend, const char *target)
+{
+ const char *def;
+
+ if (!backend_is_possible(backend))
+ return false;
+
+ def = default_target(backend);
+ if (!def || !target)
+ return false;
+
+ return strcmp(def, target) == 0;
+}
OpenPOWER on IntegriCloud