mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-19 13:10:50 +08:00
gcov-io.c (gcov_open): Use open + fdopen instead of fopen.
* gcov-io.c (gcov_open) [GCOV_LOCKED]: Use open + fdopen instead of fopen. * libgcov.c: Include sys/stat.h. * config/rs6000/linux.h (TARGET_HAS_F_SETLKW): Define. * config/rs6000/linux64.h (TARGET_HAS_F_SETLKW): Define. * config/sparc/linux.h (TARGET_HAS_F_SETLKW): Define. * config/sparc/linux64.h (TARGET_HAS_F_SETLKW): Define. From-SVN: r78281
This commit is contained in:
parent
fcfcb20e67
commit
c2cd64b5a9
@ -1,3 +1,13 @@
|
||||
2004-02-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcov-io.c (gcov_open) [GCOV_LOCKED]: Use open + fdopen instead of
|
||||
fopen.
|
||||
* libgcov.c: Include sys/stat.h.
|
||||
* config/rs6000/linux.h (TARGET_HAS_F_SETLKW): Define.
|
||||
* config/rs6000/linux64.h (TARGET_HAS_F_SETLKW): Define.
|
||||
* config/sparc/linux.h (TARGET_HAS_F_SETLKW): Define.
|
||||
* config/sparc/linux64.h (TARGET_HAS_F_SETLKW): Define.
|
||||
|
||||
2004-02-22 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* reorg.c: Remove comments about dead ports.
|
||||
|
@ -91,6 +91,8 @@
|
||||
|
||||
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
|
||||
#define TARGET_HAS_F_SETLKW
|
||||
|
||||
/* Do code reading to identify a signal frame, and set the frame
|
||||
state data appropriately. See unwind-dw2.c for the structs. */
|
||||
|
||||
|
@ -543,6 +543,8 @@ while (0)
|
||||
|
||||
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
|
||||
#define TARGET_HAS_F_SETLKW
|
||||
|
||||
#define LINK_GCC_C_SEQUENCE_SPEC \
|
||||
"%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
|
||||
|
||||
|
@ -247,6 +247,8 @@ do { \
|
||||
|
||||
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
|
||||
#define TARGET_HAS_F_SETLKW
|
||||
|
||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||
#define LINK_GCC_C_SEQUENCE_SPEC \
|
||||
"%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
|
||||
|
@ -325,6 +325,8 @@ do { \
|
||||
|
||||
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
|
||||
#define TARGET_HAS_F_SETLKW
|
||||
|
||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||
#define LINK_GCC_C_SEQUENCE_SPEC \
|
||||
"%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
|
||||
|
@ -65,6 +65,7 @@ gcov_open (const char *name, int mode)
|
||||
#endif
|
||||
#if GCOV_LOCKED
|
||||
struct flock s_flock;
|
||||
int fd;
|
||||
|
||||
s_flock.l_type = F_WRLCK;
|
||||
s_flock.l_whence = SEEK_SET;
|
||||
@ -82,6 +83,44 @@ gcov_open (const char *name, int mode)
|
||||
#if !IN_LIBGCOV
|
||||
gcov_var.endian = 0;
|
||||
#endif
|
||||
#if GCOV_LOCKED
|
||||
if (mode > 0)
|
||||
fd = open (name, O_RDWR);
|
||||
else
|
||||
fd = open (name, O_RDWR | O_CREAT, 0666);
|
||||
if (fd < 0)
|
||||
return 0;
|
||||
|
||||
while (fcntl (fd, F_SETLKW, &s_flock) && errno == EINTR)
|
||||
continue;
|
||||
|
||||
gcov_var.file = fdopen (fd, "r+b");
|
||||
if (!gcov_var.file)
|
||||
{
|
||||
close (fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mode > 0)
|
||||
gcov_var.mode = 1;
|
||||
else if (mode == 0)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (fstat (fd, &st) < 0)
|
||||
{
|
||||
fclose (gcov_var.file);
|
||||
gcov_var.file = 0;
|
||||
return 0;
|
||||
}
|
||||
if (st.st_size != 0)
|
||||
gcov_var.mode = 1;
|
||||
else
|
||||
gcov_var.mode = mode * 2 + 1;
|
||||
}
|
||||
else
|
||||
gcov_var.mode = mode * 2 + 1;
|
||||
#else
|
||||
if (mode >= 0)
|
||||
gcov_var.file = fopen (name, "r+b");
|
||||
if (gcov_var.file)
|
||||
@ -94,15 +133,10 @@ gcov_open (const char *name, int mode)
|
||||
}
|
||||
if (!gcov_var.file)
|
||||
return 0;
|
||||
|
||||
setbuf (gcov_var.file, (char *)0);
|
||||
|
||||
#if GCOV_LOCKED
|
||||
while (fcntl (fileno (gcov_var.file), F_SETLKW, &s_flock)
|
||||
&& errno == EINTR)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
setbuf (gcov_var.file, (char *)0);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -79,6 +79,7 @@ void __gcov_merge_delta (gcov_type *counters __attribute__ ((unused)),
|
||||
#if GCOV_LOCKED
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#ifdef L_gcov
|
||||
|
Loading…
x
Reference in New Issue
Block a user