+2005-07-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/alpha/linux.h (TARGET_HAS_F_SETLKW): Renamed to ...
+ (TARGET_POSIX_IO): This.
+ * config/darwin.h: Likewise.
+ * config/freebsd.h: Likewise.
+ * config/linux.h: Likewise.
+ * config/lynx.h: Likewise.
+ * config/netbsd.h: Likewise.
+ * config/rs6000/linux64.h: Likewise.
+ * config/rs6000/linux.h: Likewise.
+ * config/s390/tpf.h: Likewise.
+ * config/sh/embed-elf.h: Likewise.
+ * config/sparc/linux64.h: Likewise.
+ * config/sparc/linux.h: Likewise.
+ * config/svr4.h: Likewise.
+ * gcov-io.h: Likewise.
+
+ * doc/tm.texi: Updated.
+
+ * libgcov.c (create_file_directory): Defined only if
+ TARGET_POSIX_IO is defined.
+ (gcov_exit): Call create_file_directory only if TARGET_POSIX_IO
+ is defined.
+
2005-07-13 Jan Hubicka <jh@suse.cz>
* tree-ssa-operands.c (get_expr_operands): Fix typo in previous patch.
runtime library. */
#define TARGET_C99_FUNCTIONS 1
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
#define LINK_GCC_C_SEQUENCE_SPEC \
"%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
void add_framework_path (char *);
#define TARGET_OPTF add_framework_path
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
/* All new versions of Darwin have C99 functions. */
#define TARGET_C99_FUNCTIONS 1
/* Used by libgcc2.c. We support file locking with fcntl / F_SETLKW.
This enables the test coverage code to use file locking when exiting a
program, which avoids race conditions if the program has forked. */
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
is present in the runtime library. */
#define TARGET_C99_FUNCTIONS 1
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
# define NO_IMPLICIT_EXTERN_C
#endif
-#ifndef TARGET_HAS_F_SETLKW
-# define TARGET_HAS_F_SETLKW
+#ifndef TARGET_POSIX_IO
+# define TARGET_POSIX_IO
#endif
fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \
} while (0)
-#undef TARGET_HAS_F_SETLKW
-#define TARGET_HAS_F_SETLKW
+#undef TARGET_POSIX_IO
+#define TARGET_POSIX_IO
/* Handle #pragma weak and #pragma pack. */
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
#define MD_UNWIND_SUPPORT "config/rs6000/linux-unwind.h"
#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
#define LINK_GCC_C_SEQUENCE_SPEC \
"%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"
#define NO_IMPLICIT_EXTERN_C
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
#undef MD_EXEC_PREFIX
#undef MD_STARTFILE_PREFIX
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX "_"
-#undef TARGET_HAS_F_SETLKW
+#undef TARGET_POSIX_IO
runtime library. */
#define TARGET_C99_FUNCTIONS 1
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
#undef LINK_GCC_C_SEQUENCE_SPEC
#define LINK_GCC_C_SEQUENCE_SPEC \
runtime library. */
#define TARGET_C99_FUNCTIONS 1
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
#undef LINK_GCC_C_SEQUENCE_SPEC
#define LINK_GCC_C_SEQUENCE_SPEC \
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE BITS_PER_WORD
-#define TARGET_HAS_F_SETLKW
+#define TARGET_POSIX_IO
is wrong.
@end defmac
-@defmac TARGET_HAS_F_SETLKW
-Define this macro if the target supports file locking with fcntl / F_SETLKW@.
-Note that this functionality is part of POSIX@.
-Defining @code{TARGET_HAS_F_SETLKW} will enable the test coverage code
+@defmac TARGET_POSIX_IO
+Define this macro if the target supports the following POSIX@ file
+functions, access, mkdir and file locking with fcntl / F_SETLKW@.
+Defining @code{TARGET_POSIX_IO} will enable the test coverage code
to use file locking when exiting a program, which avoids race conditions
-if the program has forked.
+if the program has forked. It will also create directories at run-time
+for cross-profiling. @xref{Cross-profiling}.
@end defmac
@defmac MAX_CONDITIONAL_EXECUTE
#endif
-#if defined (TARGET_HAS_F_SETLKW)
+#if defined (TARGET_POSIX_IO)
#define GCOV_LOCKED 1
#else
#define GCOV_LOCKED 0
/* Size of the longest file name. */
static size_t gcov_max_filename = 0;
+#ifdef TARGET_POSIX_IO
/* Make sure path component of the given FILENAME exists, create
missing directories. FILENAME must be writable.
Returns zero on success, or -1 if an error occurred. */
};
return 0;
}
+#endif
/* Check if VERSION of the info block PTR matches libgcov one.
Return 1 on success, or zero in case of versions mismatch.
if (!gcov_open (gi_filename))
{
+#ifdef TARGET_POSIX_IO
/* Open failed likely due to missed directory.
Create directory and retry to open file. */
if (create_file_directory (gi_filename))
fprintf (stderr, "profiling:%s:Skip\n", gi_filename);
continue;
}
+#endif
if (!gcov_open (gi_filename))
{
fprintf (stderr, "profiling:%s:Cannot open\n", gi_filename);