From: NIIBE Y. <gn...@m1...> - 2001-09-21 04:42:51
|
I agree that we should not diverge the GCC. My point is the one I've used is not 3.0.1 for the record. I don't recommend to diverge or fork too. I did let people know whole Debian system (for bootstrap) now can be done with 3.0.1 (with small patches). Not long ago, we rely on unreleased GCC. I think that this is good move toward the goal. M. R. Brown wrote: > I and others have always been confused by the "hidden" patch. What does it > do? Why is it required? I've build glibc without it, so it isn't required > for that build step - what other reasons are there? I have explained several times about it here, and I thought that its purpose is clear. Umm... it was two yeas ago or a year ago. Well, I explain it again, because I have update on that. Sharing idea and experience is good thing. This time, I only explain about current patch, not the history (which is complicated). * * * GCC emits some external functions, which are implemented in libgcc. There's two cases for the emits. One is as usual function call, and another is special call which may not follow the calling convention (of clobbering register). Without .hidden, libgcc call may become PLT call for shared library. (PLT call is the hook of dynamically link the code) For usual function call, it's OK, GCC knows everything which register will be clobbered. Another case, some register (for use of PLT call) will be clobbered unexpectedly, this is a problem. The code GCC emits does not expect the register for PLT call will be clobbered. Well, this is my understanding and explanation. I think that the use of .hidden in this case is just a implementation. It could be solved by another way. Perhaps, distingushing libgcc call and don't allow PLT call for that. I'm not sure for that implementation, but it would be worth considering... -- |