This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: [4.1 Regression]: java compiler generates wrong code onia64


H. J. Lu wrote:

The function pointers in the GCJ method metadata (_Jv_Method) are always local, except in the case of CNI functions. But, even local function references in a .so will point at PLT entries if the function is also referenced from the main binary.



Whan you said "local function", did you mean


1. A local data variable with function type. Or
2. A function symbol which isn't visible to the outside. Or
3. A global data variable with function type pointing to a local
function.

I ran into a very tricky issue. But I don't have a testcase. This
problem may be related.


I mean "a reference to a function which is public (visible to the outside) and defined within the same compilation unit"

Here is a simple test case. Without make_local_function_alias(), when SharedLib is in a shared library, and Main is in the main binary, the call to SharedLib.foo() will not appear in the stack trace because the _Jv_Method for SharedLib.foo() points at a PLT entry.

Bryce




How should I setup your testcase? Can you make a tar file such that
I can untar it and type make to see the result?



Actually, try this test case:


public class Main extends SharedLib
{
 public static void main(String[] args)
 {
   new Main().foo();
 }
}

public class SharedLib
{
 public void foo()
 {
   throw new RuntimeException();
 }
}

The following commands should build & run it:

gcj SharedLib.java --shared -o libshared.so
gcj Main.java --main=Main -lshared -L.
LD_LIBRARY_PATH=/path/to/libgcj/lib:. ./a.out

You should see (with gcc HEAD):

Exception in thread "main" java.lang.RuntimeException
  at SharedLib.foo (libshared.so)
  at Main.main (a.out)

Symptom of this "PLT bug" occuring is the SharedLib.foo line is missing.

Bryce


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]