aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/jithost.c
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-06-17 19:24:08 +0100
committerPedro Alves <palves@redhat.com>2016-06-17 19:24:08 +0100
commit2838cc1d36e55bf6d45cf971bf401f895e575849 (patch)
treea1d433ec248b25a2cda70559fe7553475c2185bc /gdb/testsuite/gdb.base/jithost.c
parent80c135e55489435f47bbeeb3715b42289c51e30e (diff)
downloadgdb-2838cc1d36e55bf6d45cf971bf401f895e575849.zip
gdb-2838cc1d36e55bf6d45cf971bf401f895e575849.tar.gz
gdb-2838cc1d36e55bf6d45cf971bf401f895e575849.tar.bz2
Add a test case for the jit-reader interface
Originally intended to be committed on 2013-01-17 in 675921c059dbaddd02ab2eb8a1eaf77b3ac727dd (Test case for the jit-reader), but by mistake the files were not added. Fortunately they still work. gdb/testsuite/ChangeLog: 2016-06-17 Sanjoy Das <sanjoy@playingwithpointers.com> * gdb.base/jit-reader.exp: New file. * gdb.base/jithost.c: New file. * gdb.base/jithost.h: New file. * gdb.base/jitreader.c : New file. * gdb.base/jit-protocol.h: New file.
Diffstat (limited to 'gdb/testsuite/gdb.base/jithost.c')
-rw-r--r--gdb/testsuite/gdb.base/jithost.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/jithost.c b/gdb/testsuite/gdb.base/jithost.c
new file mode 100644
index 0000000..09ab377
--- /dev/null
+++ b/gdb/testsuite/gdb.base/jithost.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <sys/mman.h>
+
+#include JIT_READER_H /* Please see jit-reader.exp for an explanation. */
+#include "jithost.h"
+#include "jit-protocol.h"
+
+void __attribute__((noinline)) __jit_debug_register_code () { }
+
+struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
+struct jit_code_entry only_entry;
+
+typedef void (jit_function_t) ();
+
+int main (int argc, char **argv)
+{
+ char *code = mmap (NULL, getpagesize (), PROT_WRITE | PROT_EXEC,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ jit_function_t *function = (jit_function_t *) code;
+
+ code[0] = 0xcc; /* SIGTRAP */
+ code[1] = 0xc3; /* RET */
+
+ struct jithost_abi *symfile = malloc (sizeof (struct jithost_abi));
+ symfile->begin = code;
+ symfile->end = code + 2;
+
+ only_entry.symfile_addr = symfile;
+ only_entry.symfile_size = sizeof (struct jithost_abi);
+
+ __jit_debug_descriptor.first_entry = &only_entry;
+ __jit_debug_descriptor.relevant_entry = &only_entry;
+ __jit_debug_descriptor.action_flag = JIT_REGISTER;
+ __jit_debug_descriptor.version = 1;
+ __jit_debug_register_code ();
+
+ function ();
+
+ return 0;
+}