Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
2be7973e
Commit
2be7973e
authored
Mar 28, 1997
by
Doug Evans
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
entered into RCS
From-SVN: r13809
parent
3bc97c56
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
344 additions
and
0 deletions
+344
-0
gcc/gcov.texi
+344
-0
No files found.
gcc/gcov.texi
0 → 100644
View file @
2be7973e
@c
Copyright
(
C
)
1996
,
1997
Free
Software
Foundation
,
Inc
.
@c
This
is
part
of
the
GCC
manual
.
@c
For
copying
conditions
,
see
the
file
gcc
.
texi
.
@node
Gcov
@chapter
@code
{
gcov
}
:
a
Test
Coverage
Program
@code
{
gcov
}
is
a
tool
you
can
use
in
conjunction
with
@sc
{
gnu
}
CC
to
test
code
coverage
in
your
programs
.
This
chapter
describes
version
1
.
5
of
@code
{
gcov
}.
@menu
*
Gcov
Intro
::
Introduction
to
gcov
.
*
Invoking
Gcov
::
How
to
use
gcov
.
*
Gcov
and
Optimization
::
Using
gcov
with
GCC
optimization
.
*
Gcov
Data
Files
::
The
files
used
by
gcov
.
@end
menu
@node
Gcov
Intro
@section
Introduction
to
@code
{
gcov
}
@code
{
gcov
}
is
a
test
coverage
program
.
Use
it
in
concert
with
@sc
{
gnu
}
CC
to
analyze
your
programs
to
help
create
more
efficient
,
faster
running
code
.
You
can
use
@code
{
gcov
}
as
a
profiling
tool
to
help
discover
where
your
optimization
efforts
will
best
affect
your
code
.
You
can
also
use
@code
{
gcov
}
along
with
the
other
profiling
tool
,
@code
{
gprof
},
to
assess
which
parts
of
your
code
use
the
greatest
amount
of
computing
time
.
Profiling
tools
help
you
analyze
your
code
'
s
performance
.
Using
a
profiler
such
as
@code
{
gcov
}
or
@code
{
gprof
},
you
can
find
out
some
basic
performance
statistics
,
such
as
:
@itemize
@bullet
@item
how
often
each
line
of
code
executes
@item
what
lines
of
code
are
actually
executed
@item
how
much
computing
time
each
section
of
code
uses
@end
itemize
Once
you
know
these
things
about
how
your
code
works
when
compiled
,
you
can
look
at
each
module
to
see
which
modules
should
be
optimized
.
@code
{
gcov
}
helps
you
determine
where
to
work
on
optimization
.
Software
developers
also
use
coverage
testing
in
concert
with
testsuites
,
to
make
sure
software
is
actually
good
enough
for
a
release
.
Testsuites
can
verify
that
a
program
works
as
expected
;
a
coverage
program
tests
to
see
how
much
of
the
program
is
exercised
by
the
testsuite
.
Developers
can
then
determine
what
kinds
of
test
cases
need
to
be
added
to
the
testsuites
to
create
both
better
testing
and
a
better
final
product
.
You
should
compile
your
code
without
optimization
if
you
plan
to
use
@code
{
gcov
}
because
the
optimization
,
by
combining
some
lines
of
code
into
one
function
,
may
not
give
you
as
much
information
as
you
need
to
look
for
`
hot
spots
'
where
the
code
is
using
a
great
deal
of
computer
time
.
Likewise
,
because
@code
{
gcov
}
accumulates
statistics
by
line
(
at
the
lowest
resolution
),
it
works
best
with
a
programming
style
that
places
only
one
statement
on
each
line
.
If
you
use
complicated
macros
that
expand
to
loops
or
to
other
control
structures
,
the
statistics
are
less
helpful
---
they
only
report
on
the
line
where
the
macro
call
appears
.
If
your
complex
macros
behave
like
functions
,
you
can
replace
them
with
inline
functions
to
solve
this
problem
.
@code
{
gcov
}
creates
a
logfile
called
@file
{
@var
{
sourcefile
}.
gcov
}
which
indicates
how
many
times
each
line
of
a
source
file
@file
{
@var
{
sourcefile
}.
c
}
has
executed
.
You
can
use
these
logfiles
along
with
@code
{
gprof
}
to
aid
in
fine
-
tuning
the
performance
of
your
programs
.
@code
{
gprof
}
gives
timing
information
you
can
use
along
with
the
information
you
get
from
@code
{
gcov
}.
@code
{
gcov
}
works
only
on
code
compiled
with
@sc
{
gnu
}
CC
.
It
is
not
compatible
with
any
other
profiling
or
test
coverage
mechanism
.
@node
Invoking
Gcov
@section
Invoking
gcov
@smallexample
gcov
[
-
b
]
[
-
v
]
[
-
n
]
[
-
l
]
[
-
f
]
[
-
o
directory
]
@var
{
sourcefile
}
@end
smallexample
@table
@code
@item
-
b
Write
branch
frequencies
to
the
output
file
,
and
write
branch
summary
info
to
the
standard
output
.
This
option
allows
you
to
see
how
often
each
branch
in
your
program
was
taken
.
@item
-
v
Display
the
@code
{
gcov
}
version
number
(
on
the
standard
error
stream
).
@item
-
n
Do
not
create
the
@code
{
gcov
}
output
file
.
@item
-
l
Create
long
file
names
for
included
source
files
.
For
example
,
if
the
header
file
@samp
{
x
.
h
}
contains
code
,
and
was
included
in
the
file
@samp
{
a
.
c
},
then
running
@code
{
gcov
}
on
the
file
@samp
{
a
.
c
}
will
produce
an
output
file
called
@samp
{
a
.
c
.
x
.
h
.
gcov
}
instead
of
@samp
{
x
.
h
.
gcov
}.
This
can
be
useful
if
@samp
{
x
.
h
}
is
included
in
multiple
source
files
.
@item
-
f
Output
summaries
for
each
function
in
addition
to
the
file
level
summary
.
@item
-
o
The
directory
where
the
object
files
live
.
Gcov
will
search
for
@code
{.
bb
},
@code
{.
bbg
},
and
@code
{.
da
}
files
in
this
directory
.
@end
table
@need
3000
When
using
@code
{
gcov
},
you
must
first
compile
your
program
with
two
special
@sc
{
gnu
}
CC
options
:
@samp
{
-
fprofile
-
arcs
-
ftest
-
coverage
}.
This
tells
the
compiler
to
generate
additional
information
needed
by
gcov
(
basically
a
flow
graph
of
the
program
)
and
also
includes
additional
code
in
the
object
files
for
generating
the
extra
profiling
information
needed
by
gcov
.
These
additional
files
are
placed
in
the
directory
where
the
source
code
is
located
.
Running
the
program
will
cause
profile
output
to
be
generated
.
For
each
source
file
compiled
with
-
fprofile
-
arcs
,
an
accompanying
@code
{.
da
}
file
will
be
placed
in
the
source
directory
.
Running
@code
{
gcov
}
with
your
program
'
s
source
file
names
as
arguments
will
now
produce
a
listing
of
the
code
along
with
frequency
of
execution
for
each
line
.
For
example
,
if
your
program
is
called
@samp
{
tmp
.
c
},
this
is
what
you
see
when
you
use
the
basic
@code
{
gcov
}
facility
:
@smallexample
$
gcc
-
fprofile
-
arcs
-
ftest
-
coverage
tmp
.
c
$
a
.
out
$
gcov
tmp
.
c
87
.
50
%
of
8
source
lines
executed
in
file
tmp
.
c
Creating
tmp
.
c
.
gcov
.
@end
smallexample
The
file
@file
{
tmp
.
c
.
gcov
}
contains
output
from
@code
{
gcov
}.
Here
is
a
sample
:
@smallexample
main
()
@{
1
int
i
,
total
;
1
total
=
0
;
11
for
(
i
=
0
;
i
<
10
;
i
++
)
10
total
+=
i
;
1
if
(
total
!=
45
)
###### printf ("Failure\n");
else
1
printf
(
"Success
\n
"
)
;
1
@
}
@end
smallexample
@need
450
When
you
use
the
@samp
{
-
b
}
option
,
your
output
looks
like
this
:
@smallexample
$
gcov
-
b
tmp
.
c
87
.
50
%
of
8
source
lines
executed
in
file
tmp
.
c
80
.
00
%
of
5
branches
executed
in
file
tmp
.
c
80
.
00
%
of
5
branches
taken
at
least
once
in
file
tmp
.
c
50
.
00
%
of
2
calls
executed
in
file
tmp
.
c
Creating
tmp
.
c
.
gcov
.
@end
smallexample
Here
is
a
sample
of
a
resulting
@file
{
tmp
.
c
.
gcov
}
file
:
@smallexample
main
()
@{
1
int
i
,
total
;
1
total
=
0
;
11
for
(
i
=
0
;
i
<
10
;
i
++
)
branch
0
taken
=
91
%
branch
1
taken
=
100
%
branch
2
taken
=
100
%
10
total
+=
i
;
1
if
(
total
!=
45
)
branch
0
taken
=
100
%
###### printf ("Failure\n");
call
0
never
executed
branch
1
never
executed
else
1
printf
(
"Success
\n
"
)
;
call
0
returns
=
100
%
1
@
}
@end
smallexample
For
each
basic
block
,
a
line
is
printed
after
the
last
line
of
the
basic
block
describing
the
branch
or
call
that
ends
the
basic
block
.
There
can
be
multiple
branches
and
calls
listed
for
a
single
source
line
if
there
are
multiple
basic
blocks
that
end
on
that
line
.
In
this
case
,
the
branches
and
calls
are
each
given
a
number
.
There
is
no
simple
way
to
map
these
branches
and
calls
back
to
source
constructs
.
In
general
,
though
,
the
lowest
numbered
branch
or
call
will
correspond
to
the
leftmost
construct
on
the
source
line
.
For
a
branch
,
if
it
was
executed
at
least
once
,
then
a
percentage
indicating
the
number
of
times
the
branch
was
taken
divided
by
the
number
of
times
the
branch
was
executed
will
be
printed
.
Otherwise
,
the
message
``
never
executed
''
is
printed
.
For
a
call
,
if
it
was
executed
at
least
once
,
then
a
percentage
indicating
the
number
of
times
the
call
returned
divided
by
the
number
of
times
the
call
was
executed
will
be
printed
.
This
will
usually
be
100
%
,
but
may
be
less
for
functions
call
@code{
exit
}
or
@code{
longjmp
}
,
and
thus
may
not
return
everytime
they
are
called
.
The
execution
counts
are
cumulative
.
If
the
example
program
were
executed
again
without
removing
the
@code{
.
da
}
file
,
the
count
for
the
number
of
times
each
line
in
the
source
was
executed
would
be
added
to
the
results
of
the
previous
run
(
s
).
This
is
potentially
useful
in
several
ways
.
For
example
,
it
could
be
used
to
accumulate
data
over
a
number
of
program
runs
as
part
of
a
test
verification
suite
,
or
to
provide
more
accurate
long
-
term
information
over
a
large
number
of
program
runs
.
The
data
in
the
@code{
.
da
}
files
is
saved
immediately
before
the
program
exits
.
For
each
source
file
compiled
with
-
fprofile
-
arcs
,
the
profiling
code
first
attempts
to
read
in
an
existing
@code{
.
da
}
file
;
if
the
file
doesn
'
t
match
the
executable
(
differing
number
of
basic
block
counts
)
it
will
ignore
the
contents
of
the
file
.
It
then
adds
in
the
new
execution
counts
and
finally
writes
the
data
to
the
file
.
@node
Gcov
and
Optimization
@section
Using
@code{
gcov
}
with
GCC
Optimization
If
you
plan
to
use
@code{
gcov
}
to
help
optimize
your
code
,
you
must
first
compile
your
program
with
two
special
@sc{
gnu
}
CC
options
:
@samp
{
-
fprofile
-
arcs
-
ftest
-
coverage
}.
Aside
from
that
,
you
can
use
any
other
@sc
{
gnu
}
CC
options
;
but
if
you
want
to
prove
that
every
single
line
in
your
program
was
executed
,
you
should
not
compile
with
optimization
at
the
same
time
.
On
some
machines
the
optimizer
can
eliminate
some
simple
code
lines
by
combining
them
with
other
lines
.
For
example
,
code
like
this
:
@smallexample
if
(
a
!=
b
)
c
=
1
;
else
c
=
0
;
@end
smallexample
@noindent
can
be
compiled
into
one
instruction
on
some
machines
.
In
this
case
,
there
is
no
way
for
@code{
gcov
}
to
calculate
separate
execution
counts
for
each
line
because
there
isn
'
t
separate
code
for
each
line
.
Hence
the
@code{
gcov
}
output
looks
like
this
if
you
compiled
the
program
with
optimization:
@smallexample
100
if
(
a
!=
b
)
100
c
=
1
;
100
else
100
c
=
0
;
@end
smallexample
The
output
shows
that
this
block
of
code
,
combined
by
optimization
,
executed
100
times
.
In
one
sense
this
result
is
correct
,
because
there
was
only
one
instruction
representing
all
four
of
these
lines
.
However
,
the
output
does
not
indicate
how
many
times
the
result
was
0
and
how
many
times
the
result
was
1
.
@node
Gcov
Data
Files
@section
Brief
description
of
@code{
gcov
}
data
files
@code{
gcov
}
uses
three
files
for
doing
profiling
.
The
names
of
these
files
are
derived
from
the
original
@emph{
source
}
file
by
substituting
the
file
suffix
with
either
@code{
.
bb
}
,
@code{
.
bbg
}
,
or
@code{
.
da
}
.
All
of
these
files
are
placed
in
the
same
directory
as
the
source
file
,
and
contain
data
stored
in
a
platform
-
independent
method
.
The
@code{
.
bb
}
and
@code{
.
bbg
}
files
are
generated
when
the
source
file
is
compiled
with
the
@sc{
gnu
}
CC
@samp{
-
ftest
-
coverage
}
option
.
The
@code{
.
bb
}
file
contains
a
list
of
source
files
(
including
headers
),
functions
within
those
files
,
and
line
numbers
corresponding
to
each
basic
block
in
the
source
file
.
The
@code{
.
bb
}
file
format
consists
of
several
lists
of
4
-
byte
integers
which
correspond
to
the
line
numbers
of
each
basic
block
in
the
file
.
Each
list
is
terminated
by
a
line
number
of
0
.
A
line
number
of
-
1
is
used
to
designate
that
the
source
file
name
(
padded
to
a
4
-
byte
boundary
and
followed
by
another
-
1
)
follows
.
In
addition
,
a
line
number
of
-
2
is
used
to
designate
that
the
name
of
a
function
(
also
padded
to
a
4
-
byte
boundary
and
followed
by
a
-
2
)
follows
.
The
@code{
.
bbg
}
file
is
used
to
reconstruct
the
program
flow
graph
for
the
source
file
.
It
contains
a
list
of
the
program
flow
arcs
(
possible
branches
taken
from
one
basic
block
to
another
)
for
each
function
which
,
in
combination
with
the
@code{
.
bb
}
file
,
enables
gcov
to
reconstruct
the
program
flow
.
In
the
@code{
.
bbg
}
file
,
the
format
is
:
@smallexample
number
of
basic
blocks
for
function
#
0
(
4
-
byte
number
)
total
number
of
arcs
for
function
#
0
(
4
-
byte
number
)
count
of
arcs
in
basic
block
#
0
(
4
-
byte
number
)
destination
basic
block
of
arc
#
0
(
4
-
byte
number
)
flag
bits
(
4
-
byte
number
)
destination
basic
block
of
arc
#
1
(
4
-
byte
number
)
flag
bits
(
4
-
byte
number
)
...
destination
basic
block
of
arc
#
N
(
4
-
byte
number
)
flag
bits
(
4
-
byte
number
)
count
of
arcs
in
basic
block
#
1
(
4
-
byte
number
)
destination
basic
block
of
arc
#
0
(
4
-
byte
number
)
flag
bits
(
4
-
byte
number
)
...
@end
smallexample
A
-
1
(
stored
as
a
4
-
byte
number
)
is
used
to
separate
each
function
'
s
list
of
basic
blocks
,
and
to
verify
that
the
file
has
been
read
correctly
.
The
@code
{.
da
}
file
is
generated
when
a
program
containing
object
files
built
with
the
@sc
{
gnu
}
CC
@samp
{
-
fprofile
-
arcs
}
option
is
executed
.
A
separate
@code
{.
da
}
file
is
created
for
each
source
file
compiled
with
this
option
,
and
the
name
of
the
@code
{.
da
}
file
is
stored
as
an
absolute
pathname
in
the
resulting
object
file
.
This
path
name
is
derived
from
the
source
file
name
by
substituting
a
@code
{.
da
}
suffix
.
The
format
of
the
@code
{.
da
}
file
is
fairly
simple
.
The
first
8
-
byte
number
is
the
number
of
counts
in
the
file
,
followed
by
the
counts
(
stored
as
8
-
byte
numbers
).
Each
count
corresponds
to
the
number
of
times
each
arc
in
the
program
is
executed
.
The
counts
are
cumulative
;
each
time
the
program
is
executed
,
it
attemps
to
combine
the
existing
@code
{.
da
}
files
with
the
new
counts
for
this
invocation
of
the
program
.
It
ignores
the
contents
of
any
@code
{.
da
}
files
whose
number
of
arcs
doesn
'
t
correspond
to
the
current
program
,
and
merely
overwrites
them
instead
.
All
three
of
these
files
use
the
functions
in
@code
{
gcov
-
io
.
h
}
to
store
integers
;
the
functions
in
this
header
provide
a
machine
-
independent
mechanism
for
storing
and
retrieving
data
from
a
stream
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment