public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* target/6413: PROFILE_HOOK label_no
       [not found] <20020422141515.GM31160@bubble.sa.bigpond.net.au>
@ 2002-04-22 19:46 ` Alan Modra
  0 siblings, 0 replies; only message in thread
From: Alan Modra @ 2002-04-22 19:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6413
>Category:       target
>Synopsis:       PROFILE_HOOK label_no
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Mon Apr 22 19:46:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Alan Modra <amodra@bigpond.net.au>
>Release:        3.1 20020417 (prerelease)
>Organization:
IBM
>Environment:
	pa, rs6000 AIX_ABI, sparc targets.
>Description:
	There's an underlying problem with PROFILE_HOOK and it's
	label_no arg:  Inline function rtl generated by PROFILE_HOOK
	will use the value of profile_label_no when the inline
	function is defined.  For static inline functions,
	profile_label_no is not incremented, thus a deferred
	out-of-line expansion typically uses the wrong profile counter
	label.  On pa, it's even worse as the label_no is used to
	access a local label at the start of the function with a
	pc-rel offset from the _mcount call.  Using the wrong label
	can generate assembly code that overflows ldo insns.

>How-To-Repeat:
	Attached testcase.  Debug session for pa shows the problem.
	Note how profile_label_no is stuck on 1 for the profile_hook
	calls on the static inline functions, and increments on the
	profile_function calls.

Breakpoint 4, hppa_profile_hook (label_no=0)
    at /src/gcc-ppc64-31/gcc/config/pa/pa.c:3535
2: profile_label_no = 0
1: cfun->name = 0x82e1088 "foo"
(gdb) c
Continuing.

Breakpoint 6, profile_function (file=0x4001a500)
    at /src/gcc-ppc64-31/gcc/final.c:1602
2: profile_label_no = 0
1: cfun->name = 0x82e1088 "foo"
(gdb) bt
#0  profile_function (file=0x4001a500) at /src/gcc-ppc64-31/gcc/final.c:1602
#1  0x080d9e7b in final_start_function (first=0x4001a500, file=0x82da748, 
    optimize=2) at /src/gcc-ppc64-31/gcc/final.c:1531
#2  0x0817773e in rest_of_compilation (decl=0x40185b60)
    at /src/gcc-ppc64-31/gcc/toplev.c:3480
#3  0x08059592 in c_expand_body (fndecl=0x40185b60, nested_p=0, can_defer_p=1)
    at /src/gcc-ppc64-31/gcc/c-decl.c:7122
#4  0x08059357 in finish_function (nested=0, can_defer_p=1073849600)
    at /src/gcc-ppc64-31/gcc/c-decl.c:6989
#5  0x08049eb7 in yyparse_1 () at c-parse.y:386
#6  0x08176204 in compile_file () at /src/gcc-ppc64-31/gcc/toplev.c:2120
#7  0x0817a8f9 in do_compile () at /src/gcc-ppc64-31/gcc/toplev.c:5202
#8  0x0817a95b in toplev_main (argc=1073849600, argv=0x0)
    at /src/gcc-ppc64-31/gcc/toplev.c:5234
#9  0x0807fafb in main (argc=1073849600, argv=0x4001a500)
    at /src/gcc-ppc64-31/gcc/main.c:35
#10 0x4003ea8e in __libc_start_main (main=0x807fae0 <main>, argc=40, 
    argv=0xbffff1c4, init=0x8049054 <_init>, fini=0x8213170 <_fini>, 
    rtld_fini=0x4000aa20 <_dl_fini>, stack_end=0xbffff1bc)
    at ../sysdeps/generic/libc-start.c:92
(gdb) c
Continuing.

Breakpoint 4, hppa_profile_hook (label_no=1)
    at /src/gcc-ppc64-31/gcc/config/pa/pa.c:3535
2: profile_label_no = 1
1: cfun->name = 0x82e107f "f0"
(gdb) 
Continuing.

Breakpoint 4, hppa_profile_hook (label_no=1)
    at /src/gcc-ppc64-31/gcc/config/pa/pa.c:3535
2: profile_label_no = 1
1: cfun->name = 0x82e1082 "f1"
(gdb) 
Continuing.

Breakpoint 4, hppa_profile_hook (label_no=1)
    at /src/gcc-ppc64-31/gcc/config/pa/pa.c:3535
2: profile_label_no = 1
1: cfun->name = 0x82e1085 "f2"
(gdb) 
Continuing.

Breakpoint 6, profile_function (file=0x4001a600)
    at /src/gcc-ppc64-31/gcc/final.c:1602
2: profile_label_no = 1
1: cfun->name = 0x82e107f "f0"
(gdb) 
Continuing.

Breakpoint 6, profile_function (file=0x4001a700)
    at /src/gcc-ppc64-31/gcc/final.c:1602
2: profile_label_no = 2
1: cfun->name = 0x82e1082 "f1"
(gdb) 
Continuing.

Breakpoint 6, profile_function (file=0x4001a800)
    at /src/gcc-ppc64-31/gcc/final.c:1602
2: profile_label_no = 3
1: cfun->name = 0x82e1085 "f2"
(gdb) bt
#0  profile_function (file=0x4001a800) at /src/gcc-ppc64-31/gcc/final.c:1602
#1  0x080d9e7b in final_start_function (first=0x4001a800, file=0x82da748, 
    optimize=2) at /src/gcc-ppc64-31/gcc/final.c:1531
#2  0x0817773e in rest_of_compilation (decl=0x401859a0)
    at /src/gcc-ppc64-31/gcc/toplev.c:3480
#3  0x0811c701 in output_inline_function (fndecl=0x401859a0)
    at /src/gcc-ppc64-31/gcc/integrate.c:3004
#4  0x08175e97 in wrapup_global_declarations (vec=0x82e9cd0, len=0)
    at /src/gcc-ppc64-31/gcc/toplev.c:1975
#5  0x0817627b in compile_file () at /src/gcc-ppc64-31/gcc/toplev.c:2152
#6  0x0817a8f9 in do_compile () at /src/gcc-ppc64-31/gcc/toplev.c:5202
#7  0x0817a95b in toplev_main (argc=1073850368, argv=0x0)
    at /src/gcc-ppc64-31/gcc/toplev.c:5234
#8  0x0807fafb in main (argc=1073850368, argv=0x4001a800)
    at /src/gcc-ppc64-31/gcc/main.c:35
#9  0x4003ea8e in __libc_start_main (main=0x807fae0 <main>, argc=40, 
    argv=0xbffff1c4, init=0x8049054 <_init>, fini=0x8213170 <_fini>, 
    rtld_fini=0x4000aa20 <_dl_fini>, stack_end=0xbffff1bc)
    at ../sysdeps/generic/libc-start.c:92
(gdb) c
Continuing.

Program exited normally.

>Fix:
	Increment a function counter in expand_function_start, save in
	cfun, and use that value in profile_function.

--HG+GLK89HZ1zG0kk
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="inline.c"

static inline int f0 (void) { return 0; }
static inline int f1 (void) { return 1; }
static inline int f2 (void) { return 2; }

int foo (void)
{
  /* Take the address of inline functions here to force them to be
     emitted out of line.  */
  return (int) &f0 + (int) &f1 + (int) &f2;
}


--HG+GLK89HZ1zG0kk--
>Release-Note:
>Audit-Trail:
>Unformatted:
 --HG+GLK89HZ1zG0kk
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-04-23  2:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20020422141515.GM31160@bubble.sa.bigpond.net.au>
2002-04-22 19:46 ` target/6413: PROFILE_HOOK label_no Alan Modra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).