Index: gdb/auxv.c |
diff --git a/gdb/auxv.c b/gdb/auxv.c |
index 12dcb8929d0e02730db41acc08a365af988cb71e..437040a8d8cc6cb6468de690d8151916205e3491 100644 |
--- a/gdb/auxv.c |
+++ b/gdb/auxv.c |
@@ -1,6 +1,6 @@ |
/* Auxiliary vector support for GDB, the GNU debugger. |
- Copyright (C) 2004-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2004-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -26,6 +26,7 @@ |
#include "gdb_assert.h" |
#include "gdbcore.h" |
#include "observer.h" |
+#include "filestuff.h" |
#include "auxv.h" |
#include "elf/common.h" |
@@ -47,8 +48,8 @@ procfs_xfer_auxv (gdb_byte *readbuf, |
int fd; |
LONGEST n; |
- pathname = xstrprintf ("/proc/%d/auxv", PIDGET (inferior_ptid)); |
- fd = open (pathname, writebuf != NULL ? O_WRONLY : O_RDONLY); |
+ pathname = xstrprintf ("/proc/%d/auxv", ptid_get_pid (inferior_ptid)); |
+ fd = gdb_open_cloexec (pathname, writebuf != NULL ? O_WRONLY : O_RDONLY, 0); |
xfree (pathname); |
if (fd < 0) |
return -1; |
@@ -76,7 +77,7 @@ ld_so_xfer_auxv (gdb_byte *readbuf, |
{ |
struct minimal_symbol *msym; |
CORE_ADDR data_address, pointer_address; |
- struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr; |
+ struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; |
size_t ptr_size = TYPE_LENGTH (ptr_type); |
size_t auxv_pair_size = 2 * ptr_size; |
gdb_byte *ptr_buf = alloca (ptr_size); |
@@ -240,9 +241,9 @@ static int |
default_auxv_parse (struct target_ops *ops, gdb_byte **readptr, |
gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) |
{ |
- const int sizeof_auxv_field = gdbarch_ptr_bit (target_gdbarch) |
+ const int sizeof_auxv_field = gdbarch_ptr_bit (target_gdbarch ()) |
/ TARGET_CHAR_BIT; |
- const enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch); |
+ const enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); |
gdb_byte *ptr = *readptr; |
if (endptr == ptr) |
@@ -479,7 +480,7 @@ fprint_target_auxv (struct ui_file *file, struct target_ops *ops) |
fprintf_filtered (file, "%s\n", plongest (val)); |
break; |
case hex: |
- fprintf_filtered (file, "%s\n", paddress (target_gdbarch, val)); |
+ fprintf_filtered (file, "%s\n", paddress (target_gdbarch (), val)); |
break; |
case str: |
{ |
@@ -487,8 +488,8 @@ fprint_target_auxv (struct ui_file *file, struct target_ops *ops) |
get_user_print_options (&opts); |
if (opts.addressprint) |
- fprintf_filtered (file, "%s ", paddress (target_gdbarch, val)); |
- val_print_string (builtin_type (target_gdbarch)->builtin_char, |
+ fprintf_filtered (file, "%s ", paddress (target_gdbarch (), val)); |
+ val_print_string (builtin_type (target_gdbarch ())->builtin_char, |
NULL, val, -1, file, &opts); |
fprintf_filtered (file, "\n"); |
} |
@@ -530,7 +531,7 @@ This is information provided by the operating system at program startup.")); |
/* Set an auxv cache per-inferior. */ |
auxv_inferior_data |
- = register_inferior_data_with_cleanup (auxv_inferior_data_cleanup); |
+ = register_inferior_data_with_cleanup (NULL, auxv_inferior_data_cleanup); |
/* Observers used to invalidate the auxv cache when needed. */ |
observer_attach_inferior_exit (invalidate_auxv_cache_inf); |