Everything Else

Hell actually exists, proofs of existence, the computer science is not a safe place, Gcc attempts your soul - Page 1

Image

Lady Death is a fictional wicked woman, appearing in American comic books published by Eternity Comics . Created by Brian Pulido and Steven Hughes , Lady Death first appeared in Evil Ernie #1 in December 1991, while Lady Demon came about when Lady Death realizes she is a mistress of puppet , and all her life in hell is all a plan by Lucifer. So bored, and frustrated, the journey of self realization was so traumatic that her demonic person came to a life of its own. So Lady Death became Lady Demon , and true wicked blood stories came.

There is an episode, Lady Demon was looking for a body to inhabit, otherwise she would be pulled back to Hell. She found one woman who has killed her husband and then herself. This body suits Lady Demon better than the last one. So hidden inside a human body, she became a free witch. The body to inhabit belonged to a she-lawyer.

Does Lady Death really exist? Did she really exist? Let's ask the Science about!

Image
Lyudmila Pavlichenko was called " LadyDeath "

For all the devils of the Hell, the Science has found a match , even if I believe there is a misunderstanding, she is not THE " Lady Death " whose story is a good way to learn English, that's an other story which reaches a more violent and bloody peak during the World War , a true horrors being wrought upon everything, including their own life, the freedom, the honor, everything may be lost forever.

Ukraine's Crimea peninsula during World War Two , battle for Sevastopol in May 1942. A key port city on the Black Sea, came under attack from five Nazis divisions, supported by Luftwaffe bombardments. Lyudmila Pavlichenko was sent to the frontline in 1941 at the age of 25 after being trained as a sniper, and she is said to have killed no fewer than 309 Nazis during the siege of Odessa and later the strategic city of Sevastopol on Ukraine's Crimean peninsula .

The close up shot of newspaper section politics got shot at title " Lady Death: the nazi killer who become guest of U.S. president "

So we have a proof, the science has demostrated that Lady Death, actually existed , but what about Hell ? The science is now wondering the reason why also Hell exists, because a proof of the Hell existence is the following

Code: Select all

void reset()
{
void *jump[] = { halt, soft_reset };

/*
* what the frog is this ? assembly branch?
*   looking at the asm level
*   it is translated into "bra address"
*   which is an uncodnditional branch
*   it's not a function call
* so what about the stack?
* no doubt it gets compromised
* does it make sense? so why they allow this crap?
* oh, just to invoke the soft_reset
* so it really makes sense
*/
goto *jump[1];
}


Code: Select all

void soft_reset()
{
/*
* hAllo, buddy
* the stack is now compromised, completely gone
* but don't worry I am the machine reset
* see you later, reset is coming ^_^
*/

die(); /* Just kidding! Say hAllo to lucifer, you are going to pass through Hell */
}


and .. it's not a comics, sadly the Truth ... GCC implements the "goto" and the above wicked code is perfectly compiled without a warning, the demonic person of gcc came to a life of its own, gcc came to a life of its own, Hell in town, Hell in console, Gcc is looking for a body to inhabit and if you try to execute the above code on a bareboard machine (without an OS that can handle memory protection), you will see how deep Hell's throat goes. May you save your *** from the suicide rabbit.

Image
never follow the suicide rabbit down into Hell's hole

corollary : GNU guys are really wicked , more maleficient than Lucifer (even if their girls are less sexy than Lady Death , of course, except girls in BSD, which are really sexy witches), I suspect that only devils hidden inside a human body could think such a maleficent.

Image
never follow the suicide rabbit down into Hell's hole, even if you are tempted to escape away from Gcc

my humor, I am upset by the code I've seen: can I pay now someone to cut mr Stallman 's beard ?
Can I offer him a copy of Lady Death as motivation to remove the above wicked-goto-feature from GCC?
I wish I could enter into the vegetable garden of William Gibson , on the right of a director, to decide how a film is ultimately released for public viewing, but I am not a nor Cyberpunk writer neither a dude in Hollywood , and my * flawless English * still looks like an old rusty trailer which needs a fix-up, so my personal wonderland begins with a pill ... tumbling down the rabbit hole , where the sky above the router port is the color of television, tuned to a dead channel and some gears still need a debugger there.
goto is kind of, you know, an actual legitimate part of the C language going all the way back to K&R.

