bzt wrote:But guys, what are you doing? Don't make fools of yourselves! Seriously...
Look in the mirror at some point.
bzt wrote:Wrong! Code models are based on the instruction encoding and addressing scheme!
Non sequitur. Anyway, the specific terms with the specific meanings are defined in the ABI. Specifically
this document, p. 33f. That document is finalized, any change about it, especially about something as major as the code models, would be a breaking change. And it would not break some backwater architecture only five people in the world are using, it would break the main architecture new Linux installations are deployed on. This would only happen over Linus's dead body, and rightly so.
Or did you think the GCC guys pulled those code models out of their unmentionables?
bzt wrote:What's your problem with a warning and an example?
An irrelevant example (that page is about x86_64, bringing up AArch64 helps nobody), and a warning that is wrong. Wrong information deserves to be expunged. The warning "this may change at any time" in particular just creates fear, uncertainty, and doubt in the stability of the psABI. Which would be fine if it were justified, but it isn't. First came the ABI, then came the Linux implementation of it.
bzt wrote: It is also important to mention if a particular gcc option is x86_64 only, and therefore non-portable!
Portable? What? We are talking about architecture-specific things, which is why they are on the architecture page. Of course the code models are not portable, but they never are, anyway. (Virtual) memory layout is something that has to be fitted to each architecture separately. I don't think anyone misunderstands that. The option shows up in the GCC manual under "x86 Options", in the section on "Machine-Dependent Options". I don't know how anyone would, in any way, get the impression that those options are portable to other architectures.
bzt wrote:From the GNU gcc manual: "This model has to be used for Linux kernel code." Which means if and when the Linux kernel code mapping changes, this model will change accordingly without a doubt.
You misunderstand that sentence: Just because Linux is using the kernel code model doesn't mean the model exists only for Linux. The model exists, because as a side effect of how x86 instruction encodings work, you can more easily access memory within 2GB from the current address, and placing everything within 2GB from zero ensures this. This encoding has been the same since the mid-80s (since the 386), and nobody is going to change it anytime soon.
Or put another way: The sentence "The color red must be used on all warning signs" does not mean that warning signs are all the color red is good for, right?