Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: gdb/nacl-manifest.c

Issue 10544136: Automatically run file command on remote connection to the target if NaCl manifest was provided by … (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@nacl-stub
Patch Set: Check r->dirname size Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/nacl-manifest.c
diff --git a/gdb/nacl-manifest.c b/gdb/nacl-manifest.c
index 2ae402753e6fc43dd3f65203351990977d4304f8..927a2692c345a9dc25486737ec87469ac2b64b6f 100644
--- a/gdb/nacl-manifest.c
+++ b/gdb/nacl-manifest.c
@@ -21,8 +21,11 @@
#include "command.h"
#include "completer.h"
+#include "exec.h"
+#include "observer.h"
#include "readline/readline.h"
#include "solib.h"
+#include "symfile.h"
#include <ctype.h>
#include <stdio.h>
@@ -157,6 +160,25 @@ json_on_end_member (struct json_manifest_reader *r, const char *member)
--r->nesting;
}
+static void
+append_dir_name (struct json_manifest_reader *r,
+ char *full_path,
+ int max_path_size,
+ char *name)
+{
+ full_path[0] = '\0';
+ if (r->dirname)
+ {
+ if (strlen (r->dirname) + strlen (SLASH_STRING) >= max_path_size)
+ error (_("Mapped file name in manifest is too long."));
+ strcpy (full_path, r->dirname);
+ strcat (full_path, SLASH_STRING);
+ }
+ if (strlen (full_path) + strlen (name) >= max_path_size)
+ error (_("Mapped file name in manifest is too long."));
+ strcat (full_path, name);
+}
+
static struct file_list *
json_append_file_list (struct json_manifest_reader *r,
struct file_list **nacl_file_list,
@@ -168,17 +190,7 @@ json_append_file_list (struct json_manifest_reader *r,
if (strlen(original_name) >= MANIFEST_MAX_STRING_SIZE)
error (_("Original file name in manifest is too long."));
strcpy (curr->original_name, original_name);
-
- if (r->dirname)
- {
- strcpy (curr->name, r->dirname);
- if (strlen(curr->name) + strlen(SLASH_STRING) >= MANIFEST_MAX_STRING_SIZE)
- error (_("Mapped file name in manifest is too long."));
- strcat (curr->name, SLASH_STRING);
- }
- if (strlen(curr->name) + strlen(name) >= MANIFEST_MAX_STRING_SIZE)
- error (_("Mapped file name in manifest is too long."));
- strcat (curr->name, name);
+ append_dir_name (r, curr->name, MANIFEST_MAX_STRING_SIZE, name);
curr->next = *nacl_file_list;
*nacl_file_list = curr;
@@ -194,9 +206,17 @@ json_on_string_value (struct json_manifest_reader *r, const char *value)
{
/* We'll xfree nacl_program_filename_* in nacl_manifest_free. */
if (strcmp (r->members[1], "x86-32") == 0)
- nacl_program_filename_32 = xstrdup (value);
+ {
+ nacl_program_filename_32 = malloc (MANIFEST_MAX_STRING_SIZE);
+ append_dir_name (r, nacl_program_filename_32,
+ MANIFEST_MAX_STRING_SIZE, value);
+ }
else if (strcmp (r->members[1], "x86-64") == 0)
- nacl_program_filename_64 = xstrdup (value);
+ {
+ nacl_program_filename_64 = malloc (MANIFEST_MAX_STRING_SIZE);
+ append_dir_name (r, nacl_program_filename_64,
+ MANIFEST_MAX_STRING_SIZE, value);
+ }
}
else if (r->nesting == 4 &&
strcmp (r->members[0], "files") == 0 &&
@@ -329,6 +349,19 @@ nacl_irt_command (char *args, int from_tty)
}
}
+static struct observer *about_to_proceed_observer = NULL;
+
+static void
+about_to_proceed_hook ()
+{
+ if (exec_bfd == NULL)
+ {
+ const char *filename = nacl_manifest_find ("NaClMain");
+ exec_file_attach (filename, 0);
+ symbol_file_add (filename, SYMFILE_MAINLINE, NULL, 0);
+ }
+}
+
static void
nacl_manifest_command (char *args, int from_tty)
{
@@ -355,6 +388,12 @@ nacl_manifest_command (char *args, int from_tty)
solib_add (NULL, from_tty, NULL, 1);
+ if (about_to_proceed_observer == NULL)
+ {
+ about_to_proceed_observer
+ = observer_attach_about_to_proceed (about_to_proceed_hook);
+ }
+
do_cleanups(old_chain);
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698