Not to imply that GCC isn't full of horrors, but that one's not on them.
Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
Synthesizers: Roland JX-10/Jupiter-6/D-50/MT-32/SC-55k, Ensoniq SQ-80/Mirage, Yamaha DX7/V-50/FB-01, Korg DW-8000/03-RW/MS-20 Mini, E-mu Proteus MPS/Proteus/2, Rhodes Chroma Polaris

"'Legacy code' often differs from its suggested alternative by actually working and scaling." - Bjarne Stroustrup
I think that a goto with the address of a label/symbol as "argument" is specific to gcc though.
:Onyx2R: :IRIS3130: :Crimson: :4D310: :Onyx2: :O2000: :O200: :PI: :Fuel: :Indigo: :Octane: :O2: :Indigo2IMP: :Indigo2: :Indy: :1600SW: :pdp8e:
:BA213: <- MicroVAX 3500 :BA213: <- DECsystem 5500 :BA215: <- MicroVAX 3300
Pictures of my collection: www.pdp8.se
yes, SierraC can't do that, while gcc can, so it really seems specific to gcc, which might break the portability, increase the entropy, and I can't find NO reason for that: it should be banned and removed!

p.s.
I have found " goto " inside the source code of VxWorks v5 , linux , and Integrity , I am a bit shocked to see that (" goto " has been banned by Misra ), even if none of them used the wicked tricked above , whick allows you to jump from a function into an other , with a so dangerous conseguence for the stack that crashing down the machine has a very high probability of disaster.
I wish I could enter into the vegetable garden of William Gibson , on the right of a director, to decide how a film is ultimately released for public viewing, but I am not a nor Cyberpunk writer neither a dude in Hollywood , and my * flawless English * still looks like an old rusty trailer which needs a fix-up, so my personal wonderland begins with a pill ... tumbling down the rabbit hole , where the sky above the router port is the color of television, tuned to a dead channel and some gears still need a debugger there.
I haven't written code in decades but the "goto" jumped right off the screen at me. :D

Funny how my brain still picks that up.
:Octane2: Octane 2, Dual 600MHz R14k's, 2GB, v12
:O2000: Origin 2200, Dual 300mhz, 2GB
:Onyx2R: Onyx2
Mac Pro dual quad Xeon 16GB 1TB
HP dual core 4GB 500GB
Dell Workstation Dual quad Xeon 8GB 500GB RAID
Imac | HP laptop | Compaq | Commodore 64 floppy | TI 99 38k Peripheral Expansion Box
I only know that it is a GCC specific thing because I once used it to optimize a virtual machine for an interpreted language.

Instead of using a big switch/case statement we modified the byte code to contain the address of the label interpreting a given instruction and used goto to jump directly there. It increased memory usage and I can't recall how much extra performance it gave, not much.
:Onyx2R: :IRIS3130: :Crimson: :4D310: :Onyx2: :O2000: :O200: :PI: :Fuel: :Indigo: :Octane: :O2: :Indigo2IMP: :Indigo2: :Indy: :1600SW: :pdp8e:
:BA213: <- MicroVAX 3500 :BA213: <- DECsystem 5500 :BA215: <- MicroVAX 3300
Pictures of my collection: www.pdp8.se
Pontus wrote: I think that a goto with the address of a label/symbol as "argument" is specific to gcc though.

Ah, gotcha. I certainly will raise no objection to complaints about GCC-specific extensions (because hey, "embrace, extend, and exterminate" isn't evil if it's Ooopen Sooource!!! and not TEH 3VULZ M1CR0$0F7, right?)
Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
Synthesizers: Roland JX-10/Jupiter-6/D-50/MT-32/SC-55k, Ensoniq SQ-80/Mirage, Yamaha DX7/V-50/FB-01, Korg DW-8000/03-RW/MS-20 Mini, E-mu Proteus MPS/Proteus/2, Rhodes Chroma Polaris

"'Legacy code' often differs from its suggested alternative by actually working and scaling." - Bjarne Stroustrup
Well, I'm just glad that tagbody and go made it to the Common Lisp standard even so Dijkstra did consider goto to be harmful. But then this goto like structure has a precise scope in Lisp. I don't know enough C, but it looks for me like you simply call whatever the symbol points to.
:Fuel: :Octane2: :O2: :O2: :1600SW: :Indy: :Indy:
Where subtlety fails us we must simply make do with cream pies.
tomvos wrote: I don't know enough C, but it looks for me like you simply call whatever the symbol points to


see the wicked example above, "goto" is always implemented with an " unconditional branch " (often called "bra") which "jumps". It means, the "program counter" (cpu.register.pc) is reloaded with a new value, and this value is the address of the next instruction to be executed, there is no stack manipulation (stack push, pop, sp--, sp++, nothing of these), so .... if you jump within a function there is no problem, no trouble, because the stack is not compromised.

Using "labels" is an admission of guilt , you have failed to design your code in the properly way , it will never pass the MISRA check which bans every goto, but formally it's a valid code without hazard.

Code: Select all

void *jump[] = { halt, soft_reset };
...
goto *jump[1]; /* it's not a label, it's an explicit address, which points outside the function you currently are in */


But what happens if you attempt to jump outside the function you are in? It happens that the stack is smashed, invalidated, gone, garbage!

It's insane! SierraC refuses to compile every "goto *xxxx" simply because it's dangerous, while gcc implements an extra feature that enables you to jump outside the function you are in, jumping directly into an other function but without closing the stack, and without preparing the stack of where you are going: the result is a catastrophic hot jam, a situation in where you have completely lost the return address, the frame, and all the local variables !

edit:
a few weeks ago, I opened a discussion here , about the C language, It might be interesting.
I wish I could enter into the vegetable garden of William Gibson , on the right of a director, to decide how a film is ultimately released for public viewing, but I am not a nor Cyberpunk writer neither a dude in Hollywood , and my * flawless English * still looks like an old rusty trailer which needs a fix-up, so my personal wonderland begins with a pill ... tumbling down the rabbit hole , where the sky above the router port is the color of television, tuned to a dead channel and some gears still need a debugger there.
Interestingly this recent study found that "developers limit themselves to using goto appropriately in most cases, and not in an unrestricted manner like Dijkstra feared, thus suggesting that goto does not appear to be harmful in practice."
Project:
Temporarily lost at sea...
Plan:
World domination! Or something...

:Tezro: :Octane2:
Common Lisp's GO, and C's "goto", are both strongly-typed and lexically scoped. So far, no problem. The GCC extension is of a different kind:
It was intended to provide the freedom of a "computed GOTO" expression in Fortran. But what came out is rather too general: the labels are coerced to void*, losing all type safety, and no checks are performed at all. So it is very easy to shoot yourself in the foot.
There is no problem per se with jumping to a label in another function, as long as the scope is defined. Already in C you can jump to any label within the function, even if it means crossing a compound statement. Gotos to other functions happen naturally once you have first-class functions.
:PI: :O2: :Indigo2IMP: :Indigo2IMP:
I don't really understand your point. In the examples you've provided, the algorithmic causality of the code seems to be unaffected. No?
"Was it a dream where you see yourself standing in sort of sun-god robes on a
pyramid with thousand naked women screaming and throwing little pickles at you?"
robespierre wrote: Gotos to other functions happen naturally once you have first-class functions


first-class functions , but

bra is different from jsr , and the machine layer of a C compiler implements differently
  • goto *xxxx -> bra -> no care about stack -> the invoked function can NOT return, and can NOT use local variables, foot shot
  • function call -> jsr -> care about stack, return address, local variables, frame, everything allocated in the properly way

as far as the " freedom ", if you really need to " jump " into an other function, do it in assembly -> which means explicitly defining and using an " unsafe piece of code " as it's called by ADA.


vishnu wrote: Interestingly this recent study found that "developers limit themselves to using goto appropriately in most cases, and not in an unrestricted manner like Dijkstra feared, thus suggesting that goto does not appear to be harmful in practice."


interesting

find that developers use goto in C files for error handling
and cleaning up resources at the end of a procedure




btw, this topic is LOL collections of motivation to prove that Hell actually exists :lol:
(have-the-embedded-world-gone-ape-10-years-time)
I wish I could enter into the vegetable garden of William Gibson , on the right of a director, to decide how a film is ultimately released for public viewing, but I am not a nor Cyberpunk writer neither a dude in Hollywood , and my * flawless English * still looks like an old rusty trailer which needs a fix-up, so my personal wonderland begins with a pill ... tumbling down the rabbit hole , where the sky above the router port is the color of television, tuned to a dead channel and some gears still need a debugger there.
I can't imagine that the embedded world has gone any crazier than the desktop world.
Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
Synthesizers: Roland JX-10/Jupiter-6/D-50/MT-32/SC-55k, Ensoniq SQ-80/Mirage, Yamaha DX7/V-50/FB-01, Korg DW-8000/03-RW/MS-20 Mini, E-mu Proteus MPS/Proteus/2, Rhodes Chroma Polaris

"'Legacy code' often differs from its suggested alternative by actually working and scaling." - Bjarne Stroustrup
commodorejohn wrote: I can't imagine that the embedded world has gone any crazier than the desktop world.

It's not just programming. We just had a bank take five weeks to issue an l/c. That's a three-day job. And the idiot document service in the US that knew all the docs were in process, then took another two weeks to create three pieces of paper. The "500 man-years of experience" global entrepreneurs at the other end (Chicago, Illinois) took another five weeks to get four pieces of paper together when the l/c clearly says "21 days."

This is simple simple stuff. They are all fucking nitwits.

We are doomed. No one anywhere can find their ass with both hands. And I haven't even mentioned the Republican Party yet :(
By a coincidence which may seem strange I have 331 goto statements in the blackjack simulator I've been writing since last December... 8-)
Project:
Temporarily lost at sea...
Plan:
World domination! Or something...

:Tezro: :Octane2:
ivelegacy wrote: But what happens if you attempt to jump outside the function you are in? It happens that the stack is smashed, invalidated, gone, garbage!


Thanks for the detailed explanation. I never followed the rabbit hole deep down to the CPU instruction and register level. I naively assumed that modern a compiler would at least warn you about stuff which is likely to make all hell brake loose.
:Fuel: :Octane2: :O2: :O2: :1600SW: :Indy: :Indy:
Where subtlety fails us we must simply make do with cream pies.
As far as I can tell gcc will not let you goto a label in another function. Example:

Code: Select all

void foo();

int main()
{
goto JUMP;

return 0;
}

void foo()
{
JUMP: ;
}

does not compile:

Code: Select all

chris@starhunter:~/src/cpp$ gcc -Wall -W -pedantic gototest.cpp -o gototest
gototest.cpp: In function 'int main()':
gototest.cpp:5:10: error: label 'JUMP' used but not defined
gototest.cpp: In function 'void foo()':
gototest.cpp:12:5: warning: label 'JUMP' defined but not used
Project:
Temporarily lost at sea...
Plan:
World domination! Or something...

:Tezro: :Octane2:
I have no idea what's going on in your make file and what it is linking to, but that code should run just fine; it should get stuck in an infinite loop not seg fault.
"Was it a dream where you see yourself standing in sort of sun-god robes on a
pyramid with thousand naked women screaming and throwing little pickles at you?"
It's hard to understand what circumstance would motivate the non-conformant flag. The only one that comes to mind is that if both arms of the conjunction are evaluated, they can be run in parallel. But I don't get the impression that the supported architectures are parallel.
:PI: :O2: :Indigo2IMP: :Indigo2IMP: